]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Assign explicit-null for default-originate according to the AFI
authorDonatas Abraitis <donatas@opensourcerouting.org>
Fri, 11 Aug 2023 07:49:14 +0000 (10:49 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Fri, 11 Aug 2023 07:52:40 +0000 (10:52 +0300)
RFC 3032 defines:

A value of 2 represents the "IPv6 Explicit NULL Label".
This label value is only legal at the bottom of the label
stack.  It indicates that the label stack must be popped,
and the forwarding of the packet must then be based on the
IPv6 header.

Before this patch we set 128, but it was even more wrong, because it was sent
in host-byte order, not the network-byte.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_updgrp_packet.c

index 49b7f51286d417c0344eb30c3718516f24a10626..7502bf2ec6dcf05ab7979e12793601df5b9d4365 100644 (file)
@@ -1080,8 +1080,7 @@ void subgroup_default_update_packet(struct update_subgroup *subgrp,
        safi_t safi;
        struct bpacket_attr_vec_arr vecarr;
        bool addpath_capable = false;
-       uint8_t default_originate_label[4] = {0x80, 0x00, 0x00};
-       mpls_label_t *label = NULL;
+       mpls_label_t label = MPLS_LABEL_IMPLICIT_NULL;
        uint32_t num_labels = 0;
 
        if (DISABLE_BGP_ANNOUNCE)
@@ -1097,7 +1096,11 @@ void subgroup_default_update_packet(struct update_subgroup *subgrp,
        addpath_capable = bgp_addpath_encode_tx(peer, afi, safi);
 
        if (safi == SAFI_LABELED_UNICAST) {
-               label = (mpls_label_t *)default_originate_label;
+               label = mpls_lse_encode((afi == AFI_IP)
+                                               ? MPLS_LABEL_IPV4_EXPLICIT_NULL
+                                               : MPLS_LABEL_IPV6_EXPLICIT_NULL,
+                                       0, 0, 1);
+               bgp_set_valid_label(&label);
                num_labels = 1;
        }
 
@@ -1142,10 +1145,12 @@ void subgroup_default_update_packet(struct update_subgroup *subgrp,
        /* Make place for total attribute length.  */
        pos = stream_get_endp(s);
        stream_putw(s, 0);
-       total_attr_len = bgp_packet_attribute(
-               NULL, peer, s, attr, &vecarr, &p, afi, safi, from, NULL, label,
-               num_labels, addpath_capable,
-               BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE, NULL);
+       total_attr_len =
+               bgp_packet_attribute(NULL, peer, s, attr, &vecarr, &p, afi,
+                                    safi, from, NULL, &label, num_labels,
+                                    addpath_capable,
+                                    BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE,
+                                    NULL);
 
        /* Set Total Path Attribute Length. */
        stream_putw_at(s, pos, total_attr_len);