Index | Thread | Search

From:
Stuart Henderson <stu@spacehopper.org>
Subject:
Re: teach bgplgd to display Adj-RIB-In and Adj-RIB-Out
To:
tech@openbsd.org
Date:
Mon, 2 Dec 2024 17:05:43 +0000

Download raw body.

Thread
ok

On 2024/12/02 17:27, Claudio Jeker wrote:
> This extends the /rib endpoint to /rib/in and /rib/out which are shortcuts
> for /rib?rib=Adj-RIB-In and /rib?rib=Adj-RIB-Out.
> While doing this I realized that the rib param was wrongly translated and
> caused bgpctl to fail.
> 
> Works for me :)
> -- 
> :wq Claudio
> 
> Index: bgplgd.8
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgplgd/bgplgd.8,v
> diff -u -p -r1.11 bgplgd.8
> --- bgplgd.8	19 Sep 2024 08:55:22 -0000	1.11
> +++ bgplgd.8	2 Dec 2024 16:25:24 -0000
> @@ -88,7 +88,8 @@ Show the version and exit.
>  .Nm
>  provides the following API endpoints.
>  Unless further specified the endpoints do not take any parameters:
> -.Bl -tag -width Ds
> +.Pp
> +.Bl -tag -width "/interfaces" -compact
>  .It Pa /interfaces
>  Show the interface states.
>  .It Pa /memory
> @@ -110,7 +111,17 @@ Show only entries from the specified pee
>  .It Pa /nexthops
>  Show the list of BGP nexthops and the result of their validity check.
>  .It Pa /rib
> +.It Pa /rib/in
> +.It Pa /rib/out
>  Show routes from the bgpd(8) Routing Information Base.
> +For
> +.Pa /rib/in
> +the
> +.Ar Adj-RIB-In
> +will be queried and for
> +.Pa /rib/out
> +the
> +.Ar Adj-RIB-out .
>  The following parameters can be used to filter the output:
>  .Pp
>  .Bl -tag -width "neighbor=peer" -compact
> @@ -134,6 +145,9 @@ Show only entries that match the specifi
>  .It Cm rib Ns = Ns Ar name
>  Show only entries from the RIB with name
>  .Ar name .
> +Can only be used with the
> +.Pa /rib 
> +endpoint.
>  .It Xo
>  .Ic ovs Ns = Ns
>  .Pq Ic valid | not-found | invalid
> Index: bgplgd.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgplgd/bgplgd.c,v
> diff -u -p -r1.3 bgplgd.c
> --- bgplgd.c	17 Oct 2022 15:42:19 -0000	1.3
> +++ bgplgd.c	2 Dec 2024 15:55:40 -0000
> @@ -25,7 +25,7 @@
>  
>  #include "bgplgd.h"
>  
> -#define NCMDARGS	4
> +#define NCMDARGS	5
>  #define OMETRIC_TYPE	\
>  	    "application/openmetrics-text; version=1.0.0; charset=utf-8"
>  
> @@ -41,6 +41,8 @@ const struct cmd {
>  	{ "/neighbors", { "show", "neighbor", NULL }, QS_MASK_NEIGHBOR, 1 },
>  	{ "/nexthops", { "show", "nexthop", NULL }, 0 },
>  	{ "/rib", { "show", "rib", "detail", NULL }, QS_MASK_RIB },
> +	{ "/rib/in", { "show", "rib", "in", "detail", NULL }, QS_MASK_ADJRIB },
> +	{ "/rib/out", { "show", "rib", "out", "detail", NULL }, QS_MASK_ADJRIB },
>  	{ "/rtr", { "show", "rtr", NULL }, 0 },
>  	{ "/sets", { "show", "sets", NULL }, 0 },
>  	{ "/summary", { "show", NULL }, 0 },
> Index: bgplgd.h
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgplgd/bgplgd.h,v
> diff -u -p -r1.4 bgplgd.h
> --- bgplgd.h	15 Aug 2024 09:13:13 -0000	1.4
> +++ bgplgd.h	2 Dec 2024 15:55:40 -0000
> @@ -35,17 +35,19 @@
>  #define QS_FILTERED		18
>  #define QS_MAX			19
>  
> -/* too add: empty-as, in, out, peer-as, source-as, transit-as */
> +/* too add: empty-as, peer-as, source-as, transit-as */
>  
>  #define QS_MASK_NEIGHBOR	((1 << QS_NEIGHBOR) | (1 << QS_GROUP))
> -#define QS_MASK_RIB						\
> +#define QS_MASK_ADJRIB						\
>  	((1 << QS_NEIGHBOR) | (1 << QS_GROUP) |	(1 << QS_AS) |	\
>  	(1 << QS_PREFIX) | (1 << QS_COMMUNITY) |		\
>  	(1 << QS_EXTCOMMUNITY) | (1 << QS_LARGECOMMUNITY) |	\
> -	(1 << QS_AF) |	(1 << QS_RIB) | (1 << QS_OVS) |		\
> -	(1 << QS_BEST) | (1 << QS_ALL) | (1 << QS_SHORTER) |	\
> -	(1 << QS_ERROR) | (1 << QS_AVS) | (1 << QS_INVALID) |	\
> -	(1 << QS_LEAKED) | (1 << QS_FILTERED))
> +	(1 << QS_AF) | (1 << QS_OVS) | (1 << QS_BEST) |		\
> +	(1 << QS_ALL) | (1 << QS_SHORTER) | (1 << QS_ERROR) |	\
> +	(1 << QS_AVS) | (1 << QS_INVALID) | (1 << QS_LEAKED) |	\
> +	(1 << QS_FILTERED))
> +
> +#define QS_MASK_RIB	(QS_MASK_ADJRIB | (1 << QS_RIB))
>  
>  struct cmd;
>  struct lg_ctx {
> Index: qs.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgplgd/qs.c,v
> diff -u -p -r1.6 qs.c
> --- qs.c	15 Aug 2024 09:13:13 -0000	1.6
> +++ qs.c	2 Dec 2024 16:08:40 -0000
> @@ -367,7 +367,7 @@ qs_argv(char **argv, size_t argc, size_t
>  	}
>  	if (ctx->qs_set & (1 << QS_RIB)) {
>  		if (argc < len)
> -			argv[argc++] = "rib";
> +			argv[argc++] = "table";
>  		if (argc < len)
>  			argv[argc++] = ctx->qs_args[QS_RIB].string;
>  	}
>