]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
radix: update tests after API change
authorVictor Julien <victor@inliniac.net>
Fri, 20 Dec 2013 13:29:13 +0000 (14:29 +0100)
committerVictor Julien <victor@inliniac.net>
Fri, 7 Feb 2014 16:16:15 +0000 (17:16 +0100)
This patch updates all the radix tests to the new API. In most cases
it just passes a NULL user data return pointer.

It also removes the tests related to SC_RADIX_NODE_USERDATA, as this
macro is removed.

Bug #1073

src/util-radix-tree.c

index d62de37df948bb434a81a746f85753cae9bedf3d..691a7de0fe42e7aa37c1039979606fcf61d54c0e 100644 (file)
@@ -1731,13 +1731,13 @@ int SCRadixTestIPV4Insertion03(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     /* test for the existance of a key */
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.167.1.4", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     /* continue adding keys */
     bzero(&servaddr, sizeof(servaddr));
@@ -1759,47 +1759,47 @@ int SCRadixTestIPV4Insertion03(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.3", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "127.234.2.62", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.1", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.5", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.2", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.167.1.3", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.167.1.4", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "220.168.1.2", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.18", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -1874,12 +1874,12 @@ int SCRadixTestIPV4Removal04(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.167.1.1", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.2", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.167.1.3", &servaddr.sin_addr) <= 0)
@@ -1894,12 +1894,12 @@ int SCRadixTestIPV4Removal04(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.5", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.2", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.2", &servaddr.sin_addr) <= 0)
@@ -1937,21 +1937,21 @@ int SCRadixTestCharacterInsertion05(void)
     SCRadixAddKeyGeneric((uint8_t *)"Nathan", 48, tree, NULL);
     SCRadixAddKeyGeneric((uint8_t *)"Anoop", 40, tree, NULL);
 
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Victor", 48, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Matt", 32, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Josh", 32, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Margaret", 64, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Pablo", 40, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Brian", 40, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonish", 64, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonmc", 56, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Nathan", 48, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Anoop", 40, tree) != NULL);
-
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"bamboo", 48, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"bool", 32, tree) == NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"meerkat", 56, tree) == NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Victor", 48, tree) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Victor", 48, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Matt", 32, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Josh", 32, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Margaret", 64, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Pablo", 40, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Brian", 40, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonish", 64, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonmc", 56, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Nathan", 48, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Anoop", 40, tree, NULL) != NULL);
+
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"bamboo", 48, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"bool", 32, tree, NULL) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"meerkat", 56, tree, NULL) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Victor", 48, tree, NULL) == NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -1981,29 +1981,29 @@ int SCRadixTestCharacterRemoval06(void)
     SCRadixRemoveKeyGeneric((uint8_t *)"Brian", 40, tree);
     SCRadixRemoveKeyGeneric((uint8_t *)"Margaret", 64, tree);
 
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Victor", 48, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Matt", 32, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Josh", 32, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Margaret", 64, tree) == NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Brian", 40, tree) == NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Nathan", 48, tree) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Victor", 48, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Matt", 32, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Josh", 32, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Margaret", 64, tree, NULL) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Brian", 40, tree, NULL) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Nathan", 48, tree, NULL) == NULL);
 
     SCRadixRemoveKeyGeneric((uint8_t *)"Victor", 48, tree);
     SCRadixRemoveKeyGeneric((uint8_t *)"Josh", 32, tree);
     SCRadixRemoveKeyGeneric((uint8_t *)"Jasonmc", 56, tree);
     SCRadixRemoveKeyGeneric((uint8_t *)"Matt", 32, tree);
 
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Pablo", 40, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonish", 64, tree) != NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Anoop", 40, tree) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Pablo", 40, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonish", 64, tree, NULL) != NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Anoop", 40, tree, NULL) != NULL);
 
     SCRadixRemoveKeyGeneric((uint8_t *)"Pablo", 40, tree);
     SCRadixRemoveKeyGeneric((uint8_t *)"Jasonish", 64, tree);
     SCRadixRemoveKeyGeneric((uint8_t *)"Anoop", 40, tree);
 
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Pablo", 40, tree) == NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonish", 64, tree) == NULL);
-    result &= (SCRadixFindKeyGeneric((uint8_t *)"Anoop", 40, tree) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Pablo", 40, tree, NULL) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Jasonish", 64, tree, NULL) == NULL);
+    result &= (SCRadixFindKeyGeneric((uint8_t *)"Anoop", 40, tree, NULL) == NULL);
 
     result &= (tree->head == NULL);
 
@@ -2071,55 +2071,55 @@ int SCRadixTestIPV6Insertion07(void)
     if (inet_pton(AF_INET6, "2003:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "BD15:9791:5346:6223:AADB:8713:9882:2432",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "1111:A21B:6221:BDEA:BBBA::DBAA:9861",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "4444:0BF7:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABC2:ABCD:DBCA:1245:2342:1111:2212",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2003:0BF5:5346:1251:7422:1112:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "5555:0BF1:ABCD:ADEA:7922:ABCD:9124:2375",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBCA:1245:2342:1111:2212",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2003:0BF1:5346:1251:7422:1112:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -2191,19 +2191,19 @@ int SCRadixTestIPV6Removal08(void)
     if (inet_pton(AF_INET6, "8888:0BF1:5346:BDEA:6422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2006:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2003:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "BD15:9791:5346:6223:AADB:8713:9882:2432",
@@ -2216,37 +2216,37 @@ int SCRadixTestIPV6Removal08(void)
     if (inet_pton(AF_INET6, "1111:A21B:6221:BDEA:BBBA::DBAA:9861",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "4444:0BF7:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "5555:0BF1:ABCD:ADEA:7922:ABCD:9124:2375",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBCA:1245:2342:1111:2212",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2003:0BF1:5346:1251:7422:1112:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2003:0BF1:5346:BDEA:7422:8713:DDDD:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     /* remove keys */
     bzero(&servaddr, sizeof(servaddr));
@@ -2266,37 +2266,37 @@ int SCRadixTestIPV6Removal08(void)
     if (inet_pton(AF_INET6, "2003:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "BD15:9791:5346:6223:AADB:8713:9882:2432",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "1111:A21B:6221:BDEA:BBBA::DBAA:9861",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "4444:0BF7:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "5555:0BF1:ABCD:ADEA:7922:ABCD:9124:2375",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBCA:1245:2342:1111:2212",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     /* remove keys */
     bzero(&servaddr, sizeof(servaddr));
@@ -2328,37 +2328,37 @@ int SCRadixTestIPV6Removal08(void)
     if (inet_pton(AF_INET6, "2003:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "BD15:9791:5346:6223:AADB:8713:9882:2432",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "1111:A21B:6221:BDEA:BBBA::DBAA:9861",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "4444:0BF7:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "5555:0BF1:ABCD:ADEA:7922:ABCD:9124:2375",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBCA:1245:2342:1111:2212",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -2432,42 +2432,42 @@ int SCRadixTestIPV4NetblockInsertion09(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.168.1.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.170.1.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.145", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.64.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.191.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.224.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.174.224.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.175.224.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -2543,22 +2543,22 @@ int SCRadixTestIPV4NetblockInsertion10(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.53", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node[0]);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[0]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.45", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == node[1]);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[1]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.45", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node[1]);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[1]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node[0]);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[0]);
 
     /* let us remove a netblock */
     bzero(&servaddr, sizeof(servaddr));
@@ -2569,12 +2569,12 @@ int SCRadixTestIPV4NetblockInsertion10(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.127.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -2653,60 +2653,60 @@ int SCRadixTestIPV4NetblockInsertion11(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.53", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.45", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.127.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "1.1.1.1", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.255.254.25", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "169.255.254.25", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "0.0.0.0", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "253.224.1.5", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL &&
-               SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != node);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL &&
+               SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "245.63.62.121", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL &&
-               SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL &&
+               SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "253.224.1.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL &&
-               SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL &&
+               SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node);
 
     /* remove node 0.0.0.0 */
     bzero(&servaddr, sizeof(servaddr));
@@ -2717,32 +2717,32 @@ int SCRadixTestIPV4NetblockInsertion11(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "253.224.1.6", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.127.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "1.1.1.1", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.255.254.25", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "169.255.254.25", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "0.0.0.0", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -2817,57 +2817,57 @@ int SCRadixTestIPV4NetblockInsertion12(void)
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.53", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node[0]);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[0]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.53", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.45", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == node[1]);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[1]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.45", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node[1]);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[1]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.45", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node[1]);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[1]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.128.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) == node[0]);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == node[0]);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "192.171.127.78", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "225.175.21.228", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "225.175.21.224", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "225.175.21.229", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "225.175.21.230", &servaddr.sin_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV4ExactMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) == NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -2930,73 +2930,73 @@ int SCRadixTestIPV6NetblockInsertion13(void)
     if (inet_pton(AF_INET6, "2003:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "BD15:9791:5346:6223:AADB:8713:9882:2432",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "1111:A21B:6221:BDEA:BBBA::DBAA:9861",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "1111:A21B:6221:BDEA:BBBA::DBAA:9861",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "4444:0BF7:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABC2:ABCD:DBCA:1245:2342:1111:2212",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2003:0BF5:5346:1251:7422:1112:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "5555:0BF1:ABCD:ADEA:7922:ABCD:9124:2375",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBCA:1245:2342:1111:2212",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBAA:1245:2342:1146:6241",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBAA:1245:2342:1356:1241",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DAAA:1245:2342:1146:6241",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
 
     SCRadixReleaseRadixTree(tree);
@@ -3067,39 +3067,39 @@ int SCRadixTestIPV6NetblockInsertion14(void)
     if (inet_pton(AF_INET6, "2004:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) == NULL);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == NULL);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2004:0BF1:5346:BDEA:7422:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2004:0BF1:5346:B116:2362:8713:9124:2315",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "2004:0B23:3252:BDEA:7422:8713:9124:2341",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) == node);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) == node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBAA:1245:2342:1145:6241",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL &&
-               SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree) != node);
+    result &= (SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL &&
+               SCRadixFindKeyIPV6ExactMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != node);
 
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DBCA:ABCD:ABCD:DBAA:1245:2342:1145:6241",
                   &servaddr.sin6_addr) <= 0)
         return 0;
-    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) != NULL &&
-               SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree) != node);
+    result &= (SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != NULL &&
+               SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, NULL) != node);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -3139,21 +3139,22 @@ int SCRadixTestIPV4NetBlocksAndBestSearch15(void)
 
         SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3198,21 +3199,22 @@ int SCRadixTestIPV4NetBlocksAndBestSearch16(void)
 
         SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3257,21 +3259,22 @@ int SCRadixTestIPV4NetBlocksAndBestSearch17(void)
 
         SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3316,21 +3319,22 @@ int SCRadixTestIPV4NetBlocksAndBestSearch18(void)
 
         SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3351,6 +3355,7 @@ int SCRadixTestIPV4NetBlocksAndBestSearch19(void)
     SCRadixTree *tree = NULL;
     struct sockaddr_in servaddr;
     int result = 1;
+    void *user_data = NULL;
 
     tree = SCRadixCreateRadixTree(free, NULL);
 
@@ -3378,24 +3383,26 @@ int SCRadixTestIPV4NetBlocksAndBestSearch19(void)
         goto end;
     }
 
-    SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+    SCRadixNode *node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 100) {
+    if ( *( (uint32_t *)user_data) != 100) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
+
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "177.0.0.0", &servaddr.sin_addr) <= 0) {
         result = 0;
@@ -3418,48 +3425,51 @@ int SCRadixTestIPV4NetBlocksAndBestSearch19(void)
         goto end;
     }
 
-    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 200) {
+    if ( *( (uint32_t *)user_data) != 200) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
+
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "178.168.1.15", &servaddr.sin_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 100) {
+    if ( *( (uint32_t*)user_data) != 100) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "177.168.0.0", &servaddr.sin_addr) <= 0) {
         result = 0;
@@ -3482,92 +3492,95 @@ int SCRadixTestIPV4NetBlocksAndBestSearch19(void)
         goto end;
     }
 
-    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 300) {
+    if ( *( (uint32_t*)user_data) != 300) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "177.167.1.15", &servaddr.sin_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 300) {
+    if ( *( (uint32_t *)user_data) != 300) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "177.178.1.15", &servaddr.sin_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 200) {
+    if ( *( (uint32_t *)user_data) != 200) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET, "197.178.1.15", &servaddr.sin_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree);
+    node = SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 100) {
+    if ( *( (uint32_t *)user_data) != 100) {
         result = 0;
         goto end;
     }
@@ -3612,21 +3625,22 @@ int SCRadixTestIPV6NetBlocksAndBestSearch20(void)
 
         SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3671,21 +3685,22 @@ int SCRadixTestIPV6NetBlocksAndBestSearch21(void)
 
         SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3730,21 +3745,22 @@ int SCRadixTestIPV6NetBlocksAndBestSearch22(void)
 
         SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3789,21 +3805,22 @@ int SCRadixTestIPV6NetBlocksAndBestSearch23(void)
 
         SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, user, i);
 
-        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+        void *user_data = NULL;
+        SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
         if (node == NULL) {
             printf("node == NULL: ");
             result = 0;
             goto end;
         }
 
-        if (node->prefix->user_data_result == NULL) {
+        if (user_data == NULL) {
             printf("User data == NULL: ");
             result = 0;
             goto end;
         }
 
-        if ( *( (uint32_t*)node->prefix->user_data_result) != i) {
-            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t*)node->prefix->user_data_result), i);
+        if ( *( (uint32_t *)user_data) != i) {
+            printf("User data == %"PRIu32"; i == %"PRIu32": ", *( (uint32_t *)user_data), i);
             result = 0;
             goto end;
         }
@@ -3824,6 +3841,7 @@ int SCRadixTestIPV6NetBlocksAndBestSearch24(void)
     SCRadixTree *tree = NULL;
     struct sockaddr_in6 servaddr;
     int result = 1;
+    void *user_data = NULL;
 
     tree = SCRadixCreateRadixTree(free, NULL);
 
@@ -3851,24 +3869,25 @@ int SCRadixTestIPV6NetBlocksAndBestSearch24(void)
         goto end;
     }
 
-    SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+    SCRadixNode *node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 100) {
+    if ( *( (uint32_t*)user_data) != 100) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "ABCD::0", &servaddr.sin6_addr) <= 0) {
         result = 0;
@@ -3891,50 +3910,52 @@ int SCRadixTestIPV6NetBlocksAndBestSearch24(void)
         goto end;
     }
 
-    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 200) {
-        printf("User data == %"PRIu32"; i != 200 ", *( (uint32_t*)node->prefix->user_data_result));
+    if ( *( (uint32_t *)user_data) != 200) {
+        printf("User data == %"PRIu32"; i != 200 ", *( (uint32_t *)user_data));
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "DCBA::1", &servaddr.sin6_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 100) {
-        printf("User data == %"PRIu32"; != 100 ", *( (uint32_t*)node->prefix->user_data_result));
+    if ( *( (uint32_t *)user_data) != 100) {
+        printf("User data == %"PRIu32"; != 100 ", *( (uint32_t *)user_data));
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "ABCD:ABCD::0", &servaddr.sin6_addr) <= 0) {
         result = 0;
@@ -3957,92 +3978,95 @@ int SCRadixTestIPV6NetBlocksAndBestSearch24(void)
         goto end;
     }
 
-    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 300) {
+    if ( *( (uint32_t *)user_data) != 300) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "ABCD:AAAA::1", &servaddr.sin6_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 300) {
+    if ( *( (uint32_t *)user_data) != 300) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "ABAB::1", &servaddr.sin6_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 200) {
+    if ( *( (uint32_t *)user_data) != 200) {
         result = 0;
         goto end;
     }
 
+    user_data = NULL;
     bzero(&servaddr, sizeof(servaddr));
     if (inet_pton(AF_INET6, "CABD::1", &servaddr.sin6_addr) <= 0) {
         result = 0;
         goto end;
     }
 
-    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree);
+    node = SCRadixFindKeyIPV6BestMatch((uint8_t *)&servaddr.sin6_addr, tree, &user_data);
     if (node == NULL) {
         printf("node == NULL: ");
         result = 0;
         goto end;
     }
 
-    if (node->prefix->user_data_result == NULL) {
+    if (user_data == NULL) {
         printf("User data == NULL: ");
         result = 0;
         goto end;
     }
 
-    if ( *( (uint32_t*)node->prefix->user_data_result) != 100) {
+    if ( *( (uint32_t *)user_data) != 100) {
         result = 0;
         goto end;
     }
@@ -4078,7 +4102,7 @@ int SCRadixTestIPV4NetblockInsertion25(void)
     if (inet_pton(AF_INET, "192.168.128.53", &servaddr.sin_addr) <= 0)
         return 0;
 
-    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree) != NULL);
+    result &= (SCRadixFindKeyIPV4BestMatch((uint8_t *)&servaddr.sin_addr, tree, NULL) != NULL);
 
     SCRadixReleaseRadixTree(tree);
 
@@ -4144,88 +4168,6 @@ this_end:
     return result;
 }
 
-/**
- * \test SC_RADIX_NODE_USERDATA macro
- */
-static int SCRadixTestUserdataMacro01(void) {
-    int result = 0;
-    SCRadixNode *node = SCMalloc(sizeof(SCRadixNode));
-    if (unlikely(node == NULL)) {
-        goto end;
-    }
-    memset(node, 0x00, sizeof(*node));
-
-    void *ptr = SC_RADIX_NODE_USERDATA(node, void);
-    if (ptr != NULL) {
-        printf("ptr %p, expected NULL: ", ptr);
-        goto end;
-    }
-
-    result = 1;
-end:
-    if (node != NULL)
-        SCFree(node);
-    return result;
-}
-
-/**
- * \test SC_RADIX_NODE_USERDATA macro
- */
-static int SCRadixTestUserdataMacro02(void) {
-    SCRadixPrefix prefix;
-    int result = 0;
-    SCRadixNode *node = SCMalloc(sizeof(SCRadixNode));
-    if (unlikely(node == NULL)) {
-        goto end;
-    }
-    memset(node, 0x00, sizeof(*node));
-    memset(&prefix, 0x00, sizeof(prefix));
-
-    node->prefix = &prefix;
-
-    void *ptr = SC_RADIX_NODE_USERDATA(node, void);
-    if (ptr != NULL) {
-        printf("ptr %p, expected NULL: ", ptr);
-        goto end;
-    }
-
-    result = 1;
-end:
-    if (node != NULL)
-        SCFree(node);
-    return result;
-}
-
-/**
- * \test SC_RADIX_NODE_USERDATA macro
- */
-static int SCRadixTestUserdataMacro03(void) {
-    SCRadixPrefix prefix;
-    int result = 0;
-    void *somep = &result;
-    SCRadixNode *node = SCMalloc(sizeof(SCRadixNode));
-    if (unlikely(node == NULL)) {
-        goto end;
-    }
-    memset(node, 0x00, sizeof(*node));
-    memset(&prefix, 0x00, sizeof(prefix));
-
-    node->prefix = &prefix;
-    prefix.user_data_result = somep;
-
-    void *ptr = SC_RADIX_NODE_USERDATA(node, void);
-    if (ptr != somep) {
-        printf("ptr %p, expected %p: ", ptr, somep);
-        goto end;
-    }
-
-    result = 1;
-end:
-    if (node != NULL)
-        SCFree(node);
-    return result;
-}
-
 #endif
 
 void SCRadixRegisterTests(void)
@@ -4278,12 +4220,6 @@ void SCRadixRegisterTests(void)
                    SCRadixTestIPV4NetblockInsertion25, 1);
     UtRegisterTest("SCRadixTestIPV4NetblockInsertion26",
                    SCRadixTestIPV4NetblockInsertion26, 1);
-    UtRegisterTest("SCRadixTestUserdataMacro01",
-                   SCRadixTestUserdataMacro01, 1);
-    UtRegisterTest("SCRadixTestUserdataMacro02",
-                   SCRadixTestUserdataMacro02, 1);
-    UtRegisterTest("SCRadixTestUserdataMacro03",
-                   SCRadixTestUserdataMacro03, 1);
 #endif
 
     return;