Merge pull request #11145 from donaldsharp/bgp_capability

Bgp capability
This commit is contained in:
Donatas Abraitis 2022-05-05 22:28:56 +03:00 committed by GitHub
commit 00b0b74847
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 3 deletions

View File

@ -5273,6 +5273,12 @@ DEFUN (neighbor_capability_enhe,
"Advertise extended next-hop capability to the peer\n") "Advertise extended next-hop capability to the peer\n")
{ {
int idx_peer = 1; 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, return peer_flag_set_vty(vty, argv[idx_peer]->arg,
PEER_FLAG_CAPABILITY_ENHE); PEER_FLAG_CAPABILITY_ENHE);
} }
@ -5287,6 +5293,16 @@ DEFUN (no_neighbor_capability_enhe,
"Advertise extended next-hop capability to the peer\n") "Advertise extended next-hop capability to the peer\n")
{ {
int idx_peer = 2; 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, return peer_flag_unset_vty(vty, argv[idx_peer]->arg,
PEER_FLAG_CAPABILITY_ENHE); PEER_FLAG_CAPABILITY_ENHE);
} }
@ -16614,7 +16630,8 @@ static void bgp_config_write_peer_global(struct vty *vty, struct bgp *bgp,
/* capability extended-nexthop */ /* capability extended-nexthop */
if (peergroup_flag_check(peer, PEER_FLAG_CAPABILITY_ENHE)) { 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, vty_out(vty,
" no neighbor %s capability extended-nexthop\n", " no neighbor %s capability extended-nexthop\n",
addr); addr);

View File

@ -4487,7 +4487,9 @@ static int peer_flag_modify(struct peer *peer, uint32_t flag, int set)
if (set) { if (set) {
bgp_zebra_initiate_radv(peer->bgp, peer); bgp_zebra_initiate_radv(peer->bgp, peer);
} else if (peer_group_active(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, bgp_zebra_terminate_radv(peer->bgp,
peer); peer);
} else } else
@ -4525,7 +4527,7 @@ static int peer_flag_modify(struct peer *peer, uint32_t flag, int set)
/* Update flag on peer-group member. */ /* Update flag on peer-group member. */
COND_FLAG(member->flags, flag, set != member_invert); 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) set ? bgp_zebra_initiate_radv(member->bgp, member)
: bgp_zebra_terminate_radv(member->bgp, member); : bgp_zebra_terminate_radv(member->bgp, member);