dhcp: Add function to stop the DHCP client
The client is stopped and brought back to its initial state.
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
f5a70de7a9
commit
bbdf06d9f2
@@ -119,6 +119,33 @@ int sd_dhcp_client_set_mac(sd_dhcp_client *client,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int client_stop(sd_dhcp_client *client, int error)
|
||||
{
|
||||
assert_return(client, -EINVAL);
|
||||
assert_return(client->state != DHCP_STATE_INIT &&
|
||||
client->state != DHCP_STATE_INIT_REBOOT, -EALREADY);
|
||||
|
||||
switch (client->state) {
|
||||
|
||||
case DHCP_STATE_INIT:
|
||||
case DHCP_STATE_SELECTING:
|
||||
|
||||
client->state = DHCP_STATE_INIT;
|
||||
break;
|
||||
|
||||
case DHCP_STATE_INIT_REBOOT:
|
||||
case DHCP_STATE_REBOOTING:
|
||||
case DHCP_STATE_REQUESTING:
|
||||
case DHCP_STATE_BOUND:
|
||||
case DHCP_STATE_RENEWING:
|
||||
case DHCP_STATE_REBINDING:
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int client_packet_init(sd_dhcp_client *client, uint8_t type,
|
||||
DHCPMessage *message, uint16_t secs,
|
||||
uint8_t **opt, size_t *optlen)
|
||||
@@ -263,6 +290,11 @@ int sd_dhcp_client_start(sd_dhcp_client *client)
|
||||
return client_send_discover(client, 0);
|
||||
}
|
||||
|
||||
int sd_dhcp_client_stop(sd_dhcp_client *client)
|
||||
{
|
||||
return client_stop(client, 0);
|
||||
}
|
||||
|
||||
sd_dhcp_client *sd_dhcp_client_new(void)
|
||||
{
|
||||
sd_dhcp_client *client;
|
||||
|
||||
@@ -34,6 +34,7 @@ int sd_dhcp_client_set_index(sd_dhcp_client *client, int interface_index);
|
||||
int sd_dhcp_client_set_mac(sd_dhcp_client *client,
|
||||
const struct ether_addr *addr);
|
||||
|
||||
int sd_dhcp_client_stop(sd_dhcp_client *client);
|
||||
int sd_dhcp_client_start(sd_dhcp_client *client);
|
||||
sd_dhcp_client *sd_dhcp_client_new(void);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user