]> git.proxmox.com Git - mirror_frr.git/commitdiff
lib: use "union prefixconstptr" in table code
authorDavid Lamparter <equinox@opensourcerouting.org>
Thu, 6 Jul 2017 12:58:49 +0000 (14:58 +0200)
committerDavid Lamparter <equinox@opensourcerouting.org>
Tue, 11 Jul 2017 11:47:27 +0000 (13:47 +0200)
This allows passing struct prefix_{ipv4,ipv6,evpn} * in addition to
struct prefix * without an extra cast (since the union uses the gcc
transparent-union extension present in all compilers that we support.)

Also applies some "const" while we're at it.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/table.c
lib/table.h

index 1461bb81a43fe30b413e6b26a392ab9f3282d476..fdbd2913b20779632a44cdd8ac4a23e056dbc159 100644 (file)
@@ -208,8 +208,9 @@ route_unlock_node (struct route_node *node)
 
 /* Find matched prefix. */
 struct route_node *
-route_node_match (const struct route_table *table, const struct prefix *p)
+route_node_match (const struct route_table *table, union prefixconstptr pu)
 {
+  const struct prefix *p = pu.p;
   struct route_node *node;
   struct route_node *matched;
 
@@ -267,8 +268,9 @@ route_node_match_ipv6 (const struct route_table *table,
 
 /* Lookup same prefix node.  Return NULL when we can't find route. */
 struct route_node *
-route_node_lookup (const struct route_table *table, const struct prefix *p)
+route_node_lookup (const struct route_table *table, union prefixconstptr pu)
 {
+  const struct prefix *p = pu.p;
   struct route_node *node;
   u_char prefixlen = p->prefixlen;
   const u_char *prefix = &p->u.prefix;
@@ -289,8 +291,9 @@ route_node_lookup (const struct route_table *table, const struct prefix *p)
 
 /* Lookup same prefix node.  Return NULL when we can't find route. */
 struct route_node *
-route_node_lookup_maynull (const struct route_table *table, const struct prefix *p)
+route_node_lookup_maynull (const struct route_table *table, union prefixconstptr pu)
 {
+  const struct prefix *p = pu.p;
   struct route_node *node;
   u_char prefixlen = p->prefixlen;
   const u_char *prefix = &p->u.prefix;
@@ -311,8 +314,9 @@ route_node_lookup_maynull (const struct route_table *table, const struct prefix
 
 /* Add node to routing table. */
 struct route_node *
-route_node_get (struct route_table *const table, const struct prefix *p)
+route_node_get (struct route_table *const table, union prefixconstptr pu)
 {
+  const struct prefix *p = pu.p;
   struct route_node *new;
   struct route_node *node;
   struct route_node *match;
@@ -473,7 +477,7 @@ route_next (struct route_node *node)
 
 /* Unlock current node and lock next node until limit. */
 struct route_node *
-route_next_until (struct route_node *node, struct route_node *limit)
+route_next_until (struct route_node *node, const struct route_node *limit)
 {
   struct route_node *next;
   struct route_node *start;
@@ -578,7 +582,7 @@ route_table_init (void)
  *         +1 if p1 occurs after p2 (p1 > p2)
  */
 int
-route_table_prefix_iter_cmp (struct prefix *p1, struct prefix *p2)
+route_table_prefix_iter_cmp (const struct prefix *p1, const struct prefix *p2)
 {
   struct prefix common_space;
   struct prefix *common = &common_space;
@@ -661,7 +665,7 @@ route_get_subtree_next (struct route_node *node)
  */
 static struct route_node *
 route_table_get_next_internal (const struct route_table *table,
-                              struct prefix *p)
+                              const struct prefix *p)
 {
   struct route_node *node, *tmp_node;
   int cmp;
@@ -762,8 +766,9 @@ route_table_get_next_internal (const struct route_table *table,
  * iteration.
  */
 struct route_node *
-route_table_get_next (const struct route_table *table, struct prefix *p)
+route_table_get_next (const struct route_table *table, union prefixconstptr pu)
 {
+  const struct prefix *p = pu.p;
   struct route_node *node;
 
   node = route_table_get_next_internal (table, p);
index 00131b29c6483c83a02890b5e47b0e4473f32fe0..6a5291487bf61b544a5a3ad59f76e2816187aeeb 100644 (file)
@@ -153,16 +153,16 @@ extern void route_unlock_node (struct route_node *node);
 extern struct route_node *route_top (struct route_table *);
 extern struct route_node *route_next (struct route_node *);
 extern struct route_node *route_next_until (struct route_node *,
-                                            struct route_node *);
+                                            const struct route_node *);
 extern struct route_node *route_node_get (struct route_table *const,
-                                          const struct prefix *);
+                                          union prefixconstptr);
 extern struct route_node *route_node_lookup (const struct route_table *,
-                                             const struct prefix *);
+                                             union prefixconstptr);
 extern struct route_node *route_node_lookup_maynull (const struct route_table *,
-                                             const struct prefix *);
+                                             union prefixconstptr);
 extern struct route_node *route_lock_node (struct route_node *node);
 extern struct route_node *route_node_match (const struct route_table *,
-                                            const struct prefix *);
+                                            union prefixconstptr);
 extern struct route_node *route_node_match_ipv4 (const struct route_table *,
                                                 const struct in_addr *);
 extern struct route_node *route_node_match_ipv6 (const struct route_table *,
@@ -176,9 +176,9 @@ extern void route_node_destroy (route_table_delegate_t *,
                                struct route_table *, struct route_node *);
 
 extern struct route_node *
-route_table_get_next (const struct route_table *table, struct prefix *p);
+route_table_get_next (const struct route_table *table, union prefixconstptr pu);
 extern int
-route_table_prefix_iter_cmp (struct prefix *p1, struct prefix *p2);
+route_table_prefix_iter_cmp (const struct prefix *p1, const struct prefix *p2);
 
 /*
  * Iterator functions.