]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: address-genereation: introduce generate_addresses()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 1 Oct 2021 12:36:32 +0000 (21:36 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 6 Oct 2021 16:16:29 +0000 (01:16 +0900)
Preparation for later commits. This does not change functionality.

src/network/networkd-address-generation.c
src/network/networkd-address-generation.h
src/network/networkd-ndisc.c

index 50ae8bcc9dfeea559c68052599203a5991f41f8d..008575f7f87bf1f82f17e4e806137982093f14b2 100644 (file)
@@ -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);
index 5f67019d95a3fed088ea59411a0dc9b94d477177..fc0eaa2fe8ac40b904e3a6d86645c5de1d7819ac 100644 (file)
@@ -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);
index cb3117a58b6be73675cc67a5f2500663db5d0408..956cc273801a2e638e1816e57c2f0a6ca43d0f8d 100644 (file)
@@ -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");