--- libaitio/example/bpf.c 2013/07/01 20:44:09 1.2.2.1 +++ libaitio/example/bpf.c 2013/12/04 12:19:55 1.3.24.1 @@ -61,7 +61,6 @@ static void * ShowPkt(void *buffer) { char Proto = 0, szStr[BUFSIZ], szLine[BUFSIZ], szWrk[BUFSIZ], szShow[USHRT_MAX] = { 0 }; - struct bpf_hdr *bpf = buffer; #ifdef __FreeBSD__ struct bpf_zbuf_header *bzh = buffer; struct icmphdr *icmp; @@ -78,9 +77,7 @@ ShowPkt(void *buffer) assert(buffer); - snprintf(szLine, BUFSIZ, "#Packet length: %d\n>>> Ethernet ...\n", bpf->bh_datalen); - strlcat(szShow, szLine, USHRT_MAX); - eth = (struct ether_header *) (buffer + bpf->bh_hdrlen); + eth = (struct ether_header *) buffer; switch (ntohs(eth->ether_type)) { case ETHERTYPE_ARP: @@ -251,13 +248,14 @@ main(int argc, char **argv) u_int n, count = (u_int) -1; register int i; int dev, fd, ret, siz = 0; - char szStr[BUFSIZ], szMap[MAXPATHLEN] = { 0 }, *buffer = NULL; + char szStr[BUFSIZ], szEA[STRSIZ], szMap[MAXPATHLEN] = { 0 }, *buffer = NULL; struct ifreq ifr; struct pollfd pfd = { 0 }; pthread_t tid; char ch, mode = 'R'; struct timespec ts_start, ts_end; void *bz = NULL; + ether_addr_t ea; while ((ch = getopt(argc, argv, "hvwzs:p:f:")) != -1) switch (ch) { @@ -292,6 +290,10 @@ main(int argc, char **argv) strlcpy(szStr, strrchr(*argv, '/') + 1, sizeof szStr); else strlcpy(szStr, *argv, sizeof szStr); + + printf("io_getmaciface(%s) -> %d\n", szStr, io_getmaciface(szStr, &ea)); + e_ether_ntoa(&ea, szEA, sizeof szEA); + printf("ethernet address is %s\n", szEA); #ifdef __FreeBSD__ dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, 0, (u_int*) &siz, (flg) ? &bz : NULL);