]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/ndisc: set provider address in caller
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 11 Apr 2024 03:00:52 +0000 (12:00 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 11 Apr 2024 06:56:01 +0000 (15:56 +0900)
Follow-up for 43d184682d640e438ad140b0743e2fd258455b12.

No functional change, just refactoring.

src/network/networkd-ndisc.c

index 7473a926d43ffd83b167bc2995c3cc57ac9ac30f..47d973ad8295d5ab0c3e99ba963967ca3472dab4 100644 (file)
@@ -327,20 +327,14 @@ static int ndisc_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Reques
         return 1;
 }
 
-static int ndisc_request_address(Address *address, Link *link, sd_ndisc_router *rt) {
+static int ndisc_request_address(Address *address, Link *link) {
         bool is_new;
         int r;
 
         assert(address);
         assert(link);
 
-        if (rt) {
-                r = sd_ndisc_router_get_sender_address(rt, &address->provider.in6);
-                if (r < 0)
-                        return r;
-
-                address->source = NETWORK_CONFIG_SOURCE_NDISC;
-        }
+        address->source = NETWORK_CONFIG_SOURCE_NDISC;
 
         r = free_and_strdup_warn(&address->netlabel, link->network->ndisc_netlabel);
         if (r < 0)
@@ -388,7 +382,7 @@ int ndisc_reconfigure_address(Address *address, Link *link) {
         if (r <= 0)
                 return r;
 
-        r = ndisc_request_address(address, link, NULL);
+        r = ndisc_request_address(address, link);
         if (r < 0)
                 return r;
 
@@ -1081,7 +1075,7 @@ static int ndisc_router_process_mtu(Link *link, sd_ndisc_router *rt) {
 
 static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *rt) {
         usec_t lifetime_valid_usec, lifetime_preferred_usec;
-        struct in6_addr prefix;
+        struct in6_addr prefix, router;
         uint8_t prefixlen;
         int r;
 
@@ -1092,6 +1086,10 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r
         if (!link->network->ndisc_use_autonomous_prefix)
                 return 0;
 
+        r = sd_ndisc_router_get_sender_address(rt, &router);
+        if (r < 0)
+                return log_link_warning_errno(link, r, "Failed to get router address: %m");
+
         r = sd_ndisc_router_prefix_get_address(rt, &prefix);
         if (r < 0)
                 return log_link_warning_errno(link, r, "Failed to get prefix address: %m");
@@ -1133,6 +1131,7 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r
                 if (r < 0)
                         return log_oom();
 
+                address->provider.in6 = router;
                 address->family = AF_INET6;
                 address->in_addr.in6 = *a;
                 address->prefixlen = prefixlen;
@@ -1153,7 +1152,7 @@ static int ndisc_router_process_autonomous_prefix(Link *link, sd_ndisc_router *r
                         if (r < 0)
                                 return log_link_warning_errno(link, r, "Could not remove SLAAC address: %m");
                 } else {
-                        r = ndisc_request_address(address, link, rt);
+                        r = ndisc_request_address(address, link);
                         if (r < 0)
                                 return log_link_warning_errno(link, r, "Could not request SLAAC address: %m");
                 }