return 0;
}
-int ndisc_router_generate_addresses(Link *link, struct in6_addr *prefix, uint8_t prefixlen, Set **ret) {
+static int generate_addresses(
+ Link *link,
+ Set *tokens,
+ const sd_id128_t *app_id,
+ const struct in6_addr *prefix,
+ uint8_t prefixlen,
+ Set **ret) {
+
_cleanup_set_free_ Set *addresses = NULL;
struct in6_addr masked;
IPv6Token *j;
int r;
assert(link);
+ assert(app_id);
assert(prefix);
assert(prefixlen > 0 && prefixlen <= 64);
assert(ret);
masked = *prefix;
in6_addr_mask(&masked, prefixlen);
- SET_FOREACH(j, link->network->ndisc_tokens) {
+ SET_FOREACH(j, tokens) {
struct in6_addr addr, *copy;
switch (j->type) {
if (in6_addr_is_set(&j->address) && !in6_addr_equal(&j->address, &masked))
continue;
- if (generate_stable_private_address(link, &NDISC_APP_ID, &masked, &addr) < 0)
+ if (generate_stable_private_address(link, app_id, &masked, &addr) < 0)
continue;
break;
return 0;
}
+int ndisc_generate_addresses(Link *link, const struct in6_addr *prefix, uint8_t prefixlen, Set **ret) {
+ return generate_addresses(link, link->network->ndisc_tokens, &NDISC_APP_ID, prefix, prefixlen, ret);
+}
+
static void ipv6_token_hash_func(const IPv6Token *p, struct siphash *state) {
siphash24_compress(&p->type, sizeof(p->type), state);
siphash24_compress(&p->address, sizeof(p->address), state);
void generate_eui64_address(const Link *link, const struct in6_addr *prefix, struct in6_addr *ret);
-int ndisc_router_generate_addresses(Link *link, struct in6_addr *address, uint8_t prefixlen, Set **ret);
+int ndisc_generate_addresses(Link *link, const struct in6_addr *prefix, uint8_t prefixlen, Set **ret);
CONFIG_PARSER_PROTOTYPE(config_parse_address_generation_type);
if (r < 0)
return log_link_error_errno(link, r, "Failed to get prefix length: %m");
- /* ndisc_router_generate_addresses() below requires the prefix length <= 64. */
+ /* ndisc_generate_addresses() below requires the prefix length <= 64. */
if (prefixlen > 64) {
_cleanup_free_ char *buf = NULL;
if (lifetime_preferred > lifetime_valid)
return 0;
- r = ndisc_router_generate_addresses(link, &prefix, prefixlen, &addresses);
+ r = ndisc_generate_addresses(link, &prefix, prefixlen, &addresses);
if (r < 0)
return log_link_error_errno(link, r, "Failed to generate SLAAC addresses: %m");