}
-const struct sockaddr *find_ipv4_in_subnet(const struct ifaddrs *addrs,
+const struct ifaddrs *find_ipv4_in_subnet(const struct ifaddrs *addrs,
const struct sockaddr_in *net,
unsigned int prefix_len) {
struct in_addr want, temp;
netmask_ipv4(cur, prefix_len, &temp);
if (temp.s_addr == want.s_addr) {
- return addrs->ifa_addr;
+ return addrs;
}
}
}
-const struct sockaddr *find_ipv6_in_subnet(const struct ifaddrs *addrs,
+const struct ifaddrs *find_ipv6_in_subnet(const struct ifaddrs *addrs,
const struct sockaddr_in6 *net,
unsigned int prefix_len) {
struct in6_addr want, temp;
netmask_ipv6(cur, prefix_len, &temp);
if (IN6_ARE_ADDR_EQUAL(&temp, &want))
- return addrs->ifa_addr;
+ return addrs;
}
return NULL;
}
-const struct sockaddr *find_ip_in_subnet(const struct ifaddrs *addrs,
+const struct ifaddrs *find_ip_in_subnet(const struct ifaddrs *addrs,
const struct sockaddr *net,
unsigned int prefix_len) {
switch (net->sa_family) {
struct sockaddr_in a_one;
struct sockaddr_in6 a_two;
struct sockaddr_in net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
struct sockaddr_in a_one;
struct sockaddr_in6 a_two;
struct sockaddr_in net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
ipv4(&net, "10.11.12.42");
result = find_ip_in_subnet(&one, (struct sockaddr*)&net, 24);
- ASSERT_EQ((struct sockaddr*)&a_one, result);
+ ASSERT_EQ((struct sockaddr*)&a_one, result->ifa_addr);
}
TEST(CommonIPAddr, TestV4_Prefix25)
struct sockaddr_in a_one;
struct sockaddr_in a_two;
struct sockaddr_in net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
ipv4(&net, "10.11.12.128");
result = find_ip_in_subnet(&one, (struct sockaddr*)&net, 25);
- ASSERT_EQ((struct sockaddr*)&a_two, result);
+ ASSERT_EQ((struct sockaddr*)&a_two, result->ifa_addr);
}
TEST(CommonIPAddr, TestV4_Prefix16)
struct sockaddr_in a_one;
struct sockaddr_in a_two;
struct sockaddr_in net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
ipv4(&net, "10.2.0.0");
result = find_ip_in_subnet(&one, (struct sockaddr*)&net, 16);
- ASSERT_EQ((struct sockaddr*)&a_two, result);
+ ASSERT_EQ((struct sockaddr*)&a_two, result->ifa_addr);
}
TEST(CommonIPAddr, TestV4_PrefixTooLong)
struct ifaddrs one;
struct sockaddr_in a_one;
struct sockaddr_in net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
struct sockaddr_in6 a_one;
struct sockaddr_in a_two;
struct sockaddr_in net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
ipv4(&net, "255.0.1.2");
result = find_ip_in_subnet(&one, (struct sockaddr*)&net, 0);
- ASSERT_EQ((struct sockaddr*)&a_two, result);
+ ASSERT_EQ((struct sockaddr*)&a_two, result->ifa_addr);
}
TEST(CommonIPAddr, TestV6_Simple)
struct sockaddr_in a_one;
struct sockaddr_in6 a_two;
struct sockaddr_in6 net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
ipv6(&net, "2001:1234:5678:90ab::dead:beef");
result = find_ip_in_subnet(&one, (struct sockaddr*)&net, 64);
- ASSERT_EQ((struct sockaddr*)&a_two, result);
+ ASSERT_EQ((struct sockaddr*)&a_two, result->ifa_addr);
}
TEST(CommonIPAddr, TestV6_Prefix57)
struct sockaddr_in6 a_one;
struct sockaddr_in6 a_two;
struct sockaddr_in6 net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
ipv6(&net, "2001:1234:5678:90ab::dead:beef");
result = find_ip_in_subnet(&one, (struct sockaddr*)&net, 57);
- ASSERT_EQ((struct sockaddr*)&a_two, result);
+ ASSERT_EQ((struct sockaddr*)&a_two, result->ifa_addr);
}
TEST(CommonIPAddr, TestV6_PrefixTooLong)
struct ifaddrs one;
struct sockaddr_in6 a_one;
struct sockaddr_in6 net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
memset(&net, '0', sizeof(net));
struct sockaddr_in a_one;
struct sockaddr_in6 a_two;
struct sockaddr_in6 net;
- const struct sockaddr *result;
+ const struct ifaddrs *result;
one.ifa_next = &two;
one.ifa_addr = (struct sockaddr*)&a_one;
ipv6(&net, "ff00::1");
result = find_ip_in_subnet(&one, (struct sockaddr*)&net, 0);
- ASSERT_EQ((struct sockaddr*)&a_two, result);
+ ASSERT_EQ((struct sockaddr*)&a_two, result->ifa_addr);
}
TEST(CommonIPAddr, ParseNetwork_Empty)