]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Rewrite print_prefixes() using ip_addr instead of net_addr
authorIgor Putovny <igor.putovny@nic.cz>
Thu, 13 Feb 2025 15:10:13 +0000 (16:10 +0100)
committerIgor Putovny <igor.putovny@nic.cz>
Thu, 13 Feb 2025 15:10:13 +0000 (16:10 +0100)
proto/aggregator/aggregator.c

index 0b1d280ec16ab69e84c5caf1fe7ec0e4ab723a96..0883cc5061562e6774021d0832a5506d558d386e 100644 (file)
@@ -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