diff --git a/src/network/networkd-address-generation.c b/src/network/networkd-address-generation.c index 50ae8bcc9d..008575f7f8 100644 --- a/src/network/networkd-address-generation.c +++ b/src/network/networkd-address-generation.c @@ -150,13 +150,21 @@ static int generate_stable_private_address( 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); @@ -164,7 +172,7 @@ int ndisc_router_generate_addresses(Link *link, struct in6_addr *prefix, uint8_t 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) { @@ -177,7 +185,7 @@ int ndisc_router_generate_addresses(Link *link, struct in6_addr *prefix, uint8_t 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; @@ -214,6 +222,10 @@ int ndisc_router_generate_addresses(Link *link, struct in6_addr *prefix, uint8_t 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); diff --git a/src/network/networkd-address-generation.h b/src/network/networkd-address-generation.h index 5f67019d95..fc0eaa2fe8 100644 --- a/src/network/networkd-address-generation.h +++ b/src/network/networkd-address-generation.h @@ -9,6 +9,6 @@ typedef struct Link Link; 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); diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c index cb3117a58b..956cc27380 100644 --- a/src/network/networkd-ndisc.c +++ b/src/network/networkd-ndisc.c @@ -404,7 +404,7 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r 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; @@ -430,7 +430,7 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r 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");