summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2022-05-05 22:28:56 +0300
committerGitHub <noreply@github.com>2022-05-05 22:28:56 +0300
commit00b0b7484735d7ffbd8897613cfb96e1ba02f67b (patch)
treee36f45ecf67f190307e3c745210fd31a036b48e2
parent50f1f2e724f8614ada1a1a02dd28f1ff3af06e08 (diff)
parent28168b1bf6f13a6ffe19934299518c07d8557770 (diff)
Merge pull request #11145 from donaldsharp/bgp_capability
Bgp capability
-rw-r--r--bgpd/bgp_vty.c19
-rw-r--r--bgpd/bgpd.c6
2 files changed, 22 insertions, 3 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 0cbb341ff3..65a053990e 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -5273,6 +5273,12 @@ DEFUN (neighbor_capability_enhe,
"Advertise extended next-hop capability to the peer\n")
{
int idx_peer = 1;
+ struct peer *peer;
+
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (peer && peer->conf_if)
+ return CMD_SUCCESS;
+
return peer_flag_set_vty(vty, argv[idx_peer]->arg,
PEER_FLAG_CAPABILITY_ENHE);
}
@@ -5287,6 +5293,16 @@ DEFUN (no_neighbor_capability_enhe,
"Advertise extended next-hop capability to the peer\n")
{
int idx_peer = 2;
+ struct peer *peer;
+
+ peer = peer_and_group_lookup_vty(vty, argv[idx_peer]->arg);
+ if (peer && peer->conf_if) {
+ vty_out(vty,
+ "Peer %s cannot have capability extended-nexthop turned off\n",
+ argv[idx_peer]->arg);
+ return CMD_WARNING_CONFIG_FAILED;
+ }
+
return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
PEER_FLAG_CAPABILITY_ENHE);
}
@@ -16614,7 +16630,8 @@ static void bgp_config_write_peer_global(struct vty *vty, struct bgp *bgp,
/* capability extended-nexthop */
if (peergroup_flag_check(peer, PEER_FLAG_CAPABILITY_ENHE)) {
- if (CHECK_FLAG(peer->flags_invert, PEER_FLAG_CAPABILITY_ENHE))
+ if (CHECK_FLAG(peer->flags_invert, PEER_FLAG_CAPABILITY_ENHE) &&
+ !peer->conf_if)
vty_out(vty,
" no neighbor %s capability extended-nexthop\n",
addr);
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index 8514edec0f..33ed7d1d94 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -4487,7 +4487,9 @@ static int peer_flag_modify(struct peer *peer, uint32_t flag, int set)
if (set) {
bgp_zebra_initiate_radv(peer->bgp, peer);
} else if (peer_group_active(peer)) {
- if (!CHECK_FLAG(peer->group->conf->flags, flag))
+ if (!CHECK_FLAG(peer->group->conf->flags,
+ flag) &&
+ !peer->conf_if)
bgp_zebra_terminate_radv(peer->bgp,
peer);
} else
@@ -4525,7 +4527,7 @@ static int peer_flag_modify(struct peer *peer, uint32_t flag, int set)
/* Update flag on peer-group member. */
COND_FLAG(member->flags, flag, set != member_invert);
- if (flag == PEER_FLAG_CAPABILITY_ENHE)
+ if (flag == PEER_FLAG_CAPABILITY_ENHE && !member->conf_if)
set ? bgp_zebra_initiate_radv(member->bgp, member)
: bgp_zebra_terminate_radv(member->bgp, member);