]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib/table: remove odd casts
authorDavid Lamparter <equinox@diac24.net>
Tue, 21 May 2019 03:00:09 +0000 (05:00 +0200)
committerDavid Lamparter <equinox@diac24.net>
Tue, 21 May 2019 03:42:13 +0000 (05:42 +0200)
Working with a proper struct route_node gets us around a bunch of weird
casts here and makes the code slightly more robust.

Signed-off-by: David Lamparter <equinox@diac24.net>
lib/table.c

index 2d42e2d55c904fe8942f497df267cd979c610df9..4bd52b3d80aadeea32edf22d7b67731a34f96cac 100644 (file)
@@ -33,10 +33,10 @@ DEFINE_MTYPE(LIB, ROUTE_NODE, "Route node")
 
 static void route_table_free(struct route_table *);
 
-static int route_table_hash_cmp(const void *a, const void *b)
+static int route_table_hash_cmp(const struct route_node *a,
+                               const struct route_node *b)
 {
-       const struct prefix *pa = a, *pb = b;
-       return prefix_cmp(pa, pb);
+       return prefix_cmp(&a->p, &b->p);
 }
 
 DECLARE_HASH(rn_hash_node, struct route_node, nodehash, route_table_hash_cmp,
@@ -244,19 +244,18 @@ struct route_node *route_node_match_ipv6(const struct route_table *table,
        p.prefixlen = IPV6_MAX_PREFIXLEN;
        p.prefix = *addr;
 
-       return route_node_match(table, (struct prefix *)&p);
+       return route_node_match(table, &p);
 }
 
 /* Lookup same prefix node.  Return NULL when we can't find route. */
 struct route_node *route_node_lookup(const struct route_table *table,
                                     union prefixconstptr pu)
 {
-       struct prefix p;
-       struct route_node *node;
-       prefix_copy(&p, pu.p);
-       apply_mask(&p);
+       struct route_node rn, *node;
+       prefix_copy(&rn.p, pu.p);
+       apply_mask(&rn.p);
 
-       node = rn_hash_node_find(&table->hash, (void *)&p);
+       node = rn_hash_node_find(&table->hash, &rn);
        return (node && node->info) ? route_lock_node(node) : NULL;
 }
 
@@ -264,12 +263,11 @@ struct route_node *route_node_lookup(const struct route_table *table,
 struct route_node *route_node_lookup_maynull(const struct route_table *table,
                                             union prefixconstptr pu)
 {
-       struct prefix p;
-       struct route_node *node;
-       prefix_copy(&p, pu.p);
-       apply_mask(&p);
+       struct route_node rn, *node;
+       prefix_copy(&rn.p, pu.p);
+       apply_mask(&rn.p);
 
-       node = rn_hash_node_find(&table->hash, (void *)&p);
+       node = rn_hash_node_find(&table->hash, &rn);
        return node ? route_lock_node(node) : NULL;
 }
 
@@ -277,15 +275,19 @@ struct route_node *route_node_lookup_maynull(const struct route_table *table,
 struct route_node *route_node_get(struct route_table *const table,
                                  union prefixconstptr pu)
 {
-       const struct prefix *p = pu.p;
+       struct route_node search;
+       struct prefix *p = &search.p;
+
+       prefix_copy(p, pu.p);
+       apply_mask(p);
+
        struct route_node *new;
        struct route_node *node;
        struct route_node *match;
        uint16_t prefixlen = p->prefixlen;
        const uint8_t *prefix = &p->u.prefix;
 
-       apply_mask((struct prefix *)p);
-       node = rn_hash_node_find(&table->hash, (void *)p);
+       node = rn_hash_node_find(&table->hash, &search);
        if (node && node->info)
                return route_lock_node(node);