diff options
author | David Lamparter <equinox@diac24.net> | 2019-05-21 05:00:09 +0200 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2019-05-21 05:42:13 +0200 |
commit | 0734f93b8ed51de625720346c953bd50e9f40487 (patch) | |
tree | 89a5496e235a705d8410d6b203f7da5e9f61d6e3 /lib/table.c | |
parent | tests: more datastructure tests (diff) | |
download | frr-0734f93b8ed51de625720346c953bd50e9f40487.tar.xz frr-0734f93b8ed51de625720346c953bd50e9f40487.zip |
lib/table: remove odd casts
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>
Diffstat (limited to 'lib/table.c')
-rw-r--r-- | lib/table.c | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/lib/table.c b/lib/table.c index 2d42e2d55..4bd52b3d8 100644 --- a/lib/table.c +++ b/lib/table.c @@ -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); |