Because afi numbers can reach high values, a conversion is necessary to return associate afi internal identifier. The safi_valid_indices API has been changed for that.
Signed-off-by: Philippe Guibert <philippe.guib...@6wind.com> --- bgpd/bgp_open.c | 22 +++++++++++++++------- bgpd/bgp_open.h | 2 +- bgpd/bgp_packet.c | 6 +++--- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c index 4e5ef30ccf2d..75c840ef4958 100644 --- a/bgpd/bgp_open.c +++ b/bgpd/bgp_open.c @@ -132,9 +132,9 @@ bgp_capability_mp_data (struct stream *s, struct capability_mp_data *mpc) } int -bgp_afi_safi_valid_indices (afi_t afi, safi_t *safi) +bgp_afi_safi_valid_indices (afi_t *afi, safi_t *safi) { - switch (afi) + switch (*afi) { case AFI_IP: case AFI_IP6: @@ -149,6 +149,15 @@ bgp_afi_safi_valid_indices (afi_t afi, safi_t *safi) case SAFI_ENCAP: return 1; } + case AFI_L2VPN: + *afi = AFI_INTERNAL_L2VPN; + switch (*safi) + { + case SAFI_EVPN: + *safi = SAFI_INTERNAL_EVPN; + return 1; + } + break; case AFI_INTERNAL_L2VPN: switch (*safi) { @@ -157,8 +166,7 @@ bgp_afi_safi_valid_indices (afi_t afi, safi_t *safi) } break; } - - zlog_debug ("unknown afi/safi (%u/%u)", afi, *safi); + zlog_debug ("unknown afi/safi (%u/%u)", *afi, *safi); return 0; } @@ -176,7 +184,7 @@ bgp_capability_mp (struct peer *peer, struct capability_header *hdr) zlog_debug ("%s OPEN has MP_EXT CAP for afi/safi: %u/%u", peer->host, mpc.afi, mpc.safi); - if (!bgp_afi_safi_valid_indices (mpc.afi, &mpc.safi)) + if (!bgp_afi_safi_valid_indices (&mpc.afi, &mpc.safi)) return -1; /* Now safi remapped, and afi/safi are valid array indices */ @@ -238,7 +246,7 @@ bgp_capability_orf_entry (struct peer *peer, struct capability_header *hdr) peer->host, entry.mpc.afi, entry.mpc.safi); /* Check AFI and SAFI. */ - if (!bgp_afi_safi_valid_indices (entry.mpc.afi, &safi)) + if (!bgp_afi_safi_valid_indices (&afi, &safi)) { zlog_info ("%s Addr-family %d/%d not supported." " Ignoring the ORF capability", @@ -381,7 +389,7 @@ bgp_capability_restart (struct peer *peer, struct capability_header *caphdr) safi_t safi = stream_getc (s); u_char flag = stream_getc (s); - if (!bgp_afi_safi_valid_indices (afi, &safi)) + if (!bgp_afi_safi_valid_indices (&afi, &safi)) { if (BGP_DEBUG (normal, NORMAL)) zlog_debug ("%s Addr-family %d/%d(afi/safi) not supported." diff --git a/bgpd/bgp_open.h b/bgpd/bgp_open.h index 62333754b04f..1d30d30e8f68 100644 --- a/bgpd/bgp_open.h +++ b/bgpd/bgp_open.h @@ -107,6 +107,6 @@ extern int bgp_open_option_parse (struct peer *, u_char, int *); extern void bgp_open_capability (struct stream *, struct peer *); extern void bgp_capability_vty_out (struct vty *, struct peer *); extern as_t peek_for_as4_capability (struct peer *, u_char); -extern int bgp_afi_safi_valid_indices (afi_t, safi_t *); +extern int bgp_afi_safi_valid_indices (afi_t *, safi_t *); #endif /* _QUAGGA_BGP_OPEN_H */ diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index db569b876424..22998c4aabdc 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1846,7 +1846,7 @@ bgp_update_receive (struct peer *peer, bgp_size_t size) * Note2: This will also remap the wire code-point for VPN safi to the * internal safi_t point, as needs be. */ - if (!bgp_afi_safi_valid_indices (nlris[i].afi, &nlris[i].safi)) + if (!bgp_afi_safi_valid_indices (&nlris[i].afi, &nlris[i].safi)) { plog_info (peer->log, "%s [Info] UPDATE with unsupported AFI/SAFI %u/%u", @@ -1917,7 +1917,7 @@ bgp_update_receive (struct peer *peer, bgp_size_t size) */ else if (attr.flag == BGP_ATTR_MP_UNREACH_NLRI && nlris[NLRI_MP_WITHDRAW].length == 0 - && bgp_afi_safi_valid_indices (nlris[NLRI_MP_WITHDRAW].afi, + && bgp_afi_safi_valid_indices (&nlris[NLRI_MP_WITHDRAW].afi, &nlris[NLRI_MP_WITHDRAW].safi)) { afi = nlris[NLRI_MP_WITHDRAW].afi; @@ -2321,7 +2321,7 @@ bgp_capability_msg_parse (struct peer *peer, u_char *pnt, bgp_size_t length) if (CHECK_FLAG (peer->flags, PEER_FLAG_OVERRIDE_CAPABILITY)) continue; - if (!bgp_afi_safi_valid_indices (afi, &safi)) + if (!bgp_afi_safi_valid_indices (&afi, &safi)) { if (BGP_DEBUG (normal, NORMAL)) zlog_debug ("%s Dynamic Capability MP_EXT afi/safi invalid " -- 2.1.4 _______________________________________________ Quagga-dev mailing list Quagga-dev@lists.quagga.net https://lists.quagga.net/mailman/listinfo/quagga-dev