diff options
author | rsc <devnull@localhost> | 2003-11-23 18:23:20 +0000 |
---|---|---|
committer | rsc <devnull@localhost> | 2003-11-23 18:23:20 +0000 |
commit | d7094239263eac816ebb3af32641079b7924c666 (patch) | |
tree | 61b016942d567560042adf110f5fb558dc328a98 /src/libip/myetheraddr.c | |
parent | 99947423b136903263513b9022aab6586c8c6cc5 (diff) | |
download | plan9port-d7094239263eac816ebb3af32641079b7924c666.tar.gz plan9port-d7094239263eac816ebb3af32641079b7924c666.tar.bz2 plan9port-d7094239263eac816ebb3af32641079b7924c666.zip |
add libip
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; +} |