xref: /plan9-contrib/sys/src/libip/myetheraddr.c (revision 3432ceae96058d5ba10cbd0086cd176f7049f3d3)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <ip.h>
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier int
63e12c5d1SDavid du Colombier myetheraddr(uchar *to, char *dev)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier 	int n, fd;
97dd7cddfSDavid du Colombier 	char buf[256], *ptr;
103e12c5d1SDavid du Colombier 
11*3432ceaeSDavid du Colombier 	if(*dev == '/')
12*3432ceaeSDavid du Colombier 		sprint(buf, "%s/stats", dev);
13*3432ceaeSDavid du Colombier 	else
14*3432ceaeSDavid du Colombier 		sprint(buf, "/net/%s/stats", dev);
15*3432ceaeSDavid du Colombier 
16*3432ceaeSDavid du Colombier 	fd = open(buf, OREAD);
17*3432ceaeSDavid du Colombier 	if(fd < 0) {
18*3432ceaeSDavid du Colombier 		/* try the old place - this code will disappear on Nov 18th */
197dd7cddfSDavid du Colombier 		/* Make one exist */
207dd7cddfSDavid du Colombier 		if(*dev == '/')
217dd7cddfSDavid du Colombier 			sprint(buf, "%s/clone", dev);
227dd7cddfSDavid du Colombier 		else
237dd7cddfSDavid du Colombier 			sprint(buf, "/net/%s/clone", dev);
247dd7cddfSDavid du Colombier 		fd = open(buf, ORDWR);
257dd7cddfSDavid du Colombier 		if(fd >= 0)
267dd7cddfSDavid du Colombier 			close(fd);
277dd7cddfSDavid du Colombier 
287dd7cddfSDavid du Colombier 		if(*dev == '/')
297dd7cddfSDavid du Colombier 			sprint(buf, "%s/0/stats", dev);
307dd7cddfSDavid du Colombier 		else
317dd7cddfSDavid du Colombier 			sprint(buf, "/net/%s/0/stats", dev);
323e12c5d1SDavid du Colombier 		fd = open(buf, OREAD);
333e12c5d1SDavid du Colombier 		if(fd < 0)
343e12c5d1SDavid du Colombier 			return -1;
35*3432ceaeSDavid du Colombier 	}
367dd7cddfSDavid du Colombier 
373e12c5d1SDavid du Colombier 	n = read(fd, buf, sizeof(buf)-1);
383e12c5d1SDavid du Colombier 	close(fd);
393e12c5d1SDavid du Colombier 	if(n <= 0)
403e12c5d1SDavid du Colombier 		return -1;
413e12c5d1SDavid du Colombier 	buf[n] = 0;
423e12c5d1SDavid du Colombier 
433e12c5d1SDavid du Colombier 	ptr = strstr(buf, "addr: ");
443e12c5d1SDavid du Colombier 	if(!ptr)
453e12c5d1SDavid du Colombier 		return -1;
463e12c5d1SDavid du Colombier 	ptr += 6;
473e12c5d1SDavid du Colombier 
483e12c5d1SDavid du Colombier 	parseether(to, ptr);
493e12c5d1SDavid du Colombier 	return 0;
503e12c5d1SDavid du Colombier }
51