]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Avoid padding for bgp_paths_limit_capability struct 15533/head
authorDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 14 Mar 2024 07:45:18 +0000 (09:45 +0200)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Thu, 14 Mar 2024 07:50:49 +0000 (09:50 +0200)
When sending the packets over the network (dynamic capability) it reports 6 bytes
instead of 5 bytes, and causes some issues between little/big endian machines.

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

index b19e63c946acd43a9342aa882f4bd5f8dec6b2f5..c267ebe43ecec110f5ae1cee69d5f2dcbec19c3d 100644 (file)
@@ -25,7 +25,7 @@ struct bgp_paths_limit_capability {
        uint16_t afi;
        uint8_t safi;
        uint16_t paths_limit;
-};
+} __attribute__((packed));
 
 #define BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE 1
 
index 8a36a3f4c86811fdde0143ee7b35f289c46d2656..78878013f8de4b856d3f8c8c0b2921bd0d879b09 100644 (file)
@@ -3240,11 +3240,13 @@ static void bgp_dynamic_capability_paths_limit(uint8_t *pnt, int action,
                        safi_t safi;
                        iana_afi_t pkt_afi;
                        iana_safi_t pkt_safi;
+                       uint16_t paths_limit = 0;
                        struct bgp_paths_limit_capability bpl = {};
 
                        memcpy(&bpl, data, sizeof(bpl));
                        pkt_afi = ntohs(bpl.afi);
                        pkt_safi = safi_int2iana(bpl.safi);
+                       paths_limit = ntohs(bpl.paths_limit);
 
                        if (bgp_debug_neighbor_events(peer))
                                zlog_debug("%s OPEN has %s capability for afi/safi: %s/%s limit: %u",
@@ -3252,8 +3254,7 @@ static void bgp_dynamic_capability_paths_limit(uint8_t *pnt, int action,
                                           lookup_msg(capcode_str, hdr->code,
                                                      NULL),
                                           iana_afi2str(pkt_afi),
-                                          iana_safi2str(pkt_safi),
-                                          bpl.paths_limit);
+                                          iana_safi2str(pkt_safi), paths_limit);
 
                        if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi,
                                                      &safi)) {
@@ -3275,7 +3276,7 @@ static void bgp_dynamic_capability_paths_limit(uint8_t *pnt, int action,
                        SET_FLAG(peer->af_cap[afi][safi],
                                 PEER_CAP_PATHS_LIMIT_AF_RCV);
                        peer->addpath_paths_limit[afi][safi].receive =
-                               bpl.paths_limit;
+                               paths_limit;
 ignore:
                        data += CAPABILITY_CODE_PATHS_LIMIT_LEN;
                }