On Wed, Aug 29, 2018 at 01:10:41PM +0200, Claudio Jeker wrote:
> On Wed, Aug 29, 2018 at 01:07:33PM +0200, Claudio Jeker wrote:
> > This is the bgpd diff that allows bgpctl to show invalid / error paths
> > which act as an implicit withdraw.
> >
> > While there also fix 'bgpctl show rib in nei foo' since until now that
> > code actually printed the same as 'bgpctl show rib nei foo'.
> >
> > The code is a bit shuffled to make the if statement in rde_dump_filter()
> > simpler.
> >
>
> And here are the bgpctl bits for the same. With this you should be able to
> see invalid path with 'bgpctl show rib error'.
> Now I would have liked to use 'invalid' but the table driven parser does
> not allow that because it conflicts with 'in' (gnarf).
> Hope this is still OK.
>
Perhaps we can do something like that. Calling something "invalid" everywhere in
the code but having to "error" on the CLI is not something I like. That being
said OK denis@ for your diff.
Index: parser.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpctl/parser.c,v
retrieving revision 1.82
diff -u -p -r1.82 parser.c
--- parser.c 10 Jul 2018 13:03:06 -0000 1.82
+++ parser.c 29 Aug 2018 16:24:15 -0000
@@ -179,6 +179,7 @@ static const struct token t_show_rib[] =
{ FLAG, "detail", F_CTL_DETAIL, t_show_rib},
{ FLAG, "ssv" , F_CTL_SSV, t_show_rib},
{ FLAG, "in", F_CTL_ADJ_IN, t_show_rib},
+ { FLAG, "invalid", F_CTL_INVALID, t_show_rib},
{ FLAG, "out", F_CTL_ADJ_OUT, t_show_rib},
{ KEYWORD, "neighbor", NONE, t_show_rib_neigh},
{ KEYWORD, "table", NONE, t_show_rib_rib},
@@ -556,6 +557,8 @@ match_token(int *argc, char **argv[], co
if (word != NULL && strncmp(word, table[i].keyword,
wordlen) == 0) {
match++;
+ if (match > 1)
+ match--;
t = &table[i];
res.flags |= t->value;
}
> This also removes a lie from the manual page. Softreconfig is on by
> default since a while.
> --
> :wq Claudio
>
> Index: bgpctl.8
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.8,v
> retrieving revision 1.79
> diff -u -p -r1.79 bgpctl.8
> --- bgpctl.8 15 Oct 2017 20:44:21 -0000 1.79
> +++ bgpctl.8 29 Aug 2018 10:47:43 -0000
> @@ -363,6 +363,8 @@ are defined:
> .It Cm best
> Alias for
> .Ic selected .
> +.It Cm error
> +Show only prefixes which are maked invalid and are treated as withdraw.
> .It Cm selected
> Show only selected routes.
> .It Cm ssv
> @@ -376,9 +378,6 @@ Show more detailed output for matching r
> Limit the output to the given address family.
> .It Cm in
> Show routes from the unfiltered Adj-RIB-In.
> -This is only possible if
> -.Em softreconfig in
> -is enabled for the neighbor.
> The
> .Cm neighbor
> needs to be specified.
> Index: bgpctl.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpctl/bgpctl.c,v
> retrieving revision 1.210
> diff -u -p -r1.210 bgpctl.c
> --- bgpctl.c 29 Jul 2018 13:02:01 -0000 1.210
> +++ bgpctl.c 29 Aug 2018 10:47:55 -0000
> @@ -1181,8 +1181,8 @@ show_interface_msg(struct imsg *imsg)
> void
> show_rib_summary_head(void)
> {
> - printf("flags: * = Valid, > = Selected, I = via IBGP, A = Announced, "
> - "S = Stale\n");
> + printf("flags: * = Valid, > = Selected, I = via IBGP, A = Announced,\n"
> + " S = Stale, E = Error\n");
> printf("origin: i = IGP, e = EGP, ? = Incomplete\n\n");
> printf("%-5s %-20s %-15s %5s %5s %s\n", "flags", "destination",
> "gateway", "lpref", "med", "aspath origin");
> @@ -1222,6 +1222,8 @@ print_flags(u_int8_t flags, int sum)
> char *p = flagstr;
>
> if (sum) {
> + if (flags & F_PREF_INVALID)
> + *p++ = 'E';
> if (flags & F_PREF_ANNOUNCE)
> *p++ = 'A';
> if (flags & F_PREF_INTERNAL)
> Index: parser.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpctl/parser.c,v
> retrieving revision 1.82
> diff -u -p -r1.82 parser.c
> --- parser.c 10 Jul 2018 13:03:06 -0000 1.82
> +++ parser.c 29 Aug 2018 10:51:33 -0000
> @@ -177,6 +177,7 @@ static const struct token t_show_rib[] =
> { FLAG, "best", F_CTL_ACTIVE, t_show_rib},
> { FLAG, "selected", F_CTL_ACTIVE, t_show_rib},
> { FLAG, "detail", F_CTL_DETAIL, t_show_rib},
> + { FLAG, "error", F_CTL_INVALID, t_show_rib},
> { FLAG, "ssv" , F_CTL_SSV, t_show_rib},
> { FLAG, "in", F_CTL_ADJ_IN, t_show_rib},
> { FLAG, "out", F_CTL_ADJ_OUT, t_show_rib},
>