Diff for /libaitio/src/bpf.c between versions 1.1.2.1 and 1.1.2.2

version 1.1.2.1, 2013/06/24 09:22:41 version 1.1.2.2, 2013/06/24 11:09:55
Line 1 Line 1
 #include "global.h"  #include "global.h"
   
   
   /*
    * io_get1stiface() - Get first interface of host
    *
    * @szIface = interface string buffer
    * @iflen = size of interface buffer
    * return: -1 error or 0 ok
    */
   int
   io_get1stiface(char *szIface, int iflen)
   {
           struct ifaddrs *ifa;
   
           if (!szIface || !iflen)
                   return -1;
   
           getifaddrs(&ifa);
           strlcpy(szIface, ifa->ifa_name, iflen);
           freeifaddrs(ifa);
           return 0;
   }
   
   /*
    * io_etherClose() - Close BPF interface
    *
    * @eth = bpf handle
    * return: none
    */
   void
   io_etherClose(int eth)
   {
           if (eth > STDERR_FILENO)
                   close(eth);
   }
   
   /*
    * io_etherOpen() - Open BPF interface to device
    *
    * @csIface = interface name
    * @flags = open flags
    * return: -1 error or >-1 bpf handle
    */
   int
   io_etherOpen(const char *csIface, int flags)
   {
           int n = 1, eth = -1;
           register int i;
           char szStr[STRSIZ];
           struct ifreq ifr;
   
           for (i = 0; i < BPF_DEV_MAX; i++) {
                   memset(szStr, 0, sizeof szStr);
                   snprintf(szStr, sizeof szStr, "/dev/bpf%d", i);
                   eth = open(szStr, flags);
                   if (eth > STDERR_FILENO)
                           break;
           }
           if (eth < 3) {
                   LOGERR;
                   return -1;
           }
   
           if (ioctl(eth, BIOCIMMEDIATE, &n) == -1) {
                   LOGERR;
                   close(eth);
                   return -1;
           }
           n = USHRT_MAX + 1;
           if (ioctl(eth, BIOCSBLEN, &n) == -1) {
                   LOGERR;
                   close(eth);
                   return -1;
           }
           if (csIface)
                   strlcpy(szStr, csIface, sizeof szStr);
           else if (io_get1stiface(szStr, sizeof szStr) == -1) {
                   close(eth);
                   return -1;
           }
           strlcpy(ifr.ifr_name, szStr, sizeof ifr.ifr_name);
           if (ioctl(eth, BIOCSETIF, &ifr) == -1) {
                   LOGERR;
                   close(eth);
                   return -1;
           }
   
           return eth;
   }

Removed from v.1.1.2.1  
changed lines
  Added in v.1.1.2.2


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