|  | #include <u.h> | 
|  | #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; | 
|  | Ipifc *ifc; | 
|  | uchar mynet[IPaddrlen]; | 
|  |  | 
|  | ifc = readipifc(net, nil, -1); | 
|  | for(nifc = ifc; nifc; nifc = nifc->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; | 
|  | } | 
|  |  |