xref: /plan9/sys/src/libip/myipaddr.c (revision f5736e95f14e1485b3a0291fa82d86cca323ab61)
19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <ip.h>
49a747e4fSDavid du Colombier 
5*39734e7eSDavid du Colombier static uchar loopbacknet[IPaddrlen] = {
6*39734e7eSDavid du Colombier 	0, 0, 0, 0,
7*39734e7eSDavid du Colombier 	0, 0, 0, 0,
8*39734e7eSDavid du Colombier 	0, 0, 0xff, 0xff,
9*39734e7eSDavid du Colombier 	127, 0, 0, 0
10*39734e7eSDavid du Colombier };
11*39734e7eSDavid du Colombier static uchar loopbackmask[IPaddrlen] = {
12*39734e7eSDavid du Colombier 	0xff, 0xff, 0xff, 0xff,
13*39734e7eSDavid du Colombier 	0xff, 0xff, 0xff, 0xff,
14*39734e7eSDavid du Colombier 	0xff, 0xff, 0xff, 0xff,
15*39734e7eSDavid du Colombier 	0xff, 0, 0, 0
16*39734e7eSDavid du Colombier };
17*39734e7eSDavid du Colombier 
18*39734e7eSDavid du Colombier // find first ip addr that isn't the friggin loopback address
19*39734e7eSDavid du Colombier // unless there are no others
209a747e4fSDavid du Colombier int
myipaddr(uchar * ip,char * net)219a747e4fSDavid du Colombier myipaddr(uchar *ip, char *net)
229a747e4fSDavid du Colombier {
239a747e4fSDavid du Colombier 	Ipifc *nifc;
249a747e4fSDavid du Colombier 	Iplifc *lifc;
259a747e4fSDavid du Colombier 	static Ipifc *ifc;
26*39734e7eSDavid du Colombier 	uchar mynet[IPaddrlen];
279a747e4fSDavid du Colombier 
289a747e4fSDavid du Colombier 	ifc = readipifc(net, ifc, -1);
299a747e4fSDavid du Colombier 	for(nifc = ifc; nifc; nifc = nifc->next)
30*39734e7eSDavid du Colombier 		for(lifc = nifc->lifc; lifc; lifc = lifc->next){
31*39734e7eSDavid du Colombier 			maskip(lifc->ip, loopbackmask, mynet);
32*39734e7eSDavid du Colombier 			if(ipcmp(mynet, loopbacknet) == 0){
33*39734e7eSDavid du Colombier 				continue;
34*39734e7eSDavid du Colombier 			}
359a747e4fSDavid du Colombier 			if(ipcmp(lifc->ip, IPnoaddr) != 0){
369a747e4fSDavid du Colombier 				ipmove(ip, lifc->ip);
379a747e4fSDavid du Colombier 				return 0;
389a747e4fSDavid du Colombier 			}
39*39734e7eSDavid du Colombier 		}
409a747e4fSDavid du Colombier 	ipmove(ip, IPnoaddr);
419a747e4fSDavid du Colombier 	return -1;
429a747e4fSDavid du Colombier }
43