]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Release SID on router deletion
authorMikhail Sokolovskiy <sokolmish@gmail.com>
Wed, 29 Jan 2025 22:54:31 +0000 (01:54 +0300)
committerMikhail Sokolovskiy <sokolmish@gmail.com>
Wed, 29 Jan 2025 22:54:31 +0000 (01:54 +0300)
Signed-off-by: Mikhail Sokolovskiy <sokolmish@gmail.com>
bgpd/bgpd.c

index d5463f3d0ced2d32aa10f2e425ff863dbcf79abc..33c5e2f89d21a064e1ef9a66c13271d221e13a59 100644 (file)
@@ -3985,6 +3985,7 @@ int bgp_delete(struct bgp *bgp)
        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_next = NULL;
+       struct bgp *bgp_default = bgp_get_default();
 
        assert(bgp);
 
@@ -4038,13 +4039,26 @@ int bgp_delete(struct bgp *bgp)
        bgp_soft_reconfig_table_task_cancel(bgp, NULL, NULL);
 
        /* make sure we withdraw any exported routes */
-       vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP, bgp_get_default(),
-                          bgp);
-       vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP6, bgp_get_default(),
-                          bgp);
+       vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP, bgp_default, bgp);
+       vpn_leak_prechange(BGP_VPN_POLICY_DIR_TOVPN, AFI_IP6, bgp_default, 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_IP6, true);