The command order for bgpctl network bulk add is strange and as a result
soemthing like:
        bgpctl network add 127.0.0.1 delete
is valid syntax with strange behaviour. It is actually:
        bgpctl network bulk delete

So lets fix this mess and make bulk require add or delete and with that
the attribute set is also cleaned up.
-- 
:wq Claudio

Index: bgpctl.8
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.8,v
retrieving revision 1.106
diff -u -p -r1.106 bgpctl.8
--- bgpctl.8    13 Mar 2023 16:59:22 -0000      1.106
+++ bgpctl.8    12 Apr 2023 16:15:54 -0000
@@ -133,20 +133,12 @@ It is possible to set various path attri
 Adding a prefix will replace an existing equal prefix, including
 prefixes loaded from the configuration.
 .It Xo
-.Cm network bulk
+.Cm network bulk add
 .Op Ar argument ...
-.Op Cm add
 .Xc
 Bulk add specified prefixes to the list of announced networks.
 Prefixes should be sent via stdin.
 It is possible to set various path attributes with additional arguments.
-If neither
-.Cm add
-or
-.Cm delete
-is given,
-.Cm add
-is the default.
 .It Cm network bulk delete
 Bulk remove the specified prefixes from the list of announced networks.
 Prefixes should be sent via stdin.
Index: parser.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/parser.c,v
retrieving revision 1.122
diff -u -p -r1.122 parser.c
--- parser.c    13 Mar 2023 16:59:22 -0000      1.122
+++ parser.c    12 Apr 2023 16:17:50 -0000
@@ -98,6 +98,7 @@ static const struct token t_show_extcomm
 static const struct token t_show_ext_subtype[];
 static const struct token t_show_largecommunity[];
 static const struct token t_network[];
+static const struct token t_bulk[];
 static const struct token t_network_show[];
 static const struct token t_prefix[];
 static const struct token t_set[];
@@ -371,10 +372,16 @@ static const struct token t_network[] = 
        { KEYWORD,      "flush",        NETWORK_FLUSH,  NULL},
        { KEYWORD,      "show",         NETWORK_SHOW,   t_network_show},
        { KEYWORD,      "mrt",          NETWORK_MRT,    t_show_mrt},
-       { KEYWORD,      "bulk",         NETWORK_BULK_ADD,       t_set},
+       { KEYWORD,      "bulk",         NONE,           t_bulk},
        { ENDTOKEN,     "",             NONE,           NULL}
 };
 
+static const struct token t_bulk[] = {
+       { KEYWORD,      "add",          NETWORK_BULK_ADD,       t_set},
+       { KEYWORD,      "delete",       NETWORK_BULK_REMOVE,    NULL},
+       { ENDTOKEN,     "",             NONE,                   NULL}
+};
+
 static const struct token t_prefix[] = {
        { PREFIX,       "",             NONE,           t_set},
        { ENDTOKEN,     "",             NONE,           NULL}
@@ -405,8 +412,6 @@ static const struct token t_set[] = {
        { KEYWORD,      "prepend-self",         NONE,   t_prepself},
        { KEYWORD,      "rd",                   NONE,   t_rd},
        { KEYWORD,      "weight",               NONE,   t_weight},
-       { KEYWORD,      "add",                  NETWORK_BULK_ADD,       NULL},
-       { KEYWORD,      "delete",               NETWORK_BULK_REMOVE,    NULL},
        { ENDTOKEN,     "",                     NONE,   NULL}
 };
 

Reply via email to