frr: update to 7.5
switch to codeload for latest patches applied to stable branch Signed-off-by: Lucian Cristian <lucian.cristian@gmail.com>
This commit is contained in:
parent
bdd26d8f26
commit
faac979564
11 changed files with 12 additions and 1537 deletions
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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);
|
|
@ -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]
|
||||
|
|
@ -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");
|
||||
}
|
|
@ -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) {
|
|
@ -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)
|
||||
|
|
@ -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) {
|
|
@ -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"
|
Loading…
Reference in a new issue