xref: /plan9/sys/src/libip/myetheraddr.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
3*7dd7cddfSDavid 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;
9*7dd7cddfSDavid du Colombier 	char buf[256], *ptr;
103e12c5d1SDavid du Colombier 
11*7dd7cddfSDavid du Colombier 	/* Make one exist */
12*7dd7cddfSDavid du Colombier 	if(*dev == '/')
13*7dd7cddfSDavid du Colombier 		sprint(buf, "%s/clone", dev);
14*7dd7cddfSDavid du Colombier 	else
15*7dd7cddfSDavid du Colombier 		sprint(buf, "/net/%s/clone", dev);
16*7dd7cddfSDavid du Colombier 	fd = open(buf, ORDWR);
17*7dd7cddfSDavid du Colombier 	if(fd >= 0)
18*7dd7cddfSDavid du Colombier 		close(fd);
19*7dd7cddfSDavid du Colombier 
20*7dd7cddfSDavid du Colombier 	if(*dev == '/')
21*7dd7cddfSDavid du Colombier 		sprint(buf, "%s/0/stats", dev);
22*7dd7cddfSDavid du Colombier 	else
23*7dd7cddfSDavid du Colombier 		sprint(buf, "/net/%s/0/stats", dev);
243e12c5d1SDavid du Colombier 	fd = open(buf, OREAD);
253e12c5d1SDavid du Colombier 	if(fd < 0)
263e12c5d1SDavid du Colombier 		return -1;
27*7dd7cddfSDavid du Colombier 
283e12c5d1SDavid du Colombier 	n = read(fd, buf, sizeof(buf)-1);
293e12c5d1SDavid du Colombier 	close(fd);
303e12c5d1SDavid du Colombier 	if(n <= 0)
313e12c5d1SDavid du Colombier 		return -1;
323e12c5d1SDavid du Colombier 	buf[n] = 0;
333e12c5d1SDavid du Colombier 
343e12c5d1SDavid du Colombier 	ptr = strstr(buf, "addr: ");
353e12c5d1SDavid du Colombier 	if(!ptr)
363e12c5d1SDavid du Colombier 		return -1;
373e12c5d1SDavid du Colombier 	ptr += 6;
383e12c5d1SDavid du Colombier 
393e12c5d1SDavid du Colombier 	parseether(to, ptr);
403e12c5d1SDavid du Colombier 	return 0;
413e12c5d1SDavid du Colombier }
42