On Thu, Apr 13, 2023 at 12:25:46PM +0200, Claudio Jeker wrote: > bgpctl help output follows no clear order. I decided to sort all > keywords and flags alphabetically. Also fixup the manpage a bit since > some additions where added in the wrong spot. > > I think the output of 'bgpctl show rib help' is the worst (both before and > after). It is long and some keywords are not self-explanatory. > Still I prefer them to be alphabetically sorted.
I'm ok with this, but see some comments below. > -- > :wq Claudio > > Index: bgpctl.8 > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.8,v > retrieving revision 1.107 > diff -u -p -r1.107 bgpctl.8 > --- bgpctl.8 12 Apr 2023 17:19:16 -0000 1.107 > +++ bgpctl.8 13 Apr 2023 10:21:05 -0000 > @@ -180,20 +180,20 @@ can be an IP address, in which case the > or a flag: > .Pp > .Bl -tag -width tableXnumber -compact > -.It Cm connected > -Show only connected routes. > -.It Cm static > -Show only static routes. > .It Cm bgp > Show only routes originating from > -.Xr bgpd 8 > -itself. I think the previous two lines were removed by accident... > -.It Cm nexthop > -Show only routes required to reach a BGP nexthop. > +.It Cm connected > +Show only connected routes. > .It Cm inet > Show only IPv4 routes. > .It Cm inet6 > Show only IPv6 routes. > +.It Cm nexthop > +Show only routes required to reach a BGP nexthop. > +.It Cm static > +Show only static routes. > +.Xr bgpd 8 > +itself. ... and added here by mistake. > .It Cm table Ar number > Show the routing table with ID > .Ar number > @@ -317,6 +317,7 @@ Show RIB entry for this CIDR prefix. > .Xc > Show all entries in the specified range. > .\".It Ar address/len Cm longer-prefixes > +.\".It Ar address/len Cm or-longer > .It Xo > .Ar address Ns Li / Ns Ar len > .Cm or-shorter > @@ -326,20 +327,24 @@ Show all entries covering and including > Show all entries with > .Ar as > anywhere in the AS path. > +.It Cm avs Pq Ic valid | unknown | invalid > +Show all entries with matching ASAP Validation State (AVS). > .It Cm community Ar community > Show all entries with community > .Ar community . > +.It Cm empty-as > +Show all entries that are internal routes with no AS's in the AS path. > .It Cm large-community Ar large-community > Show all entries with large-community > .Ar large-community . > -.It Cm empty-as > -Show all entries that are internal routes with no AS's in the AS path. > .It Cm memory > Show RIB memory statistics. > .It Cm neighbor Ar peer > Show only entries from the specified peer. > .It Cm neighbor group Ar description > Show only entries from the specified peer group. > +.It Cm ovs Pq Ic valid | not-found | invalid > +Show all entries with matching Origin Validation State (OVS). > .It Cm path-id Ar pathid > Show only entries which match the specified > .Ar pathid . > @@ -365,10 +370,6 @@ Show only entries from the specified RIB > Show all entries with > .Ar as > anywhere but rightmost. > -.It Cm ovs Pq Ic valid | not-found | invalid > -Show all entries with matching Origin Validation State (OVS). > -.It Cm avs Pq Ic valid | unknown | invalid > -Show all entries with matching ASAP Validation State (AVS). > .El > .Pp > Additionally, the following > Index: parser.c > =================================================================== > RCS file: /cvs/src/usr.sbin/bgpctl/parser.c,v > retrieving revision 1.123 > diff -u -p -r1.123 parser.c > --- parser.c 12 Apr 2023 17:19:16 -0000 1.123 > +++ parser.c 13 Apr 2023 10:21:05 -0000 > @@ -120,12 +120,12 @@ static const struct token t_communicatio > static const struct token t_show_rib_path[]; > > static const struct token t_main[] = { > - { KEYWORD, "reload", RELOAD, t_communication}, > - { KEYWORD, "show", SHOW, t_show}, > { KEYWORD, "fib", FIB, t_fib}, > + { KEYWORD, "log", NONE, t_log}, > { KEYWORD, "neighbor", NEIGHBOR, t_neighbor}, > { KEYWORD, "network", NONE, t_network}, > - { KEYWORD, "log", NONE, t_log}, > + { KEYWORD, "reload", RELOAD, t_communication}, > + { KEYWORD, "show", SHOW, t_show}, > { ENDTOKEN, "", NONE, NULL} > }; > > @@ -133,17 +133,17 @@ static const struct token t_show[] = { > { NOTOKEN, "", NONE, NULL}, > { KEYWORD, "fib", SHOW_FIB, t_show_fib}, > { KEYWORD, "interfaces", SHOW_INTERFACE, NULL}, > + { KEYWORD, "ip", NONE, t_show_ip}, > + { KEYWORD, "metrics", SHOW_METRICS, NULL}, > + { KEYWORD, "mrt", SHOW_MRT, t_show_mrt}, > { KEYWORD, "neighbor", SHOW_NEIGHBOR, t_show_neighbor}, > { KEYWORD, "network", NETWORK_SHOW, t_network_show}, > { KEYWORD, "nexthop", SHOW_NEXTHOP, NULL}, > { KEYWORD, "rib", SHOW_RIB, t_show_rib}, > - { KEYWORD, "tables", SHOW_FIB_TABLES, NULL}, > - { KEYWORD, "ip", NONE, t_show_ip}, > - { KEYWORD, "summary", SHOW_SUMMARY, t_show_summary}, > - { KEYWORD, "sets", SHOW_SET, NULL}, > { KEYWORD, "rtr", SHOW_RTR, NULL}, > - { KEYWORD, "mrt", SHOW_MRT, t_show_mrt}, > - { KEYWORD, "metrics", SHOW_METRICS, NULL}, > + { KEYWORD, "sets", SHOW_SET, NULL}, > + { KEYWORD, "summary", SHOW_SUMMARY, t_show_summary}, > + { KEYWORD, "tables", SHOW_FIB_TABLES, NULL}, > { ENDTOKEN, "", NONE, NULL} > }; > > @@ -155,10 +155,10 @@ static const struct token t_show_summary > > static const struct token t_show_fib[] = { > { NOTOKEN, "", NONE, NULL}, > - { FLAG, "connected", F_CONNECTED, t_show_fib}, > - { FLAG, "static", F_STATIC, t_show_fib}, > { FLAG, "bgp", F_BGPD, t_show_fib}, > + { FLAG, "connected", F_CONNECTED, t_show_fib}, > { FLAG, "nexthop", F_NEXTHOP, t_show_fib}, > + { FLAG, "static", F_STATIC, t_show_fib}, > { KEYWORD, "table", NONE, t_show_fib_table}, > { FAMILY, "", NONE, t_show_fib}, > { ADDRESS, "", NONE, NULL}, > @@ -168,60 +168,60 @@ static const struct token t_show_fib[] = > static const struct token t_show_rib[] = { > { NOTOKEN, "", NONE, NULL}, > { ASTYPE, "as", AS_ALL, t_show_rib_as}, > - { ASTYPE, "source-as", AS_SOURCE, t_show_rib_as}, > - { ASTYPE, "transit-as", AS_TRANSIT, t_show_rib_as}, > - { ASTYPE, "peer-as", AS_PEER, t_show_rib_as}, > - { ASTYPE, "empty-as", AS_EMPTY, t_show_rib}, > - { KEYWORD, "community", NONE, t_show_community}, > - { KEYWORD, "ext-community", NONE, t_show_extcommunity}, > - { KEYWORD, "large-community", NONE, t_show_largecommunity}, > + { KEYWORD, "avs", NONE, t_show_avs}, > { FLAG, "best", F_CTL_BEST, t_show_rib}, > - { FLAG, "selected", F_CTL_BEST, t_show_rib}, > + { KEYWORD, "community", NONE, t_show_community}, > { FLAG, "detail", F_CTL_DETAIL, t_show_rib}, > + { ASTYPE, "empty-as", AS_EMPTY, t_show_rib}, > { FLAG, "error", F_CTL_INVALID, t_show_rib}, > + { KEYWORD, "ext-community", NONE, t_show_extcommunity}, > + { FLAG, "in", F_CTL_ADJ_IN, t_show_rib}, > { FLAG, "invalid", F_CTL_INELIGIBLE, t_show_rib}, > + { KEYWORD, "large-community", NONE, t_show_largecommunity}, > { FLAG, "leaked", F_CTL_LEAKED, t_show_rib}, > - { FLAG, "in", F_CTL_ADJ_IN, t_show_rib}, > - { FLAG, "out", F_CTL_ADJ_OUT, t_show_rib}, > - { FLAG, "ssv" , F_CTL_SSV, t_show_rib}, > + { KEYWORD, "memory", SHOW_RIB_MEM, NULL}, > { KEYWORD, "neighbor", NONE, t_show_rib_neigh}, > - { KEYWORD, "avs", NONE, t_show_avs}, > + { FLAG, "out", F_CTL_ADJ_OUT, t_show_rib}, > { KEYWORD, "ovs", NONE, t_show_ovs}, > { KEYWORD, "path-id", NONE, t_show_rib_path}, > - { KEYWORD, "table", NONE, t_show_rib_rib}, > + { ASTYPE, "peer-as", AS_PEER, t_show_rib_as}, > + { FLAG, "selected", F_CTL_BEST, t_show_rib}, > + { ASTYPE, "source-as", AS_SOURCE, t_show_rib_as}, > + { FLAG, "ssv", F_CTL_SSV, t_show_rib}, > { KEYWORD, "summary", SHOW_SUMMARY, t_show_summary}, > - { KEYWORD, "memory", SHOW_RIB_MEM, NULL}, > + { KEYWORD, "table", NONE, t_show_rib_rib}, > + { ASTYPE, "transit-as", AS_TRANSIT, t_show_rib_as}, > { FAMILY, "", NONE, t_show_rib}, > { PREFIX, "", NONE, t_show_prefix}, > { ENDTOKEN, "", NONE, NULL} > }; > > static const struct token t_show_avs[] = { > - { FLAG, "valid" , F_CTL_AVS_VALID, t_show_rib}, > { FLAG, "invalid", F_CTL_AVS_INVALID, t_show_rib}, > { FLAG, "unknown", F_CTL_AVS_UNKNOWN, t_show_rib}, > + { FLAG, "valid" , F_CTL_AVS_VALID, t_show_rib}, > { ENDTOKEN, "", NONE, NULL} > }; > > static const struct token t_show_ovs[] = { > - { FLAG, "valid" , F_CTL_OVS_VALID, t_show_rib}, > { FLAG, "invalid", F_CTL_OVS_INVALID, t_show_rib}, > { FLAG, "not-found", F_CTL_OVS_NOTFOUND, t_show_rib}, > + { FLAG, "valid" , F_CTL_OVS_VALID, t_show_rib}, > { ENDTOKEN, "", NONE, NULL} > }; > > static const struct token t_show_mrt[] = { > { NOTOKEN, "", NONE, NULL}, > - { ASTYPE, "as", AS_ALL, t_show_mrt_as}, > - { ASTYPE, "source-as", AS_SOURCE, t_show_mrt_as}, > - { ASTYPE, "transit-as", AS_TRANSIT, t_show_mrt_as}, > - { ASTYPE, "peer-as", AS_PEER, t_show_mrt_as}, > - { ASTYPE, "empty-as", AS_EMPTY, t_show_mrt}, > { FLAG, "detail", F_CTL_DETAIL, t_show_mrt}, > - { FLAG, "ssv", F_CTL_SSV, t_show_mrt}, > - { KEYWORD, "neighbor", NONE, t_show_mrt_neigh}, > { FLAG, "peers", F_CTL_NEIGHBORS,t_show_mrt}, > + { FLAG, "ssv", F_CTL_SSV, t_show_mrt}, Slightly confused here. This sorts FLAG first, then ASTYPE and KEYWORD. It breaks alphabetical order. This wasn't done in t_show_rib[]. > + { ASTYPE, "as", AS_ALL, t_show_mrt_as}, > + { ASTYPE, "empty-as", AS_EMPTY, t_show_mrt}, > { KEYWORD, "file", NONE, t_show_mrt_file}, > + { KEYWORD, "neighbor", NONE, t_show_mrt_neigh}, > + { ASTYPE, "peer-as", AS_PEER, t_show_mrt_as}, > + { ASTYPE, "source-as", AS_SOURCE, t_show_mrt_as}, > + { ASTYPE, "transit-as", AS_TRANSIT, t_show_mrt_as}, > { FAMILY, "", NONE, t_show_mrt}, > { PREFIX, "", NONE, t_show_prefix}, > { ENDTOKEN, "", NONE, NULL} > @@ -256,9 +256,9 @@ static const struct token t_show_rib_rib > > static const struct token t_show_neighbor_modifiers[] = { > { NOTOKEN, "", NONE, NULL}, > - { KEYWORD, "timers", SHOW_NEIGHBOR_TIMERS, NULL}, > { KEYWORD, "messages", SHOW_NEIGHBOR, NULL}, > { KEYWORD, "terse", SHOW_NEIGHBOR_TERSE, NULL}, > + { KEYWORD, "timers", SHOW_NEIGHBOR_TIMERS, NULL}, > { ENDTOKEN, "", NONE, NULL} > }; > > @@ -301,11 +301,11 @@ static const struct token t_communicatio > }; > > static const struct token t_neighbor_modifiers[] = { > - { KEYWORD, "up", NEIGHBOR_UP, NULL}, > - { KEYWORD, "down", NEIGHBOR_DOWN, > t_communication}, > - { KEYWORD, "clear", NEIGHBOR_CLEAR, > t_communication}, > - { KEYWORD, "refresh", NEIGHBOR_RREFRESH, NULL}, > + { KEYWORD, "clear", NEIGHBOR_CLEAR, t_communication}, > { KEYWORD, "destroy", NEIGHBOR_DESTROY, NULL}, > + { KEYWORD, "down", NEIGHBOR_DOWN, t_communication}, > + { KEYWORD, "refresh", NEIGHBOR_RREFRESH, NULL}, > + { KEYWORD, "up", NEIGHBOR_UP, NULL}, > { ENDTOKEN, "", NONE, NULL} > }; > > @@ -346,8 +346,8 @@ static const struct token t_show_extcomm > { EXTCOM_SUBTYPE, "l2vid", NONE, t_show_ext_subtype}, > { EXTCOM_SUBTYPE, "mac-mob", NONE, t_show_ext_subtype}, > { EXTCOM_SUBTYPE, "odi", NONE, t_show_ext_subtype}, > - { EXTCOM_SUBTYPE, "ort", NONE, t_show_ext_subtype}, > { EXTCOM_SUBTYPE, "ori", NONE, t_show_ext_subtype}, > + { EXTCOM_SUBTYPE, "ort", NONE, t_show_ext_subtype}, > { EXTCOM_SUBTYPE, "ovs", NONE, t_show_ext_subtype}, > { EXTCOM_SUBTYPE, "rt", NONE, t_show_ext_subtype}, > { EXTCOM_SUBTYPE, "soo", NONE, t_show_ext_subtype}, > @@ -368,11 +368,11 @@ static const struct token t_show_largeco > > static const struct token t_network[] = { > { KEYWORD, "add", NETWORK_ADD, t_prefix}, > + { KEYWORD, "bulk", NONE, t_bulk}, > { KEYWORD, "delete", NETWORK_REMOVE, t_prefix}, > { KEYWORD, "flush", NETWORK_FLUSH, NULL}, > - { KEYWORD, "show", NETWORK_SHOW, t_network_show}, > { KEYWORD, "mrt", NETWORK_MRT, t_show_mrt}, > - { KEYWORD, "bulk", NONE, t_bulk}, > + { KEYWORD, "show", NETWORK_SHOW, t_network_show}, > { ENDTOKEN, "", NONE, NULL} > }; > > @@ -428,8 +428,8 @@ static const struct token t_extcommunity > { EXTCOM_SUBTYPE, "l2vid", NONE, t_ext_subtype}, > { EXTCOM_SUBTYPE, "mac-mob", NONE, t_ext_subtype}, > { EXTCOM_SUBTYPE, "odi", NONE, t_ext_subtype}, > - { EXTCOM_SUBTYPE, "ort", NONE, t_ext_subtype}, > { EXTCOM_SUBTYPE, "ori", NONE, t_ext_subtype}, > + { EXTCOM_SUBTYPE, "ort", NONE, t_ext_subtype}, > { EXTCOM_SUBTYPE, "ovs", NONE, t_ext_subtype}, > { EXTCOM_SUBTYPE, "rt", NONE, t_ext_subtype}, > { EXTCOM_SUBTYPE, "soo", NONE, t_ext_subtype}, > @@ -484,8 +484,8 @@ static const struct token t_weight[] = { > }; > > static const struct token t_log[] = { > - { KEYWORD, "verbose", LOG_VERBOSE, NULL}, > { KEYWORD, "brief", LOG_BRIEF, NULL}, > + { KEYWORD, "verbose", LOG_VERBOSE, NULL}, > { ENDTOKEN, "", NONE, NULL} > }; > >