]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: apply syntactic sugar to rib_dump()
authorDavid Lamparter <equinox@opensourcerouting.org>
Tue, 22 Oct 2013 17:10:21 +0000 (17:10 +0000)
committerDavid Lamparter <equinox@opensourcerouting.org>
Tue, 1 Apr 2014 15:27:58 +0000 (17:27 +0200)
strip the explicit __func__ present on all calls and make the prefix
argument a transparent union.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/prefix.h
zebra/rib.h
zebra/rt_socket.c
zebra/zebra_rib.c

index 8c8992e8cd8fa9de3cfdd21d920db1e21944fec4..9ef70ff50c8e0e2b5a294c478f98fe2c8827dc20 100644 (file)
@@ -89,6 +89,25 @@ struct prefix_rd
   u_char val[8] __attribute__ ((aligned (8)));
 };
 
+/* helper to get type safety/avoid casts on calls
+ * (w/o this, functions accepting all prefix types need casts on the caller
+ * side, which strips type safety since the cast will accept any pointer
+ * type.)
+ */
+union prefix46ptr
+{
+  struct prefix *p;
+  struct prefix_ipv4 *p4;
+  struct prefix_ipv6 *p6;
+} __attribute__ ((transparent_union));
+
+union prefix46constptr
+{
+  const struct prefix *p;
+  const struct prefix_ipv4 *p4;
+  const struct prefix_ipv6 *p6;
+} __attribute__ ((transparent_union));
+
 #ifndef INET_ADDRSTRLEN
 #define INET_ADDRSTRLEN 16
 #endif /* INET_ADDRSTRLEN */
index 97a20af306d362fa4452b4e103c7f94d36c0ddd1..d3a83c68a0445d1c6669d603aefde26dade1bc49 100644 (file)
@@ -386,7 +386,9 @@ extern struct nexthop *nexthop_ipv4_ifindex_add (struct rib *,
 extern int nexthop_has_fib_child(struct nexthop *);
 extern void rib_lookup_and_dump (struct prefix_ipv4 *);
 extern void rib_lookup_and_pushup (struct prefix_ipv4 *);
-extern void rib_dump (const char *, const struct prefix *, const struct rib *);
+#define rib_dump(prefix ,rib) _rib_dump(__func__, prefix, rib)
+extern void _rib_dump (const char *,
+                      union prefix46constptr, const struct rib *);
 extern int rib_lookup_ipv4_route (struct prefix_ipv4 *, union sockunion *);
 #define ZEBRA_RIB_LOOKUP_ERROR -1
 #define ZEBRA_RIB_FOUND_EXACT 0
index 5d175d849ba75805f7dc5a726d9ba2329da6ab08..90ed73d0bd3a0a18c1acfe98d11178bf1ff407e9 100644 (file)
@@ -160,7 +160,7 @@ kernel_rtm_ipv4 (int cmd, struct prefix *p, struct rib *rib, int family)
              {
                zlog_debug ("%s: %s/%d: attention! gate not found for rib %p",
                  __func__, prefix_buf, p->prefixlen, rib);
-               rib_dump (__func__, (struct prefix_ipv4 *)p, rib);
+               rib_dump (p, rib);
              }
              else
                inet_ntop (AF_INET, &sin_gate.sin_addr, gate_buf, INET_ADDRSTRLEN);
index 6616f9a10ee0c870934de3ef1d3f06b5c59dc88e..8835ef37f97c60dfeaea4de2d20c7d2a14976e9e 100644 (file)
@@ -1912,8 +1912,10 @@ rib_add_ipv4 (int type, int flags, struct prefix_ipv4 *p,
  * question are passed as 1st and 2nd arguments.
  */
 
-void rib_dump (const char * func, const struct prefix * p, const struct rib * rib)
+void _rib_dump (const char * func,
+               union prefix46constptr pp, const struct rib * rib)
 {
+  const struct prefix *p = pp.p;
   char straddr[INET6_ADDRSTRLEN];
   struct nexthop *nexthop, *tnexthop;
   int recursing;
@@ -2009,7 +2011,7 @@ void rib_lookup_and_dump (struct prefix_ipv4 * p)
       (CHECK_FLAG (rib->status, RIB_ENTRY_REMOVED) ? "removed" : "NOT removed"),
       (CHECK_FLAG (rib->flags, ZEBRA_FLAG_SELECTED) ? "selected" : "NOT selected")
     );
-    rib_dump (__func__, (struct prefix *) p, rib);
+    rib_dump (p, rib);
   }
 }
 
@@ -2056,7 +2058,7 @@ void rib_lookup_and_pushup (struct prefix_ipv4 * p)
         char buf[INET_ADDRSTRLEN];
         inet_ntop (rn->p.family, &p->prefix, buf, INET_ADDRSTRLEN);
         zlog_debug ("%s: freeing way for connected prefix %s/%d", __func__, buf, p->prefixlen);
-        rib_dump (__func__, &rn->p, rib);
+        rib_dump (&rn->p, rib);
       }
       rib_uninstall (rn, rib);
     }
@@ -2118,7 +2120,7 @@ rib_add_ipv4_multipath (struct prefix_ipv4 *p, struct rib *rib, safi_t safi)
   {
     zlog_debug ("%s: called rib_addnode (%p, %p) on new RIB entry",
       __func__, rn, rib);
-    rib_dump (__func__, (struct prefix *) p, rib);
+    rib_dump (p, rib);
   }
 
   /* Free implicit route.*/
@@ -2128,7 +2130,7 @@ rib_add_ipv4_multipath (struct prefix_ipv4 *p, struct rib *rib, safi_t safi)
     {
       zlog_debug ("%s: calling rib_delnode (%p, %p) on existing RIB entry",
         __func__, rn, same);
-      rib_dump (__func__, (struct prefix *) p, same);
+      rib_dump (p, same);
     }
     rib_delnode (rn, same);
   }
@@ -2706,7 +2708,7 @@ rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
   {
     zlog_debug ("%s: called rib_addnode (%p, %p) on new RIB entry",
       __func__, rn, rib);
-    rib_dump (__func__, (struct prefix *) p, rib);
+    rib_dump (p, rib);
   }
 
   /* Free implicit route.*/
@@ -2716,7 +2718,7 @@ rib_add_ipv6 (int type, int flags, struct prefix_ipv6 *p,
     {
       zlog_debug ("%s: calling rib_delnode (%p, %p) on existing RIB entry",
         __func__, rn, same);
-      rib_dump (__func__, (struct prefix *) p, same);
+      rib_dump (p, same);
     }
     rib_delnode (rn, same);
   }