diff --git a/CHANGES b/CHANGES index 7574079..60d2c6a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,7 @@ -untagged yet (2017-06-12) +untagged yet (2017-06-14) - OpenBSD (and possibly others) need + - openbgpd output shall not emit 'deny any from any' in case of empty + prefix-list. New flag -a introduced to allow peer-as indication. 0.1.35-rc (2017-30-05) - Nokia SR OS (formerly Alcatel-Lucent) support. Based on submission by diff --git a/bgpq3.c b/bgpq3.c index 2a83635..cad32b0 100644 --- a/bgpq3.c +++ b/bgpq3.c @@ -137,7 +137,7 @@ main(int argc, char* argv[]) if (getenv("IRRD_SOURCES")) expander.sources=getenv("IRRD_SOURCES"); - while((c=getopt(argc,argv,"2346AbBdDEF:S:jJf:l:L:m:M:NW:Ppr:R:G:Th:Xs")) + while((c=getopt(argc,argv,"2346a:AbBdDEF:S:jJf:l:L:m:M:NW:Ppr:R:G:Th:Xs")) !=EOF) { switch(c) { case '2': @@ -163,6 +163,9 @@ main(int argc, char* argv[]) expander.family=AF_INET6; expander.tree->family=AF_INET6; break; + case 'a': + parseasnumber(&expander,optarg); + break; case 'A': if(aggregate) debug_aggregation++; aggregate=1; diff --git a/bgpq3_printer.c b/bgpq3_printer.c index 806a7f2..72ea83e 100644 --- a/bgpq3_printer.c +++ b/bgpq3_printer.c @@ -307,7 +307,7 @@ bgpq3_print_juniper_oaspath(FILE* f, struct bgpq_expander* b) int bgpq3_print_openbgpd_oaspath(FILE* f, struct bgpq_expander* b) { - int i, j, k; + int i, j, k, lineNo=0; for(k=0;k<65536;k++) { if(!b->asn32s[k]) continue; @@ -315,11 +315,15 @@ bgpq3_print_openbgpd_oaspath(FILE* f, struct bgpq_expander* b) for(i=0;i<8192;i++) { for(j=0;j<8;j++) { if(b->asn32s[k][i]&(0x80>>j)) { - fprintf(f, "%s%u%s%u\n", "allow to AS ", b->asnumber, " AS ", k*65536+i*8+j); + fprintf(f, "allow to AS %u AS %u\n", b->asnumber, + k*65536+i*8+j); + lineNo++; }; }; }; }; + if(!lineNo) + fprintf(f, "deny to AS %u\n", b->asnumber); return 0; }; @@ -615,7 +619,7 @@ checkSon: int bgpq3_print_openbgpd_aspath(FILE* f, struct bgpq_expander* b) { - int i, j, k; + int i, j, k, lineNo=0; for(k=0;k<65536;k++) { if(!b->asn32s[k]) continue; @@ -623,11 +627,15 @@ bgpq3_print_openbgpd_aspath(FILE* f, struct bgpq_expander* b) for(i=0;i<8192;i++) { for(j=0;j<8;j++) { if(b->asn32s[k][i]&(0x80>>j)) { - fprintf(f, "%s%u%s%u\n", "allow from AS ", b->asnumber, " AS ", k*65536+i*8+j); + fprintf(f, "allow from AS %u AS %u\n", b->asnumber, + k*65536+i*8+j); + lineNo++; }; }; }; }; + if(!lineNo) + fprintf(f, "deny from AS %u\n", b->asnumber); return 0; }; @@ -861,6 +869,7 @@ bgpq3_print_juniper_routefilter(FILE* f, struct bgpq_expander* b) int bgpq3_print_openbgpd_prefixlist(FILE* f, struct bgpq_expander* b) { + bname=b->name ? b->name : "NN"; if (!sx_radix_tree_empty(b->tree)) { if(b->name){ if(strcmp(b->name, "NN") != 0) { @@ -877,8 +886,9 @@ bgpq3_print_openbgpd_prefixlist(FILE* f, struct bgpq_expander* b) } fprintf(f, "\n"); } else { - fprintf(f, "# generated prefix-list %s (AS %u) is empty\n", bname, b->asnumber); - fprintf(f, "deny from AS %u\n", b->asnumber); + fprintf(f, "# generated prefix-list %s (AS %u) is empty\n", bname, + b->asnumber); + fprintf(f, "%sdeny from AS %u\n", b->asnumber ? "": "#", b->asnumber); }; return 0; };