[Top][All Lists]
[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);
==============
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [PATCH]: src/network.cpp,
Spinka, Kristofer <=