From 28bedc10b1d4cc6d3cf4602211a36b5c48414937 Mon Sep 17 00:00:00 2001 From: Julien Massot Date: Mon, 20 Dec 2010 16:24:02 +0000 Subject: [PATCH] dhcp: Add IPv4LL support --- plugins/dhcp.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/plugins/dhcp.c b/plugins/dhcp.c index 73c975d..07fed38 100644 --- a/plugins/dhcp.c +++ b/plugins/dhcp.c @@ -55,6 +55,15 @@ static void lease_lost_cb(GDHCPClient *dhcp_client, gpointer user_data) DBG("Lease lost"); } +static void ipv4ll_lost_cb(GDHCPClient *dhcp_client, gpointer user_data) +{ + struct connman_dhcp *dhcp = user_data; + + DBG("Lease lost"); + + connman_dhcp_release(dhcp); +} + static void lease_available_cb(GDHCPClient *dhcp_client, gpointer user_data) { struct connman_dhcp *dhcp = user_data; @@ -111,6 +120,27 @@ static void lease_available_cb(GDHCPClient *dhcp_client, gpointer user_data) connman_dhcp_bound(dhcp); } +static void ipv4ll_available_cb(GDHCPClient *dhcp_client, gpointer user_data) +{ + struct connman_dhcp *dhcp = user_data; + char *address, *netmask; + + DBG("IPV4LL available"); + + address = g_dhcp_client_get_address(dhcp_client); + if (address != NULL) + connman_dhcp_set_value(dhcp, "Address", address); + + netmask = g_dhcp_client_get_netmask(dhcp_client); + if (netmask != NULL) + connman_dhcp_set_value(dhcp, "Netmask", netmask); + + g_free(address); + g_free(netmask); + + connman_dhcp_bound(dhcp); +} + static int dhcp_request(struct connman_dhcp *dhcp) { GDHCPClient *dhcp_client; @@ -146,9 +176,16 @@ static int dhcp_request(struct connman_dhcp *dhcp) lease_available_cb, dhcp); g_dhcp_client_register_event(dhcp_client, + G_DHCP_CLIENT_EVENT_IPV4LL_AVAILABLE, + ipv4ll_available_cb, dhcp); + + g_dhcp_client_register_event(dhcp_client, G_DHCP_CLIENT_EVENT_LEASE_LOST, lease_lost_cb, dhcp); g_dhcp_client_register_event(dhcp_client, + G_DHCP_CLIENT_EVENT_IPV4LL_LOST, ipv4ll_lost_cb, dhcp); + + g_dhcp_client_register_event(dhcp_client, G_DHCP_CLIENT_EVENT_NO_LEASE, no_lease_cb, dhcp); connman_dhcp_set_data(dhcp, dhcp_client); -- 2.7.4