in-addr-util: several cleanups (#43656)
This commit is contained in:
@@ -56,14 +56,14 @@ TEST(v4) {
|
||||
|
||||
ASSERT_NOT_NULL(nfnl);
|
||||
|
||||
ASSERT_ERROR(fw_nftables_add_masquerade(nfnl, true, AF_INET, NULL, 0), EINVAL);
|
||||
ASSERT_ERROR(fw_nftables_add_masquerade(nfnl, true, AF_INET, parse_addr("10.1.2.0", &u), 0), EINVAL);
|
||||
|
||||
ASSERT_OK_OR(r = fw_nftables_add_masquerade(nfnl, true, AF_INET, parse_addr("10.1.2.3", &u), 32),
|
||||
-EPERM, -EOPNOTSUPP, -ENOPROTOOPT);
|
||||
if (r < 0)
|
||||
return (void) log_tests_skipped_errno(r, "Failed to add IPv4 masquerade");
|
||||
|
||||
ASSERT_OK(fw_nftables_add_masquerade(nfnl, true, AF_INET, parse_addr("10.1.2.0", &u), 0));
|
||||
ASSERT_ERROR(fw_nftables_add_masquerade(nfnl, true, AF_INET, parse_addr("10.0.2.0", &u), 28), EEXIST);
|
||||
ASSERT_OK(fw_nftables_add_masquerade(nfnl, false, AF_INET, parse_addr("10.1.2.0", &u), 0));
|
||||
ASSERT_OK(fw_nftables_add_masquerade(nfnl, true, AF_INET, parse_addr("10.0.2.0", &u), 28));
|
||||
ASSERT_OK(fw_nftables_add_masquerade(nfnl, false, AF_INET, parse_addr("10.0.2.0", &u), 28));
|
||||
ASSERT_OK(fw_nftables_add_masquerade(nfnl, false, AF_INET, parse_addr("10.1.2.3", &u), 32));
|
||||
|
||||
@@ -213,85 +213,6 @@ TEST(in_addr_prefix_intersect) {
|
||||
test_in_addr_prefix_intersect_one(AF_INET6, "1::1", 121, "1::00ff", 121, 0);
|
||||
}
|
||||
|
||||
static void test_in_addr_prefix_next_one(unsigned f, const char *before, unsigned pl, const char *after) {
|
||||
union in_addr_union ubefore, uafter, t;
|
||||
|
||||
log_debug("/* %s(%s, prefixlen=%u) */", __func__, before, pl);
|
||||
|
||||
assert_se(in_addr_from_string(f, before, &ubefore) >= 0);
|
||||
|
||||
t = ubefore;
|
||||
assert_se((in_addr_prefix_next(f, &t, pl) >= 0) == !!after);
|
||||
|
||||
if (after) {
|
||||
assert_se(in_addr_from_string(f, after, &uafter) >= 0);
|
||||
assert_se(in_addr_equal(f, &t, &uafter) > 0);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(in_addr_prefix_next) {
|
||||
test_in_addr_prefix_next_one(AF_INET, "192.168.0.0", 24, "192.168.1.0");
|
||||
test_in_addr_prefix_next_one(AF_INET, "192.168.0.0", 16, "192.169.0.0");
|
||||
test_in_addr_prefix_next_one(AF_INET, "192.168.0.0", 20, "192.168.16.0");
|
||||
|
||||
test_in_addr_prefix_next_one(AF_INET, "0.0.0.0", 32, "0.0.0.1");
|
||||
test_in_addr_prefix_next_one(AF_INET, "255.255.255.254", 32, "255.255.255.255");
|
||||
test_in_addr_prefix_next_one(AF_INET, "255.255.255.255", 32, NULL);
|
||||
test_in_addr_prefix_next_one(AF_INET, "255.255.255.0", 24, NULL);
|
||||
|
||||
test_in_addr_prefix_next_one(AF_INET6, "4400::", 128, "4400::0001");
|
||||
test_in_addr_prefix_next_one(AF_INET6, "4400::", 120, "4400::0100");
|
||||
test_in_addr_prefix_next_one(AF_INET6, "4400::", 127, "4400::0002");
|
||||
test_in_addr_prefix_next_one(AF_INET6, "4400::", 8, "4500::");
|
||||
test_in_addr_prefix_next_one(AF_INET6, "4400::", 7, "4600::");
|
||||
|
||||
test_in_addr_prefix_next_one(AF_INET6, "::", 128, "::1");
|
||||
|
||||
test_in_addr_prefix_next_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 128, NULL);
|
||||
test_in_addr_prefix_next_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00", 120, NULL);
|
||||
}
|
||||
|
||||
static void test_in_addr_prefix_nth_one(unsigned f, const char *before, unsigned pl, uint64_t nth, const char *after) {
|
||||
union in_addr_union ubefore, uafter, t;
|
||||
|
||||
log_debug("/* %s(%s, prefixlen=%u, nth=%"PRIu64") */", __func__, before, pl, nth);
|
||||
|
||||
assert_se(in_addr_from_string(f, before, &ubefore) >= 0);
|
||||
|
||||
t = ubefore;
|
||||
assert_se((in_addr_prefix_nth(f, &t, pl, nth) >= 0) == !!after);
|
||||
|
||||
if (after) {
|
||||
assert_se(in_addr_from_string(f, after, &uafter) >= 0);
|
||||
assert_se(in_addr_equal(f, &t, &uafter) > 0);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(in_addr_prefix_nth) {
|
||||
test_in_addr_prefix_nth_one(AF_INET, "192.168.0.0", 24, 0, "192.168.0.0");
|
||||
test_in_addr_prefix_nth_one(AF_INET, "192.168.0.123", 24, 0, "192.168.0.0");
|
||||
test_in_addr_prefix_nth_one(AF_INET, "192.168.0.123", 24, 1, "192.168.1.0");
|
||||
test_in_addr_prefix_nth_one(AF_INET, "192.168.0.0", 24, 4, "192.168.4.0");
|
||||
test_in_addr_prefix_nth_one(AF_INET, "192.168.0.0", 25, 1, "192.168.0.128");
|
||||
test_in_addr_prefix_nth_one(AF_INET, "192.168.255.0", 25, 1, "192.168.255.128");
|
||||
test_in_addr_prefix_nth_one(AF_INET, "192.168.255.0", 24, 0, "192.168.255.0");
|
||||
test_in_addr_prefix_nth_one(AF_INET, "255.255.255.255", 32, 1, NULL);
|
||||
test_in_addr_prefix_nth_one(AF_INET, "255.255.255.255", 0, 1, NULL);
|
||||
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "4400::", 8, 1, "4500::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "4400::", 7, 1, "4600::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "4400::", 64, 1, "4400:0:0:1::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "4400::", 64, 2, "4400:0:0:2::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "4400::", 64, 0xbad, "4400:0:0:0bad::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "4400:0:0:ffff::", 64, 1, "4400:0:1::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "4400::", 56, ((uint64_t)1<<48) -1, "44ff:ffff:ffff:ff00::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "0000::", 8, 255, "ff00::");
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "0000::", 8, 256, NULL);
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 128, 1, NULL);
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 0, 1, NULL);
|
||||
test_in_addr_prefix_nth_one(AF_INET6, "1234:5678:90ab:cdef:1234:5678:90ab:cdef", 12, 1, "1240::");
|
||||
}
|
||||
|
||||
static void test_in_addr_prefix_range_one(
|
||||
int family,
|
||||
const char *in,
|
||||
@@ -299,38 +220,94 @@ static void test_in_addr_prefix_range_one(
|
||||
const char *expected_start,
|
||||
const char *expected_end) {
|
||||
|
||||
union in_addr_union a, s, e;
|
||||
assert(!expected_start == !expected_end);
|
||||
|
||||
log_debug("/* %s(%s, prefixlen=%u) */", __func__, in, prefixlen);
|
||||
|
||||
assert_se(in_addr_from_string(family, in, &a) >= 0);
|
||||
assert_se((in_addr_prefix_range(family, &a, prefixlen, &s, &e) >= 0) == !!expected_start);
|
||||
union in_addr_union a, s, e;
|
||||
ASSERT_OK(in_addr_from_string(family, in, &a));
|
||||
|
||||
if (expected_start) {
|
||||
union in_addr_union es;
|
||||
|
||||
assert_se(in_addr_from_string(family, expected_start, &es) >= 0);
|
||||
assert_se(in_addr_equal(family, &s, &es) > 0);
|
||||
if (!expected_start) {
|
||||
ASSERT_ERROR(in_addr_prefix_range(family, &a, prefixlen, NULL, NULL), EINVAL);
|
||||
ASSERT_ERROR(in_addr_prefix_range(family, &a, prefixlen, &s, NULL), EINVAL);
|
||||
ASSERT_ERROR(in_addr_prefix_range(family, &a, prefixlen, NULL, &e), EINVAL);
|
||||
ASSERT_ERROR(in_addr_prefix_range(family, &a, prefixlen, &s, &e), EINVAL);
|
||||
return;
|
||||
}
|
||||
if (expected_end) {
|
||||
union in_addr_union ee;
|
||||
|
||||
assert_se(in_addr_from_string(family, expected_end, &ee) >= 0);
|
||||
assert_se(in_addr_equal(family, &e, &ee) > 0);
|
||||
}
|
||||
ASSERT_OK(in_addr_prefix_range(family, &a, prefixlen, NULL, NULL));
|
||||
ASSERT_OK(in_addr_prefix_range(family, &a, prefixlen, &s, NULL));
|
||||
ASSERT_OK(in_addr_prefix_range(family, &a, prefixlen, NULL, &e));
|
||||
ASSERT_OK(in_addr_prefix_range(family, &a, prefixlen, &s, &e));
|
||||
|
||||
union in_addr_union es;
|
||||
ASSERT_OK(in_addr_from_string(family, expected_start, &es));
|
||||
ASSERT_OK_POSITIVE(in_addr_equal(family, &s, &es));
|
||||
|
||||
union in_addr_union ee;
|
||||
ASSERT_OK(in_addr_from_string(family, expected_end, &ee));
|
||||
ASSERT_OK_POSITIVE(in_addr_equal(family, &e, &ee));
|
||||
}
|
||||
|
||||
TEST(in_addr_prefix_range) {
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 24, "192.168.123.0", "192.168.124.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 0, "0.0.0.0", "0.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 1, "128.0.0.0", "0.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 2, "192.0.0.0", "0.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 3, "192.0.0.0", "224.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 4, "192.0.0.0", "208.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 5, "192.0.0.0", "200.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 6, "192.0.0.0", "196.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 7, "192.0.0.0", "194.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 8, "192.0.0.0", "193.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 9, "192.128.0.0", "193.0.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 10, "192.128.0.0", "192.192.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 16, "192.168.0.0", "192.169.0.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 24, "192.168.123.0", "192.168.124.0");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 32, "192.168.123.123", "192.168.123.124");
|
||||
test_in_addr_prefix_range_one(AF_INET, "192.168.123.123", 33, NULL, NULL);
|
||||
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 0, "::", "::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 1, "8000::", "::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 2, "c000::", "::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 3, "c000::", "e000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 4, "d000::", "e000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 7, "de00::", "e000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 8, "de00::", "df00::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 9, "de80::", "df00::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 16, "dead:0000::", "deae:0000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 17, "dead:8000::", "deae:0000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 18, "dead:8000::", "dead:c000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 19, "dead:a000::", "dead:c000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 20, "dead:b000::", "dead:c000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 21, "dead:b800::", "dead:c000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 28, "dead:bee0::", "dead:bef0::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 29, "dead:bee8::", "dead:bef0::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 30, "dead:beec::", "dead:bef0::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 31, "dead:beee::", "dead:bef0::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 32, "dead:beef::", "dead:bef0::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 33, "dead:beef::", "dead:beef:8000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 64, "dead:beef::", "dead:beef:0:1::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 128, "dead:beef::", "dead:beef::1");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 129, NULL, NULL);
|
||||
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef::", 64, "dead:beef::", "dead:beef:0:1::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:0:0:beef::", 64, "dead:0:0:beef::", "dead:0:0:bef0::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "dead:beef:0:ffff::", 64, "dead:beef:0:ffff::", "dead:beef:1::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", 128, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff", "::");
|
||||
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 0, "::", "::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 1, "::", "8000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 2, "::", "4000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 3, "2000::", "4000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 4, "2000::", "3000::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 8, "2000::", "2100::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 16, "2001::", "2002::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 48, "2001::", "2001:0:1::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 56, "2001::", "2001:0:0:0100::");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 65, "2001::", "2001::8000:0:0:0");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 66, "2001::", "2001::4000:0:0:0");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 127, "2001::", "2001::2");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 128, "2001::", "2001::1");
|
||||
test_in_addr_prefix_range_one(AF_INET6, "2001::", 129, NULL, NULL);
|
||||
}
|
||||
|
||||
static void test_in_addr_to_string_one(int f, const char *addr) {
|
||||
|
||||
Reference in New Issue
Block a user