diff options
Diffstat (limited to 'src/libip/myetheraddr.c')
-rw-r--r-- | src/libip/myetheraddr.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/libip/myetheraddr.c b/src/libip/myetheraddr.c new file mode 100644 index 00000000..d6995b7a --- /dev/null +++ b/src/libip/myetheraddr.c @@ -0,0 +1,41 @@ +#include <u.h> +#include <libc.h> +#include <ip.h> + +int +myetheraddr(uchar *to, char *dev) +{ + int n, fd; + char buf[256], *ptr; + + /* Make one exist */ + if(*dev == '/') + sprint(buf, "%s/clone", dev); + else + sprint(buf, "/net/%s/clone", dev); + fd = open(buf, ORDWR); + if(fd >= 0) + close(fd); + + if(*dev == '/') + sprint(buf, "%s/0/stats", dev); + else + sprint(buf, "/net/%s/0/stats", dev); + fd = open(buf, OREAD); + if(fd < 0) + return -1; + + n = read(fd, buf, sizeof(buf)-1); + close(fd); + if(n <= 0) + return -1; + buf[n] = 0; + + ptr = strstr(buf, "addr: "); + if(!ptr) + return -1; + ptr += 6; + + parseether(to, ptr); + return 0; +} |