--- libaitio/example/bpf.c 2013/06/25 19:33:23 1.1.2.8 +++ libaitio/example/bpf.c 2016/08/11 16:18:15 1.4.12.1 @@ -1,3 +1,10 @@ +#ifdef __linux__ +int main() +{ + return 0; +} +#else + #include #include #include @@ -61,7 +68,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,16 +84,7 @@ ShowPkt(void *buffer) assert(buffer); -#ifdef __FreeBSD__ - 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 ? 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); - eth = (struct ether_header *) (buffer + bpf->bh_hdrlen); -#endif + eth = (struct ether_header *) buffer; switch (ntohs(eth->ether_type)) { case ETHERTYPE_ARP: @@ -247,7 +244,7 @@ ShowPkt(void *buffer) } printf("%s===\n", szShow); - pthread_exit(NULL); + return NULL; } // ---------------------- @@ -258,13 +255,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) { @@ -300,12 +298,16 @@ main(int argc, char **argv) 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, (u_int*) &siz, (flg) ? &bz : NULL); + dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, 0, (u_int*) &siz, (flg) ? &bz : NULL); if (dev == -1) - dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, (u_int*) &siz, NULL); + dev = io_etherOpen(szStr, O_RDWR | O_NONBLOCK, 42, 0, (u_int*) &siz, NULL); #else - dev = io_etherOpen(szStr, O_RDWR, 42, (u_int*) &siz, NULL); + dev = io_etherOpen(szStr, O_RDWR, 42, 0, (u_int*) &siz, NULL); #endif if (dev == -1) { printf("Error:: #%d - %s\n", io_GetErrno(), io_GetError()); @@ -342,17 +344,18 @@ main(int argc, char **argv) if (mode == 'R') { pfd.events = POLLIN; for (i = 0; i < count; i++) { - if (poll(&pfd, 1, -1) == -1) + if ((ret = poll(&pfd, 1, -1)) == -1) break; - ret = io_etherRecv(dev, buffer, siz, NULL); + ret = io_etherRecv(dev, buffer, siz, bz); + if (!ret) + continue; if (ret == -1) printf("%d) io_etherRecv(%d) #%d - %s\n", i, ret, io_GetErrno(), io_GetError()); if (Verbose) { printf("%d) +readed %d bytes\n", i, ret); - pthread_create(&tid, NULL, ShowPkt, buffer); - pthread_join(tid, NULL); + ShowPkt(buffer); } } } else { @@ -379,3 +382,5 @@ main(int argc, char **argv) printf("0.%09lu per/iteration\n", ts_end.tv_sec + ts_end.tv_nsec / i); return 0; } + +#endif