Skip to content

Commit

Permalink
bgpd: release manual vpn label on instance deletion
Browse files Browse the repository at this point in the history
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: d162d5f ("bgpd: fix hardset l3vpn label available in mpls pool")
Signed-off-by: Louis Scalbert <[email protected]>
(cherry picked from commit d636362)

# Conflicts:
#	bgpd/bgpd.c
  • Loading branch information
louis-6wind authored and mergify[bot] committed Feb 13, 2025
1 parent 3b97f50 commit dfadee9
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions bgpd/bgpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -4046,6 +4046,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)
Expand Down

0 comments on commit dfadee9

Please sign in to comment.