diff options
author | rsc <devnull@localhost> | 2005-12-31 19:33:03 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2005-12-31 19:33:03 +0000 |
commit | 9aec88f29cf8145f887f31a4bfc7299f723b72e8 (patch) | |
tree | 9adf1d233e7e947a506539efe2bbcaefd96853f4 /src/libip/myipaddr.c | |
parent | 9fe7e1a14c84bddc7bb0ec16ce23f44b5479ce94 (diff) | |
download | plan9port-9aec88f29cf8145f887f31a4bfc7299f723b72e8.tar.gz plan9port-9aec88f29cf8145f887f31a4bfc7299f723b72e8.tar.bz2 plan9port-9aec88f29cf8145f887f31a4bfc7299f723b72e8.zip |
new
Diffstat (limited to 'src/libip/myipaddr.c')
-rw-r--r-- | src/libip/myipaddr.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/libip/myipaddr.c b/src/libip/myipaddr.c index d9b69201..a7149ffa 100644 --- a/src/libip/myipaddr.c +++ b/src/libip/myipaddr.c @@ -2,20 +2,44 @@ #include <libc.h> #include <ip.h> +static uchar loopbacknet[IPaddrlen] = { + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0xff, 0xff, + 127, 0, 0, 0 +}; +static uchar loopbackmask[IPaddrlen] = { + 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, + 0xff, 0, 0, 0 +}; + +// find first ip addr that isn't the friggin loopback address +// unless there are no others int myipaddr(uchar *ip, char *net) { Ipifc *nifc; Iplifc *lifc; - static Ipifc *ifc; + Ipifc *ifc; + uchar mynet[IPaddrlen]; - ifc = readipifc(net, ifc, -1); + ifc = readipifc(net, nil, -1); for(nifc = ifc; nifc; nifc = nifc->next) - for(lifc = nifc->lifc; lifc; lifc = lifc->next) + for(lifc = nifc->lifc; lifc; lifc = lifc->next){ + maskip(lifc->ip, loopbackmask, mynet); + if(ipcmp(mynet, loopbacknet) == 0){ + continue; + } if(ipcmp(lifc->ip, IPnoaddr) != 0){ ipmove(ip, lifc->ip); + freeipifc(ifc); return 0; } + } ipmove(ip, IPnoaddr); + freeipifc(ifc); return -1; } + |