--- libaitio/example/bpf.c 2013/06/25 17:06:02 1.1.2.6 +++ libaitio/example/bpf.c 2013/06/25 19:33:23 1.1.2.8 @@ -79,9 +79,10 @@ ShowPkt(void *buffer) assert(buffer); #ifdef __FreeBSD__ - snprintf(szLine, BUFSIZ, "#Packet length: %d\n>>> Ethernet ...\n", flg ? bzh->bzh_kernel_len : bpf->bh_datalen); + bpf = (struct bpf_hdr*) (buffer + (flg ? sizeof(struct bpf_zbuf_header) : 0)); + snprintf(szLine, BUFSIZ, "#Packet length: %d/%d\n>>> Ethernet ...\n", flg ? bzh->bzh_kernel_len : bpf->bh_datalen, bpf->bh_datalen); strlcat(szShow, szLine, USHRT_MAX); - eth = (struct ether_header *) (buffer + (flg ? bzh->bzh_kernel_len : bpf->bh_hdrlen)); + eth = (struct ether_header *) (buffer + (flg ? sizeof(struct bpf_zbuf_header) : 0) + bpf->bh_hdrlen); #else snprintf(szLine, BUFSIZ, "#Packet length: %d\n>>> Ethernet ...\n", bpf->bh_datalen); strlcat(szShow, szLine, USHRT_MAX); @@ -300,9 +301,9 @@ main(int argc, char **argv) strlcpy(szStr, *argv, sizeof szStr); #ifdef __FreeBSD__ - dev = io_etherOpen(szStr, O_RDWR, 42, (u_int*) &siz, &bz); + dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, (u_int*) &siz, (flg) ? &bz : NULL); if (dev == -1) - dev = io_etherOpen(szStr, O_RDWR, 42, (u_int*) &siz, NULL); + dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, (u_int*) &siz, NULL); #else dev = io_etherOpen(szStr, O_RDWR, 42, (u_int*) &siz, NULL); #endif @@ -344,7 +345,7 @@ main(int argc, char **argv) if (poll(&pfd, 1, -1) == -1) break; - ret = io_etherRecv(dev, buffer, siz, bz); + ret = io_etherRecv(dev, buffer, siz, NULL); if (ret == -1) printf("%d) io_etherRecv(%d) #%d - %s\n", i, ret, io_GetErrno(), io_GetError());