Change test scripts to use Powered property
[connman] / plugins / resolvconf.c
index 732db4f..f81d106 100644 (file)
@@ -2,7 +2,7 @@
  *
  *  Connection Manager
  *
- *  Copyright (C) 2007  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2007-2008  Intel Corporation. All rights reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
 #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)
+#include "inet.h"
+
+#define RESOLVCONF "/sbin/resolvconf"
+
+static int resolvconf_probe(struct connman_element *element)
 {
-       struct ifreq ifr;
-       char cmd[128];
-       int sk, err;
+       const char *nameserver = NULL;
+       struct connman_element *internet;
+       gchar *cmd, *name;
+       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;
+       if (access(RESOLVCONF, X_OK) < 0)
+               return -errno;
 
-       err = ioctl(sk, SIOCGIFNAME, &ifr);
+       connman_element_get_value(element,
+                       CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, &nameserver);
 
-       close(sk);
+       if (nameserver == NULL)
+               return -EINVAL;
 
-       if (err < 0)
-               return -1;
+       name = inet_index2name(element->index);
 
-       DBG("ifname %s", ifr.ifr_name);
+       cmd = g_strdup_printf("echo \"nameserver %s\" | %s -a %s",
+                                               nameserver, RESOLVCONF, name);
 
-       snprintf(cmd, sizeof(cmd), "echo \"nameserver %s\" | resolvconf -a %s",
-                                               nameserver, ifr.ifr_name);
+       g_free(name);
 
        DBG("%s", cmd);
 
-       err = system(cmd);
+       //err = system(cmd);
+       err = 0;
 
-       return 0;
-}
+       g_free(cmd);
 
-static int resolvconf_remove(struct connman_iface *iface)
-{
-       struct ifreq ifr;
-       char cmd[128];
-       int sk, err;
+       internet = connman_element_create(NULL);
 
-       sk = socket(PF_INET, SOCK_DGRAM, 0);
-       if (sk < 0)
-               return -1;
+       internet->type = CONNMAN_ELEMENT_TYPE_CONNECTION;
 
-       memset(&ifr, 0, sizeof(ifr));
-       ifr.ifr_ifindex = iface->index;
+       connman_element_register(internet, element);
 
-       err = ioctl(sk, SIOCGIFNAME, &ifr);
+       return 0;
+}
 
-       close(sk);
+static void resolvconf_remove(struct connman_element *element)
+{
+       gchar *cmd, *name;
+       int err;
 
-       if (err < 0)
-               return -1;
+       DBG("element %p name %s", element, element->name);
 
-       DBG("ifname %s", ifr.ifr_name);
+       name = inet_index2name(element->index);
 
-       snprintf(cmd, sizeof(cmd), "resolvconf -d %s", ifr.ifr_name);
+       cmd = g_strdup_printf("%s -d %s", RESOLVCONF, name);
+
+       g_free(name);
 
        DBG("%s", cmd);
 
-       err = system(cmd);
+       //err = system(cmd);
+       err = 0;
 
-       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,
+       .priority       = CONNMAN_DRIVER_PRIORITY_HIGH,
+       .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,