diff options
| -rw-r--r-- | sys/src/libip/myipaddr.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/sys/src/libip/myipaddr.c b/sys/src/libip/myipaddr.c index e1a2773bd..48a099ef6 100644 --- a/sys/src/libip/myipaddr.c +++ b/sys/src/libip/myipaddr.c @@ -14,6 +14,12 @@ static uchar loopbackmask[IPaddrlen] = { 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 @@ myipaddr(uchar *ip, char *net) 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; |
