Fixed IPv6 address fetch. The interface index in /proc/net/if_inet6
authorSven-Ola Tuecke <sven-ola@gmx.de>
Tue, 14 Sep 2010 09:33:46 +0000 (11:33 +0200)
committerSven-Ola Tuecke <sven-ola@gmx.de>
Tue, 14 Sep 2010 09:33:46 +0000 (11:33 +0200)
can grow above 0xff, especially with (Open)VPN interface when there
are added/removed constantly due to connection probs. Here are some
lines from the a proc file which triggers the error:
---
00000000000000000000000000000001 01 80 10 80       lo
fdcaffeebabe000002ffd6fffeed1987 743 40 00 80     tap1
fe8000000000000002ffd6fffeed1987 743 40 20 80     tap1
fe8000000000000002ff03fffe0fb7d8 08 40 20 80     tap0
fe800000000000000214bffffe3d4e0c 06 40 20 80      br0
---

src/linux/net.c

index c676437..a711b39 100644 (file)
@@ -606,7 +606,7 @@ get_ipv6_address(char *ifname, struct sockaddr_in6 *saddr6, struct olsr_ip_prefi
 
   if ((f = fopen(PATH_PROCNET_IFINET6, "r")) != NULL) {
     while (fscanf
-           (f, "%4s%4s%4s%4s%4s%4s%4s%4s %02x %02x %02x %02x %20s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4],
+           (f, "%4s%4s%4s%4s%4s%4s%4s%4s %x %02x %02x %02x %20s\n", addr6p[0], addr6p[1], addr6p[2], addr6p[3], addr6p[4],
             addr6p[5], addr6p[6], addr6p[7], &if_idx, &plen, &scope, &dad_status, devname) != EOF) {
       if (!strcmp(devname, ifname)) {
         bool isNetWide = false;