[systemd-devel] [PATCH v2 17/26] dhcp: Add function to stop the DHCP client

Patrik Flykt patrik.flykt at linux.intel.com
Sun Nov 24 23:13:33 PST 2013


The client is stopped and brought back to its initial state.
---
 src/dhcp/client.c            |   32 ++++++++++++++++++++++++++++++++
 src/systemd/sd-dhcp-client.h |    1 +
 2 files changed, 33 insertions(+)

diff --git a/src/dhcp/client.c b/src/dhcp/client.c
index 6a0704e..8735efe 100644
--- a/src/dhcp/client.c
+++ b/src/dhcp/client.c
@@ -118,6 +118,33 @@ int sd_dhcp_client_set_mac(DHCPClient *client, const struct ether_addr *addr)
         return 0;
 }
 
+static int client_stop(DHCPClient *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(DHCPClient *client, uint8_t type,
                               DHCPMessage *message, uint16_t secs,
                               uint8_t **opt, int *optlen)
@@ -262,6 +289,11 @@ int sd_dhcp_client_start(DHCPClient *client)
         return client_send_discover(client, 0);
 }
 
+int sd_dhcp_client_stop(DHCPClient *client)
+{
+        return client_stop(client, 0);
+}
+
 DHCPClient *sd_dhcp_client_new(void)
 {
         DHCPClient *client;
diff --git a/src/systemd/sd-dhcp-client.h b/src/systemd/sd-dhcp-client.h
index 5a45f07..5ca5fd3 100644
--- a/src/systemd/sd-dhcp-client.h
+++ b/src/systemd/sd-dhcp-client.h
@@ -32,5 +32,6 @@ int sd_dhcp_client_set_request_address(DHCPClient *client,
 int sd_dhcp_client_set_index(DHCPClient *client, const int interface_index);
 int sd_dhcp_client_set_mac(DHCPClient *client, const struct ether_addr *addr);
 
+int sd_dhcp_client_stop(DHCPClient *client);
 int sd_dhcp_client_start(DHCPClient *client);
 DHCPClient *sd_dhcp_client_new(void);
-- 
1.7.10.4



More information about the systemd-devel mailing list