return 0;
}
+static void client_set_state(sd_dhcp_client *client, DHCPState state) {
+ assert(client);
+
+ if (client->state == state)
+ return;
+
+ client->state = state;
+}
+
static int client_notify(sd_dhcp_client *client, int event) {
assert(client);
client->attempt = 0;
- client->state = DHCP_STATE_STOPPED;
+ client_set_state(client, DHCP_STATE_STOPPED);
client->xid = 0;
client->lease = sd_dhcp_lease_unref(client->lease);
case DHCP_STATE_INIT:
r = client_send_discover(client);
if (r >= 0) {
- client->state = DHCP_STATE_SELECTING;
+ client_set_state(client, DHCP_STATE_SELECTING);
client->attempt = 0;
} else if (client->attempt >= client->max_attempts)
goto error;
goto error;
if (client->state == DHCP_STATE_INIT_REBOOT)
- client->state = DHCP_STATE_REBOOTING;
+ client_set_state(client, DHCP_STATE_REBOOTING);
client->request_sent = time_now;
break;
client->receive_message = sd_event_source_disable_unref(client->receive_message);
client->fd = safe_close(client->fd);
- client->state = DHCP_STATE_REBINDING;
+ client_set_state(client, DHCP_STATE_REBINDING);
client->attempt = 0;
r = dhcp_network_bind_raw_socket(client->ifindex, &client->link, client->xid,
DHCP_CLIENT_DONT_DESTROY(client);
if (client->lease)
- client->state = DHCP_STATE_RENEWING;
+ client_set_state(client, DHCP_STATE_RENEWING);
else if (client->state != DHCP_STATE_INIT)
- client->state = DHCP_STATE_INIT_REBOOT;
+ client_set_state(client, DHCP_STATE_INIT_REBOOT);
client->attempt = 0;
return client_initialize_time_events(client);
if (r < 0)
goto error;
- client->state = DHCP_STATE_REQUESTING;
+ client_set_state(client, DHCP_STATE_REQUESTING);
client->attempt = 0;
r = event_reset_time(client->event, &client->timeout_resend,
client->receive_message = sd_event_source_disable_unref(client->receive_message);
client->fd = safe_close(client->fd);
- client->state = DHCP_STATE_BOUND;
+ client_set_state(client, DHCP_STATE_BOUND);
client->attempt = 0;
client->last_addr = client->lease->address;
client->start_delay = 0;
client->attempt = 1;
- client->state = DHCP_STATE_RENEWING;
+ client_set_state(client, DHCP_STATE_RENEWING);
return client_initialize_time_events(client);
}
the client MAY issue a DHCPREQUEST to try to reclaim the current
address. */
if (client->last_addr && !client->anonymize)
- client->state = DHCP_STATE_INIT_REBOOT;
+ client_set_state(client, DHCP_STATE_INIT_REBOOT);
r = client_start(client);
if (r >= 0)
DHCP_CLIENT_DONT_DESTROY(client);
client_stop(client, SD_DHCP_CLIENT_EVENT_STOP);
- client->state = DHCP_STATE_STOPPED;
return 0;
}