]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-dhcp6-client: merge client_start() and client_reset()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 6 Feb 2022 18:19:40 +0000 (03:19 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Feb 2022 05:56:54 +0000 (14:56 +0900)
src/libsystemd-network/sd-dhcp6-client.c

index 70eeb7223241587e87155e892fae1f3af4a14015..5a046414d7d29612942b7756753f47511f01168b 100644 (file)
@@ -584,16 +584,14 @@ static void client_notify(sd_dhcp6_client *client, int event) {
                 client->callback(client, event, client->userdata);
 }
 
-static void client_reset(sd_dhcp6_client *client) {
-        assert(client);
+static void client_stop(sd_dhcp6_client *client, int error) {
+        DHCP6_CLIENT_DONT_DESTROY(client);
 
-        client->lease = sd_dhcp6_lease_unref(client->lease);
+        assert(client);
 
-        client->transaction_id = 0;
-        client->transaction_start = 0;
+        client_notify(client, error);
 
-        client->retransmit_time = 0;
-        client->retransmit_count = 0;
+        client->lease = sd_dhcp6_lease_unref(client->lease);
 
         (void) event_source_disable(client->receive_message);
         (void) event_source_disable(client->timeout_resend);
@@ -604,16 +602,6 @@ static void client_reset(sd_dhcp6_client *client) {
         client->state = DHCP6_STATE_STOPPED;
 }
 
-static void client_stop(sd_dhcp6_client *client, int error) {
-        DHCP6_CLIENT_DONT_DESTROY(client);
-
-        assert(client);
-
-        client_notify(client, error);
-
-        client_reset(client);
-}
-
 static int client_append_common_options_in_managed_mode(
                 sd_dhcp6_client *client,
                 uint8_t **opt,
@@ -1388,7 +1376,9 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
         if (!client->information_request && client->request_ia == 0)
                 return -EINVAL;
 
-        client_reset(client);
+        /* Even if the client is in the STOPPED state, the lease acquired in the previous information
+         * request may be stored. */
+        client->lease = sd_dhcp6_lease_unref(client->lease);
 
         r = client_ensure_iaid(client);
         if (r < 0)