]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Collapse struct static_ipv[4|6] into struct static_route
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 22 Oct 2015 01:34:08 +0000 (21:34 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Fri, 23 Oct 2015 00:19:27 +0000 (17:19 -0700)
The 'struct static_ipv4' and 'struct static_ipv6' structures
are essentially the same.  Collapse them into one data structure
'struct static_route'.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
lib/memtypes.c
zebra/rib.h
zebra/zebra_rib.c
zebra/zebra_vty.c

index 5b0c12040add896346e1f95a0470f3996f90e4ab..03a5c3dcfd07da178cdeda26eb73f83ec3c8ff57 100644 (file)
@@ -84,8 +84,7 @@ struct memory_list memory_list_zebra[] =
   { MTYPE_NEXTHOP,             "Nexthop"                       },
   { MTYPE_RIB,                 "RIB"                           },
   { MTYPE_RIB_QUEUE,           "RIB process work queue"        },
-  { MTYPE_STATIC_IPV4,         "Static IPv4 route"             },
-  { MTYPE_STATIC_IPV6,         "Static IPv6 route"             },
+  { MTYPE_STATIC_ROUTE,                "Static route"                  },
   { MTYPE_RIB_DEST,            "RIB destination"               },
   { MTYPE_RIB_TABLE_INFO,      "RIB table info"                },
   { MTYPE_RNH,                 "Nexthop tracking object"       },
index fa37f7d8c3497a3a1e0e4445881eb178d5203bf7..ec29acf2b2fc3e5a2c97724199abd3f14c041bc4 100644 (file)
@@ -165,11 +165,11 @@ typedef struct rib_dest_t_
   RIB_DEST_FOREACH_ROUTE_SAFE (rib_dest_from_rnode (rn), rib, next)
 
 /* Static route information. */
-struct static_ipv4
+struct static_route
 {
   /* For linked list. */
-  struct static_ipv4 *prev;
-  struct static_ipv4 *next;
+  struct static_route *prev;
+  struct static_route *next;
 
   /* Administrative distance. */
   u_char distance;
@@ -179,47 +179,22 @@ struct static_ipv4
 
   /* Flag for this static route's type. */
   u_char type;
-#define STATIC_IPV4_GATEWAY     1
-#define STATIC_IPV4_IFNAME      2
-#define STATIC_IPV4_BLACKHOLE   3
+#define STATIC_IPV4_GATEWAY          1
+#define STATIC_IPV4_IFNAME           2
+#define STATIC_IPV4_BLACKHOLE        3
+#define STATIC_IPV6_GATEWAY          4
+#define STATIC_IPV6_GATEWAY_IFNAME   5
+#define STATIC_IPV6_IFNAME           6
 
-  /* Nexthop value. */
-  union 
-  {
-    struct in_addr ipv4;
-    char *ifname;
-  } gate;
-
-  /* bit flags */
-  u_char flags;
-/*
- see ZEBRA_FLAG_REJECT
-     ZEBRA_FLAG_BLACKHOLE
- */
-};
-
-#ifdef HAVE_IPV6
-/* Static route information. */
-struct static_ipv6
-{
-  /* For linked list. */
-  struct static_ipv6 *prev;
-  struct static_ipv6 *next;
-
-  /* Administrative distance. */
-  u_char distance;
-
-  /* Tag */
-  u_short tag;
-
-  /* Flag for this static route's type. */
-  u_char type;
-#define STATIC_IPV6_GATEWAY          1
-#define STATIC_IPV6_GATEWAY_IFNAME   2
-#define STATIC_IPV6_IFNAME           3
-
-  /* Nexthop value. */
-  struct in6_addr ipv6;
+  /*
+   * Nexthop value. 
+   *
+   * Under IPv4 addr and ifname are
+   * used independentyly.
+   * STATIC_IPV4_GATEWAY uses addr
+   * STATIC_IPV4_IFNAME uses ifname
+   */
+  union g_addr addr;
   char *ifname;
 
   /* bit flags */
@@ -229,7 +204,6 @@ struct static_ipv6
      ZEBRA_FLAG_BLACKHOLE
  */
 };
-#endif /* HAVE_IPV6 */
 
 /* The following for loop allows to iterate over the nexthop
  * structure of routes.
index a69dead1a6cef7fe7938ab9602faf2fa87e13d83..fc34100b7cf3236a80044a23000c931600c7090e 100644 (file)
@@ -2787,7 +2787,7 @@ rib_delete_ipv4 (int type, u_short instance, int flags, struct prefix_ipv4 *p,
 
 /* Install static route into rib. */
 static void
-static_install_ipv4 (struct prefix *p, struct static_ipv4 *si)
+static_install_ipv4 (struct prefix *p, struct static_route *si)
 {
   struct rib *rib;
   struct route_node *rn;
@@ -2822,14 +2822,14 @@ static_install_ipv4 (struct prefix *p, struct static_ipv4 *si)
       switch (si->type)
         {
           case STATIC_IPV4_GATEWAY:
-            nexthop_ipv4_add (rib, &si->gate.ipv4, NULL);
+            nexthop_ipv4_add (rib, &si->addr.ipv4, NULL);
            nh_p.family = AF_INET;
            nh_p.prefixlen = IPV4_MAX_BITLEN;
-           nh_p.u.prefix4 = si->gate.ipv4;
+           nh_p.u.prefix4 = si->addr.ipv4;
            zebra_register_rnh_static_nh(&nh_p, rn);
             break;
           case STATIC_IPV4_IFNAME:
-            nexthop_ifname_add (rib, si->gate.ifname);
+            nexthop_ifname_add (rib, si->ifname);
             break;
           case STATIC_IPV4_BLACKHOLE:
             nexthop_blackhole_add (rib);
@@ -2853,14 +2853,14 @@ static_install_ipv4 (struct prefix *p, struct static_ipv4 *si)
       switch (si->type)
         {
           case STATIC_IPV4_GATEWAY:
-            nexthop_ipv4_add (rib, &si->gate.ipv4, NULL);
+            nexthop_ipv4_add (rib, &si->addr.ipv4, NULL);
            nh_p.family = AF_INET;
            nh_p.prefixlen = IPV4_MAX_BITLEN;
-           nh_p.u.prefix4 = si->gate.ipv4;
+           nh_p.u.prefix4 = si->addr.ipv4;
            zebra_register_rnh_static_nh(&nh_p, rn);
             break;
           case STATIC_IPV4_IFNAME:
-            nexthop_ifname_add (rib, si->gate.ifname);
+            nexthop_ifname_add (rib, si->ifname);
             break;
           case STATIC_IPV4_BLACKHOLE:
             nexthop_blackhole_add (rib);
@@ -2876,15 +2876,15 @@ static_install_ipv4 (struct prefix *p, struct static_ipv4 *si)
 }
 
 static int
-static_ipv4_nexthop_same (struct nexthop *nexthop, struct static_ipv4 *si)
+static_ipv4_nexthop_same (struct nexthop *nexthop, struct static_route *si)
 {
   if (nexthop->type == NEXTHOP_TYPE_IPV4
       && si->type == STATIC_IPV4_GATEWAY
-      && IPV4_ADDR_SAME (&nexthop->gate.ipv4, &si->gate.ipv4))
+      && IPV4_ADDR_SAME (&nexthop->gate.ipv4, &si->addr.ipv4))
     return 1;
   if (nexthop->type == NEXTHOP_TYPE_IFNAME
       && si->type == STATIC_IPV4_IFNAME
-      && strcmp (nexthop->ifname, si->gate.ifname) == 0)
+      && strcmp (nexthop->ifname, si->ifname) == 0)
     return 1;
   if (nexthop->type == NEXTHOP_TYPE_BLACKHOLE
       && si->type == STATIC_IPV4_BLACKHOLE)
@@ -2894,7 +2894,7 @@ static_ipv4_nexthop_same (struct nexthop *nexthop, struct static_ipv4 *si)
 
 /* Uninstall static route from RIB. */
 static void
-static_uninstall_ipv4 (struct prefix *p, struct static_ipv4 *si)
+static_uninstall_ipv4 (struct prefix *p, struct static_route *si)
 {
   struct route_node *rn;
   struct rib *rib;
@@ -2984,10 +2984,10 @@ static_add_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
 {
   u_char type = 0;
   struct route_node *rn;
-  struct static_ipv4 *si;
-  struct static_ipv4 *pp;
-  struct static_ipv4 *cp;
-  struct static_ipv4 *update = NULL;
+  struct static_route *si;
+  struct static_route *pp;
+  struct static_route *cp;
+  struct static_route *update = NULL;
   struct route_table *stable;
 
   /* Lookup table.  */
@@ -3010,8 +3010,8 @@ static_add_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
   for (si = rn->info; si; si = si->next)
     {
       if (type == si->type
-         && (! gate || IPV4_ADDR_SAME (gate, &si->gate.ipv4))
-         && (! ifname || strcmp (ifname, si->gate.ifname) == 0))
+         && (! gate || IPV4_ADDR_SAME (gate, &si->addr.ipv4))
+         && (! ifname || strcmp (ifname, si->ifname) == 0))
        {
          if ((distance == si->distance) && (tag == si->tag))
            {
@@ -3028,7 +3028,7 @@ static_add_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
     static_delete_ipv4 (p, gate, ifname, update->tag, update->distance, vrf_id);
 
   /* Make new static route structure. */
-  si = XCALLOC (MTYPE_STATIC_IPV4, sizeof (struct static_ipv4));
+  si = XCALLOC (MTYPE_STATIC_ROUTE, sizeof (struct static_route));
 
   si->type = type;
   si->distance = distance;
@@ -3036,9 +3036,9 @@ static_add_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
   si->tag = tag;
 
   if (gate)
-    si->gate.ipv4 = *gate;
+    si->addr.ipv4 = *gate;
   if (ifname)
-    si->gate.ifname = XSTRDUP (0, ifname);
+    si->ifname = XSTRDUP (0, ifname);
 
   /* Add new static route information to the tree with sort by
      distance value and gateway address. */
@@ -3050,9 +3050,9 @@ static_add_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
        continue;
       if (si->type == STATIC_IPV4_GATEWAY && cp->type == STATIC_IPV4_GATEWAY)
        {
-         if (ntohl (si->gate.ipv4.s_addr) < ntohl (cp->gate.ipv4.s_addr))
+         if (ntohl (si->addr.ipv4.s_addr) < ntohl (cp->addr.ipv4.s_addr))
            break;
-         if (ntohl (si->gate.ipv4.s_addr) > ntohl (cp->gate.ipv4.s_addr))
+         if (ntohl (si->addr.ipv4.s_addr) > ntohl (cp->addr.ipv4.s_addr))
            continue;
        }
     }
@@ -3080,7 +3080,7 @@ static_delete_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
 {
   u_char type = 0;
   struct route_node *rn;
-  struct static_ipv4 *si;
+  struct static_route *si;
   struct route_table *stable;
 
   /* Lookup table.  */
@@ -3104,8 +3104,8 @@ static_delete_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
   /* Find same static route is the tree */
   for (si = rn->info; si; si = si->next)
     if (type == si->type
-       && (! gate || IPV4_ADDR_SAME (gate, &si->gate.ipv4))
-       && (! ifname || strcmp (ifname, si->gate.ifname) == 0)
+       && (! gate || IPV4_ADDR_SAME (gate, &si->addr.ipv4))
+       && (! ifname || strcmp (ifname, si->ifname) == 0)
        && (! tag || (tag == si->tag)))
       break;
 
@@ -3130,8 +3130,8 @@ static_delete_ipv4 (struct prefix *p, struct in_addr *gate, const char *ifname,
   
   /* Free static route configuration. */
   if (ifname)
-    XFREE (0, si->gate.ifname);
-  XFREE (MTYPE_STATIC_IPV4, si);
+    XFREE (0, si->ifname);
+  XFREE (MTYPE_STATIC_ROUTE, si);
 
   route_unlock_node (rn);
 
@@ -3553,7 +3553,7 @@ rib_delete_ipv6 (int type, u_short instance, int flags, struct prefix_ipv6 *p,
 
 /* Install static route into rib. */
 static void
-static_install_ipv6 (struct prefix *p, struct static_ipv6 *si)
+static_install_ipv6 (struct prefix *p, struct static_route *si)
 {
   struct rib *rib;
   struct route_table *table;
@@ -3589,17 +3589,17 @@ static_install_ipv6 (struct prefix *p, struct static_ipv6 *si)
       switch (si->type)
        {
        case STATIC_IPV6_GATEWAY:
-         nexthop_ipv6_add (rib, &si->ipv6);
+         nexthop_ipv6_add (rib, &si->addr.ipv6);
          nh_p.family = AF_INET6;
          nh_p.prefixlen = IPV6_MAX_BITLEN;
-         nh_p.u.prefix6 = si->ipv6;
+         nh_p.u.prefix6 = si->addr.ipv6;
          zebra_register_rnh_static_nh(&nh_p, rn);
          break;
        case STATIC_IPV6_IFNAME:
          nexthop_ifname_add (rib, si->ifname);
          break;
        case STATIC_IPV6_GATEWAY_IFNAME:
-         nexthop_ipv6_ifname_add (rib, &si->ipv6, si->ifname);
+         nexthop_ipv6_ifname_add (rib, &si->addr.ipv6, si->ifname);
          break;
        }
       rib_queue_add (&zebrad, rn);
@@ -3620,17 +3620,17 @@ static_install_ipv6 (struct prefix *p, struct static_ipv6 *si)
       switch (si->type)
        {
        case STATIC_IPV6_GATEWAY:
-         nexthop_ipv6_add (rib, &si->ipv6);
+         nexthop_ipv6_add (rib, &si->addr.ipv6);
          nh_p.family = AF_INET6;
          nh_p.prefixlen = IPV6_MAX_BITLEN;
-         nh_p.u.prefix6 = si->ipv6;
+         nh_p.u.prefix6 = si->addr.ipv6;
          zebra_register_rnh_static_nh(&nh_p, rn);
          break;
        case STATIC_IPV6_IFNAME:
          nexthop_ifname_add (rib, si->ifname);
          break;
        case STATIC_IPV6_GATEWAY_IFNAME:
-         nexthop_ipv6_ifname_add (rib, &si->ipv6, si->ifname);
+         nexthop_ipv6_ifname_add (rib, &si->addr.ipv6, si->ifname);
          break;
        }
 
@@ -3643,11 +3643,11 @@ static_install_ipv6 (struct prefix *p, struct static_ipv6 *si)
 }
 
 static int
-static_ipv6_nexthop_same (struct nexthop *nexthop, struct static_ipv6 *si)
+static_ipv6_nexthop_same (struct nexthop *nexthop, struct static_route *si)
 {
   if (nexthop->type == NEXTHOP_TYPE_IPV6
       && si->type == STATIC_IPV6_GATEWAY
-      && IPV6_ADDR_SAME (&nexthop->gate.ipv6, &si->ipv6))
+      && IPV6_ADDR_SAME (&nexthop->gate.ipv6, &si->addr.ipv6))
     return 1;
   if (nexthop->type == NEXTHOP_TYPE_IFNAME
       && si->type == STATIC_IPV6_IFNAME
@@ -3655,14 +3655,14 @@ static_ipv6_nexthop_same (struct nexthop *nexthop, struct static_ipv6 *si)
     return 1;
   if (nexthop->type == NEXTHOP_TYPE_IPV6_IFNAME
       && si->type == STATIC_IPV6_GATEWAY_IFNAME
-      && IPV6_ADDR_SAME (&nexthop->gate.ipv6, &si->ipv6)
+      && IPV6_ADDR_SAME (&nexthop->gate.ipv6, &si->addr.ipv6)
       && strcmp (nexthop->ifname, si->ifname) == 0)
     return 1;
   return 0;
 }
 
 static void
-static_uninstall_ipv6 (struct prefix *p, struct static_ipv6 *si)
+static_uninstall_ipv6 (struct prefix *p, struct static_route *si)
 {
   struct route_table *table;
   struct route_node *rn;
@@ -3751,11 +3751,12 @@ static_add_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
                  u_char distance, u_int32_t vrf_id)
 {
   struct route_node *rn;
-  struct static_ipv6 *si;
-  struct static_ipv6 *pp;
-  struct static_ipv6 *cp;
+  struct static_route *si;
+  struct static_route *pp;
+  struct static_route *cp;
   struct route_table *stable;
 
+
   /* Lookup table.  */
   stable = vrf_static_table (AFI_IP6, SAFI_UNICAST, vrf_id);
   if (! stable)
@@ -3778,7 +3779,7 @@ static_add_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
       if (distance == si->distance 
          && type == si->type
          && tag == si->tag
-         && (! gate || IPV6_ADDR_SAME (gate, &si->ipv6))
+         && (! gate || IPV6_ADDR_SAME (gate, &si->addr.ipv6))
          && (! ifname || strcmp (ifname, si->ifname) == 0))
        {
          route_unlock_node (rn);
@@ -3787,7 +3788,7 @@ static_add_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
     }
 
   /* Make new static route structure. */
-  si = XCALLOC (MTYPE_STATIC_IPV6, sizeof (struct static_ipv6));
+  si = XCALLOC (MTYPE_STATIC_ROUTE, sizeof (struct static_route));
 
   si->type = type;
   si->distance = distance;
@@ -3797,13 +3798,13 @@ static_add_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
   switch (type)
     {
     case STATIC_IPV6_GATEWAY:
-      si->ipv6 = *gate;
+      si->addr.ipv6 = *gate;
       break;
     case STATIC_IPV6_IFNAME:
       si->ifname = XSTRDUP (0, ifname);
       break;
     case STATIC_IPV6_GATEWAY_IFNAME:
-      si->ipv6 = *gate;
+      si->addr.ipv6 = *gate;
       si->ifname = XSTRDUP (0, ifname);
       break;
     }
@@ -3841,7 +3842,7 @@ static_delete_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
                     u_int32_t vrf_id)
 {
   struct route_node *rn;
-  struct static_ipv6 *si;
+  struct static_route *si;
   struct route_table *stable;
 
   /* Lookup table.  */
@@ -3858,7 +3859,7 @@ static_delete_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
   for (si = rn->info; si; si = si->next)
     if (distance == si->distance 
        && type == si->type
-       && (! gate || IPV6_ADDR_SAME (gate, &si->ipv6))
+       && (! gate || IPV6_ADDR_SAME (gate, &si->addr.ipv6))
        && (! ifname || strcmp (ifname, si->ifname) == 0)
        && (! tag || (tag == si->tag)))
       break;
@@ -3884,7 +3885,7 @@ static_delete_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
   /* Free static route configuration. */
   if (ifname)
     XFREE (0, si->ifname);
-  XFREE (MTYPE_STATIC_IPV6, si);
+  XFREE (MTYPE_STATIC_ROUTE, si);
 
   return 1;
 }
index a797b88391a74a812ef884d9b541b4d4f7d1eef4..89fb933aa68902b5d3b092ff4e901c811ebccb5b 100644 (file)
@@ -1747,7 +1747,7 @@ static int
 static_config_ipv4 (struct vty *vty)
 {
   struct route_node *rn;
-  struct static_ipv4 *si;  
+  struct static_route *si;
   struct route_table *stable;
   int write;
 
@@ -1767,10 +1767,10 @@ static_config_ipv4 (struct vty *vty)
         switch (si->type)
           {
             case STATIC_IPV4_GATEWAY:
-              vty_out (vty, " %s", inet_ntoa (si->gate.ipv4));
+              vty_out (vty, " %s", inet_ntoa (si->addr.ipv4));
               break;
             case STATIC_IPV4_IFNAME:
-              vty_out (vty, " %s", si->gate.ifname);
+              vty_out (vty, " %s", si->ifname);
               break;
             case STATIC_IPV4_BLACKHOLE:
               vty_out (vty, " Null0");
@@ -2909,7 +2909,7 @@ static int
 static_config_ipv6 (struct vty *vty)
 {
   struct route_node *rn;
-  struct static_ipv6 *si;  
+  struct static_route *si;
   int write;
   char buf[BUFSIZ];
   struct route_table *stable;
@@ -2931,14 +2931,14 @@ static_config_ipv6 (struct vty *vty)
        switch (si->type)
          {
          case STATIC_IPV6_GATEWAY:
-           vty_out (vty, " %s", inet_ntop (AF_INET6, &si->ipv6, buf, BUFSIZ));
+           vty_out (vty, " %s", inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ));
            break;
          case STATIC_IPV6_IFNAME:
            vty_out (vty, " %s", si->ifname);
            break;
          case STATIC_IPV6_GATEWAY_IFNAME:
            vty_out (vty, " %s %s",
-                    inet_ntop (AF_INET6, &si->ipv6, buf, BUFSIZ), si->ifname);
+                    inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ), si->ifname);
            break;
          }