diff options
| author | Louis Scalbert <louis.scalbert@6wind.com> | 2025-02-12 13:49:50 +0100 |
|---|---|---|
| committer | Mergify <37929162+mergify[bot]@users.noreply.github.com> | 2025-02-13 19:10:17 +0000 |
| commit | c7047bee5d8f7b02f952f05af9293cc97278f0fe (patch) | |
| tree | 1754cd0a079e7e13e23b23c3c97dbec2386f1568 | |
| parent | ca307611fcee181f476f761eaef94c9a13262737 (diff) | |
bgpd: release manual vpn label on instance deletion
When a BGP instance with a manually assigned VPN label is deleted, the
label is not released from the Zebra label registry. As a result,
reapplying a configuration with the same manual label leads to VPN
prefix export failures.
For example, with the following configuration:
> router bgp 65000 vrf BLUE
> address-family ipv4 unicast
> label vpn export <int>
Release zebra label registry on unconfiguration.
Fixes: d162d5f6f5 ("bgpd: fix hardset l3vpn label available in mpls pool")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
(cherry picked from commit d6363625c35a99933bf60c9cf0b79627b468c9f7)
# Conflicts:
# bgpd/bgpd.c
| -rw-r--r-- | bgpd/bgpd.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index d854367163..db4fab2421 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -3891,6 +3891,37 @@ int bgp_delete(struct bgp *bgp) bgp_vpn_leak_unimport(bgp); +<<<<<<< HEAD +======= + /* + * 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); + } + + /* release auto vpn labels */ + bgp_vpn_release_label(bgp, AFI_IP, true); + bgp_vpn_release_label(bgp, AFI_IP6, true); + + /* release manual vpn labels */ + for (afi = AFI_IP; afi < AFI_MAX; afi++) { + if (!CHECK_FLAG(bgp->vpn_policy[afi].flags, BGP_VPN_POLICY_TOVPN_LABEL_MANUAL_REG)) + continue; + bgp_zebra_release_label_range(bgp->vpn_policy[afi].tovpn_label, + bgp->vpn_policy[afi].tovpn_label); + UNSET_FLAG(bgp->vpn_policy[afi].flags, BGP_VPN_POLICY_TOVPN_LABEL_MANUAL_REG); + } + +>>>>>>> d6363625c (bgpd: release manual vpn label on instance deletion) hook_call(bgp_inst_delete, bgp); FOREACH_AFI_SAFI (afi, safi) |
