13e12c5d1SDavid du Colombier #include <u.h> 23e12c5d1SDavid du Colombier #include <libc.h> 37dd7cddfSDavid 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; 97dd7cddfSDavid du Colombier char buf[256], *ptr; 103e12c5d1SDavid du Colombier 11*3432ceaeSDavid du Colombier if(*dev == '/') 12*3432ceaeSDavid du Colombier sprint(buf, "%s/stats", dev); 13*3432ceaeSDavid du Colombier else 14*3432ceaeSDavid du Colombier sprint(buf, "/net/%s/stats", dev); 15*3432ceaeSDavid du Colombier 16*3432ceaeSDavid du Colombier fd = open(buf, OREAD); 17*3432ceaeSDavid du Colombier if(fd < 0) { 18*3432ceaeSDavid du Colombier /* try the old place - this code will disappear on Nov 18th */ 197dd7cddfSDavid du Colombier /* Make one exist */ 207dd7cddfSDavid du Colombier if(*dev == '/') 217dd7cddfSDavid du Colombier sprint(buf, "%s/clone", dev); 227dd7cddfSDavid du Colombier else 237dd7cddfSDavid du Colombier sprint(buf, "/net/%s/clone", dev); 247dd7cddfSDavid du Colombier fd = open(buf, ORDWR); 257dd7cddfSDavid du Colombier if(fd >= 0) 267dd7cddfSDavid du Colombier close(fd); 277dd7cddfSDavid du Colombier 287dd7cddfSDavid du Colombier if(*dev == '/') 297dd7cddfSDavid du Colombier sprint(buf, "%s/0/stats", dev); 307dd7cddfSDavid du Colombier else 317dd7cddfSDavid du Colombier sprint(buf, "/net/%s/0/stats", dev); 323e12c5d1SDavid du Colombier fd = open(buf, OREAD); 333e12c5d1SDavid du Colombier if(fd < 0) 343e12c5d1SDavid du Colombier return -1; 35*3432ceaeSDavid du Colombier } 367dd7cddfSDavid du Colombier 373e12c5d1SDavid du Colombier n = read(fd, buf, sizeof(buf)-1); 383e12c5d1SDavid du Colombier close(fd); 393e12c5d1SDavid du Colombier if(n <= 0) 403e12c5d1SDavid du Colombier return -1; 413e12c5d1SDavid du Colombier buf[n] = 0; 423e12c5d1SDavid du Colombier 433e12c5d1SDavid du Colombier ptr = strstr(buf, "addr: "); 443e12c5d1SDavid du Colombier if(!ptr) 453e12c5d1SDavid du Colombier return -1; 463e12c5d1SDavid du Colombier ptr += 6; 473e12c5d1SDavid du Colombier 483e12c5d1SDavid du Colombier parseether(to, ptr); 493e12c5d1SDavid du Colombier return 0; 503e12c5d1SDavid du Colombier } 51