#include #include #include #include #include "dat.h" #include "fns.h" static char tohex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; static char hexbuf[256]; char* hexprefix(uchar *s, int n, int l) { char *p; int c, i; memset(hexbuf, 0 , sizeof(hexbuf)); p=hexbuf; for(i = 0; i < n && i < l && i < (sizeof(hexbuf)/2 -1); i++){ c = s[i]; *p++ = tohex[c>>4]; *p++ = tohex[c&0xf]; } return hexbuf; } void put24(uchar *p, int x) { p[0] = x>>16; p[1] = x>>8; p[2] = x; } int apetheraddr(uchar *eaddr, char *dir) { char fname[256]; char buf[2048]; int fd; int n; char *p, *e; char *s; int l; s = "Base station: "; l = strlen(s); snprint(fname, sizeof(fname), "%s/ifstats", dir); fd = open(fname, OREAD); if (fd < 0) { print("cannot open %s: %r", fname); return -1; } n = read(fd, buf, sizeof(buf)); if (n < 0) { print("cannot read ifstats %s: %r", fname); close(fd); return -1; } close(fd); p = buf; e = p + n; while ((e - p > l) && strncmp(p, s, l) != 0) { p = strchr(p, '\n'); p++; } if ((e - p > l) && strncmp(p, s, l) == 0) { p += l; if (parseether(eaddr, p) < 0) { print("cannot parse ether from ifstats"); return -1; } } return 0; }