1
0
mirror of https://github.com/bgp/bgpq4.git synced 2024-05-11 05:55:05 +00:00

rollback -s flag.

This commit is contained in:
Alexandre Snarskii
2015-06-30 14:06:22 +03:00
parent d383f1aa26
commit 8a40db107c
6 changed files with 20 additions and 60 deletions

View File

@@ -4,8 +4,6 @@
are invalid. For example, 'bgpq3 -s nonexistant' will fail, however,
'bgpq3 -s nonexistant,ripe' will not fail and will use only ripe source.
Thanks to Mikhail A. Grishin for reporting.
- new flag -s for IOS mode enables as-path sequencing. According to Job
Snijders this significantly speeds up Arista configuration load.
- RIPE-style queries (-T route6 -i origin asNNN) replaced with IRRd-style
!6asNNN queries.

View File

@@ -7,7 +7,7 @@ SYNOPSIS
--------
```
bgpq3 [-h host] [-S sources] [-EP] [-f asn | -G asn] [-2346AbDdJjpsX] [-r len] [-R len] [-m max] [-W len] OBJECTS [...]
bgpq3 [-h host] [-S sources] [-EP] [-f asn | -G asn] [-2346AbDdJjpX] [-r len] [-R len] [-m max] [-W len] OBJECTS [...]
```
DESCRIPTION
@@ -104,11 +104,6 @@ Allow more-specific routes with masklen starting with specified length.
Allow more-specific routes up to specified masklen too. (Please, note: objects
with prefix-length greater than specified length will be always allowed.)
#### -s
Add sequence numbers to as-path filters (can only be used in combination
with Cisco IOS output).
#### -S `sources`
Use specified sources only (default: RADB,RIPE,APNIC).

View File

@@ -93,8 +93,6 @@ generate prefix-list (default, backward compatibility).
allow more specific routes starting with specified masklen too.
.It Fl R Ar len
allow more specific routes up to specified masklen too.
.It Fl s
emit sequence numbers in IOS as-paths
.It Fl S Ar sources
use specified sources only (default: RADB,RIPE,APNIC).
.It Fl T

15
bgpq3.c
View File

@@ -26,7 +26,7 @@ int
usage(int ecode)
{
printf("\nUsage: bgpq3 [-h host] [-S sources] [-P|E|G <num>|f <num>]"
" [-2346AbDJjsXd] [-R len] <OBJECTS>...\n");
" [-2346AbDJjXd] [-R len] <OBJECTS>...\n");
printf(" -2 : allow routes belonging to as23456 (transition-as) "
"(default: false)\n");
printf(" -3 : assume that your device is asn32-safe\n");
@@ -54,7 +54,6 @@ usage(int ecode)
" compatibility)\n");
printf(" -r len : allow more specific routes from masklen specified\n");
printf(" -R len : allow more specific routes up to specified masklen\n");
printf(" -s : emit sequence numbers in IOS as-paths\n");
printf(" -S sources: use only specified sources (default:"
" RADB,RIPE,APNIC)\n");
printf(" -T : disable pipelining (experimental, faster mode)\n");
@@ -129,7 +128,7 @@ main(int argc, char* argv[])
bgpq_expander_init(&expander,af);
expander.sources=getenv("IRRD_SOURCES");
while((c=getopt(argc,argv,"2346AbdDEsS:jJf:l:m:M:W:Ppr:R:G:Th:X"))!=EOF) {
while((c=getopt(argc,argv,"2346AbdDES:jJf:l:m:M:W:Ppr:R:G:Th:X"))!=EOF) {
switch(c) {
case '2':
expand_as23456=1;
@@ -248,12 +247,10 @@ main(int argc, char* argv[])
break;
case 'T': pipelining=0;
break;
case 's': expander.ios_asn_sequence=1;
break;
case 'S': expander.sources=optarg;
break;
case 'W': expander.aswidth=atoi(optarg);
if(expander.aswidth<=0) {
if(expander.aswidth<0) {
sx_report(SX_FATAL,"Invalid as-width: %s\n", optarg);
exit(1);
};
@@ -328,12 +325,6 @@ main(int argc, char* argv[])
exit(1);
};
if(expander.ios_asn_sequence && expander.vendor!=V_CISCO) {
sx_report(SX_FATAL, "Sorry, -s (as-path sequencing) works for IOS "
"only\n");
exit(1);
};
if(refineLow && !refine) {
if(expander.family == AF_INET)
refine = 32;

View File

@@ -49,7 +49,6 @@ struct bgpq_expander {
unsigned maxlen;
int socksize;
int qsize;
int ios_asn_sequence;
};

View File

@@ -20,23 +20,18 @@ int bgpq3_print_bird_aspath(FILE* f, struct bgpq_expander* b);
int
bgpq3_print_cisco_aspath(FILE* f, struct bgpq_expander* b)
{
int nc=0, i, j, k, empty=1, seq=1;
char sseq[16];
int nc=0, i, j, k, empty=1;
fprintf(f,"no ip as-path access-list %s\n", b->name?b->name:"NN");
if(b->asn32s[b->asnumber/65536] &&
b->asn32s[b->asnumber/65536][(b->asnumber%65536)/8]&
(0x80>>(b->asnumber%8))) {
if(b->ios_asn_sequence)
snprintf(sseq, sizeof(sseq), "seq %i ", seq++);
if(b->asdot && b->asnumber>65535) {
fprintf(f,"ip as-path access-list %s%s permit ^%u.%u(_%u.%u)*$\n",
b->ios_asn_sequence?sseq:"",
fprintf(f,"ip as-path access-list %s permit ^%u.%u(_%u.%u)*$\n",
b->name?b->name:"NN",b->asnumber/65536,b->asnumber%65536,
b->asnumber/65536,b->asnumber%65536);
empty=0;
} else {
fprintf(f,"ip as-path access-list %s%s permit ^%u(_%u)*$\n",
b->ios_asn_sequence?sseq:"",
fprintf(f,"ip as-path access-list %s permit ^%u(_%u)*$\n",
b->name?b->name:"NN",b->asnumber,b->asnumber);
empty=0;
};
@@ -49,20 +44,14 @@ bgpq3_print_cisco_aspath(FILE* f, struct bgpq_expander* b)
if(b->asn32s[k][i]&(0x80>>j)) {
if(k*65536+i*8+j==b->asnumber) continue;
if(!nc) {
if(b->ios_asn_sequence)
snprintf(sseq, sizeof(sseq), "seq %i ", seq++);
if(b->asdot && k>0) {
fprintf(f,"ip as-path access-list %s%s permit"
" ^%u(_[0-9]+)*_(%u.%u",
b->ios_asn_sequence?sseq:"",
b->name?b->name:"NN",
fprintf(f,"ip as-path access-list %s permit"
" ^%u(_[0-9]+)*_(%u.%u", b->name?b->name:"NN",
b->asnumber,k,i*8+j);
empty=0;
} else {
fprintf(f,"ip as-path access-list %s%s permit"
" ^%u(_[0-9]+)*_(%u",
b->ios_asn_sequence?sseq:"",
b->name?b->name:"NN",
fprintf(f,"ip as-path access-list %s permit"
" ^%u(_[0-9]+)*_(%u", b->name?b->name:"NN",
b->asnumber,k*65536+i*8+j);
empty=0;
};
@@ -92,21 +81,17 @@ bgpq3_print_cisco_aspath(FILE* f, struct bgpq_expander* b)
int
bgpq3_print_cisco_oaspath(FILE* f, struct bgpq_expander* b)
{
int nc=0, i, j, k, empty=1, seq=1;
char sseq[16];
int nc=0, i, j, k, empty=1;
fprintf(f,"no ip as-path access-list %s\n", b->name?b->name:"NN");
if(b->asn32s[b->asnumber/65536] &&
b->asn32s[b->asnumber/65536][(b->asnumber%65536)/8]&
(0x80>>(b->asnumber%8))) {
if(b->ios_asn_sequence)
snprintf(sseq, sizeof(sseq), "seq %i ", seq++);
if(b->asdot && b->asnumber>65535) {
fprintf(f,"ip as-path access-list %s%s permit ^(_%u.%u)*$\n",
b->ios_asn_sequence?sseq:"",b->name?b->name:"NN",
b->asnumber/65536,b->asnumber%65536);
fprintf(f,"ip as-path access-list %s permit ^(_%u.%u)*$\n",
b->name?b->name:"NN",b->asnumber/65536,b->asnumber%65536);
} else {
fprintf(f,"ip as-path access-list %s%s permit ^(_%u)*$\n",
b->ios_asn_sequence?sseq:"",b->name?b->name:"NN",b->asnumber);
fprintf(f,"ip as-path access-list %s permit ^(_%u)*$\n",
b->name?b->name:"NN",b->asnumber);
};
empty=0;
};
@@ -117,20 +102,14 @@ bgpq3_print_cisco_oaspath(FILE* f, struct bgpq_expander* b)
if(b->asn32s[k][i]&(0x80>>j)) {
if(k*65536+i*8+j==b->asnumber) continue;
if(!nc) {
if(b->ios_asn_sequence)
snprintf(sseq, sizeof(sseq), "seq %i ", seq++);
if(b->asdot && k>0) {
fprintf(f,"ip as-path access-list %s%s permit"
" ^(_[0-9]+)*_(%u.%u",
b->ios_asn_sequence?sseq:"",
b->name?b->name:"NN",
fprintf(f,"ip as-path access-list %s permit"
" ^(_[0-9]+)*_(%u.%u", b->name?b->name:"NN",
k,i*8+j);
empty=0;
} else {
fprintf(f,"ip as-path access-list %s%s permit"
" ^(_[0-9]+)*_(%u",
b->ios_asn_sequence?sseq:"",
b->name?b->name:"NN",
fprintf(f,"ip as-path access-list %s permit"
" ^(_[0-9]+)*_(%u", b->name?b->name:"NN",
k*65536+i*8+j);
empty=0;
};