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);
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,
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)