sd-ndisc: drop sd_ndisc_get_prefixlen()
This is unused, and in the future we will pass prefixes and prefixlengths directly to the callbacks when needed rather than having to search for them.
This commit is contained in:
@@ -316,24 +316,6 @@ static int ndisc_prefix_match(sd_ndisc *nd, const struct in6_addr *addr,
|
||||
return -EADDRNOTAVAIL;
|
||||
}
|
||||
|
||||
int sd_ndisc_get_prefixlen(sd_ndisc *nd, const struct in6_addr *addr,
|
||||
uint8_t *prefixlen) {
|
||||
int r;
|
||||
NDiscPrefix *prefix;
|
||||
|
||||
assert_return(nd, -EINVAL);
|
||||
assert_return(addr, -EINVAL);
|
||||
assert_return(prefixlen, -EINVAL);
|
||||
|
||||
r = ndisc_prefix_match(nd, addr, sizeof(addr->s6_addr) * 8, &prefix);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
*prefixlen = prefix->len;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ndisc_prefix_update(sd_ndisc *nd, ssize_t len,
|
||||
const struct nd_opt_prefix_info *prefix_opt) {
|
||||
NDiscPrefix *prefix;
|
||||
|
||||
@@ -53,191 +53,6 @@ int icmp6_bind_router_solicitation(int index) {
|
||||
return test_fd[0];
|
||||
}
|
||||
|
||||
static int send_ra_short_prefix(uint8_t flags) {
|
||||
uint8_t advertisement[] = {
|
||||
0x86, 0x00, 0xbe, 0xd7, 0x40, 0xc0, 0x00, 0xb4,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
||||
0x03, 0x04, 0x34, 0xc0, 0x00, 0x00, 0x01, 0xf4,
|
||||
0x00, 0x00, 0x01, 0xb8, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||
};
|
||||
|
||||
assert_se(write(test_fd[1], advertisement, sizeof(advertisement)) ==
|
||||
sizeof(advertisement));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void test_short_prefix_cb(sd_ndisc *nd, int event, void *userdata) {
|
||||
sd_event *e = userdata;
|
||||
struct {
|
||||
struct in6_addr addr;
|
||||
uint8_t prefixlen;
|
||||
bool success;
|
||||
} addrs[] = {
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
52, true },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0x0d, 0xad,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
64, false },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0x0b, 0x16, 0xd0, 0x0d,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
60, true },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x9d, 0xab, 0xcd,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
64, true },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xed,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } },
|
||||
52, true },
|
||||
};
|
||||
uint8_t prefixlen;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(addrs); i++) {
|
||||
printf(" %s prefix %02x%02x:%02x%02x:%02x%02x:%02x%02x",
|
||||
__FUNCTION__,
|
||||
addrs[i].addr.s6_addr[0], addrs[i].addr.s6_addr[1],
|
||||
addrs[i].addr.s6_addr[2], addrs[i].addr.s6_addr[3],
|
||||
addrs[i].addr.s6_addr[4], addrs[i].addr.s6_addr[5],
|
||||
addrs[i].addr.s6_addr[6], addrs[i].addr.s6_addr[7]);
|
||||
|
||||
if (addrs[i].success) {
|
||||
assert_se(sd_ndisc_get_prefixlen(nd, &addrs[i].addr,
|
||||
&prefixlen) >= 0);
|
||||
assert_se(addrs[i].prefixlen == prefixlen);
|
||||
printf("/%d onlink\n", prefixlen);
|
||||
} else {
|
||||
assert_se(sd_ndisc_get_prefixlen(nd, &addrs[i].addr,
|
||||
&prefixlen) == -EADDRNOTAVAIL);
|
||||
printf("/128 offlink\n");
|
||||
}
|
||||
}
|
||||
|
||||
sd_event_exit(e, 0);
|
||||
}
|
||||
|
||||
static int send_ra_prefixes(uint8_t flags) {
|
||||
uint8_t advertisement[] = {
|
||||
0x86, 0x00, 0xbe, 0xd7, 0x40, 0xc0, 0x00, 0xb4,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x03, 0x04, 0x3f, 0xc0, 0x00, 0x00, 0x01, 0xf4,
|
||||
0x00, 0x00, 0x01, 0xb8, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x03, 0x04, 0x40, 0x00, 0x00, 0x00, 0x02, 0x58,
|
||||
0x00, 0x00, 0x02, 0x1c, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0x0d, 0xad,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x03, 0x04, 0x3c, 0x80, 0x00, 0x00, 0x03, 0x84,
|
||||
0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, 0x01, 0x0d, 0xb8, 0x0b, 0x16, 0xd0, 0x0d,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x03, 0x04, 0x40, 0xc0, 0x00, 0x00, 0x03, 0x84,
|
||||
0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, 0x01, 0x0d, 0xb8, 0x00, 0x9d, 0xab, 0xcd,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x19, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
|
||||
0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
|
||||
0x03, 0x6c, 0x61, 0x62, 0x05, 0x69, 0x6e, 0x74,
|
||||
0x72, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x01, 0x78, 0x2b, 0xcb, 0xb3, 0x6d, 0x53
|
||||
};
|
||||
|
||||
assert_se(write(test_fd[1], advertisement, sizeof(advertisement)) ==
|
||||
sizeof(advertisement));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void test_prefixes_cb(sd_ndisc *nd, int event, void *userdata) {
|
||||
sd_event *e = userdata;
|
||||
struct {
|
||||
struct in6_addr addr;
|
||||
uint8_t prefixlen;
|
||||
bool success;
|
||||
} addrs[] = {
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
63, true },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0x0d, 0xad,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
64, false },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0x0b, 0x16, 0xd0, 0x0d,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
60, true },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0x00, 0x9d, 0xab, 0xcd,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
|
||||
64, true },
|
||||
{ { { { 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xed,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } },
|
||||
63, false },
|
||||
};
|
||||
uint8_t prefixlen;
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ELEMENTSOF(addrs); i++) {
|
||||
printf(" %s prefix %02x%02x:%02x%02x:%02x%02x:%02x%02x",
|
||||
__FUNCTION__,
|
||||
addrs[i].addr.s6_addr[0], addrs[i].addr.s6_addr[1],
|
||||
addrs[i].addr.s6_addr[2], addrs[i].addr.s6_addr[3],
|
||||
addrs[i].addr.s6_addr[4], addrs[i].addr.s6_addr[5],
|
||||
addrs[i].addr.s6_addr[6], addrs[i].addr.s6_addr[7]);
|
||||
|
||||
if (addrs[i].success) {
|
||||
assert_se(sd_ndisc_get_prefixlen(nd, &addrs[i].addr,
|
||||
&prefixlen) >= 0);
|
||||
assert_se(addrs[i].prefixlen == prefixlen);
|
||||
printf("/%d onlink\n", prefixlen);
|
||||
} else {
|
||||
assert_se(sd_ndisc_get_prefixlen(nd, &addrs[i].addr,
|
||||
&prefixlen) == -EADDRNOTAVAIL);
|
||||
printf("/128 offlink\n");
|
||||
}
|
||||
}
|
||||
|
||||
send_ra_function = send_ra_short_prefix;
|
||||
assert_se(sd_ndisc_set_callback(nd, test_short_prefix_cb, e) >= 0);
|
||||
assert_se(sd_ndisc_stop(nd) >= 0);
|
||||
assert_se(sd_ndisc_router_discovery_start(nd) >= 0);
|
||||
}
|
||||
|
||||
static void test_prefixes(void) {
|
||||
sd_event *e;
|
||||
sd_ndisc *nd;
|
||||
|
||||
if (verbose)
|
||||
printf("* %s\n", __FUNCTION__);
|
||||
|
||||
send_ra_function = send_ra_prefixes;
|
||||
|
||||
assert_se(sd_event_new(&e) >= 0);
|
||||
|
||||
assert_se(sd_ndisc_new(&nd) >= 0);
|
||||
assert_se(nd);
|
||||
|
||||
assert_se(sd_ndisc_attach_event(nd, e, 0) >= 0);
|
||||
|
||||
assert_se(sd_ndisc_set_index(nd, 42) >= 0);
|
||||
assert_se(sd_ndisc_set_mac(nd, &mac_addr) >= 0);
|
||||
assert_se(sd_ndisc_set_callback(nd, test_prefixes_cb, e) >= 0);
|
||||
|
||||
assert_se(sd_ndisc_router_discovery_start(nd) >= 0);
|
||||
|
||||
sd_event_loop(e);
|
||||
|
||||
nd = sd_ndisc_unref(nd);
|
||||
assert_se(!nd);
|
||||
|
||||
close(test_fd[1]);
|
||||
|
||||
sd_event_unref(e);
|
||||
}
|
||||
|
||||
static int send_ra(uint8_t flags) {
|
||||
uint8_t advertisement[] = {
|
||||
0x86, 0x00, 0xde, 0x83, 0x40, 0xc0, 0x00, 0xb4,
|
||||
@@ -351,7 +166,6 @@ int main(int argc, char *argv[]) {
|
||||
log_open();
|
||||
|
||||
test_rs();
|
||||
test_prefixes();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -52,8 +52,6 @@ sd_ndisc *sd_ndisc_unref(sd_ndisc *nd);
|
||||
int sd_ndisc_new(sd_ndisc **ret);
|
||||
|
||||
int sd_ndisc_get_mtu(sd_ndisc *nd, uint32_t *mtu);
|
||||
int sd_ndisc_get_prefixlen(sd_ndisc *nd, const struct in6_addr *addr,
|
||||
uint8_t *prefixlen);
|
||||
|
||||
int sd_ndisc_stop(sd_ndisc *nd);
|
||||
int sd_ndisc_router_discovery_start(sd_ndisc *nd);
|
||||
|
||||
Reference in New Issue
Block a user