This didn't quite work, as log_as will override itself when used twice in the same printf.
I also fixed some knf bits. On 2016 Jun 04 (Sat) at 22:13:07 +0200 (+0200), Denis Fondras wrote: :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 : After: # bgpd -nvv [...] deny from any AS 23456 deny from any AS 64496 - 64511 deny from any AS 64512 - 65534 deny from any AS 65535 deny from any AS 65536 - 65551 deny from any AS 65552 - 131071 deny from any AS 4200000000 - 4294967294 deny from any AS 4294967295 Index: printconf.c =================================================================== RCS file: /cvs/openbsd/src/usr.sbin/bgpd/printconf.c,v retrieving revision 1.96 diff -u -p -u -p -r1.96 printconf.c --- printconf.c 21 Sep 2015 09:47:15 -0000 1.96 +++ printconf.c 4 Jun 2016 21:11:46 -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, @@ -507,6 +508,27 @@ print_announce(struct peer_config *p, co } void +print_as(struct filter_rule *r) +{ + switch(r->match.as.op) { + case OP_RANGE: + printf("%s - ", log_as(r->match.as.as_min)); + printf("%s ", log_as(r->match.as.as_max)); + break; + case OP_XRANGE: + printf("%s >< ", log_as(r->match.as.as_min)); + printf("%s ", 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) { struct peer *p; @@ -577,15 +599,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) { -- Join in the new game that's sweeping the country. It's called "Bureaucracy". Everybody stands in a circle. The first person to do anything loses.