summaryrefslogtreecommitdiff
path: root/src/rtnl.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-07-15 13:58:22 -0700
committerMarcel Holtmann <marcel@holtmann.org>2010-07-15 13:58:22 -0700
commitbf8348ea70903ba154a45a5fab78051ccbf50a37 (patch)
treeba0949bc7d1aa8d79a58abb809a1daecdff51361 /src/rtnl.c
parent4aa99fc5eed24b64e05d5a49cc39d4ffab9b2c83 (diff)
downloadconnman-bf8348ea70903ba154a45a5fab78051ccbf50a37.tar.gz
connman-bf8348ea70903ba154a45a5fab78051ccbf50a37.tar.bz2
connman-bf8348ea70903ba154a45a5fab78051ccbf50a37.zip
Provide unique identifier along with the interface callbacks
Diffstat (limited to 'src/rtnl.c')
-rw-r--r--src/rtnl.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/rtnl.c b/src/rtnl.c
index 1f5c6c30..7e8d3b6c 100644
--- a/src/rtnl.c
+++ b/src/rtnl.c
@@ -59,6 +59,7 @@ static guint update_timeout = 0;
struct interface_data {
int index;
char *name;
+ char *ident;
enum connman_service_type type;
};
@@ -69,8 +70,9 @@ static void free_interface(gpointer data)
struct interface_data *interface = data;
__connman_technology_remove_interface(interface->type,
- interface->index, interface->name);
+ interface->index, interface->name, interface->ident);
+ g_free(interface->ident);
g_free(interface->name);
g_free(interface);
}
@@ -371,12 +373,20 @@ static void process_newlink(unsigned short type, int index, unsigned flags,
unsigned char operstate = 0xff;
const char *ifname = NULL;
unsigned int mtu = 0;
- char str[18];
+ char ident[13], str[18];
GSList *list;
memset(&stats, 0, sizeof(stats));
extract_link(msg, bytes, &address, &ifname, &mtu, &operstate, &stats);
+ snprintf(ident, 13, "%02x%02x%02x%02x%02x%02x",
+ address.ether_addr_octet[0],
+ address.ether_addr_octet[1],
+ address.ether_addr_octet[2],
+ address.ether_addr_octet[3],
+ address.ether_addr_octet[4],
+ address.ether_addr_octet[5]);
+
snprintf(str, 18, "%02X:%02X:%02X:%02X:%02X:%02X",
address.ether_addr_octet[0],
address.ether_addr_octet[1],
@@ -410,6 +420,7 @@ static void process_newlink(unsigned short type, int index, unsigned flags,
interface = g_new0(struct interface_data, 1);
interface->index = index;
interface->name = g_strdup(ifname);
+ interface->ident = g_strdup(ident);
g_hash_table_insert(interface_list,
GINT_TO_POINTER(index), interface);
@@ -418,7 +429,7 @@ static void process_newlink(unsigned short type, int index, unsigned flags,
read_uevent(interface);
__connman_technology_add_interface(interface->type,
- interface->index, interface->name);
+ interface->index, interface->name, interface->ident);
}
for (list = rtnl_list; list; list = list->next) {