From c30f9aafedcb6d515631341a30997b3e5123c0a8 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 1 Nov 2021 10:35:43 +0900 Subject: [PATCH] network: save server address to DHCPv6 addresses The server address will be used in later commits. --- src/network/networkd-dhcp6.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c index 3cc457a02d5..170cf7d57db 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -1129,6 +1129,7 @@ simple_log: static int dhcp6_request_address( Link *link, + const struct in6_addr *server_address, const struct in6_addr *ip6_addr, usec_t lifetime_preferred_usec, usec_t lifetime_valid_usec) { @@ -1142,6 +1143,7 @@ static int dhcp6_request_address( return log_oom(); addr->source = NETWORK_CONFIG_SOURCE_DHCP6; + addr->provider.in6 = *server_address; addr->family = AF_INET6; addr->in_addr.in6 = *ip6_addr; addr->flags = IFA_F_NOPREFIXROUTE; @@ -1169,6 +1171,7 @@ static int dhcp6_request_address( } static int dhcp6_address_acquired(Link *link) { + struct in6_addr server_address; usec_t timestamp_usec; int r; @@ -1179,6 +1182,10 @@ static int dhcp6_address_acquired(Link *link) { if (!link->network->dhcp6_use_address) return 0; + r = sd_dhcp6_lease_get_server_address(link->dhcp6_lease, &server_address); + if (r < 0) + return log_link_warning_errno(link, r, "Failed to get server address of DHCPv6 lease: %m"); + r = sd_dhcp6_lease_get_timestamp(link->dhcp6_lease, clock_boottime_or_monotonic(), ×tamp_usec); if (r < 0) return log_link_warning_errno(link, r, "Failed to get timestamp of DHCPv6 lease: %m"); @@ -1191,7 +1198,7 @@ static int dhcp6_address_acquired(Link *link) { if (r < 0) break; - r = dhcp6_request_address(link, &ip6_addr, + r = dhcp6_request_address(link, &server_address, &ip6_addr, usec_add(lifetime_preferred_sec * USEC_PER_SEC, timestamp_usec), usec_add(lifetime_valid_sec * USEC_PER_SEC, timestamp_usec)); if (r < 0) -- 2.47.3