diff options
| author | Russ White <russ@riw.us> | 2023-02-21 08:38:07 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-02-21 08:38:07 -0500 | 
| commit | eb9f54b8727b9db18b3e97cc405ff63c775f9dc9 (patch) | |
| tree | 1fd1348f13be3c5c505bb9c288df0e13a536f9bc | |
| parent | 3bbf66cf7758bbc37bd3e15687b35add1ea0d05f (diff) | |
| parent | 83856649b35f45243205420aac515b635e712323 (diff) | |
Merge pull request #12805 from karlquan/kquan_self_orig
bgpd: BGP troubleshooting - Add a keyword self-originate to display o…
| -rw-r--r-- | bgpd/bgp_evpn_vty.c | 19 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 10 | ||||
| -rw-r--r-- | bgpd/bgp_route.h | 1 | ||||
| -rw-r--r-- | bgpd/bgp_vty.h | 3 | ||||
| -rw-r--r-- | doc/user/bgp.rst | 13 | 
5 files changed, 41 insertions, 5 deletions
diff --git a/bgpd/bgp_evpn_vty.c b/bgpd/bgp_evpn_vty.c index 59986102a5..e28a8c8057 100644 --- a/bgpd/bgp_evpn_vty.c +++ b/bgpd/bgp_evpn_vty.c @@ -3034,7 +3034,7 @@ static void evpn_show_route_rd_all_macip(struct vty *vty, struct bgp *bgp,   * If 'type' is non-zero, only routes matching that type are shown.   */  static void evpn_show_all_routes(struct vty *vty, struct bgp *bgp, int type, -				 json_object *json, int detail) +				 json_object *json, int detail, bool self_orig)  {  	struct bgp_dest *rd_dest;  	struct bgp_table *table; @@ -3092,6 +3092,9 @@ static void evpn_show_all_routes(struct vty *vty, struct bgp *bgp, int type,  			pi = bgp_dest_get_bgp_path_info(dest);  			if (pi) { +				if (self_orig && (pi->peer != bgp->peer_self)) +					continue; +  				/* Overall header/legend displayed once. */  				if (header) {  					bgp_evpn_show_route_header(vty, bgp, @@ -3211,7 +3214,7 @@ int bgp_evpn_show_all_routes(struct vty *vty, struct bgp *bgp, int type,  	if (use_json)  		json = json_object_new_object(); -	evpn_show_all_routes(vty, bgp, type, json, detail); +	evpn_show_all_routes(vty, bgp, type, json, detail, false);  	if (use_json)  		vty_json(vty, json); @@ -4784,7 +4787,7 @@ int bgp_evpn_cli_parse_type(int *type, struct cmd_token **argv, int argc)   */  DEFUN(show_bgp_l2vpn_evpn_route,        show_bgp_l2vpn_evpn_route_cmd, -      "show bgp l2vpn evpn route [detail] [type "EVPN_TYPE_ALL_LIST"] [json]", +      "show bgp l2vpn evpn route [detail] [type "EVPN_TYPE_ALL_LIST"] ["BGP_SELF_ORIG_CMD_STR"] [json]",        SHOW_STR        BGP_STR        L2VPN_HELP_STR @@ -4793,12 +4796,15 @@ DEFUN(show_bgp_l2vpn_evpn_route,        "Display Detailed Information\n"        EVPN_TYPE_HELP_STR        EVPN_TYPE_ALL_LIST_HELP_STR +      BGP_SELF_ORIG_HELP_STR        JSON_STR)  {  	struct bgp *bgp;  	int detail = 0;  	int type = 0;  	bool uj = false; +	int arg_idx = 0; +	bool self_orig = false;  	json_object *json = NULL;  	uj = use_json(argc, argv); @@ -4816,7 +4822,10 @@ DEFUN(show_bgp_l2vpn_evpn_route,  	if (argv_find(argv, argc, "detail", &detail))  		detail = 1; -	evpn_show_all_routes(vty, bgp, type, json, detail); +	if (argv_find(argv, argc, BGP_SELF_ORIG_CMD_STR, &arg_idx)) +		self_orig = true; + +	evpn_show_all_routes(vty, bgp, type, json, detail, self_orig);  	/*  	 * This is an extremely expensive operation at scale @@ -4882,7 +4891,7 @@ DEFUN(show_bgp_l2vpn_evpn_route_rd,  		return CMD_WARNING;  	if (rd_all) -		evpn_show_all_routes(vty, bgp, type, json, 1); +		evpn_show_all_routes(vty, bgp, type, json, 1, false);  	else  		evpn_show_route_rd(vty, bgp, &prd, type, json); diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 4eb9c91a4d..0beef97a04 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -11474,6 +11474,10 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi,  				    || CHECK_FLAG(pi->flags, BGP_PATH_HISTORY))  					continue;  			} +			if (type == bgp_show_type_self_originated) { +				if (pi->peer != bgp->peer_self) +					continue; +			}  			if (!use_json && header) {  				vty_out(vty, @@ -12650,6 +12654,7 @@ DEFPY(show_ip_bgp, show_ip_bgp_cmd,            |alias ALIAS_NAME\            |A.B.C.D/M longer-prefixes\            |X:X::X:X/M longer-prefixes\ +          |"BGP_SELF_ORIG_CMD_STR"\            |detail-routes$detail_routes\            ] [json$uj [detail$detail_json] | wide$wide]",        SHOW_STR IP_STR BGP_STR BGP_INSTANCE_HELP_STR BGP_AFI_HELP_STR @@ -12699,6 +12704,7 @@ DEFPY(show_ip_bgp, show_ip_bgp_cmd,        "Display route and more specific routes\n"        "IPv6 prefix\n"        "Display route and more specific routes\n" +      BGP_SELF_ORIG_HELP_STR        "Display detailed version of all routes\n"        JSON_STR        "Display detailed version of JSON output\n" @@ -12893,6 +12899,10 @@ DEFPY(show_ip_bgp, show_ip_bgp_cmd,  		output_arg = &p;  	} +	/* self originated only */ +	if (argv_find(argv, argc, BGP_SELF_ORIG_CMD_STR, &idx)) +		sh_type = bgp_show_type_self_originated; +  	if (!all) {  		/* show bgp: AFI_IP6, show ip bgp: AFI_IP */  		if (community) diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h index 48630cb1e5..d0cf7e5d77 100644 --- a/bgpd/bgp_route.h +++ b/bgpd/bgp_route.h @@ -46,6 +46,7 @@ enum bgp_show_type {  	bgp_show_type_detail,  	bgp_show_type_rpki,  	bgp_show_type_prefix_version, +	bgp_show_type_self_originated,  };  enum bgp_show_adj_route_type { diff --git a/bgpd/bgp_vty.h b/bgpd/bgp_vty.h index 1c5adff68d..826723b92d 100644 --- a/bgpd/bgp_vty.h +++ b/bgpd/bgp_vty.h @@ -28,6 +28,9 @@ struct bgp;  	BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR            \  		BGP_AF_MODIFIER_STR BGP_AF_MODIFIER_STR +#define BGP_SELF_ORIG_CMD_STR       "self-originate" +#define BGP_SELF_ORIG_HELP_STR      "Display only self-originated routes\n" +  #define SHOW_GR_HEADER \  	"Codes: GR - Graceful Restart," \  	" * -  Inheriting Global GR Config,\n" \ diff --git a/doc/user/bgp.rst b/doc/user/bgp.rst index e0f1c6266a..d8dbb00cba 100644 --- a/doc/user/bgp.rst +++ b/doc/user/bgp.rst @@ -3900,6 +3900,10 @@ structure is extended with :clicmd:`show bgp [afi] [safi]`.     EVPN prefixes can also be filtered by EVPN route type. +.. clicmd:: show bgp l2vpn evpn route [detail] [type <ead|1|macip|2|multicast|3|es|4|prefix|5>] self-originate [json] + +   Display self-originated EVPN prefixes which can also be filtered by EVPN route type. +  .. clicmd:: show bgp vni <all|VNI> [vtep VTEP] [type <ead|1|macip|2|multicast|3>] [<detail|json>]     Display per-VNI EVPN routing table in bgp. Filter route-type, vtep, or VNI. @@ -4056,6 +4060,15 @@ structure is extended with :clicmd:`show bgp [afi] [safi]`.     If the ``json`` option is specified, output is displayed in JSON format. +.. clicmd:: show [ip] bgp [afi] [safi] [all] self-originate [wide|json] + +   Display self-originated routes. + +   If ``wide`` option is specified, then the prefix table's width is increased +   to fully display the prefix and the nexthop. + +   If the ``json`` option is specified, output is displayed in JSON format. +  .. clicmd:: show [ip] bgp [afi] [safi] [all] neighbors A.B.C.D [advertised-routes|received-routes|filtered-routes] [<A.B.C.D/M|X:X::X:X/M> | detail] [json|wide]     Display the routes advertised to a BGP neighbor or received routes  | 
