dhcp: Add function to stop the DHCP client

The client is stopped and brought back to its initial state.
This commit is contained in:
Patrik Flykt
2013-12-12 11:43:34 -05:00
committed by Zbigniew Jędrzejewski-Szmek
parent f5a70de7a9
commit bbdf06d9f2
2 changed files with 33 additions and 0 deletions
+32
View File
@@ -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;
+1
View File
@@ -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);