Add hooks for domain details in dhclient
[connman] / plugins / dhclient.c
index cb0e875..10f32ff 100644 (file)
 #define CONNMAN_API_SUBJECT_TO_CHANGE
 #include <connman/plugin.h>
 #include <connman/driver.h>
+#include <connman/inet.h>
 #include <connman/dbus.h>
 #include <connman/log.h>
 
-#include "inet.h"
-
 #define DHCLIENT_INTF "org.isc.dhclient"
 #define DHCLIENT_PATH "/org/isc/dhclient"
 
@@ -145,7 +144,7 @@ static int dhclient_probe(struct connman_element *element)
                return -ENOMEM;
 
        task->ifindex = element->index;
-       task->ifname = inet_index2name(element->index);
+       task->ifname = connman_inet_ifname(element->index);
        task->element = element;
 
        if (task->ifname == NULL) {
@@ -166,18 +165,18 @@ static int dhclient_probe(struct connman_element *element)
        argv[0] = DHCLIENT;
        argv[1] = "-d";
        argv[2] = "-q";
-       argv[3] = "-n";
-       argv[4] = "-e";
-       argv[5] = address;
-       argv[6] = "-pf";
-       argv[7] = pidfile;
-       argv[8] = "-lf";
-       argv[9] = leases;
-       argv[10] = "-cf";
-       argv[11] = config;
-       argv[12] = "-sf";
-       argv[13] = script;
-       argv[14] = task->ifname;
+       argv[3] = "-e";
+       argv[4] = address;
+       argv[5] = "-pf";
+       argv[6] = pidfile;
+       argv[7] = "-lf";
+       argv[8] = leases;
+       argv[9] = "-cf";
+       argv[10] = config;
+       argv[11] = "-sf";
+       argv[12] = script;
+       argv[13] = task->ifname;
+       argv[14] = "-n";
        argv[15] = NULL;
 
        envp[0] = NULL;
@@ -215,11 +214,21 @@ static void dhclient_remove(struct connman_element *element)
        kill_task(task);
 }
 
+static void dhclient_change(struct connman_element *element)
+{
+       DBG("element %p name %s", element, element->name);
+
+       if (element->state == CONNMAN_ELEMENT_STATE_ERROR)
+               connman_element_set_error(element->parent,
+                                       CONNMAN_ELEMENT_ERROR_DHCP_FAILED);
+}
+
 static struct connman_driver dhclient_driver = {
        .name           = "dhclient",
        .type           = CONNMAN_ELEMENT_TYPE_DHCP,
        .probe          = dhclient_probe,
        .remove         = dhclient_remove,
+       .change         = dhclient_change,
 };
 
 static DBusHandlerResult dhclient_filter(DBusConnection *conn,
@@ -290,6 +299,15 @@ static DBusHandlerResult dhclient_filter(DBusConnection *conn,
                        task->element->ipv4.nameserver = g_strdup(value);
                }
 
+               if (g_ascii_strcasecmp(key, "new_domain_name") == 0) {
+               }
+
+               if (g_ascii_strcasecmp(key, "new_domain_search") == 0) {
+               }
+
+               if (g_ascii_strcasecmp(key, "new_host_name") == 0) {
+               }
+
                dbus_message_iter_next(&dict);
        }
 
@@ -306,6 +324,9 @@ static DBusHandlerResult dhclient_filter(DBusConnection *conn,
        } else if (g_ascii_strcasecmp(text, "RENEW") == 0 ||
                                g_ascii_strcasecmp(text, "REBIND") == 0) {
                connman_element_update(task->element);
+       } else if (g_ascii_strcasecmp(text, "FAIL") == 0) {
+               connman_element_set_error(task->element,
+                                               CONNMAN_ELEMENT_ERROR_FAILED);
        } else {
        }
 
@@ -364,4 +385,4 @@ static void dhclient_exit(void)
 }
 
 CONNMAN_PLUGIN_DEFINE(dhclient, "ISC DHCP client plugin", VERSION,
-                                               dhclient_init, dhclient_exit)
+               CONNMAN_PLUGIN_PRIORITY_DEFAULT, dhclient_init, dhclient_exit)