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