#include <config.h>
#endif
+#include <unistd.h>
#include <stdlib.h>
#include <connman/plugin.h>
#include <connman/driver.h>
#include <connman/log.h>
+#include "inet.h"
+
+#define RESOLVCONF "/sbin/resolvconf"
+
static int resolvconf_probe(struct connman_element *element)
{
- gchar *cmd;
- //int err;
+ const char *nameserver = NULL;
+ struct connman_element *internet;
+ gchar *cmd, *name;
+ int err;
DBG("element %p name %s", element, element->name);
- cmd = g_strdup_printf("echo \"nameserver %s\" | resolvconf -a %s",
- "127.0.0.1", element->netdev.name);
+ if (access(RESOLVCONF, X_OK) < 0)
+ return -errno;
+
+ connman_element_get_value(element,
+ CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, &nameserver);
+
+ if (nameserver == NULL)
+ return -EINVAL;
+
+ name = inet_index2name(element->index);
+
+ cmd = g_strdup_printf("echo \"nameserver %s\" | %s -a %s",
+ nameserver, RESOLVCONF, name);
+
+ g_free(name);
DBG("%s", cmd);
//err = system(cmd);
+ err = 0;
g_free(cmd);
+ internet = connman_element_create(NULL);
+
+ internet->type = CONNMAN_ELEMENT_TYPE_CONNECTION;
+
+ connman_element_register(internet, element);
+
return 0;
}
static void resolvconf_remove(struct connman_element *element)
{
- gchar *cmd;
- //int err;
+ gchar *cmd, *name;
+ int err;
DBG("element %p name %s", element, element->name);
- cmd = g_strdup_printf("resolvconf -d %s", element->netdev.name);
+ name = inet_index2name(element->index);
+
+ cmd = g_strdup_printf("%s -d %s", RESOLVCONF, name);
+
+ g_free(name);
DBG("%s", cmd);
//err = system(cmd);
+ err = 0;
g_free(cmd);
}
static struct connman_driver resolvconf_driver = {
.name = "resolvconf",
.type = CONNMAN_ELEMENT_TYPE_RESOLVER,
+ .priority = CONNMAN_DRIVER_PRIORITY_HIGH,
.probe = resolvconf_probe,
.remove = resolvconf_remove,
};