summaryrefslogtreecommitdiff
path: root/bgpd/bgp_attr.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_attr.c')
-rw-r--r--bgpd/bgp_attr.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c
index d349922c52..e5dc558fcf 100644
--- a/bgpd/bgp_attr.c
+++ b/bgpd/bgp_attr.c
@@ -5023,7 +5023,13 @@ void bgp_packet_mpunreach_prefix(struct stream *s, const struct prefix *p,
{
uint8_t wlabel[4] = {0x80, 0x00, 0x00};
- if (safi == SAFI_LABELED_UNICAST) {
+ /* [RFC3107] also made it possible to withdraw a binding without
+ * specifying the label explicitly, by setting the Compatibility field
+ * to 0x800000. However, some implementations set it to 0x000000. In
+ * order to ensure backwards compatibility, it is RECOMMENDED by this
+ * document that the Compatibility field be set to 0x800000.
+ */
+ if (safi == SAFI_LABELED_UNICAST || safi == SAFI_MPLS_VPN) {
label = (mpls_label_t *)wlabel;
num_labels = 1;
}