From 722e8011e1e8e17e9f9c4c2dcf061ad4b1392982 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 16 Dec 2022 08:17:18 -0500 Subject: [PATCH] bgpd: make bgp_packet_mpattr_start more prescriptive when using enum's This function was just using default: case statements for the encoding of nlri's to a peer. Lay out all the different cases and make things fail hard when a dev escape is found. Signed-off-by: Donald Sharp --- bgpd/bgp_attr.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/bgpd/bgp_attr.c b/bgpd/bgp_attr.c index 47baed5af5..1c8dfea33c 100644 --- a/bgpd/bgp_attr.c +++ b/bgpd/bgp_attr.c @@ -3876,7 +3876,10 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi, stream_putc(s, attr->mp_nexthop_len); stream_put_ipv4(s, attr->nexthop.s_addr); } - default: + break; + case SAFI_UNSPEC: + case SAFI_MAX: + assert(!"SAFI's UNSPEC or MAX being specified are a DEV ESCAPE"); break; } break; @@ -3927,17 +3930,24 @@ size_t bgp_packet_mpattr_start(struct stream *s, struct peer *peer, afi_t afi, break; case SAFI_FLOWSPEC: stream_putc(s, 0); /* no nexthop for flowspec */ - default: + break; + case SAFI_UNSPEC: + case SAFI_MAX: + assert(!"SAFI's UNSPEC or MAX being specified are a DEV ESCAPE"); break; } break; - default: + case AFI_L2VPN: if (safi != SAFI_FLOWSPEC) flog_err( EC_BGP_ATTR_NH_SEND_LEN, "Bad nexthop when sending to %s, AFI %u SAFI %u nhlen %d", peer->host, afi, safi, attr->mp_nexthop_len); break; + case AFI_UNSPEC: + case AFI_MAX: + assert(!"DEV ESCAPE: AFI_UNSPEC or AFI_MAX should not be used here"); + break; } /* SNPA */ -- 2.39.5