SD_DHCP6_OPTION_SNTP_SERVERS,
};
+static const char * const dhcp6_state_table[_DHCP6_STATE_MAX] = {
+ [DHCP6_STATE_STOPPED] = "stopped",
+ [DHCP6_STATE_INFORMATION_REQUEST] = "information-request",
+ [DHCP6_STATE_SOLICITATION] = "solicitation",
+ [DHCP6_STATE_REQUEST] = "request",
+ [DHCP6_STATE_BOUND] = "bound",
+ [DHCP6_STATE_RENEW] = "renew",
+ [DHCP6_STATE_REBIND] = "rebind",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(dhcp6_state, DHCP6State);
+
static const char * const dhcp6_message_type_table[_DHCP6_MESSAGE_TYPE_MAX] = {
[DHCP6_MESSAGE_SOLICIT] = "Solicit",
[DHCP6_MESSAGE_ADVERTISE] = "Advertise",
return 0;
}
+static void client_set_state(sd_dhcp6_client *client, DHCP6State state) {
+ assert(client);
+
+ if (client->state == state)
+ return;
+
+ log_dhcp6_client(client, "State changed: %s -> %s",
+ dhcp6_state_to_string(client->state), dhcp6_state_to_string(state));
+
+ client->state = state;
+}
+
static void client_notify(sd_dhcp6_client *client, int event) {
assert(client);
(void) event_source_disable(client->timeout_t1);
(void) event_source_disable(client->timeout_t2);
- client->state = DHCP6_STATE_STOPPED;
+ client_set_state(client, DHCP6_STATE_STOPPED);
}
static int client_append_common_options_in_managed_mode(
assert_not_reached();
}
- client->state = state;
+ client_set_state(client, state);
+
client->retransmit_time = 0;
client->retransmit_count = 0;
client->transaction_id = random_u32() & htobe32(0x00ffffff);
goto error;
}
- client->state = DHCP6_STATE_BOUND;
+ client_set_state(client, DHCP6_STATE_BOUND);
client_notify(client, SD_DHCP6_CLIENT_EVENT_IP_ACQUIRE);
return 0;
client->lease = TAKE_PTR(lease);
(void) event_source_disable(client->timeout_resend);
- client->state = DHCP6_STATE_STOPPED;
+ client_set_state(client, DHCP6_STATE_STOPPED);
client_notify(client, SD_DHCP6_CLIENT_EVENT_INFORMATION_REQUEST);
return 0;
state = DHCP6_STATE_INFORMATION_REQUEST;
}
- log_dhcp6_client(client, "Started in %s mode",
+ log_dhcp6_client(client, "Starting in %s mode",
client->information_request ? "Information request" : "Managed");
return client_start_transaction(client, state);