From 3f518d59f0099ab17f474ed448aa377507acce65 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 9 Jan 2019 08:48:37 -0500 Subject: [PATCH] bgpd: Do not send a label to zebra that it doesn't understand When using an `import vrf` mechanism we are marking the vrf label as BGP_PREVENT_VRF_2_VRF_LEAK, and then sending this down to zebra. Since zebra knows nothing about this special value, convert it to a value that it does know MPLS_LABEL_NONE. This bug was introduced by: 13b7e7f007833c4e2942f40cbd2c2f93a2767e78 And shows up with this error message in the zebra log: 2019/01/09 08:25:16 ZEBRA: Extended Error: Label >= configured maximum in platform_labels 2019/01/09 08:25:16 ZEBRA: [EC 4043309093] netlink-cmd (NS 0) error: Invalid argument, type=RTM_NEWROUTE(24), seq=8, pid=3321825991 2019/01/09 08:25:16 ZEBRA: [EC 4043309103] LSP Install Failure: 4294967294 And zebra kept the label as: donna.cumulusnetworks.com# show mpls table Inbound Outbound Label Type Nexthop Label -------- ------- --------------- -------- -2 BGP GREEN -2 BGP BLUE After this fix, neither the labels are stored in zebra nor do we see the log error message. Signed-off-by: Donald Sharp --- bgpd/bgp_mplsvpn.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c index cf91faf964..d0ccdcedfb 100644 --- a/bgpd/bgp_mplsvpn.c +++ b/bgpd/bgp_mplsvpn.c @@ -289,6 +289,8 @@ void vpn_leak_zebra_vrf_label_update(struct bgp *bgp, afi_t afi) bgp->vrf_id); } + if (label == BGP_PREVENT_VRF_2_VRF_LEAK) + label = MPLS_LABEL_NONE; zclient_send_vrf_label(zclient, bgp->vrf_id, afi, label, ZEBRA_LSP_BGP); bgp->vpn_policy[afi].tovpn_zebra_vrf_label_last_sent = label; } @@ -316,6 +318,9 @@ void vpn_leak_zebra_vrf_label_withdraw(struct bgp *bgp, afi_t afi) bgp->name_pretty, bgp->vrf_id); } + if (label == BGP_PREVENT_VRF_2_VRF_LEAK) + label = MPLS_LABEL_NONE; + zclient_send_vrf_label(zclient, bgp->vrf_id, afi, label, ZEBRA_LSP_BGP); bgp->vpn_policy[afi].tovpn_zebra_vrf_label_last_sent = label; } -- 2.39.5