|
|
|
@ -2220,6 +2220,197 @@ static int SCRadixTestIPV6Removal08(void)
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Bug #5066
|
|
|
|
|
*
|
|
|
|
|
* insert:
|
|
|
|
|
* - 100.117.241.0/25: 100.117.241.0 - 100.117.241.127
|
|
|
|
|
* - 100.117.241.0/26: 100.117.241.0 - 100.117.241.63
|
|
|
|
|
*
|
|
|
|
|
* check:
|
|
|
|
|
* - 100.117.241.64/26: 100.117.241.64 - 100.117.241.127
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
static int SCRadixTestIPV4Bug5066(void)
|
|
|
|
|
{
|
|
|
|
|
struct sockaddr_in servaddr;
|
|
|
|
|
SCRadixNode *node = NULL;
|
|
|
|
|
|
|
|
|
|
SCLogDebug("setup tree");
|
|
|
|
|
SCRadixTree *tree = SCRadixCreateRadixTree(free, NULL);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "100.117.241.0", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCLogDebug("add 100.117.241.0/25");
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1"), 25);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
SCLogDebug("find 100.117.241.0/25");
|
|
|
|
|
char *r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 25, (void **)&r);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCLogDebug("add 100.117.241.0/26");
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "100.117.241.0", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("2"), 26);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
SCLogDebug("find 100.117.241.0/26");
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, NULL);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCLogDebug("find 100.117.241.64/26 (should fail)");
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "100.117.241.64", &servaddr.sin_addr) <= 0);
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, NULL);
|
|
|
|
|
FAIL_IF_NOT_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCLogDebug("add 100.117.241.64/26");
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("3"), 26);
|
|
|
|
|
SCLogDebug("find 100.117.241.64/26 (should succeed)");
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, NULL);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
|
|
|
|
|
SCRadixReleaseRadixTree(tree);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void SCRadixTestIPV4Bug5066v2PrintData(void *d)
|
|
|
|
|
{
|
|
|
|
|
const char *s = d;
|
|
|
|
|
printf("%s", s);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int SCRadixTestIPV4Bug5066v2(void)
|
|
|
|
|
{
|
|
|
|
|
struct sockaddr_in servaddr;
|
|
|
|
|
SCRadixNode *node = NULL;
|
|
|
|
|
|
|
|
|
|
SCLogDebug("setup tree");
|
|
|
|
|
SCRadixTree *tree = SCRadixCreateRadixTree(free, SCRadixTestIPV4Bug5066v2PrintData);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "1.2.3.0", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.0/24"), 24);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
char *r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 24, (void **)&r);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
FAIL_IF_NOT(strcmp(r, "1.2.3.0/24") == 0);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "1.2.3.0", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.0/25"), 25);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 25, (void **)&r);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
FAIL_IF_NOT(strcmp(r, "1.2.3.0/25") == 0);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "1.2.3.0", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.0/26"), 26);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, (void **)&r);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
FAIL_IF_NOT(strcmp(r, "1.2.3.0/26") == 0);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "1.2.3.64", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.64/26"), 26);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 26, (void **)&r);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
FAIL_IF_NOT(strcmp(r, "1.2.3.64/26") == 0);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "1.2.3.64", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.64/27"), 27);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 27, (void **)&r);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
FAIL_IF_NOT(strcmp(r, "1.2.3.64/27") == 0);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET, "1.2.3.96", &servaddr.sin_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, strdup("1.2.3.96/27"), 27);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV4Netblock((uint8_t *)&servaddr.sin_addr, tree, 27, (void **)&r);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCLogNotice("node:");
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
FAIL_IF_NOT(strcmp(r, "1.2.3.96/27") == 0);
|
|
|
|
|
|
|
|
|
|
SCRadixReleaseRadixTree(tree);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Bug #5066
|
|
|
|
|
*/
|
|
|
|
|
static int SCRadixTestIPV6Bug5066(void)
|
|
|
|
|
{
|
|
|
|
|
struct sockaddr_in6 servaddr;
|
|
|
|
|
SCRadixNode *node = NULL;
|
|
|
|
|
|
|
|
|
|
SCLogDebug("setup tree");
|
|
|
|
|
SCRadixTree *tree = SCRadixCreateRadixTree(free, NULL);
|
|
|
|
|
|
|
|
|
|
memset(&servaddr, 0, sizeof(servaddr));
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET6, "2000::1:0", &servaddr.sin6_addr) <= 0);
|
|
|
|
|
SCLogDebug("add 2000::1:0/121");
|
|
|
|
|
SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, strdup("1"), 121);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
SCLogDebug("find 2000::1:0/121");
|
|
|
|
|
char *r = NULL;
|
|
|
|
|
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 121, (void **)&r);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCLogDebug("add 2000::1:0/122");
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET6, "2000::1:0", &servaddr.sin6_addr) <= 0);
|
|
|
|
|
SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, strdup("2"), 122);
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
SCLogDebug("find 2000::1:0/122");
|
|
|
|
|
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 122, NULL);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCLogDebug("find 2000::1:64/122 (should fail)");
|
|
|
|
|
FAIL_IF(inet_pton(AF_INET6, "2000::1:64", &servaddr.sin6_addr) <= 0);
|
|
|
|
|
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 122, NULL);
|
|
|
|
|
FAIL_IF_NOT_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCLogDebug("add 2000::1:64/122");
|
|
|
|
|
SCRadixAddKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, strdup("3"), 122);
|
|
|
|
|
SCLogDebug("find 2000::1:64/122 (should succeed)");
|
|
|
|
|
node = SCRadixFindKeyIPV6Netblock((uint8_t *)&servaddr.sin6_addr, tree, 122, NULL);
|
|
|
|
|
FAIL_IF_NULL(node);
|
|
|
|
|
SCRadixPrintNodeInfo(node, 0, NULL);
|
|
|
|
|
|
|
|
|
|
SCRadixPrintTree(tree);
|
|
|
|
|
|
|
|
|
|
SCRadixReleaseRadixTree(tree);
|
|
|
|
|
PASS;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static int SCRadixTestIPV4NetblockInsertion09(void)
|
|
|
|
|
{
|
|
|
|
|
SCRadixTree *tree = NULL;
|
|
|
|
@ -4035,6 +4226,9 @@ void SCRadixRegisterTests(void)
|
|
|
|
|
UtRegisterTest("SCRadixTestIPV6Removal08", SCRadixTestIPV6Removal08);
|
|
|
|
|
UtRegisterTest("SCRadixTestIPV4NetblockInsertion09",
|
|
|
|
|
SCRadixTestIPV4NetblockInsertion09);
|
|
|
|
|
UtRegisterTest("SCRadixTestIPV4Bug5066", SCRadixTestIPV4Bug5066);
|
|
|
|
|
UtRegisterTest("SCRadixTestIPV4Bug5066v2", SCRadixTestIPV4Bug5066v2);
|
|
|
|
|
UtRegisterTest("SCRadixTestIPV6Bug5066", SCRadixTestIPV6Bug5066);
|
|
|
|
|
UtRegisterTest("SCRadixTestIPV4NetblockInsertion10",
|
|
|
|
|
SCRadixTestIPV4NetblockInsertion10);
|
|
|
|
|
UtRegisterTest("SCRadixTestIPV4NetblockInsertion11",
|
|
|
|
|