]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: ndisc: read prefix earlier
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 3 Oct 2022 03:28:41 +0000 (12:28 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 3 Oct 2022 15:25:14 +0000 (00:25 +0900)
No functional changes.

src/network/networkd-ndisc.c

index 2250235d4eb17932f475ee59fe5b3e58ef798426..b1201eb00be092907efb14b95b94a694eb0ae919 100644 (file)
@@ -408,6 +408,7 @@ static int ndisc_router_process_onlink_prefix(Link *link, sd_ndisc_router *rt) {
         _cleanup_(route_freep) Route *route = NULL;
         usec_t timestamp_usec;
         uint32_t lifetime_sec;
+        struct in6_addr prefix;
         unsigned prefixlen;
         int r;
 
@@ -429,6 +430,10 @@ static int ndisc_router_process_onlink_prefix(Link *link, sd_ndisc_router *rt) {
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get RA timestamp: %m");
 
+        r = sd_ndisc_router_prefix_get_address(rt, &prefix);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
+
         r = sd_ndisc_router_prefix_get_prefixlen(rt, &prefixlen);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to get prefix length: %m");
@@ -439,13 +444,10 @@ static int ndisc_router_process_onlink_prefix(Link *link, sd_ndisc_router *rt) {
 
         route->family = AF_INET6;
         route->flags = RTM_F_PREFIX;
+        route->dst.in6 = prefix;
         route->dst_prefixlen = prefixlen;
         route->lifetime_usec = sec_to_usec(lifetime_sec, timestamp_usec);
 
-        r = sd_ndisc_router_prefix_get_address(rt, &route->dst.in6);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Failed to get prefix address: %m");
-
         r = ndisc_request_route(TAKE_PTR(route), link, rt);
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not request prefix route: %m");