myetheraddr.c 622 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <ip.h>
  4. int
  5. myetheraddr(uchar *to, char *dev)
  6. {
  7. int n, fd;
  8. char buf[256], *ptr;
  9. /* Make one exist */
  10. if(*dev == '/')
  11. sprint(buf, "%s/clone", dev);
  12. else
  13. sprint(buf, "/net/%s/clone", dev);
  14. fd = open(buf, ORDWR);
  15. if(fd >= 0)
  16. close(fd);
  17. if(*dev == '/')
  18. sprint(buf, "%s/0/stats", dev);
  19. else
  20. sprint(buf, "/net/%s/0/stats", dev);
  21. fd = open(buf, OREAD);
  22. if(fd < 0)
  23. return -1;
  24. n = read(fd, buf, sizeof(buf)-1);
  25. close(fd);
  26. if(n <= 0)
  27. return -1;
  28. buf[n] = 0;
  29. ptr = strstr(buf, "addr: ");
  30. if(!ptr)
  31. return -1;
  32. ptr += 6;
  33. parseether(to, ptr);
  34. return 0;
  35. }