Browse Source

lib, bgpd: Fixup afi_t to be an enum and cleanup zebra.h

This code change does two things:

1) Removes ZEBRA_AFI_XXX #defines since they were redundant information
2) Switches afi_t to an enumerated type so that the compiler
can do a bit more compile time checking.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Donald Sharp 3 years ago
parent
commit
f3cfc46450
5 changed files with 37 additions and 44 deletions
  1. 20 20
      bgpd/bgp_open.c
  2. 1 0
      bgpd/bgp_open.h
  3. 6 8
      bgpd/bgp_routemap.c
  4. 5 6
      lib/plist.c
  5. 5 10
      lib/zebra.h

+ 20 - 20
bgpd/bgp_open.c

@@ -126,23 +126,23 @@ bgp_afi_safi_valid_indices (afi_t afi, safi_t *safi)
 {
   switch (afi)
     {
-      case AFI_IP:
-#ifdef HAVE_IPV6
-      case AFI_IP6:
-#endif
-        switch (*safi)
-          {
-            /* BGP MPLS-labeled VPN SAFI isn't contigious with others, remap */
-            case SAFI_MPLS_LABELED_VPN:
-              *safi = SAFI_MPLS_VPN;
-            case SAFI_UNICAST:
-            case SAFI_MULTICAST:
-            case SAFI_MPLS_VPN:
-              return 1;
-          }
+    case AFI_IP:
+    case AFI_IP6:
+      switch (*safi)
+	{
+	  /* BGP MPLS-labeled VPN SAFI isn't contigious with others, remap */
+	case SAFI_MPLS_LABELED_VPN:
+	  *safi = SAFI_MPLS_VPN;
+	case SAFI_UNICAST:
+	case SAFI_MULTICAST:
+	case SAFI_MPLS_VPN:
+	  return 1;
+	}
+      break;
     }
+
   zlog_debug ("unknown afi/safi (%u/%u)", afi, *safi);
-  
+
   return 0;
 }
 
@@ -230,7 +230,7 @@ bgp_capability_orf_entry (struct peer *peer, struct capability_header *hdr)
     }
   
   /* validate number field */
-  if (sizeof (struct capability_orf_entry) + (entry.num * 2) > hdr->length)
+  if (CAPABILITY_CODE_ORF_LEN + (entry.num * 2) > hdr->length)
     {
       zlog_info ("%s ORF Capability entry length error,"
                  " Cap length %u, num %u",
@@ -432,14 +432,14 @@ static const int capcode_str_max = array_size(capcode_str);
 /* Minimum sizes for length field of each cap (so not inc. the header) */
 static const size_t cap_minsizes[] = 
 {
-  [CAPABILITY_CODE_MP]		= sizeof (struct capability_mp_data),
+  [CAPABILITY_CODE_MP]		= CAPABILITY_CODE_MP_LEN,
   [CAPABILITY_CODE_REFRESH]	= CAPABILITY_CODE_REFRESH_LEN,
-  [CAPABILITY_CODE_ORF]		= sizeof (struct capability_orf_entry),
-  [CAPABILITY_CODE_RESTART]	= sizeof (struct capability_gr),
+  [CAPABILITY_CODE_ORF]		= CAPABILITY_CODE_ORF_LEN,
+  [CAPABILITY_CODE_RESTART]	= 6,
   [CAPABILITY_CODE_AS4]		= CAPABILITY_CODE_AS4_LEN,
   [CAPABILITY_CODE_DYNAMIC]	= CAPABILITY_CODE_DYNAMIC_LEN,
   [CAPABILITY_CODE_REFRESH_OLD]	= CAPABILITY_CODE_REFRESH_LEN,
-  [CAPABILITY_CODE_ORF_OLD]	= sizeof (struct capability_orf_entry),
+  [CAPABILITY_CODE_ORF_OLD]	= CAPABILITY_CODE_ORF_LEN,
 };
 
 /* value the capability must be a multiple of.

+ 1 - 0
bgpd/bgp_open.h

@@ -82,6 +82,7 @@ struct capability_gr
 #define CAPABILITY_CODE_DYNAMIC_LEN     0
 #define CAPABILITY_CODE_RESTART_LEN     2 /* Receiving only case */
 #define CAPABILITY_CODE_AS4_LEN         4
+#define CAPABILITY_CODE_ORF_LEN         5
 
 /* Cooperative Route Filtering Capability.  */
 

+ 6 - 8
bgpd/bgp_routemap.c

@@ -2383,14 +2383,12 @@ bgp_route_map_update (const char *unused)
     {
       for (i = 0; i < ZEBRA_ROUTE_MAX; i++)
 	{
-	  if (bgp->rmap[ZEBRA_FAMILY_IPV4][i].name)
-	    bgp->rmap[ZEBRA_FAMILY_IPV4][i].map = 
-	      route_map_lookup_by_name (bgp->rmap[ZEBRA_FAMILY_IPV4][i].name);
-#ifdef HAVE_IPV6
-	  if (bgp->rmap[ZEBRA_FAMILY_IPV6][i].name)
-	    bgp->rmap[ZEBRA_FAMILY_IPV6][i].map =
-	      route_map_lookup_by_name (bgp->rmap[ZEBRA_FAMILY_IPV6][i].name);
-#endif /* HAVE_IPV6 */
+	  if (bgp->rmap[AFI_IP][i].name)
+	    bgp->rmap[AFI_IP][i].map =
+	      route_map_lookup_by_name (bgp->rmap[AFI_IP][i].name);
+	  if (bgp->rmap[AFI_IP6][i].name)
+	    bgp->rmap[AFI_IP6][i].map =
+	      route_map_lookup_by_name (bgp->rmap[AFI_IP][i].name);
 	}
     }
 }

+ 5 - 6
lib/plist.c

@@ -698,8 +698,9 @@ vty_prefix_list_install (struct vty *vty, afi_t afi, const char *name,
     }
 
   /* "any" is special token for matching any IPv4 addresses.  */
-  if (afi == AFI_IP)
+  switch (afi)
     {
+    case AFI_IP:
       if (strncmp ("any", prefix, strlen (prefix)) == 0)
 	{
 	  ret = str2prefix_ipv4 ("0.0.0.0/0", (struct prefix_ipv4 *) &p);
@@ -715,10 +716,8 @@ vty_prefix_list_install (struct vty *vty, afi_t afi, const char *name,
 	  vty_out (vty, "%% Malformed IPv4 prefix%s", VTY_NEWLINE);
 	  return CMD_WARNING;
 	}
-    }
-#ifdef HAVE_IPV6
-  else if (afi == AFI_IP6)
-    {
+      break;
+    case AFI_IP6:
       if (strncmp ("any", prefix, strlen (prefix)) == 0)
 	{
 	  ret = str2prefix_ipv6 ("::/0", (struct prefix_ipv6 *) &p);
@@ -734,8 +733,8 @@ vty_prefix_list_install (struct vty *vty, afi_t afi, const char *name,
 	  vty_out (vty, "%% Malformed IPv6 prefix%s", VTY_NEWLINE);
 	  return CMD_WARNING;
 	}
+      break;
     }
-#endif /* HAVE_IPV6 */
 
   /* ge and le check. */
   if (genum && (genum <= p.prefixlen))

+ 5 - 10
lib/zebra.h

@@ -445,11 +445,6 @@ extern int proto_redistnum(int afi, const char *s);
 
 extern const char *zserv_command_string (unsigned int command);
 
-/* Zebra's family types. */
-#define ZEBRA_FAMILY_IPV4                1
-#define ZEBRA_FAMILY_IPV6                2
-#define ZEBRA_FAMILY_MAX                 3
-
 /* Error codes of zebra. */
 #define ZEBRA_ERR_NOERROR                0
 #define ZEBRA_ERR_RTEXIST               -1
@@ -483,9 +478,11 @@ extern const char *zserv_command_string (unsigned int command);
 #endif
 
 /* Address family numbers from RFC1700. */
-#define AFI_IP                    1
-#define AFI_IP6                   2
-#define AFI_MAX                   3
+typedef enum {
+  AFI_IP  = 1,
+  AFI_IP6 = 2,
+#define AFI_MAX 3
+} afi_t;
 
 /* Subsequent Address Family Identifier. */
 #define SAFI_UNICAST              1
@@ -516,8 +513,6 @@ extern const char *zserv_command_string (unsigned int command);
 #define SET_FLAG(V,F)        (V) |= (F)
 #define UNSET_FLAG(V,F)      (V) &= ~(F)
 
-/* AFI and SAFI type. */
-typedef u_int16_t afi_t;
 typedef u_int8_t safi_t;
 
 /* Zebra types. Used in Zserv message header. */