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.

Reply via email to