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

Reply via email to