With the support of AS range filtering, we need to print the configuration accordingly.
Before : # bgpd -dnv [...] deny from any AS 0 deny from any AS 0 deny from any AS 65535 deny from any AS 0 deny from any AS 0 deny from any AS 0 deny from any AS 4294967295 After : # bgpd -dnv [...] deny from any AS 64496 - 64496 deny from any AS 64512 - 64512 deny from any AS 65535 deny from any AS 65536 - 65536 deny from any AS 65552 - 65552 deny from any AS 4200000000 - 4200000000 deny from any AS 4294967295 Index: printconf.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/printconf.c,v retrieving revision 1.96 diff -u -p -r1.96 printconf.c --- printconf.c 21 Sep 2015 09:47:15 -0000 1.96 +++ printconf.c 4 Jun 2016 20:06:52 -0000 @@ -41,6 +41,7 @@ void print_peer(struct peer_config *, const char *print_auth_alg(u_int8_t); const char *print_enc_alg(u_int8_t); void print_announce(struct peer_config *, const char *); +void print_as(struct filter_rule *); void print_rule(struct peer *, struct filter_rule *); const char * mrt_type(enum mrt_type); void print_mrt(struct bgpd_config *, u_int32_t, u_int32_t, @@ -506,6 +507,26 @@ print_announce(struct peer_config *p, co printf("%s\tannounce %s\n", c, aid2str(aid)); } +void print_as(struct filter_rule *r) +{ + switch(r->match.as.op) { + case OP_RANGE: + printf("%s - %s ", log_as(r->match.as.as_min), + log_as(r->match.as.as_max)); + break; + case OP_XRANGE: + printf("%s >< %s ", log_as(r->match.as.as_min), + log_as(r->match.as.as_max)); + break; + case OP_NE: + printf("!= %s ", log_as(r->match.as.as)); + break; + default: + printf("%s ", log_as(r->match.as.as)); + break; + } +} + void print_rule(struct peer *peer_l, struct filter_rule *r) { @@ -577,15 +598,16 @@ print_rule(struct peer *peer_l, struct f if (r->match.as.type) { if (r->match.as.type == AS_ALL) - printf("AS %s ", log_as(r->match.as.as)); + printf("AS "); else if (r->match.as.type == AS_SOURCE) - printf("source-as %s ", log_as(r->match.as.as)); + printf("source-as "); else if (r->match.as.type == AS_TRANSIT) - printf("transit-as %s ", log_as(r->match.as.as)); + printf("transit-as "); else if (r->match.as.type == AS_PEER) - printf("peer-as %s ", log_as(r->match.as.as)); + printf("peer-as "); else - printf("unfluffy-as %s ", log_as(r->match.as.as)); + printf("unfluffy-as "); + print_as(r); } if (r->match.aslen.type) {