bug-commoncpp
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH]: src/network.cpp


From: Spinka, Kristofer
Subject: [PATCH]: src/network.cpp
Date: Sun, 23 Feb 2003 02:06:36 -0500

  This patch converts the ifreq requests of the old days to lifreq
structure compliance.  It wasn't much work, honestly, mostly just
"il[ESC]" (insert "l").  There were a couple other minor things, but I
only tested this on Solaris 9, SPARC.  I'm not even sure of the extent
of lifreq support in other UNIX implementations, sorry.  Patch
follows...

   /kristofer

==========
*** network.cpp.orig    Sun Feb 23 01:34:09 2003
--- network.cpp Sun Feb 23 01:44:42 2003
***************
*** 81,96 ****
        
  #ifndef WIN32
        char buffer[8192];
!       struct ifconf ifc;
        
        int fd = socket(AF_INET, SOCK_DGRAM, 0);
        if(fd == -1)
                return false;
  
!       ifc.ifc_len = sizeof(buffer);
!       ifc.ifc_buf = buffer;
  
!       if(ioctl(fd, SIOCGIFCONF, &ifc) == -1)
                return false;
  
        InetHostAddress addr;
--- 81,96 ----
        
  #ifndef WIN32
        char buffer[8192];
!       struct lifconf lifc;
        
        int fd = socket(AF_INET, SOCK_DGRAM, 0);
        if(fd == -1)
                return false;
  
!       lifc.lifc_len = sizeof(buffer);
!       lifc.lifc_buf = buffer;
  
!       if(ioctl(fd, SIOCGIFCONF, &lifc) == -1)
                return false;
  
        InetHostAddress addr;
***************
*** 100,132 ****
  //    sockaddr_in maskinaddr;
        int mtu;
  
!       int count = ifc.ifc_len / sizeof(ifreq);
        for(int i = 0; i < count; ++i)
        {
!               if(ifc.ifc_req[i].ifr_addr.sa_family != AF_INET)
                        continue;
  
!               addr = ((sockaddr_in&)ifc.ifc_req[i].ifr_addr).sin_addr;
  
!               struct ifreq devifreq;
!               strcpy(devifreq.ifr_name, ifc.ifc_req[i].ifr_name);
  
                if(ioctl(fd, SIOCGIFBRDADDR, &devifreq) == -1)
                        (InetAddress&)brdaddr = htonl(INADDR_ANY);
                else
!                       (InetAddress&)brdaddr =
((sockaddr_in&)devifreq.ifr_broadaddr).sin_addr;
  
                if(ioctl(fd, SIOCGIFNETMASK, &devifreq) == -1)
                        maskaddr = htonl(INADDR_BROADCAST);
                else
!                       (InetAddress&)maskaddr =
((sockaddr_in&)devifreq.ifr_addr).sin_addr;
  
                if(ioctl(fd, SIOCGIFMTU, &devifreq) == -1)
                        mtu = 0;
                else
!                       mtu = devifreq.ifr_mtu;
  
!
devs.push_back(NetworkDeviceInfo(ifc.ifc_req[i].ifr_name, addr, brdaddr,
maskaddr, mtu));
        }
  
        close(fd);
--- 100,132 ----
  //    sockaddr_in maskinaddr;
        int mtu;
  
!       int count = lifc.lifc_len / sizeof(lifreq);
        for(int i = 0; i < count; ++i)
        {
!               if(lifc.lifc_req[i].lifr_addr.ss_family != AF_INET)
                        continue;
  
!               addr =
((sockaddr_in&)lifc.lifc_req[i].lifr_addr).sin_addr;
  
!               struct lifreq devifreq;
!               strcpy(devifreq.lifr_name, lifc.lifc_req[i].lifr_name);
  
                if(ioctl(fd, SIOCGIFBRDADDR, &devifreq) == -1)
                        (InetAddress&)brdaddr = htonl(INADDR_ANY);
                else
!                       (InetAddress&)brdaddr =
((sockaddr_in&)devifreq.lifr_broadaddr).sin_addr;
  
                if(ioctl(fd, SIOCGIFNETMASK, &devifreq) == -1)
                        maskaddr = htonl(INADDR_BROADCAST);
                else
!                       (InetAddress&)maskaddr =
((sockaddr_in&)devifreq.lifr_addr).sin_addr;
  
                if(ioctl(fd, SIOCGIFMTU, &devifreq) == -1)
                        mtu = 0;
                else
!                       mtu = devifreq.lifr_mtu;
  
!
devs.push_back(NetworkDeviceInfo(lifc.lifc_req[i].lifr_name, addr,
brdaddr, maskaddr, mtu));
        }
  
        close(fd);

==============





reply via email to

[Prev in Thread] Current Thread [Next in Thread]