From: Igor Putovny Date: Thu, 13 Feb 2025 15:10:13 +0000 (+0100) Subject: Rewrite print_prefixes() using ip_addr instead of net_addr X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfa6f4af5869c20a7380538ee6563ff9d19dd93b;p=thirdparty%2Fbird.git Rewrite print_prefixes() using ip_addr instead of net_addr --- diff --git a/proto/aggregator/aggregator.c b/proto/aggregator/aggregator.c index 0b1d280ec..0883cc506 100644 --- a/proto/aggregator/aggregator.c +++ b/proto/aggregator/aggregator.c @@ -1152,68 +1152,39 @@ dump_trie(const struct aggregator_proto *p) } static void -print_prefixes_ip4_helper(struct net_addr_ip4 *addr, const struct trie_node *node, int depth) +print_prefixes_helper(const struct trie_node *node, ip_addr *prefix, u32 pxlen, int type) { assert(node != NULL); + assert(prefix != NULL); if (IN_FIB == node->status) - log("%N %p selected bucket: %p [[%u]]", addr, node, node->selected_bucket, node->selected_bucket->id); - - if (node->child[0]) - { - ip4_clrbit(&addr->prefix, depth); - addr->pxlen = depth + 1; - print_prefixes_ip4_helper(addr, node->child[0], depth + 1); - } - - if (node->child[1]) { - ip4_setbit(&addr->prefix, depth); - addr->pxlen = depth + 1; - print_prefixes_ip4_helper(addr, node->child[1], depth + 1); - ip4_clrbit(&addr->prefix, depth); + struct net_addr addr = { 0 }; + net_fill_ipa(&addr, *prefix, pxlen); + log("%N %p selected bucket: %p [[%u]]", &addr, node, node->selected_bucket, node->selected_bucket->id); } -} - -static void -print_prefixes_ip6_helper(struct net_addr_ip6 *addr, const struct trie_node *node, int depth) -{ - assert(node != NULL); - - if (IN_FIB == node->status) - log("%N %p selected bucket: %p [[%u]]", addr, node, node->selected_bucket, node->selected_bucket->id); if (node->child[0]) { - ip6_clrbit(&addr->prefix, depth); - addr->pxlen = depth + 1; - print_prefixes_ip6_helper(addr, node->child[0], depth + 1); + ipa_clrbit(prefix, node->depth + ipa_shift[type]); + print_prefixes_helper(node->child[0], prefix, pxlen + 1, type); } if (node->child[1]) { - ip6_setbit(&addr->prefix, depth); - addr->pxlen = depth + 1; - print_prefixes_ip6_helper(addr, node->child[1], depth + 1); - ip6_clrbit(&addr->prefix, depth); + ipa_setbit(prefix, node->depth + ipa_shift[type]); + print_prefixes_helper(node->child[1], prefix, pxlen + 1, type); + ipa_clrbit(prefix, node->depth + ipa_shift[type]); } } static void print_prefixes(const struct trie_node *node, int type) { - if (NET_IP4 == type) - { - struct net_addr_ip4 addr = { 0 }; - net_fill_ip4((net_addr *)&addr, IP4_NONE, 0); - print_prefixes_ip4_helper(&addr, node, 0); - } - else if (NET_IP6 == type) - { - struct net_addr_ip6 addr = { 0 }; - net_fill_ip6((net_addr *)&addr, IP6_NONE, 0); - print_prefixes_ip6_helper(&addr, node, 0); - } + assert(node != NULL); + + ip_addr prefix = (NET_IP4 == type) ? ipa_from_ip4(IP4_NONE) : ipa_from_ip6(IP6_NONE); + print_prefixes_helper(node, &prefix, 0, type); } static void