mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 10:04:18 +00:00
Merge pull request #17913 from Sokolmish/bgp-sid-release
bgpd: Release SID on router deletion
This commit is contained in:
commit
0768c620e0
22
bgpd/bgpd.c
22
bgpd/bgpd.c
@ -3988,6 +3988,7 @@ int bgp_delete(struct bgp *bgp)
|
|||||||
uint32_t a_ann_cnt = 0, a_l2_cnt = 0, a_l3_cnt = 0;
|
uint32_t a_ann_cnt = 0, a_l2_cnt = 0, a_l3_cnt = 0;
|
||||||
struct bgp *bgp_to_proc = NULL;
|
struct bgp *bgp_to_proc = NULL;
|
||||||
struct bgp *bgp_to_proc_next = NULL;
|
struct bgp *bgp_to_proc_next = NULL;
|
||||||
|
struct bgp *bgp_default = bgp_get_default();
|
||||||
|
|
||||||
assert(bgp);
|
assert(bgp);
|
||||||
|
|
||||||
@ -4041,13 +4042,26 @@ int bgp_delete(struct bgp *bgp)
|
|||||||
bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL);
|
bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL);
|
||||||
|
|
||||||
/* make sure we withdraw any exported routes */
|
/* make sure we withdraw any exported routes */
|
||||||
vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP, bgp_get_default(),
|
vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP, bgp_default, bgp);
|
||||||
bgp);
|
vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP6, bgp_default, bgp);
|
||||||
vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP6, bgp_get_default(),
|
|
||||||
bgp);
|
|
||||||
|
|
||||||
bgp_vpn_leak_unimport(bgp);
|
bgp_vpn_leak_unimport(bgp);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Release SRv6 SIDs, like it's done in `vpn_leak_postchange()`
|
||||||
|
* and bgp_sid_vpn_export_cmd/af_sid_vpn_export_cmd commands.
|
||||||
|
*/
|
||||||
|
bgp->tovpn_sid_index = 0;
|
||||||
|
UNSET_FLAG(bgp->vrf_flags, BGP_VRF_TOVPN_SID_AUTO);
|
||||||
|
delete_vrf_tovpn_sid_per_vrf(bgp_default, bgp);
|
||||||
|
for (afi = AFI_IP; afi < AFI_MAX; afi++) {
|
||||||
|
bgp->vpn_policy[afi].tovpn_sid_index = 0;
|
||||||
|
UNSET_FLAG(bgp->vpn_policy[afi].flags, BGP_VPN_POLICY_TOVPN_SID_AUTO);
|
||||||
|
delete_vrf_tovpn_sid_per_af(bgp_default, bgp, afi);
|
||||||
|
|
||||||
|
vpn_leak_zebra_vrf_sid_withdraw(bgp, afi);
|
||||||
|
}
|
||||||
|
|
||||||
bgp_vpn_release_label(bgp, AFI_IP, true);
|
bgp_vpn_release_label(bgp, AFI_IP, true);
|
||||||
bgp_vpn_release_label(bgp, AFI_IP6, true);
|
bgp_vpn_release_label(bgp, AFI_IP6, true);
|
||||||
|
|
||||||
|
@ -159,6 +159,36 @@ def test_sid_reachable_again_bgp_update():
|
|||||||
check_ping("c11", "192.168.2.1", True, 10, 1)
|
check_ping("c11", "192.168.2.1", True, 10, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_sid_unreachable_no_router():
|
||||||
|
get_topogen().gears["r2"].vtysh_cmd(
|
||||||
|
"""
|
||||||
|
configure terminal
|
||||||
|
no router bgp 65002 vrf vrf10
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
check_ping("c11", "192.168.2.1", False, 10, 1)
|
||||||
|
|
||||||
|
|
||||||
|
def test_sid_reachable_again_no_router():
|
||||||
|
get_topogen().gears["r2"].vtysh_cmd(
|
||||||
|
"""
|
||||||
|
configure terminal
|
||||||
|
router bgp 65002 vrf vrf10
|
||||||
|
bgp router-id 192.0.2.2
|
||||||
|
!
|
||||||
|
address-family ipv4 unicast
|
||||||
|
redistribute connected
|
||||||
|
sid vpn export 1
|
||||||
|
rd vpn export 65002:10
|
||||||
|
rt vpn both 0:10
|
||||||
|
import vpn
|
||||||
|
export vpn
|
||||||
|
exit-address-family
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
check_ping("c11", "192.168.2.1", True, 10, 1)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
args = ["-s"] + sys.argv[1:]
|
args = ["-s"] + sys.argv[1:]
|
||||||
sys.exit(pytest.main(args))
|
sys.exit(pytest.main(args))
|
||||||
|
Loading…
Reference in New Issue
Block a user