Update resolver plugin infrastructure
authorMarcel Holtmann <marcel@holtmann.org>
Thu, 3 Jul 2008 08:02:23 +0000 (10:02 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 3 Jul 2008 08:02:23 +0000 (10:02 +0200)
include/element.h
plugins/Makefile.am
plugins/resolvconf.c
src/element.c

index e584338..af34da8 100644 (file)
@@ -48,6 +48,7 @@ enum connman_element_type {
        CONNMAN_ELEMENT_TYPE_DHCP       = 6,
        CONNMAN_ELEMENT_TYPE_BOOTP      = 7,
        CONNMAN_ELEMENT_TYPE_ZEROCONF   = 8,
+       CONNMAN_ELEMENT_TYPE_RESOLVER   = 9,
 
        CONNMAN_ELEMENT_TYPE_CONNECTION = 42,
 };
index 66daf5d..121e05a 100644 (file)
@@ -2,7 +2,7 @@
 plugindir = $(libdir)/connman/plugins
 
 plugin_LTLIBRARIES = hal.la ethernet.la wifi.la bluetooth.la \
-                                               dhclient.la ipv4.la
+                                       dhclient.la ipv4.la resolvconf.la
 
 hal_la_SOURCES = hal.c
 hal_la_LIBADD = @HAL_LIBS@
@@ -20,6 +20,8 @@ dhclient_la_CFLAGS = @GDBUS_CFLAGS@ -DDHCLIENT=\"@DHCLIENT@\" \
 
 ipv4_la_SOURCES = ipv4.c
 
+resolvconf_la_SOURCES = resolvconf.c
+
 AM_LDFLAGS = -no-undefined -module -avoid-version \
                                -export-symbols-regex connman_plugin_desc
 
index ba6eef1..6f30f8b 100644 (file)
 #include <config.h>
 #endif
 
-#include <stdio.h>
-#include <unistd.h>
 #include <stdlib.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <net/if.h>
 
 #include <connman/plugin.h>
-#include <connman/resolver.h>
+#include <connman/driver.h>
 #include <connman/log.h>
 
-static int resolvconf_append(struct connman_iface *iface, const char *nameserver)
+static int resolvconf_probe(struct connman_element *element)
 {
-       struct ifreq ifr;
-       char cmd[128];
-       int sk, err;
+       gchar *cmd;
+       //int err;
 
-       sk = socket(PF_INET, SOCK_DGRAM, 0);
-       if (sk < 0)
-               return -1;
+       DBG("element %p name %s", element, element->name);
 
-       memset(&ifr, 0, sizeof(ifr));
-       ifr.ifr_ifindex = iface->index;
-
-       err = ioctl(sk, SIOCGIFNAME, &ifr);
-
-       close(sk);
-
-       if (err < 0)
-               return -1;
-
-       DBG("ifname %s", ifr.ifr_name);
-
-       snprintf(cmd, sizeof(cmd), "echo \"nameserver %s\" | resolvconf -a %s",
-                                               nameserver, ifr.ifr_name);
+       cmd = g_strdup_printf("echo \"nameserver %s\" | resolvconf -a %s",
+                                       "127.0.0.1", element->netdev.name);
 
        DBG("%s", cmd);
 
-       err = system(cmd);
+       //err = system(cmd);
+
+       g_free(cmd);
 
        return 0;
 }
 
-static int resolvconf_remove(struct connman_iface *iface)
+static void resolvconf_remove(struct connman_element *element)
 {
-       struct ifreq ifr;
-       char cmd[128];
-       int sk, err;
+       gchar *cmd;
+       //int err;
 
-       sk = socket(PF_INET, SOCK_DGRAM, 0);
-       if (sk < 0)
-               return -1;
+       DBG("element %p name %s", element, element->name);
 
-       memset(&ifr, 0, sizeof(ifr));
-       ifr.ifr_ifindex = iface->index;
-
-       err = ioctl(sk, SIOCGIFNAME, &ifr);
-
-       close(sk);
-
-       if (err < 0)
-               return -1;
-
-       DBG("ifname %s", ifr.ifr_name);
-
-       snprintf(cmd, sizeof(cmd), "resolvconf -d %s", ifr.ifr_name);
+       cmd = g_strdup_printf("resolvconf -d %s", element->netdev.name);
 
        DBG("%s", cmd);
 
-       err = system(cmd);
+       //err = system(cmd);
 
-       return 0;
+       g_free(cmd);
 }
 
-static struct connman_resolver_driver resolvconf_driver = {
+static struct connman_driver resolvconf_driver = {
        .name           = "resolvconf",
-       .append         = resolvconf_append,
+       .type           = CONNMAN_ELEMENT_TYPE_RESOLVER,
+       .probe          = resolvconf_probe,
        .remove         = resolvconf_remove,
 };
 
 static int resolvconf_init(void)
 {
-       return connman_resolver_register(&resolvconf_driver);
+       return connman_driver_register(&resolvconf_driver);
 }
 
 static void resolvconf_exit(void)
 {
-       connman_resolver_unregister(&resolvconf_driver);
+       connman_driver_unregister(&resolvconf_driver);
 }
 
 CONNMAN_PLUGIN_DEFINE("resolvconf", "Name resolver plugin", VERSION,
index 58ba06b..6305adc 100644 (file)
@@ -61,6 +61,8 @@ static const char *type2string(enum connman_element_type type)
                return "bootp";
        case CONNMAN_ELEMENT_TYPE_ZEROCONF:
                return "zeroconf";
+       case CONNMAN_ELEMENT_TYPE_RESOLVER:
+               return "resolver";
        case CONNMAN_ELEMENT_TYPE_CONNECTION:
                return "42";
        }