From faac979564b034617fcd3281e235e85532a091ac Mon Sep 17 00:00:00 2001 From: Lucian Cristian Date: Fri, 4 Dec 2020 13:49:57 +0200 Subject: [PATCH] frr: update to 7.5 switch to codeload for latest patches applied to stable branch Signed-off-by: Lucian Cristian --- net/frr/Makefile | 19 +- net/frr/files/daemons | 2 +- ...pd_Actually_find_the_sequence_number.patch | 69 -- net/frr/patches/001-bgpd_Some_backports.patch | 83 -- ...ix_route_map_description_memory_leak.patch | 29 - ...nd_to_show_only_established_sessions.patch | 288 ------ ...Add_BFD_peer_awareness_to_frr-reload.patch | 57 -- net/frr/patches/005-vtysh_fixes.patch | 120 --- ...6-bgpd_how_the_real_next_hop_address.patch | 835 ------------------ .../007-bgpd_Fix_the_bug_BGP_MRAI.patch | 30 - net/frr/patches/099-redefine_ethhdr.patch | 17 - 11 files changed, 12 insertions(+), 1537 deletions(-) delete mode 100644 net/frr/patches/000-bgpd_Actually_find_the_sequence_number.patch delete mode 100644 net/frr/patches/001-bgpd_Some_backports.patch delete mode 100644 net/frr/patches/002-lib_fix_route_map_description_memory_leak.patch delete mode 100644 net/frr/patches/003-bgpd_Add_command_to_show_only_established_sessions.patch delete mode 100644 net/frr/patches/004-Add_BFD_peer_awareness_to_frr-reload.patch delete mode 100644 net/frr/patches/005-vtysh_fixes.patch delete mode 100644 net/frr/patches/006-bgpd_how_the_real_next_hop_address.patch delete mode 100644 net/frr/patches/007-bgpd_Fix_the_bug_BGP_MRAI.patch delete mode 100644 net/frr/patches/099-redefine_ethhdr.patch diff --git a/net/frr/Makefile b/net/frr/Makefile index 68e5171a0..58ef49132 100644 --- a/net/frr/Makefile +++ b/net/frr/Makefile @@ -7,16 +7,20 @@ include $(TOPDIR)/rules.mk PKG_NAME:=frr -PKG_VERSION:=7.4 -PKG_RELEASE:=2 +PKG_VERSION:=7.5 +PKG_RELEASE:=1 +PKG_SOURCE_DATE:=2020-12-02 -PKG_SOURCE_URL:=https://github.com/FRRouting/frr/archive/ -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_HASH:=3c8204fda1c9b178d8446562579bbbc49d134b98f3ad02aa56f68724a2f9e40a +PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_DATE).tar.gz +PKG_SOURCE_VERSION:=b1e06590a7b4d4b8f7309f432ababebb1b3fa754 +PKG_SOURCE_URL:=https://codeload.github.com/FRRouting/frr/tar.gz/$(PKG_SOURCE_VERSION)? + + +PKG_HASH:=901763a6deff56c7e1738c4fadbfbb9846548d3d2a2572d4d1a75109805bd055 PKG_MAINTAINER:=Lucian Cristian -HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_NAME)-$(PKG_VERSION) -PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_NAME)-$(PKG_VERSION) +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_SOURCE_VERSION) +HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/$(PKG_NAME)-$(PKG_SOURCE_VERSION) PKG_LICENSE:=GPL-2.0-only LGPL-2.1-only @@ -38,7 +42,6 @@ PKG_DAEMON_AVAILABLE:= \ staticd \ vrrpd - PKG_CONFIG_DEPENDS:= \ CONFIG_IPV6 \ CONFIG_FRR_OPENSSL \ diff --git a/net/frr/files/daemons b/net/frr/files/daemons index c3a2064f2..ac39e25b5 100644 --- a/net/frr/files/daemons +++ b/net/frr/files/daemons @@ -1,4 +1,4 @@ -# The watchfrr and zebra daemons are always started. +# The staticd,watchfrr and zebra daemons are always started. # bgpd=no ospfd=no diff --git a/net/frr/patches/000-bgpd_Actually_find_the_sequence_number.patch b/net/frr/patches/000-bgpd_Actually_find_the_sequence_number.patch deleted file mode 100644 index ac3a7b4f6..000000000 --- a/net/frr/patches/000-bgpd_Actually_find_the_sequence_number.patch +++ /dev/null @@ -1,69 +0,0 @@ -From 34f6d0c67a48e2117c061f6ccdcf1f512982fe8f Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Tue, 2 Jun 2020 16:10:48 -0400 -Subject: [PATCH] bgpd: Actually find the sequence number for `bgp - extcommunity-list...` - -The code in the bgp extcommunity-list function was using -argv_find to get the correct idx. The problem was that -we had already done argv_finds before and idx was non-zero -thus having us always set the seq pointer to what was last -looked up. This causes us to pass in a value to the -underlying function and it would just wisely ignore it -causing a seq number of 0. - -We would then write this seq number of 0 and then immediately -reject it on read in again. BOO! - -Actually handle argv_find the way it was meant to be. - -Ticket:CM-29926 -Signed-off-by: Donald Sharp ---- - bgpd/bgp_vty.c | 12 ++++-------- - 1 file changed, 4 insertions(+), 8 deletions(-) - -diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c -index 3669205ee3..9c8f1e1def 100644 ---- a/bgpd/bgp_vty.c -+++ b/bgpd/bgp_vty.c -@@ -17617,8 +17617,7 @@ DEFUN (extcommunity_list_standard, - argv_find(argv, argc, "WORD", &idx); - cl_number_or_name = argv[idx]->arg; - -- argv_find(argv, argc, "(1-4294967295)", &idx); -- if (idx) -+ if (argv_find(argv, argc, "(1-4294967295)", &idx)) - seq = argv[idx]->arg; - - direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT -@@ -17663,8 +17662,7 @@ DEFUN (extcommunity_list_name_expanded, - argv_find(argv, argc, "WORD", &idx); - cl_number_or_name = argv[idx]->arg; - -- argv_find(argv, argc, "(1-4294967295)", &idx); -- if (idx) -+ if (argv_find(argv, argc, "(1-4294967295)", &idx)) - seq = argv[idx]->arg; - - direct = argv_find(argv, argc, "permit", &idx) ? COMMUNITY_PERMIT -@@ -17707,8 +17705,7 @@ DEFUN (no_extcommunity_list_standard_all, - char *seq = NULL; - int idx = 0; - -- argv_find(argv, argc, "(1-4294967295)", &idx); -- if (idx) -+ if (argv_find(argv, argc, "(1-4294967295)", &idx)) - seq = argv[idx]->arg; - - idx = 0; -@@ -17772,8 +17769,7 @@ DEFUN (no_extcommunity_list_expanded_all, - char *seq = NULL; - int idx = 0; - -- argv_find(argv, argc, "(1-4294967295)", &idx); -- if (idx) -+ if (argv_find(argv, argc, "(1-4294967295)", &idx)) - seq = argv[idx]->arg; - - idx = 0; diff --git a/net/frr/patches/001-bgpd_Some_backports.patch b/net/frr/patches/001-bgpd_Some_backports.patch deleted file mode 100644 index b67593a73..000000000 --- a/net/frr/patches/001-bgpd_Some_backports.patch +++ /dev/null @@ -1,83 +0,0 @@ -From acf6f22d150b0050afbdaf5887b8e25d1614db4c Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Thu, 2 Jul 2020 11:08:29 +0300 -Subject: [PATCH 1/2] bgpd: Return bool type for ecommunity_add_val and - subgroup_announce_check - -Signed-off-by: Donatas Abraitis ---- - bgpd/bgp_ecommunity.c | 6 +++--- - bgpd/bgp_route.c | 2 +- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/bgpd/bgp_ecommunity.c b/bgpd/bgp_ecommunity.c -index d13da74b04..7d5cac4d62 100644 ---- a/bgpd/bgp_ecommunity.c -+++ b/bgpd/bgp_ecommunity.c -@@ -107,14 +107,14 @@ bool ecommunity_add_val(struct ecommunity *ecom, struct ecommunity_val *eval, - p[1] == eval->val[1]) { - if (overwrite) { - memcpy(p, eval->val, ECOMMUNITY_SIZE); -- return 1; -+ return true; - } -- return 0; -+ return false; - } - } - int ret = memcmp(p, eval->val, ECOMMUNITY_SIZE); - if (ret == 0) -- return 0; -+ return false; - if (ret > 0) { - if (!unique) - break; -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index 6ae7a59a14..7bfefde482 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -1941,7 +1941,7 @@ bool subgroup_announce_check(struct bgp_node *rn, struct bgp_path_info *pi, - - /* Codification of AS 0 Processing */ - if (aspath_check_as_zero(attr->aspath)) -- return 0; -+ return false; - - if (CHECK_FLAG(bgp->flags, BGP_FLAG_GRACEFUL_SHUTDOWN)) { - if (peer->sort == BGP_PEER_IBGP - -From d5a157b7c377081d23b136b5ba4849abdcbecd97 Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Thu, 2 Jul 2020 11:39:40 +0300 -Subject: [PATCH 2/2] bgpd: Actually find the sequence number for - large-community-list - -Signed-off-by: Donatas Abraitis ---- - bgpd/bgp_vty.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c -index 9c8f1e1def..67ff31df8f 100644 ---- a/bgpd/bgp_vty.c -+++ b/bgpd/bgp_vty.c -@@ -17235,8 +17235,7 @@ static int lcommunity_list_set_vty(struct vty *vty, int argc, - char *cl_name; - char *seq = NULL; - -- argv_find(argv, argc, "(1-4294967295)", &idx); -- if (idx) -+ if (argv_find(argv, argc, "(1-4294967295)", &idx)) - seq = argv[idx]->arg; - - idx = 0; -@@ -17285,8 +17284,7 @@ static int lcommunity_list_unset_vty(struct vty *vty, int argc, - int idx = 0; - char *seq = NULL; - -- argv_find(argv, argc, "(1-4294967295)", &idx); -- if (idx) -+ if (argv_find(argv, argc, "(1-4294967295)", &idx)) - seq = argv[idx]->arg; - - idx = 0; diff --git a/net/frr/patches/002-lib_fix_route_map_description_memory_leak.patch b/net/frr/patches/002-lib_fix_route_map_description_memory_leak.patch deleted file mode 100644 index abdfe3449..000000000 --- a/net/frr/patches/002-lib_fix_route_map_description_memory_leak.patch +++ /dev/null @@ -1,29 +0,0 @@ -From cc45875e0d2af0b53100ec78364dc51b39a12ac9 Mon Sep 17 00:00:00 2001 -From: Rafael Zalamena -Date: Mon, 6 Jul 2020 11:39:27 -0300 -Subject: [PATCH] lib: fix route map description memory leak - -Route map entries are not getting a chance to call `description` string -deallocation on shutdown or when the parent entry is destroyed, so lets -add a code to handle this in the `route_map_index_delete` function. - -Signed-off-by: Rafael Zalamena -(cherry picked from commit f0951335830203426074ddca4317f84b477e4afb) ---- - lib/routemap.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/lib/routemap.c b/lib/routemap.c -index 3d69a3495a..3b45133450 100644 ---- a/lib/routemap.c -+++ b/lib/routemap.c -@@ -971,6 +971,9 @@ void route_map_index_delete(struct route_map_index *index, int notify) - zlog_debug("Deleting route-map %s sequence %d", - index->map->name, index->pref); - -+ /* Free route map entry description. */ -+ XFREE(MTYPE_TMP, index->description); -+ - /* Free route map northbound hook contexts. */ - while ((rhc = TAILQ_FIRST(&index->rhclist)) != NULL) - routemap_hook_context_free(rhc); diff --git a/net/frr/patches/003-bgpd_Add_command_to_show_only_established_sessions.patch b/net/frr/patches/003-bgpd_Add_command_to_show_only_established_sessions.patch deleted file mode 100644 index c2b121421..000000000 --- a/net/frr/patches/003-bgpd_Add_command_to_show_only_established_sessions.patch +++ /dev/null @@ -1,288 +0,0 @@ -From 2939f712d152f7e3ae438cc0f1d96dd9485e7487 Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Thu, 9 Jul 2020 16:00:27 +0300 -Subject: [PATCH 1/2] bgpd: Add command to show only established sessions - -``` -exit1-debian-9# show bgp summary - -IPv4 Unicast Summary: -BGP router identifier 192.168.0.1, local AS number 100 vrf-id 0 -BGP table version 8 -RIB entries 15, using 2880 bytes of memory -Peers 2, using 43 KiB of memory - -Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt -192.168.0.2 4 200 10 6 0 0 0 00:00:35 8 8 -2a02:4780::2 4 0 0 1 0 0 0 never Active 0 - -Total number of neighbors 2 -exit1-debian-9# show bgp summary established - -IPv4 Unicast Summary: -BGP router identifier 192.168.0.1, local AS number 100 vrf-id 0 -BGP table version 8 -RIB entries 15, using 2880 bytes of memory -Peers 2, using 43 KiB of memory - -Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd PfxSnt -192.168.0.2 4 200 10 6 0 0 0 00:00:39 8 8 - -Total number of neighbors 2 -exit1-debian-9# show bgp summary failed - -IPv4 Unicast Summary: -BGP router identifier 192.168.0.1, local AS number 100 vrf-id 0 -BGP table version 8 -RIB entries 15, using 2880 bytes of memory -Peers 2, using 43 KiB of memory - -Neighbor EstdCnt DropCnt ResetTime Reason -2a02:4780::2 0 0 never Waiting for peer OPEN - -Total number of neighbors 2 -exit1-debian-9# -``` - -Signed-off-by: Donatas Abraitis ---- - bgpd/bgp_evpn_vty.c | 11 ++++++++--- - bgpd/bgp_vty.c | 43 +++++++++++++++++++++++++++++++------------ - bgpd/bgp_vty.h | 3 ++- - 3 files changed, 41 insertions(+), 16 deletions(-) - -diff --git a/bgpd/bgp_evpn_vty.c b/bgpd/bgp_evpn_vty.c -index 85604d856d..42987117d4 100644 ---- a/bgpd/bgp_evpn_vty.c -+++ b/bgpd/bgp_evpn_vty.c -@@ -4077,7 +4077,7 @@ DEFUN(show_bgp_l2vpn_evpn_es, - */ - DEFUN(show_bgp_l2vpn_evpn_summary, - show_bgp_l2vpn_evpn_summary_cmd, -- "show bgp [vrf VRFNAME] l2vpn evpn summary [failed] [json]", -+ "show bgp [vrf VRFNAME] l2vpn evpn summary [established|failed] [json]", - SHOW_STR - BGP_STR - "bgp vrf\n" -@@ -4085,6 +4085,7 @@ DEFUN(show_bgp_l2vpn_evpn_summary, - L2VPN_HELP_STR - EVPN_HELP_STR - "Summary of BGP neighbor status\n" -+ "Show only sessions in Established state\n" - "Show only sessions not in Established state\n" - JSON_STR) - { -@@ -4092,13 +4093,17 @@ DEFUN(show_bgp_l2vpn_evpn_summary, - bool uj = use_json(argc, argv); - char *vrf = NULL; - bool show_failed = false; -+ bool show_established = false; - - if (argv_find(argv, argc, "vrf", &idx_vrf)) - vrf = argv[++idx_vrf]->arg; - if (argv_find(argv, argc, "failed", &idx_vrf)) - show_failed = true; -- return bgp_show_summary_vty(vty, vrf, AFI_L2VPN, SAFI_EVPN, -- show_failed, uj); -+ if (argv_find(argv, argc, "established", &idx_vrf)) -+ show_established = true; -+ -+ return bgp_show_summary_vty(vty, vrf, AFI_L2VPN, SAFI_EVPN, show_failed, -+ show_established, uj); - } - - /* -diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c -index 67ff31df8f..78521457fd 100644 ---- a/bgpd/bgp_vty.c -+++ b/bgpd/bgp_vty.c -@@ -8772,7 +8772,8 @@ static void bgp_show_failed_summary(struct vty *vty, struct bgp *bgp, - - /* Show BGP peer's summary information. */ - static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi, -- bool show_failed, bool use_json) -+ bool show_failed, bool show_established, -+ bool use_json) - { - struct peer *peer; - struct listnode *node, *nnode; -@@ -9104,6 +9105,10 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi, - bgp_show_failed_summary(vty, bgp, peer, - json_peer, 0, use_json); - } else if (!show_failed) { -+ if (show_established -+ && bgp_has_peer_failed(peer, afi, safi)) -+ continue; -+ - json_peer = json_object_new_object(); - if (peer_dynamic_neighbor(peer)) { - json_object_boolean_true_add(json_peer, -@@ -9193,6 +9198,10 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi, - max_neighbor_width, - use_json); - } else if (!show_failed) { -+ if (show_established -+ && bgp_has_peer_failed(peer, afi, safi)) -+ continue; -+ - memset(dn_flag, '\0', sizeof(dn_flag)); - if (peer_dynamic_neighbor(peer)) { - dn_flag[0] = '*'; -@@ -9315,7 +9324,8 @@ static int bgp_show_summary(struct vty *vty, struct bgp *bgp, int afi, int safi, - } - - static void bgp_show_summary_afi_safi(struct vty *vty, struct bgp *bgp, int afi, -- int safi, bool show_failed, bool use_json) -+ int safi, bool show_failed, -+ bool show_established, bool use_json) - { - int is_first = 1; - int afi_wildcard = (afi == AFI_MAX); -@@ -9358,7 +9368,8 @@ static void bgp_show_summary_afi_safi(struct vty *vty, struct bgp *bgp, int afi, - false)); - } - } -- bgp_show_summary(vty, bgp, afi, safi, show_failed, -+ bgp_show_summary(vty, bgp, afi, safi, -+ show_failed, show_established, - use_json); - } - safi++; -@@ -9382,6 +9393,7 @@ static void bgp_show_summary_afi_safi(struct vty *vty, struct bgp *bgp, int afi, - - static void bgp_show_all_instances_summary_vty(struct vty *vty, afi_t afi, - safi_t safi, bool show_failed, -+ bool show_established, - bool use_json) - { - struct listnode *node, *nnode; -@@ -9411,7 +9423,7 @@ static void bgp_show_all_instances_summary_vty(struct vty *vty, afi_t afi, - : bgp->name); - } - bgp_show_summary_afi_safi(vty, bgp, afi, safi, show_failed, -- use_json); -+ show_established, use_json); - } - - if (use_json) -@@ -9421,15 +9433,16 @@ static void bgp_show_all_instances_summary_vty(struct vty *vty, afi_t afi, - } - - int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi, -- safi_t safi, bool show_failed, bool use_json) -+ safi_t safi, bool show_failed, bool show_established, -+ bool use_json) - { - struct bgp *bgp; - - if (name) { - if (strmatch(name, "all")) { -- bgp_show_all_instances_summary_vty(vty, afi, safi, -- show_failed, -- use_json); -+ bgp_show_all_instances_summary_vty( -+ vty, afi, safi, show_failed, show_established, -+ use_json); - return CMD_SUCCESS; - } else { - bgp = bgp_lookup_by_name(name); -@@ -9444,7 +9457,8 @@ int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi, - } - - bgp_show_summary_afi_safi(vty, bgp, afi, safi, -- show_failed, use_json); -+ show_failed, show_established, -+ use_json); - return CMD_SUCCESS; - } - } -@@ -9453,7 +9467,7 @@ int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi, - - if (bgp) - bgp_show_summary_afi_safi(vty, bgp, afi, safi, show_failed, -- use_json); -+ show_established, use_json); - else { - if (use_json) - vty_out(vty, "{}\n"); -@@ -9468,7 +9482,7 @@ int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi, - /* `show [ip] bgp summary' commands. */ - DEFUN (show_ip_bgp_summary, - show_ip_bgp_summary_cmd, -- "show [ip] bgp [ VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] summary [failed] [json]", -+ "show [ip] bgp [ VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] summary [established|failed] [json]", - SHOW_STR - IP_STR - BGP_STR -@@ -9476,6 +9490,7 @@ DEFUN (show_ip_bgp_summary, - BGP_AFI_HELP_STR - BGP_SAFI_WITH_LABEL_HELP_STR - "Summary of BGP neighbor status\n" -+ "Show only sessions in Established state\n" - "Show only sessions not in Established state\n" - JSON_STR) - { -@@ -9483,6 +9498,7 @@ DEFUN (show_ip_bgp_summary, - afi_t afi = AFI_MAX; - safi_t safi = SAFI_MAX; - bool show_failed = false; -+ bool show_established = false; - - int idx = 0; - -@@ -9504,10 +9520,13 @@ DEFUN (show_ip_bgp_summary, - - if (argv_find(argv, argc, "failed", &idx)) - show_failed = true; -+ if (argv_find(argv, argc, "established", &idx)) -+ show_established = true; - - bool uj = use_json(argc, argv); - -- return bgp_show_summary_vty(vty, vrf, afi, safi, show_failed, uj); -+ return bgp_show_summary_vty(vty, vrf, afi, safi, show_failed, -+ show_established, uj); - } - - const char *get_afi_safi_str(afi_t afi, safi_t safi, bool for_json) -diff --git a/bgpd/bgp_vty.h b/bgpd/bgp_vty.h -index d6ca198d09..95eefbc36f 100644 ---- a/bgpd/bgp_vty.h -+++ b/bgpd/bgp_vty.h -@@ -178,6 +178,7 @@ extern int bgp_vty_find_and_parse_afi_safi_bgp(struct vty *vty, - int bgp_vty_find_and_parse_bgp(struct vty *vty, struct cmd_token **argv, - int argc, struct bgp **bgp, bool use_json); - extern int bgp_show_summary_vty(struct vty *vty, const char *name, afi_t afi, -- safi_t safi, bool show_failed, bool use_json); -+ safi_t safi, bool show_failed, -+ bool show_established, bool use_json); - - #endif /* _QUAGGA_BGP_VTY_H */ - -From 2600443342d8e21d30df2b6ca095a5f2d0d4de2d Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Thu, 9 Jul 2020 16:05:08 +0300 -Subject: [PATCH 2/2] doc: Add 'show bgp summary established' command - -Signed-off-by: Donatas Abraitis ---- - doc/user/bgp.rst | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/doc/user/bgp.rst b/doc/user/bgp.rst -index cb343e8dad..36227db604 100644 ---- a/doc/user/bgp.rst -+++ b/doc/user/bgp.rst -@@ -2710,6 +2710,12 @@ structure is extended with :clicmd:`show bgp [afi] [safi]`. - Show a bgp peer summary for peers that are not succesfully exchanging routes - for the specified address family, and subsequent address-family. - -+.. index:: show bgp [afi] [safi] summary established [json] -+.. clicmd:: show bgp [afi] [safi] summary established [json] -+ -+ Show a bgp peer summary for peers that are succesfully exchanging routes -+ for the specified address family, and subsequent address-family. -+ - .. index:: show bgp [afi] [safi] neighbor [PEER] - .. clicmd:: show bgp [afi] [safi] neighbor [PEER] - diff --git a/net/frr/patches/004-Add_BFD_peer_awareness_to_frr-reload.patch b/net/frr/patches/004-Add_BFD_peer_awareness_to_frr-reload.patch deleted file mode 100644 index a8a612bcf..000000000 --- a/net/frr/patches/004-Add_BFD_peer_awareness_to_frr-reload.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 692ce87393de9497a7821e9e0856ff70a7973ff6 Mon Sep 17 00:00:00 2001 -From: Paul Manley -Date: Thu, 9 Jul 2020 11:21:16 -0500 -Subject: [PATCH 1/2] tools: create sub-context for bfd peers - -add lines starting with 'peer' to the list of sub-contexts that are handled by frr-reload.py. - -https://github.com/FRRouting/frr/issues/6511#issuecomment-655163833 - -Signed-off-by: Paul Manley -(cherry picked from commit 1c23a0aaa1c5d20af50af75b070e93e1eff21222) ---- - tools/frr-reload.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/tools/frr-reload.py b/tools/frr-reload.py -index d4020cdfc9..e9641b2b13 100755 ---- a/tools/frr-reload.py -+++ b/tools/frr-reload.py -@@ -496,6 +496,7 @@ def load_contexts(self): - line.startswith("vnc defaults") or - line.startswith("vnc l2-group") or - line.startswith("vnc nve-group") or -+ line.startswith("peer") or - line.startswith("member pseudowire")): - main_ctx_key = [] - - -From 2604086c3d9face0aca2497a982782c865bb2b59 Mon Sep 17 00:00:00 2001 -From: Paul Manley -Date: Thu, 9 Jul 2020 11:25:34 -0500 -Subject: [PATCH 2/2] vtysh: properly exit BFD_PEER_NODE when marking file - -vtysh needs to be aware of how to properly exit a bfd peer when subsequent commands only succeed in a higher context. - -https://github.com/FRRouting/frr/issues/6511#issuecomment-656166206 - -Signed-off-by: Paul Manley -(cherry picked from commit b727c12aabf1afc2b6e33f8590c9786e349e4fcb) ---- - vtysh/vtysh.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/vtysh/vtysh.c b/vtysh/vtysh.c -index 15ec866fc9..4fdf68c0e6 100644 ---- a/vtysh/vtysh.c -+++ b/vtysh/vtysh.c -@@ -809,6 +809,9 @@ int vtysh_mark_file(const char *filename) - } else if ((prev_node == KEYCHAIN_KEY_NODE) - && (tried == 1)) { - vty_out(vty, "exit\n"); -+ } else if ((prev_node == BFD_PEER_NODE) -+ && (tried == 1)) { -+ vty_out(vty, "exit\n"); - } else if (tried) { - vty_out(vty, "end\n"); - } diff --git a/net/frr/patches/005-vtysh_fixes.patch b/net/frr/patches/005-vtysh_fixes.patch deleted file mode 100644 index 83983a099..000000000 --- a/net/frr/patches/005-vtysh_fixes.patch +++ /dev/null @@ -1,120 +0,0 @@ -From cc5934ed5939315ba5d95bfaf052625762107205 Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Tue, 30 Jun 2020 08:59:46 -0400 -Subject: [PATCH 1/2] vtysh: master is a non-sorted list - -The commit: -a798241265a5808083a06b14ce1637d1ddf6a45a - -attempted to use sorted master lists to do faster lookups -by using a RB Tree. Unfortunately the original code -was creating a list->cmp function *but* never using it. -If you look at the commit, it clearly shows that the -function listnode_add is used to insert but when you -look at that function it is a tail push. - -Fixes: #6573 - -Namely now this ordering is preserved: -bgp as-path access-list originate-only permit ^$ -bgp as-path access-list originate-only deny .* - -Signed-off-by: Donald Sharp ---- - vtysh/vtysh_config.c | 21 ++++++++++----------- - 1 file changed, 10 insertions(+), 11 deletions(-) - -diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c -index abbb111f9d..2ab9dd5a9a 100644 ---- a/vtysh/vtysh_config.c -+++ b/vtysh/vtysh_config.c -@@ -34,7 +34,7 @@ DEFINE_MTYPE_STATIC(MVTYSH, VTYSH_CONFIG_LINE, "Vtysh configuration line") - - vector configvec; - --PREDECL_RBTREE_UNIQ(config_master); -+PREDECL_LIST(config_master); - - struct config { - /* Configuration node name. */ -@@ -72,11 +72,6 @@ static struct config *config_new(void) - return config; - } - --static int config_cmp(const struct config *c1, const struct config *c2) --{ -- return strcmp(c1->name, c2->name); --} -- - static void config_del(struct config *config) - { - list_delete(&config->line); -@@ -84,13 +79,15 @@ static void config_del(struct config *config) - XFREE(MTYPE_VTYSH_CONFIG, config); - } - --DECLARE_RBTREE_UNIQ(config_master, struct config, rbt_item, config_cmp) -+DECLARE_LIST(config_master, struct config, rbt_item) - - static struct config *config_get(int index, const char *line) - { -- struct config *config; -+ struct config *config, *config_loop; - struct config_master_head *master; - -+ config = config_loop = NULL; -+ - master = vector_lookup_ensure(configvec, index); - - if (!master) { -@@ -99,8 +96,10 @@ static struct config *config_get(int index, const char *line) - vector_set_index(configvec, index, master); - } - -- const struct config config_ref = { .name = (char *)line }; -- config = config_master_find(master, &config_ref); -+ frr_each (config_master, master, config_loop) { -+ if (strcmp(config_loop->name, line) == 0) -+ config = config_loop; -+ } - - if (!config) { - config = config_new(); -@@ -109,7 +108,7 @@ static struct config *config_get(int index, const char *line) - config->line->cmp = (int (*)(void *, void *))line_cmp; - config->name = XSTRDUP(MTYPE_VTYSH_CONFIG_LINE, line); - config->index = index; -- config_master_add(master, config); -+ config_master_add_tail(master, config); - } - return config; - } - -From 3e4d90ec556649e11954f2f56b5282f95e7e013b Mon Sep 17 00:00:00 2001 -From: Donald Sharp -Date: Tue, 30 Jun 2020 09:03:55 -0400 -Subject: [PATCH 2/2] vtysh: Improve lookup performance - -When we find the line we are interested in, stop looking. - -Signed-off-by: Donald Sharp ---- - vtysh/vtysh_config.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/vtysh/vtysh_config.c b/vtysh/vtysh_config.c -index 2ab9dd5a9a..61bcf3b658 100644 ---- a/vtysh/vtysh_config.c -+++ b/vtysh/vtysh_config.c -@@ -97,8 +97,10 @@ static struct config *config_get(int index, const char *line) - } - - frr_each (config_master, master, config_loop) { -- if (strcmp(config_loop->name, line) == 0) -+ if (strcmp(config_loop->name, line) == 0) { - config = config_loop; -+ break; -+ } - } - - if (!config) { diff --git a/net/frr/patches/006-bgpd_how_the_real_next_hop_address.patch b/net/frr/patches/006-bgpd_how_the_real_next_hop_address.patch deleted file mode 100644 index b819d6998..000000000 --- a/net/frr/patches/006-bgpd_how_the_real_next_hop_address.patch +++ /dev/null @@ -1,835 +0,0 @@ -From c6a5994609deec62c8aefa1fa15c517e32575ca3 Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Wed, 6 May 2020 17:45:31 +0300 -Subject: [PATCH 1/4] tests: Remove bgp_show_ip_bgp_fqdn test - -Not really relevant for now. - -Signed-off-by: Donatas Abraitis ---- - .../bgp_show_ip_bgp_fqdn/__init__.py | 0 - .../bgp_show_ip_bgp_fqdn/r1/bgpd.conf | 5 - - .../bgp_show_ip_bgp_fqdn/r1/zebra.conf | 9 -- - .../bgp_show_ip_bgp_fqdn/r2/bgpd.conf | 5 - - .../bgp_show_ip_bgp_fqdn/r2/zebra.conf | 12 -- - .../bgp_show_ip_bgp_fqdn/r3/bgpd.conf | 3 - - .../bgp_show_ip_bgp_fqdn/r3/zebra.conf | 6 - - .../test_bgp_show_ip_bgp_fqdn.py | 133 ------------------ - 8 files changed, 173 deletions(-) - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/__init__.py - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r1/bgpd.conf - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r1/zebra.conf - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf - delete mode 100644 tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py - -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/__init__.py b/tests/topotests/bgp_show_ip_bgp_fqdn/__init__.py -deleted file mode 100644 -index e69de29bb2..0000000000 -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r1/bgpd.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r1/bgpd.conf -deleted file mode 100644 -index f0df56e947..0000000000 ---- a/tests/topotests/bgp_show_ip_bgp_fqdn/r1/bgpd.conf -+++ /dev/null -@@ -1,5 +0,0 @@ --router bgp 65000 -- no bgp ebgp-requires-policy -- neighbor 192.168.255.2 remote-as 65001 -- address-family ipv4 unicast -- redistribute connected -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r1/zebra.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r1/zebra.conf -deleted file mode 100644 -index 0a283c06d5..0000000000 ---- a/tests/topotests/bgp_show_ip_bgp_fqdn/r1/zebra.conf -+++ /dev/null -@@ -1,9 +0,0 @@ --! --interface lo -- ip address 172.16.255.254/32 --! --interface r1-eth0 -- ip address 192.168.255.1/24 --! --ip forwarding --! -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf -deleted file mode 100644 -index 422a7345f9..0000000000 ---- a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/bgpd.conf -+++ /dev/null -@@ -1,5 +0,0 @@ --router bgp 65001 -- no bgp ebgp-requires-policy -- bgp default show-hostname -- neighbor 192.168.255.1 remote-as 65000 -- neighbor 192.168.254.1 remote-as 65001 -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf -deleted file mode 100644 -index e9e2e4391f..0000000000 ---- a/tests/topotests/bgp_show_ip_bgp_fqdn/r2/zebra.conf -+++ /dev/null -@@ -1,12 +0,0 @@ --! --interface lo -- ip address 172.16.255.253/32 --! --interface r2-eth0 -- ip address 192.168.255.2/24 --! --interface r2-eth1 -- ip address 192.168.254.2/24 --! --ip forwarding --! -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf -deleted file mode 100644 -index 8fcf6a736d..0000000000 ---- a/tests/topotests/bgp_show_ip_bgp_fqdn/r3/bgpd.conf -+++ /dev/null -@@ -1,3 +0,0 @@ --router bgp 65001 -- bgp default show-hostname -- neighbor 192.168.254.2 remote-as 65001 -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf b/tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf -deleted file mode 100644 -index a8b8bc38c5..0000000000 ---- a/tests/topotests/bgp_show_ip_bgp_fqdn/r3/zebra.conf -+++ /dev/null -@@ -1,6 +0,0 @@ --! --interface r3-eth0 -- ip address 192.168.254.1/24 --! --ip forwarding --! -diff --git a/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py b/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py -deleted file mode 100644 -index e8ad180935..0000000000 ---- a/tests/topotests/bgp_show_ip_bgp_fqdn/test_bgp_show_ip_bgp_fqdn.py -+++ /dev/null -@@ -1,133 +0,0 @@ --#!/usr/bin/env python -- --# --# test_bgp_show_ip_bgp_fqdn.py --# Part of NetDEF Topology Tests --# --# Copyright (c) 2019 by --# Donatas Abraitis --# --# Permission to use, copy, modify, and/or distribute this software --# for any purpose with or without fee is hereby granted, provided --# that the above copyright notice and this permission notice appear --# in all copies. --# --# THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES --# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF --# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR --# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY --# DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, --# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS --# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE --# OF THIS SOFTWARE. --# -- --""" --test_bgp_show_ip_bgp_fqdn.py: --Test if FQND is visible in `show [ip] bgp` output if --`bgp default show-hostname` is toggled. -- --Topology: --r1 <-- eBGP --> r2 <-- iBGP --> r3 -- --1. Check if both hostname and ip are added to JSON output --for 172.16.255.254/32 on r2. --2. Check if only ip is added to JSON output for 172.16.255.254/32 on r3. --""" -- --import os --import sys --import json --import time --import pytest --import functools -- --CWD = os.path.dirname(os.path.realpath(__file__)) --sys.path.append(os.path.join(CWD, "../")) -- --# pylint: disable=C0413 --from lib import topotest --from lib.topogen import Topogen, TopoRouter, get_topogen --from lib.topolog import logger --from mininet.topo import Topo -- -- --class TemplateTopo(Topo): -- def build(self, *_args, **_opts): -- tgen = get_topogen(self) -- -- for routern in range(1, 4): -- tgen.add_router("r{}".format(routern)) -- -- switch = tgen.add_switch("s1") -- switch.add_link(tgen.gears["r1"]) -- switch.add_link(tgen.gears["r2"]) -- -- switch = tgen.add_switch("s2") -- switch.add_link(tgen.gears["r2"]) -- switch.add_link(tgen.gears["r3"]) -- -- --def setup_module(mod): -- tgen = Topogen(TemplateTopo, mod.__name__) -- tgen.start_topology() -- -- router_list = tgen.routers() -- -- for i, (rname, router) in enumerate(router_list.iteritems(), 1): -- router.load_config( -- TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname)) -- ) -- router.load_config( -- TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname)) -- ) -- -- tgen.start_router() -- -- --def teardown_module(mod): -- tgen = get_topogen() -- tgen.stop_topology() -- -- --def test_bgp_show_ip_bgp_hostname(): -- tgen = get_topogen() -- -- if tgen.routers_have_failure(): -- pytest.skip(tgen.errors) -- -- def _bgp_converge(router): -- output = json.loads(router.vtysh_cmd("show ip bgp 172.16.255.254/32 json")) -- expected = {"prefix": "172.16.255.254/32"} -- return topotest.json_cmp(output, expected) -- -- def _bgp_show_nexthop_hostname_and_ip(router): -- output = json.loads(router.vtysh_cmd("show ip bgp json")) -- for nh in output["routes"]["172.16.255.254/32"][0]["nexthops"]: -- if "hostname" in nh and "ip" in nh: -- return True -- return False -- -- def _bgp_show_nexthop_ip_only(router): -- output = json.loads(router.vtysh_cmd("show ip bgp json")) -- for nh in output["routes"]["172.16.255.254/32"][0]["nexthops"]: -- if "ip" in nh and not "hostname" in nh: -- return True -- return False -- -- test_func = functools.partial(_bgp_converge, tgen.gears["r2"]) -- success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) -- -- test_func = functools.partial(_bgp_converge, tgen.gears["r3"]) -- success, result = topotest.run_and_expect(test_func, None, count=60, wait=0.5) -- -- assert result is None, 'Failed bgp convergence in "{}"'.format(tgen.gears["r2"]) -- assert _bgp_show_nexthop_hostname_and_ip(tgen.gears["r2"]) == True -- -- assert result is None, 'Failed bgp convergence in "{}"'.format(tgen.gears["r3"]) -- assert _bgp_show_nexthop_ip_only(tgen.gears["r3"]) == True -- -- --if __name__ == "__main__": -- args = ["-s"] + sys.argv[1:] -- sys.exit(pytest.main(args)) - -From e7cc3d21452bd771a97bc46ab5a1e4853c46f944 Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Wed, 6 May 2020 17:46:10 +0300 -Subject: [PATCH 2/4] bgpd: Show the real next-hop address in addition to - hostname in `show bgp` - -It's hard to cope with cases when next-hop is changed/unchanged or -peers are non-direct. - -It would be better to show the hostname and nexthop IP address (both) -under `show bgp` to quickly identify the source and the real next-hop -of the route. - -If `bgp default show-nexthop-hostname` is toggled the output looks like: -``` -spine1-debian-9# show bgp -BGP table version is 1, local router ID is 2.2.2.2, vrf id 0 -Default local pref 100, local AS 65002 -Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, - i internal, r RIB-failure, S Stale, R Removed -Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self -Origin codes: i - IGP, e - EGP, ? - incomplete - - Network Next Hop Metric LocPrf Weight Path -* 2a02:4780::/64 fe80::a00:27ff:fe09:f8a3(exit1-debian-9) - 0 0 65001 ? - -spine1-debian-9# show ip bgp -BGP table version is 5, local router ID is 2.2.2.2, vrf id 0 -Default local pref 100, local AS 65002 -Status codes: s suppressed, d damped, h history, * valid, > best, = multipath, - i internal, r RIB-failure, S Stale, R Removed -Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self -Origin codes: i - IGP, e - EGP, ? - incomplete - - Network Next Hop Metric LocPrf Weight Path -*> 10.255.255.0/24 192.168.0.1(exit1-debian-9) - 0 0 65001 ? -``` - -Signed-off-by: Donatas Abraitis ---- - bgpd/bgp_route.c | 161 ++++++++++++++++++++++++++++++----------------- - bgpd/bgp_vty.c | 45 +++++++++++++ - bgpd/bgpd.h | 1 + - 3 files changed, 149 insertions(+), 58 deletions(-) - -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index 7bfefde482..f033f525e5 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -7559,8 +7559,7 @@ static char *bgp_nexthop_hostname(struct peer *peer, - struct bgp_nexthop_cache *bnc) - { - if (peer->hostname -- && CHECK_FLAG(peer->bgp->flags, BGP_FLAG_SHOW_HOSTNAME) && bnc -- && CHECK_FLAG(bnc->flags, BGP_NEXTHOP_CONNECTED)) -+ && CHECK_FLAG(peer->bgp->flags, BGP_FLAG_SHOW_NEXTHOP_HOSTNAME)) - return peer->hostname; - return NULL; - } -@@ -7570,6 +7569,7 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - struct bgp_path_info *path, int display, safi_t safi, - json_object *json_paths) - { -+ int len; - struct attr *attr = path->attr; - json_object *json_path = NULL; - json_object *json_nexthops = NULL; -@@ -7681,10 +7681,19 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - : "ipv6"); - json_object_boolean_true_add(json_nexthop_global, - "used"); -- } else -- vty_out(vty, "%s%s", -- nexthop_hostname ? nexthop_hostname : nexthop, -- vrf_id_str); -+ } else { -+ if (nexthop_hostname) -+ len = vty_out(vty, "%s(%s)%s", nexthop, -+ nexthop_hostname, vrf_id_str); -+ else -+ len = vty_out(vty, "%s%s", nexthop, vrf_id_str); -+ -+ len = 16 - len; -+ if (len < 1) -+ vty_out(vty, "\n%*s", 36, " "); -+ else -+ vty_out(vty, "%*s", len, " "); -+ } - } else if (safi == SAFI_EVPN) { - if (json_paths) { - json_nexthop_global = json_object_new_object(); -@@ -7701,11 +7710,20 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - "ipv4"); - json_object_boolean_true_add(json_nexthop_global, - "used"); -- } else -- vty_out(vty, "%-16s%s", -- nexthop_hostname ? nexthop_hostname -- : inet_ntoa(attr->nexthop), -- vrf_id_str); -+ } else { -+ if (nexthop_hostname) -+ len = vty_out(vty, "%pI4(%s)%s", &attr->nexthop, -+ nexthop_hostname, vrf_id_str); -+ else -+ len = vty_out(vty, "%pI4%s", &attr->nexthop, -+ vrf_id_str); -+ -+ len = 16 - len; -+ if (len < 1) -+ vty_out(vty, "\n%*s", 36, " "); -+ else -+ vty_out(vty, "%*s", len, " "); -+ } - } else if (safi == SAFI_FLOWSPEC) { - if (attr->nexthop.s_addr != INADDR_ANY) { - if (json_paths) { -@@ -7726,10 +7744,21 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - json_nexthop_global, - "used"); - } else { -- vty_out(vty, "%-16s", -- nexthop_hostname -- ? nexthop_hostname -- : inet_ntoa(attr->nexthop)); -+ if (nexthop_hostname) -+ len = vty_out(vty, "%pI4(%s)%s", -+ &attr->nexthop, -+ nexthop_hostname, -+ vrf_id_str); -+ else -+ len = vty_out(vty, "%pI4%s", -+ &attr->nexthop, -+ vrf_id_str); -+ -+ len = 16 - len; -+ if (len < 1) -+ vty_out(vty, "\n%*s", 36, " "); -+ else -+ vty_out(vty, "%*s", len, " "); - } - } - } else if (p->family == AF_INET && !BGP_ATTR_NEXTHOP_AFI_IP6(attr)) { -@@ -7749,19 +7778,23 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - json_object_boolean_true_add(json_nexthop_global, - "used"); - } else { -- char buf[BUFSIZ]; -+ if (nexthop_hostname) -+ len = vty_out(vty, "%pI4(%s)%s", &attr->nexthop, -+ nexthop_hostname, vrf_id_str); -+ else -+ len = vty_out(vty, "%pI4%s", &attr->nexthop, -+ vrf_id_str); - -- snprintf(buf, sizeof(buf), "%s%s", -- nexthop_hostname ? nexthop_hostname -- : inet_ntoa(attr->nexthop), -- vrf_id_str); -- vty_out(vty, "%-16s", buf); -+ len = 16 - len; -+ if (len < 1) -+ vty_out(vty, "\n%*s", 36, " "); -+ else -+ vty_out(vty, "%*s", len, " "); - } - } - - /* IPv6 Next Hop */ - else if (p->family == AF_INET6 || BGP_ATTR_NEXTHOP_AFI_IP6(attr)) { -- int len; - char buf[BUFSIZ]; - - if (json_paths) { -@@ -7835,15 +7868,18 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - else - vty_out(vty, "%*s", len, " "); - } else { -- len = vty_out( -- vty, "%s%s", -- nexthop_hostname -- ? nexthop_hostname -- : inet_ntop( -- AF_INET6, -- &attr->mp_nexthop_local, -- buf, BUFSIZ), -- vrf_id_str); -+ if (nexthop_hostname) -+ len = vty_out( -+ vty, "%pI6(%s)%s", -+ &attr->mp_nexthop_local, -+ nexthop_hostname, -+ vrf_id_str); -+ else -+ len = vty_out( -+ vty, "%pI6%s", -+ &attr->mp_nexthop_local, -+ vrf_id_str); -+ - len = 16 - len; - - if (len < 1) -@@ -7852,15 +7888,16 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - vty_out(vty, "%*s", len, " "); - } - } else { -- len = vty_out( -- vty, "%s%s", -- nexthop_hostname -- ? nexthop_hostname -- : inet_ntop( -- AF_INET6, -- &attr->mp_nexthop_global, -- buf, BUFSIZ), -- vrf_id_str); -+ if (nexthop_hostname) -+ len = vty_out(vty, "%pI6(%s)%s", -+ &attr->mp_nexthop_global, -+ nexthop_hostname, -+ vrf_id_str); -+ else -+ len = vty_out(vty, "%pI6%s", -+ &attr->mp_nexthop_global, -+ vrf_id_str); -+ - len = 16 - len; - - if (len < 1) -@@ -7986,6 +8023,7 @@ void route_vty_out_tmp(struct vty *vty, const struct prefix *p, - { - json_object *json_status = NULL; - json_object *json_net = NULL; -+ int len; - char buff[BUFSIZ]; - - /* Route status display. */ -@@ -8079,7 +8117,6 @@ void route_vty_out_tmp(struct vty *vty, const struct prefix *p, - inet_ntoa(attr->nexthop)); - } else if (p->family == AF_INET6 - || BGP_ATTR_NEXTHOP_AFI_IP6(attr)) { -- int len; - char buf[BUFSIZ]; - - len = vty_out( -@@ -8823,12 +8860,15 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, - json_object_string_add( - json_nexthop_global, "hostname", - nexthop_hostname); -- } else -- vty_out(vty, " %s", -- nexthop_hostname -- ? nexthop_hostname -- : inet_ntoa( -- attr->mp_nexthop_global_in)); -+ } else { -+ if (nexthop_hostname) -+ vty_out(vty, " %pI4(%s)", -+ &attr->mp_nexthop_global_in, -+ nexthop_hostname); -+ else -+ vty_out(vty, " %pI4", -+ &attr->mp_nexthop_global_in); -+ } - } else { - if (json_paths) { - json_object_string_add( -@@ -8839,11 +8879,15 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, - json_object_string_add( - json_nexthop_global, "hostname", - nexthop_hostname); -- } else -- vty_out(vty, " %s", -- nexthop_hostname -- ? nexthop_hostname -- : inet_ntoa(attr->nexthop)); -+ } else { -+ if (nexthop_hostname) -+ vty_out(vty, " %pI4(%s)", -+ &attr->nexthop, -+ nexthop_hostname); -+ else -+ vty_out(vty, " %pI4", -+ &attr->nexthop); -+ } - } - - if (json_paths) -@@ -8866,12 +8910,13 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, - json_object_string_add(json_nexthop_global, "scope", - "global"); - } else { -- vty_out(vty, " %s", -- nexthop_hostname -- ? nexthop_hostname -- : inet_ntop(AF_INET6, -- &attr->mp_nexthop_global, -- buf, INET6_ADDRSTRLEN)); -+ if (nexthop_hostname) -+ vty_out(vty, " %pI6(%s)", -+ &attr->mp_nexthop_global, -+ nexthop_hostname); -+ else -+ vty_out(vty, " %pI6", -+ &attr->mp_nexthop_global); - } - } - -diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c -index 78521457fd..7f00ff3fbe 100644 ---- a/bgpd/bgp_vty.c -+++ b/bgpd/bgp_vty.c -@@ -84,6 +84,10 @@ FRR_CFG_DEFAULT_BOOL(BGP_SHOW_HOSTNAME, - { .val_bool = true, .match_profile = "datacenter", }, - { .val_bool = false }, - ) -+FRR_CFG_DEFAULT_BOOL(BGP_SHOW_NEXTHOP_HOSTNAME, -+ { .val_bool = true, .match_profile = "datacenter", }, -+ { .val_bool = false }, -+) - FRR_CFG_DEFAULT_BOOL(BGP_LOG_NEIGHBOR_CHANGES, - { .val_bool = true, .match_profile = "datacenter", }, - { .val_bool = false }, -@@ -422,6 +426,8 @@ int bgp_get_vty(struct bgp **bgp, as_t *as, const char *name, - SET_FLAG((*bgp)->flags, BGP_FLAG_IMPORT_CHECK); - if (DFLT_BGP_SHOW_HOSTNAME) - SET_FLAG((*bgp)->flags, BGP_FLAG_SHOW_HOSTNAME); -+ if (DFLT_BGP_SHOW_NEXTHOP_HOSTNAME) -+ SET_FLAG((*bgp)->flags, BGP_FLAG_SHOW_NEXTHOP_HOSTNAME); - if (DFLT_BGP_LOG_NEIGHBOR_CHANGES) - SET_FLAG((*bgp)->flags, BGP_FLAG_LOG_NEIGHBOR_CHANGES); - if (DFLT_BGP_DETERMINISTIC_MED) -@@ -3100,6 +3106,32 @@ DEFUN (no_bgp_default_show_hostname, - return CMD_SUCCESS; - } - -+/* Display hostname in certain command outputs */ -+DEFUN (bgp_default_show_nexthop_hostname, -+ bgp_default_show_nexthop_hostname_cmd, -+ "bgp default show-nexthop-hostname", -+ "BGP specific commands\n" -+ "Configure BGP defaults\n" -+ "Show hostname for nexthop in certain command outputs\n") -+{ -+ VTY_DECLVAR_CONTEXT(bgp, bgp); -+ SET_FLAG(bgp->flags, BGP_FLAG_SHOW_NEXTHOP_HOSTNAME); -+ return CMD_SUCCESS; -+} -+ -+DEFUN (no_bgp_default_show_nexthop_hostname, -+ no_bgp_default_show_nexthop_hostname_cmd, -+ "no bgp default show-nexthop-hostname", -+ NO_STR -+ "BGP specific commands\n" -+ "Configure BGP defaults\n" -+ "Show hostname for nexthop in certain command outputs\n") -+{ -+ VTY_DECLVAR_CONTEXT(bgp, bgp); -+ UNSET_FLAG(bgp->flags, BGP_FLAG_SHOW_NEXTHOP_HOSTNAME); -+ return CMD_SUCCESS; -+} -+ - /* "bgp network import-check" configuration. */ - DEFUN (bgp_network_import_check, - bgp_network_import_check_cmd, -@@ -15190,6 +15222,15 @@ int bgp_config_write(struct vty *vty) - ? "" - : "no "); - -+ /* BGP default show-nexthop-hostname */ -+ if (!!CHECK_FLAG(bgp->flags, BGP_FLAG_SHOW_NEXTHOP_HOSTNAME) -+ != SAVE_BGP_SHOW_HOSTNAME) -+ vty_out(vty, " %sbgp default show-nexthop-hostname\n", -+ CHECK_FLAG(bgp->flags, -+ BGP_FLAG_SHOW_NEXTHOP_HOSTNAME) -+ ? "" -+ : "no "); -+ - /* BGP default subgroup-pkt-queue-max. */ - if (bgp->default_subgroup_pkt_queue_max - != BGP_DEFAULT_SUBGROUP_PKT_QUEUE_MAX) -@@ -15815,6 +15856,10 @@ void bgp_vty_init(void) - install_element(BGP_NODE, &bgp_default_show_hostname_cmd); - install_element(BGP_NODE, &no_bgp_default_show_hostname_cmd); - -+ /* bgp default show-nexthop-hostname */ -+ install_element(BGP_NODE, &bgp_default_show_nexthop_hostname_cmd); -+ install_element(BGP_NODE, &no_bgp_default_show_nexthop_hostname_cmd); -+ - /* "bgp default subgroup-pkt-queue-max" commands. */ - install_element(BGP_NODE, &bgp_default_subgroup_pkt_queue_max_cmd); - install_element(BGP_NODE, &no_bgp_default_subgroup_pkt_queue_max_cmd); -diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h -index 4a5772a53b..4efc068dea 100644 ---- a/bgpd/bgpd.h -+++ b/bgpd/bgpd.h -@@ -447,6 +447,7 @@ struct bgp { - #define BGP_FLAG_SELECT_DEFER_DISABLE (1 << 23) - #define BGP_FLAG_GR_DISABLE_EOR (1 << 24) - #define BGP_FLAG_EBGP_REQUIRES_POLICY (1 << 25) -+#define BGP_FLAG_SHOW_NEXTHOP_HOSTNAME (1 << 26) - - enum global_mode GLOBAL_GR_FSM[BGP_GLOBAL_GR_MODE] - [BGP_GLOBAL_GR_EVENT_CMD]; - -From 104dfe5258cbeb0443fa4d6577794a1e5a5dafd3 Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Wed, 6 May 2020 17:50:04 +0300 -Subject: [PATCH 3/4] bgpd: Add "hostname" in JSON output for `show bgp` family - outputs - -This adds hostname regardless if `bgp default show-hostname` enabled or not. - -Signed-off-by: Donatas Abraitis ---- - bgpd/bgp_route.c | 40 ++++++++++++++++++++-------------------- - 1 file changed, 20 insertions(+), 20 deletions(-) - -diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c -index f033f525e5..5f645fa871 100644 ---- a/bgpd/bgp_route.c -+++ b/bgpd/bgp_route.c -@@ -7671,10 +7671,10 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - json_object_string_add(json_nexthop_global, "ip", - nexthop); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add(json_nexthop_global, - "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_string_add(json_nexthop_global, "afi", - (af == AF_INET) ? "ipv4" -@@ -7701,10 +7701,10 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - json_object_string_add(json_nexthop_global, "ip", - inet_ntoa(attr->nexthop)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add(json_nexthop_global, - "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_string_add(json_nexthop_global, "afi", - "ipv4"); -@@ -7735,10 +7735,10 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - json_nexthop_global, "ip", - inet_ntoa(attr->nexthop)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add( - json_nexthop_global, "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_boolean_true_add( - json_nexthop_global, -@@ -7768,10 +7768,10 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - json_object_string_add(json_nexthop_global, "ip", - inet_ntoa(attr->nexthop)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add(json_nexthop_global, - "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_string_add(json_nexthop_global, "afi", - "ipv4"); -@@ -7804,10 +7804,10 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - inet_ntop(AF_INET6, &attr->mp_nexthop_global, - buf, BUFSIZ)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add(json_nexthop_global, - "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_string_add(json_nexthop_global, "afi", - "ipv6"); -@@ -7826,10 +7826,10 @@ void route_vty_out(struct vty *vty, const struct prefix *p, - &attr->mp_nexthop_local, buf, - BUFSIZ)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add( - json_nexthop_ll, "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_string_add(json_nexthop_ll, "afi", - "ipv6"); -@@ -8856,10 +8856,10 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, - json_nexthop_global, "ip", - inet_ntoa(attr->mp_nexthop_global_in)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add( - json_nexthop_global, "hostname", -- nexthop_hostname); -+ path->peer->hostname); - } else { - if (nexthop_hostname) - vty_out(vty, " %pI4(%s)", -@@ -8875,10 +8875,10 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, - json_nexthop_global, "ip", - inet_ntoa(attr->nexthop)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add( - json_nexthop_global, "hostname", -- nexthop_hostname); -+ path->peer->hostname); - } else { - if (nexthop_hostname) - vty_out(vty, " %pI4(%s)", -@@ -8900,10 +8900,10 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, - inet_ntop(AF_INET6, &attr->mp_nexthop_global, - buf, INET6_ADDRSTRLEN)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add(json_nexthop_global, - "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_string_add(json_nexthop_global, "afi", - "ipv6"); -@@ -9094,10 +9094,10 @@ void route_vty_out_detail(struct vty *vty, struct bgp *bgp, - inet_ntop(AF_INET6, &attr->mp_nexthop_local, - buf, INET6_ADDRSTRLEN)); - -- if (nexthop_hostname) -+ if (path->peer->hostname) - json_object_string_add(json_nexthop_ll, - "hostname", -- nexthop_hostname); -+ path->peer->hostname); - - json_object_string_add(json_nexthop_ll, "afi", "ipv6"); - json_object_string_add(json_nexthop_ll, "scope", - -From 8df39282ea64e2a65a7910012627f78d080833b1 Mon Sep 17 00:00:00 2001 -From: Donatas Abraitis -Date: Wed, 24 Jun 2020 17:26:27 +0300 -Subject: [PATCH 4/4] doc: Add some words about `bgp default - show-[nexthop]-hostname` - -Signed-off-by: Donatas Abraitis ---- - doc/user/bgp.rst | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/doc/user/bgp.rst b/doc/user/bgp.rst -index 36227db604..a6c29724b0 100644 ---- a/doc/user/bgp.rst -+++ b/doc/user/bgp.rst -@@ -1366,6 +1366,19 @@ Configuring Peers - on by default or not. This command defaults to on and is not displayed. - The `no bgp default ipv4-unicast` form of the command is displayed. - -+.. index:: [no] bgp default show-hostname -+.. clicmd:: [no] bgp default show-hostname -+ -+ This command shows the hostname of the peer in certain BGP commands -+ outputs. It's easier to troubleshoot if you have a number of BGP peers. -+ -+.. index:: [no] bgp default show-nexthop-hostname -+.. clicmd:: [no] bgp default show-nexthop-hostname -+ -+ This command shows the hostname of the next-hop in certain BGP commands -+ outputs. It's easier to troubleshoot if you have a number of BGP peers -+ and a number of routes to check. -+ - .. index:: [no] neighbor PEER advertisement-interval (0-600) - .. clicmd:: [no] neighbor PEER advertisement-interval (0-600) - diff --git a/net/frr/patches/007-bgpd_Fix_the_bug_BGP_MRAI.patch b/net/frr/patches/007-bgpd_Fix_the_bug_BGP_MRAI.patch deleted file mode 100644 index a58f26ce5..000000000 --- a/net/frr/patches/007-bgpd_Fix_the_bug_BGP_MRAI.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 2bbe7133eb5cb97ba4b745cd251a8615cd2bd008 Mon Sep 17 00:00:00 2001 -From: Richard Wu -Date: Fri, 5 Jun 2020 17:54:57 +0800 -Subject: [PATCH] bgpd: Fix the bug that BGP MRAI does not work. - -Issue: bgp_process_writes will be called when the fd is writable. - And it will bgp_generate_updgrp_packets to generate the - update packets no matter MRAI is set or not. -Fix: bgp_generate_updgrp_packets thread will return without sending - any update when MRAI timer is still running. - -Signed-off-by: Richard Wu ---- - bgpd/bgp_packet.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c -index 29c03f4014..6f1c033f2a 100644 ---- a/bgpd/bgp_packet.c -+++ b/bgpd/bgp_packet.c -@@ -408,6 +408,9 @@ int bgp_generate_updgrp_packets(struct thread *thread) - if (peer->bgp->main_peers_update_hold) - return 0; - -+ if (peer->t_routeadv) -+ return 0; -+ - do { - s = NULL; - FOREACH_AFI_SAFI (afi, safi) { diff --git a/net/frr/patches/099-redefine_ethhdr.patch b/net/frr/patches/099-redefine_ethhdr.patch deleted file mode 100644 index 361ab8757..000000000 --- a/net/frr/patches/099-redefine_ethhdr.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/lib/prefix.h 2017-12-03 22:02:41.642317377 +0200 -+++ b/lib/prefix.h 2017-12-03 22:03:30.011320262 +0200 -@@ -24,12 +24,12 @@ - - #ifdef SUNOS_5 - #include --#else -+/*#else - #ifdef GNU_LINUX - #include - #else - #include --#endif -+#endif*/ - #endif - #include "sockunion.h" - #include "ipaddr.h"