aboutsummaryrefslogtreecommitdiff
path: root/src/libip/myetheraddr.c
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2003-11-23 18:23:20 +0000
committerrsc <devnull@localhost>2003-11-23 18:23:20 +0000
commitd7094239263eac816ebb3af32641079b7924c666 (patch)
tree61b016942d567560042adf110f5fb558dc328a98 /src/libip/myetheraddr.c
parent99947423b136903263513b9022aab6586c8c6cc5 (diff)
downloadplan9port-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.c41
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;
+}