ref: 6c9f4ad6e1e3058460912470916264f3175b6572
parent: e5d24cb07b5a103ba5d93a597b2d96b9969d5348
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri Dec 26 04:34:30 EST 2014
libip: skip ipv6 loopback address (thanks mischief)
--- a/sys/src/libip/myipaddr.c
+++ b/sys/src/libip/myipaddr.c
@@ -14,6 +14,12 @@
0xff, 0xff, 0xff, 0xff,
0xff, 0, 0, 0
};
+static uchar loopback6[IPaddrlen] = {+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 0,
+ 0, 0, 0, 1
+};
// find first ip addr that isn't the friggin loopback address
// unless there are no others
@@ -28,14 +34,21 @@
ifc = readipifc(net, ifc, -1);
for(nifc = ifc; nifc; nifc = nifc->next)
for(lifc = nifc->lifc; lifc; lifc = lifc->next){+ /* unspecified */
+ if(ipcmp(lifc->ip, IPnoaddr) == 0)
+ continue;
+
+ /* ipv6 loopback */
+ if(ipcmp(lifc->ip, loopback6) == 0)
+ continue;
+
+ /* ipv4 loopback */
maskip(lifc->ip, loopbackmask, mynet);
- if(ipcmp(mynet, loopbacknet) == 0){+ if(ipcmp(mynet, loopbacknet) == 0)
continue;
- }
- if(ipcmp(lifc->ip, IPnoaddr) != 0){- ipmove(ip, lifc->ip);
- return 0;
- }
+
+ ipmove(ip, lifc->ip);
+ return 0;
}
ipmove(ip, IPnoaddr);
return -1;
--
⑨