frr: update to 7.5 14134/head
authorLucian Cristian <lucian.cristian@gmail.com>
Fri, 4 Dec 2020 11:49:57 +0000 (13:49 +0200)
committerLucian Cristian <lucian.cristian@gmail.com>
Fri, 4 Dec 2020 12:09:37 +0000 (14:09 +0200)
switch to codeload for latest patches applied to stable branch

Signed-off-by: Lucian Cristian <lucian.cristian@gmail.com>
net/frr/Makefile
net/frr/files/daemons
net/frr/patches/000-bgpd_Actually_find_the_sequence_number.patch [deleted file]
net/frr/patches/001-bgpd_Some_backports.patch [deleted file]
net/frr/patches/002-lib_fix_route_map_description_memory_leak.patch [deleted file]
net/frr/patches/003-bgpd_Add_command_to_show_only_established_sessions.patch [deleted file]
net/frr/patches/004-Add_BFD_peer_awareness_to_frr-reload.patch [deleted file]
net/frr/patches/005-vtysh_fixes.patch [deleted file]
net/frr/patches/006-bgpd_how_the_real_next_hop_address.patch [deleted file]
net/frr/patches/007-bgpd_Fix_the_bug_BGP_MRAI.patch [deleted file]
net/frr/patches/099-redefine_ethhdr.patch [deleted file]

index 68e5171a043ad7902eda4b5bdcda20b889f1a6e3..58ef491325ab4a333f524e01824bdde1d7a4879f 100644 (file)
@@ -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 <lucian.cristian@gmail.com>
 
-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 \
index c3a2064f26ac9210b98281ecbec55c47a4d1c087..ac39e25b5a62ea3c08c79f10d46abf28da2731ac 100644 (file)
@@ -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 (file)
index ac3a7b4..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-From 34f6d0c67a48e2117c061f6ccdcf1f512982fe8f Mon Sep 17 00:00:00 2001
-From: Donald Sharp <sharpd@cumulusnetworks.com>
-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 <sharpd@cumulusnetworks.com>
----
- 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 (file)
index b67593a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-From acf6f22d150b0050afbdaf5887b8e25d1614db4c Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- 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 <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- 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 (file)
index abdfe34..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-From cc45875e0d2af0b53100ec78364dc51b39a12ac9 Mon Sep 17 00:00:00 2001
-From: Rafael Zalamena <rzalamena@opensourcerouting.org>
-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 <rzalamena@opensourcerouting.org>
-(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 (file)
index c2b1214..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-From 2939f712d152f7e3ae438cc0f1d96dd9485e7487 Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- 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 [<view|vrf> VIEWVRFNAME] ["BGP_AFI_CMD_STR" ["BGP_SAFI_WITH_LABEL_CMD_STR"]] summary [failed] [json]",
-+       "show [ip] bgp [<view|vrf> 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 <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- 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 (file)
index a8a612b..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-From 692ce87393de9497a7821e9e0856ff70a7973ff6 Mon Sep 17 00:00:00 2001
-From: Paul Manley <paul.manley@wholefoods.com>
-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 <paul.manley@wholefoods.com>
-(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 <paul.manley@wholefoods.com>
-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 <paul.manley@wholefoods.com>
-(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 (file)
index 83983a0..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-From cc5934ed5939315ba5d95bfaf052625762107205 Mon Sep 17 00:00:00 2001
-From: Donald Sharp <sharpd@cumulusnetworks.com>
-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 <sharpd@cumulusnetworks.com>
----
- 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 <sharpd@cumulusnetworks.com>
-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 <sharpd@cumulusnetworks.com>
----
- 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 (file)
index b819d69..0000000
+++ /dev/null
@@ -1,835 +0,0 @@
-From c6a5994609deec62c8aefa1fa15c517e32575ca3 Mon Sep 17 00:00:00 2001
-From: Donatas Abraitis <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- .../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 <donatas.abraitis@gmail.com>
--#
--# 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 <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- 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 <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- 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 <donatas.abraitis@gmail.com>
-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 <donatas.abraitis@gmail.com>
----
- 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 (file)
index a58f26c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-From 2bbe7133eb5cb97ba4b745cd251a8615cd2bd008 Mon Sep 17 00:00:00 2001
-From: Richard Wu <wutong23@baidu.com>
-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 <wutong23@baidu.com>
----
- 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 (file)
index 361ab87..0000000
+++ /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 <sys/ethernet.h>
--#else
-+/*#else
- #ifdef GNU_LINUX
- #include <net/ethernet.h>
- #else
- #include <netinet/if_ether.h>
--#endif
-+#endif*/
- #endif
- #include "sockunion.h"
- #include "ipaddr.h"