diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-01-09 08:48:37 -0500 | 
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2019-01-10 07:57:30 -0500 | 
| commit | 727cf7c933c438733b1540a3adc5e71ec421577c (patch) | |
| tree | 1063302e05c54b5aebc922c50d86f6ce76f96e85 /bgpd | |
| parent | 8de312fd4ea87ac344162234c13abc68b8b20cd9 (diff) | |
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 <sharpd@cumulusnetworks.com>
Diffstat (limited to 'bgpd')
| -rw-r--r-- | bgpd/bgp_mplsvpn.c | 5 | 
1 files changed, 5 insertions, 0 deletions
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;  }  | 
