From: Marcel Holtmann Date: Thu, 3 Jul 2008 08:15:27 +0000 (+0200) Subject: Fully integrate the usage of resolver element X-Git-Tag: 2.0_alpha~4809 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c6af8b38102a9d53be5fa7a25b4374e4a9f3f4b4;p=framework%2Fconnectivity%2Fconnman.git Fully integrate the usage of resolver element --- diff --git a/include/property.h b/include/property.h index 76ff04e..20d525a 100644 --- a/include/property.h +++ b/include/property.h @@ -32,6 +32,7 @@ enum connman_property_type { CONNMAN_PROPERTY_TYPE_IPV4_ADDRESS, CONNMAN_PROPERTY_TYPE_IPV4_NETMASK, CONNMAN_PROPERTY_TYPE_IPV4_GATEWAY, + CONNMAN_PROPERTY_TYPE_IPV4_NAMESERVER, }; enum connman_property_flags { diff --git a/plugins/dhclient.c b/plugins/dhclient.c index 3a06e3e..6bffa8f 100644 --- a/plugins/dhclient.c +++ b/plugins/dhclient.c @@ -311,6 +311,7 @@ static DBusHandlerResult dhclient_filter(DBusConnection *conn, task->child = connman_element_create(); task->child->type = CONNMAN_ELEMENT_TYPE_IPV4; task->child->netdev.index = task->ifindex; + task->child->netdev.name = g_strdup(task->ifname); connman_element_update(task->element); connman_element_register(task->child, task->element); } else if (g_ascii_strcasecmp(text, "RENEW") == 0 || diff --git a/plugins/ipv4.c b/plugins/ipv4.c index 9370644..8b3457b 100644 --- a/plugins/ipv4.c +++ b/plugins/ipv4.c @@ -29,6 +29,7 @@ static int ipv4_probe(struct connman_element *element) { + struct connman_element *resolver; const char *address = NULL, *netmask = NULL, *gateway = NULL; DBG("element %p name %s", element, element->name); @@ -44,12 +45,29 @@ static int ipv4_probe(struct connman_element *element) DBG("netmask %s", netmask); DBG("gateway %s", gateway); + resolver = connman_element_create(); + + resolver->type = CONNMAN_ELEMENT_TYPE_RESOLVER; + resolver->netdev.name = g_strdup(element->netdev.name); + + connman_element_register(resolver, element); + + connman_element_set_data(element, resolver); + return 0; } static void ipv4_remove(struct connman_element *element) { + struct connman_element *resolver = connman_element_get_data(element); + DBG("element %p name %s", element, element->name); + + connman_element_set_data(element, NULL); + + connman_element_unregister(resolver); + + connman_element_unref(resolver); } static struct connman_driver ipv4_driver = { diff --git a/plugins/resolvconf.c b/plugins/resolvconf.c index 6f30f8b..45d15c3 100644 --- a/plugins/resolvconf.c +++ b/plugins/resolvconf.c @@ -31,13 +31,20 @@ static int resolvconf_probe(struct connman_element *element) { + const char *nameserver = NULL; gchar *cmd; //int err; DBG("element %p name %s", element, element->name); + connman_element_get_value(element, + CONNMAN_PROPERTY_TYPE_IPV4_NAMESERVER, &nameserver); + + if (nameserver == NULL) + return -EINVAL; + cmd = g_strdup_printf("echo \"nameserver %s\" | resolvconf -a %s", - "127.0.0.1", element->netdev.name); + nameserver, element->netdev.name); DBG("%s", cmd); diff --git a/src/element.c b/src/element.c index 6305adc..55fa6cb 100644 --- a/src/element.c +++ b/src/element.c @@ -406,6 +406,10 @@ int connman_element_set_property(struct connman_element *element, g_free(element->ipv4.gateway); element->ipv4.gateway = g_strdup(*((const char **) value)); break; + case CONNMAN_PROPERTY_TYPE_IPV4_NAMESERVER: + g_free(element->ipv4.nameserver); + element->ipv4.nameserver = g_strdup(*((const char **) value)); + break; } g_dbus_emit_signal(connection, CONNMAN_MANAGER_PATH, @@ -443,6 +447,12 @@ int connman_element_get_value(struct connman_element *element, type, value); *((char **) value) = element->ipv4.gateway; break; + case CONNMAN_PROPERTY_TYPE_IPV4_NAMESERVER: + if (element->ipv4.nameserver == NULL) + return connman_element_get_value(element->parent, + type, value); + *((char **) value) = element->ipv4.nameserver; + break; } return 0; @@ -492,6 +502,9 @@ int connman_element_register(struct connman_element *element, case CONNMAN_ELEMENT_TYPE_ZEROCONF: element->name = g_strdup("zeroconf"); break; + case CONNMAN_ELEMENT_TYPE_RESOLVER: + element->name = g_strdup("resolver"); + break; default: break; }