Create IP configuration based on the interface index
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 8 Aug 2009 17:59:28 +0000 (10:59 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 8 Aug 2009 17:59:28 +0000 (10:59 -0700)
include/ipconfig.h
src/device.c
src/ipconfig.c

index 08fe558..c8062ba 100644 (file)
@@ -47,7 +47,7 @@ enum connman_ipconfig_method {
 
 struct connman_ipconfig;
 
-struct connman_ipconfig *connman_ipconfig_create(const char *interface);
+struct connman_ipconfig *connman_ipconfig_create(unsigned int index);
 struct connman_ipconfig *connman_ipconfig_ref(struct connman_ipconfig *ipconfig);
 void connman_ipconfig_unref(struct connman_ipconfig *ipconfig);
 
index 7ac2ab8..751d190 100644 (file)
@@ -1029,6 +1029,11 @@ const char *connman_device_get_path(struct connman_device *device)
 void connman_device_set_index(struct connman_device *device, int index)
 {
        device->element.index = index;
+
+       if (device->ipconfig != NULL)
+               connman_ipconfig_unref(device->ipconfig);
+
+       device->ipconfig = connman_ipconfig_create(index);
 }
 
 /**
@@ -1079,11 +1084,6 @@ void connman_device_set_interface(struct connman_device *device,
                        device->name = g_strdup_printf("%s (%s)", str,
                                                        device->interface);
        }
-
-       if (device->ipconfig != NULL)
-               connman_ipconfig_unref(device->ipconfig);
-
-       device->ipconfig = connman_ipconfig_create(interface);
 }
 
 const char *connman_device_get_control(struct connman_device *device)
index 2e3d22b..e08f1e7 100644 (file)
@@ -29,7 +29,7 @@
 
 struct connman_ipconfig {
        gint refcount;
-       int index;
+       unsigned int index;
        char *interface;
        enum connman_ipconfig_method method;
 };
@@ -41,23 +41,18 @@ struct connman_ipconfig {
  *
  * Returns: a newly-allocated #connman_ipconfig structure
  */
-struct connman_ipconfig *connman_ipconfig_create(const char *interface)
+struct connman_ipconfig *connman_ipconfig_create(unsigned int index)
 {
        struct connman_ipconfig *ipconfig;
-       int index;
 
        DBG("");
 
-       index = connman_inet_ifindex(interface);
-       if (index < 0)
-               return NULL;
-
        ipconfig = g_try_new0(struct connman_ipconfig, 1);
        if (ipconfig == NULL)
                return NULL;
 
        ipconfig->index = index;
-       ipconfig->interface = g_strdup(interface);
+       ipconfig->interface = connman_inet_ifname(index);
 
        DBG("ipconfig %p", ipconfig);