Diff for /libaitio/example/bpf.c between versions 1.1.2.9 and 1.4.12.2

version 1.1.2.9, 2013/06/26 12:27:40 version 1.4.12.2, 2016/08/11 16:23:43
Line 1 Line 1
   #ifdef __linux__
   int main()
   {
           return 0;
   }
   #else
   
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <fcntl.h>  #include <fcntl.h>
Line 61  static void * Line 68  static void *
 ShowPkt(void *buffer)  ShowPkt(void *buffer)
 {  {
         char Proto = 0, szStr[BUFSIZ], szLine[BUFSIZ], szWrk[BUFSIZ], szShow[USHRT_MAX] = { 0 };          char Proto = 0, szStr[BUFSIZ], szLine[BUFSIZ], szWrk[BUFSIZ], szShow[USHRT_MAX] = { 0 };
         struct bpf_hdr *bpf = buffer;  
 #ifdef __FreeBSD__  #ifdef __FreeBSD__
         struct bpf_zbuf_header *bzh = buffer;          struct bpf_zbuf_header *bzh = buffer;
         struct icmphdr *icmp;          struct icmphdr *icmp;
Line 78  ShowPkt(void *buffer) Line 84  ShowPkt(void *buffer)
   
         assert(buffer);          assert(buffer);
   
#ifdef __FreeBSD__        eth = (struct ether_header *) buffer;
        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 
   
         switch (ntohs(eth->ether_type)) {          switch (ntohs(eth->ether_type)) {
                 case ETHERTYPE_ARP:                  case ETHERTYPE_ARP:
Line 247  ShowPkt(void *buffer) Line 244  ShowPkt(void *buffer)
                 }                  }
   
         printf("%s===\n", szShow);          printf("%s===\n", szShow);
        pthread_exit(NULL);        return NULL;
 }  }
   
 // ----------------------  // ----------------------
Line 265  main(int argc, char **argv) Line 262  main(int argc, char **argv)
         char ch, mode = 'R';          char ch, mode = 'R';
         struct timespec ts_start, ts_end;          struct timespec ts_start, ts_end;
         void *bz = NULL;          void *bz = NULL;
           ether_addr_t ea;
   
         while ((ch = getopt(argc, argv, "hvwzs:p:f:")) != -1)          while ((ch = getopt(argc, argv, "hvwzs:p:f:")) != -1)
                 switch (ch) {                  switch (ch) {
Line 301  main(int argc, char **argv) Line 299  main(int argc, char **argv)
                 strlcpy(szStr, *argv, sizeof szStr);                  strlcpy(szStr, *argv, sizeof szStr);
   
 #ifdef __FreeBSD__  #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)          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  #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  #endif
         if (dev == -1) {          if (dev == -1) {
                 printf("Error:: #%d - %s\n", io_GetErrno(), io_GetError());                  printf("Error:: #%d - %s\n", io_GetErrno(), io_GetError());
Line 342  main(int argc, char **argv) Line 340  main(int argc, char **argv)
         if (mode == 'R') {          if (mode == 'R') {
                 pfd.events = POLLIN;                  pfd.events = POLLIN;
                 for (i = 0; i < count; i++) {                  for (i = 0; i < count; i++) {
                        if (poll(&pfd, 1, -1) == -1)                        if ((ret = poll(&pfd, 1, -1)) == -1)
                                 break;                                  break;
   
                         ret = io_etherRecv(dev, buffer, siz, bz);                          ret = io_etherRecv(dev, buffer, siz, bz);
                           if (!ret)
                                   continue;
                         if (ret == -1)                          if (ret == -1)
                                 printf("%d) io_etherRecv(%d) #%d - %s\n", i, ret,                                   printf("%d) io_etherRecv(%d) #%d - %s\n", i, ret, 
                                                 io_GetErrno(), io_GetError());                                                  io_GetErrno(), io_GetError());
                         if (Verbose) {                          if (Verbose) {
                                 printf("%d) +readed %d bytes\n", i, ret);                                  printf("%d) +readed %d bytes\n", i, ret);
                                pthread_create(&tid, NULL, ShowPkt, buffer);                                ShowPkt(buffer);
                                pthread_join(tid, NULL); 
                         }                          }
                 }                  }
         } else {          } else {
Line 379  main(int argc, char **argv) Line 378  main(int argc, char **argv)
         printf("0.%09lu per/iteration\n", ts_end.tv_sec + ts_end.tv_nsec / i);          printf("0.%09lu per/iteration\n", ts_end.tv_sec + ts_end.tv_nsec / i);
         return 0;          return 0;
 }  }
   
   #endif

Removed from v.1.1.2.9  
changed lines
  Added in v.1.4.12.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>