]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp6-client: introduce sd_dhcp6_lease_has_pd_prefix() and friend
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 4 Sep 2023 18:11:53 +0000 (03:11 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 20 Sep 2023 18:59:00 +0000 (03:59 +0900)
No functional change, just refactoring.

src/libsystemd-network/sd-dhcp6-lease.c
src/libsystemd-network/test-dhcp6-client.c
src/network/networkd-dhcp-prefix-delegation.c
src/network/networkd-dhcp-prefix-delegation.h
src/network/networkd-dhcp6.c
src/network/networkd-json.c
src/network/networkd-link.c
src/systemd/sd-dhcp6-lease.h

index 6dcc25888da34c23a7b15e26f02ee84a73be90cf..9d1c69ed3f02002696d08f581f7a8fdbdfb2f549 100644 (file)
@@ -243,6 +243,10 @@ void sd_dhcp6_lease_reset_address_iter(sd_dhcp6_lease *lease) {
                 lease->addr_iter = lease->ia_na ? lease->ia_na->addresses : NULL;
 }
 
+int sd_dhcp6_lease_has_address(sd_dhcp6_lease *lease) {
+        return lease && lease->ia_na;
+}
+
 int sd_dhcp6_lease_get_pd(
                 sd_dhcp6_lease *lease,
                 struct in6_addr *ret_prefix,
@@ -273,6 +277,10 @@ void sd_dhcp6_lease_reset_pd_prefix_iter(sd_dhcp6_lease *lease) {
                 lease->prefix_iter = lease->ia_pd ? lease->ia_pd->addresses : NULL;
 }
 
+int sd_dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease) {
+        return lease && lease->ia_pd;
+}
+
 int dhcp6_lease_add_dns(sd_dhcp6_lease *lease, const uint8_t *optval, size_t optlen) {
         assert(lease);
         assert(optval || optlen == 0);
index ccf9208d4332f56560db9673ab675a7e07b50636..a954bfb6668be44f08f071955201687c1d4fa210 100644 (file)
@@ -902,6 +902,9 @@ static void test_lease_managed(sd_dhcp6_client *client) {
         assert_se(dhcp6_lease_get_serverid(lease, &id, &len) >= 0);
         assert_se(memcmp_nn(id, len, server_id, sizeof(server_id)) == 0);
 
+        assert_se(sd_dhcp6_lease_has_address(lease));
+        assert_se(sd_dhcp6_lease_has_pd_prefix(lease));
+
         sd_dhcp6_lease_reset_address_iter(lease);
         assert_se(sd_dhcp6_lease_get_address(lease, &addr, &lt_pref, &lt_valid) >= 0);
         assert_se(in6_addr_equal(&addr, &ia_na_address1));
index c6e6857aa41c1f838fde0c86c80e609d81dc76bf..0051a7ee44b0b05977f028e019d584e9c94b923a 100644 (file)
@@ -51,19 +51,6 @@ bool dhcp_pd_is_uplink(Link *link, Link *target, bool accept_auto) {
         return accept_auto;
 }
 
-bool dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease) {
-        uint32_t lifetime_preferred_sec, lifetime_valid_sec;
-        struct in6_addr pd_prefix;
-        uint8_t pd_prefix_len;
-
-        if (!lease)
-                return false;
-
-        sd_dhcp6_lease_reset_pd_prefix_iter(lease);
-
-        return sd_dhcp6_lease_get_pd(lease, &pd_prefix, &pd_prefix_len, &lifetime_preferred_sec, &lifetime_valid_sec) >= 0;
-}
-
 static void link_remove_dhcp_pd_subnet_prefix(Link *link, const struct in6_addr *prefix) {
         void *key;
 
@@ -1154,10 +1141,7 @@ static bool dhcp6_pd_uplink_is_ready(Link *link) {
         if (sd_dhcp6_client_is_running(link->dhcp6_client) <= 0)
                 return false;
 
-        if (!link->dhcp6_lease)
-                return false;
-
-        return dhcp6_lease_has_pd_prefix(link->dhcp6_lease);
+        return sd_dhcp6_lease_has_pd_prefix(link->dhcp6_lease);
 }
 
 int dhcp_pd_find_uplink(Link *link, Link **ret) {
index b12e985bec65eaf032ef32d4e3eaae023fcbcce1..e591b8ae2e0947587abcbeb9ea3d83ee1f3a6a37 100644 (file)
@@ -13,7 +13,6 @@ typedef struct Link Link;
 bool link_dhcp_pd_is_enabled(Link *link);
 bool dhcp_pd_is_uplink(Link *link, Link *target, bool accept_auto);
 int dhcp_pd_find_uplink(Link *link, Link **ret);
-bool dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease);
 int dhcp_pd_remove(Link *link, bool only_marked);
 int dhcp_request_prefix_delegation(Link *link);
 int dhcp4_pd_prefix_acquired(Link *uplink);
index 57e108721162cccda04b6b009ed89d0a6a98e691..e30344fb4fe663063b8760ac6f8cec1dcf06f7aa 100644 (file)
@@ -317,11 +317,11 @@ static int dhcp6_lease_ip_acquired(sd_dhcp6_client *client, Link *link) {
         if (r < 0)
                 return r;
 
-        if (dhcp6_lease_has_pd_prefix(lease)) {
+        if (sd_dhcp6_lease_has_pd_prefix(lease)) {
                 r = dhcp6_pd_prefix_acquired(link);
                 if (r < 0)
                         return r;
-        } else if (dhcp6_lease_has_pd_prefix(lease_old))
+        } else if (sd_dhcp6_lease_has_pd_prefix(lease_old))
                 /* When we had PD prefixes but not now, we need to remove them. */
                 dhcp_pd_prefix_lost(link);
 
@@ -353,7 +353,7 @@ static int dhcp6_lease_lost(Link *link) {
 
         log_link_info(link, "DHCPv6 lease lost");
 
-        if (dhcp6_lease_has_pd_prefix(link->dhcp6_lease))
+        if (sd_dhcp6_lease_has_pd_prefix(link->dhcp6_lease))
                 dhcp_pd_prefix_lost(link);
 
         link->dhcp6_lease = sd_dhcp6_lease_unref(link->dhcp6_lease);
index 1e425fcb298bafc9a42f5629321da2585bae6255..e4db7ef75d7fa3078cea2bea343ed625d46af6ae 100644 (file)
@@ -1084,7 +1084,8 @@ static int dhcp6_client_pd_append_json(Link *link, JsonVariant **v) {
         assert(link->network);
         assert(v);
 
-        if (!link->network->dhcp6_use_pd_prefix || !link->dhcp6_lease || !dhcp6_lease_has_pd_prefix(link->dhcp6_lease))
+        if (!link->network->dhcp6_use_pd_prefix ||
+            !sd_dhcp6_lease_has_pd_prefix(link->dhcp6_lease))
                 return 0;
 
         sd_dhcp6_lease_reset_pd_prefix_iter(link->dhcp6_lease);
index eea47f6c8c8c7cf08962ab7918223baec6b6c5d9..a3b6762dc450c2c6a96cd33cbd80b249a521e844 100644 (file)
@@ -485,7 +485,7 @@ void link_check_ready(Link *link) {
                 }
 
                 if (link_dhcp6_enabled(link) && link->network->dhcp6_use_pd_prefix &&
-                    link->dhcp6_lease && dhcp6_lease_has_pd_prefix(link->dhcp6_lease)) {
+                    sd_dhcp6_lease_has_pd_prefix(link->dhcp6_lease)) {
                         if (!dhcp6_ready)
                                 return (void) log_link_debug(link, "%s(): DHCPv6 IA_PD prefix is assigned, but DHCPv6 protocol is not finished yet.", __func__);
                         if (!dhcp_pd_ready)
index 9f52496985bcae32ffb132c832677b6dfe4005c4..dc226ebc997ab17d6fd09d465e246b3aee0ec849 100644 (file)
@@ -37,11 +37,13 @@ int sd_dhcp6_lease_get_address(sd_dhcp6_lease *lease,
                                struct in6_addr *addr,
                                uint32_t *lifetime_preferred,
                                uint32_t *lifetime_valid);
+int sd_dhcp6_lease_has_address(sd_dhcp6_lease *lease);
 void sd_dhcp6_lease_reset_pd_prefix_iter(sd_dhcp6_lease *lease);
 int sd_dhcp6_lease_get_pd(sd_dhcp6_lease *lease, struct in6_addr *prefix,
                           uint8_t *prefix_len,
                           uint32_t *lifetime_preferred,
                           uint32_t *lifetime_valid);
+int sd_dhcp6_lease_has_pd_prefix(sd_dhcp6_lease *lease);
 
 int sd_dhcp6_lease_get_dns(sd_dhcp6_lease *lease, const struct in6_addr **ret);
 int sd_dhcp6_lease_get_domains(sd_dhcp6_lease *lease, char ***ret);