chiark / gitweb /
dhcp: Add function to stop the DHCP client
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Mon, 9 Dec 2013 21:43:23 +0000 (23:43 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 12 Dec 2013 16:43:34 +0000 (11:43 -0500)
The client is stopped and brought back to its initial state.

src/libsystemd-dhcp/dhcp-client.c
src/systemd/sd-dhcp-client.h

index 181c6f8348959bc9dbd43f72746a8bf6eadc1031..bd2882476e6955a8b2da8cc6de73106be2362a46 100644 (file)
@@ -119,6 +119,33 @@ int sd_dhcp_client_set_mac(sd_dhcp_client *client,
         return 0;
 }
 
         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)
 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);
 }
 
         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;
 sd_dhcp_client *sd_dhcp_client_new(void)
 {
         sd_dhcp_client *client;
index acfa3fac24a962cfa99a0bfe2960a64d83910731..2d2fdffd139488790d0043bea598cff0ce0da928 100644 (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_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);
 
 int sd_dhcp_client_start(sd_dhcp_client *client);
 sd_dhcp_client *sd_dhcp_client_new(void);