From: Renato Westphal Date: Tue, 1 Aug 2017 00:37:46 +0000 (-0300) Subject: bgpd: don't make any assumptions about the size of an enum X-Git-Tag: frr-4.0-dev~472^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=a46a2e9b4e8de782ac07e01429a80ed7ec167dcb;p=mirror%2Ffrr.git bgpd: don't make any assumptions about the size of an enum The size of an enum is compiler dependent and thus we shouldn't use enums inside structures that represent fields of a packet. Problem detected by the 'test_capability' unit test. The problem was not apparent before because the 'iana_safi_t' enum didn't exist and 'safi_t' was a typedef to uint8_t. Now we have two different enums, 'iana_afi_t' and 'iana_safi_t', and both need to be encoded in different ways on the wire (2 bytes vs 1 byte). Signed-off-by: Renato Westphal --- diff --git a/bgpd/bgp_open.h b/bgpd/bgp_open.h index 6b92e6e38c..83b79a589a 100644 --- a/bgpd/bgp_open.h +++ b/bgpd/bgp_open.h @@ -29,9 +29,9 @@ struct capability_header { /* Generic MP capability data */ struct capability_mp_data { - iana_afi_t afi; + uint16_t afi; /* iana_afi_t */ u_char reserved; - iana_safi_t safi; + uint8_t safi; /* iana_safi_t */ }; struct capability_as4 { diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h index ff15115e03..250ee5f4e8 100644 --- a/bgpd/bgpd.h +++ b/bgpd/bgpd.h @@ -922,10 +922,10 @@ DECLARE_QOBJ_TYPE(peer) stream. */ struct bgp_nlri { /* AFI. */ - afi_t afi; + uint16_t afi; /* iana_afi_t */ /* SAFI. */ - safi_t safi; + uint8_t safi; /* iana_safi_t */ /* Pointer to NLRI byte stream. */ u_char *nlri;