[SCM] Samba Shared Repository - branch v3-2-test updated - initial-v3-2-test-2487-g7970901

Michael Adam obnox at samba.org
Fri Feb 22 08:39:48 GMT 2008


The branch, v3-2-test has been updated
       via  7970901223464745f99cea883b180316189e4b2c (commit)
      from  26e6ebc7090b5742deb67805d85d809cafb4543d (commit)

http://gitweb.samba.org/?samba.git;a=shortlog;h=v3-2-test


- Log -----------------------------------------------------------------
commit 7970901223464745f99cea883b180316189e4b2c
Author: Michael Adam <obnox at samba.org>
Date:   Fri Feb 22 01:59:45 2008 +0100

    Remove the implementations of _get_interfaces and autoconf test in interfaces.c
    
    getifaddrs() is now provided by libreplace.
    
    Michael

-----------------------------------------------------------------------

Summary of changes:
 source/lib/interfaces.c |  386 -----------------------------------------------
 1 files changed, 0 insertions(+), 386 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/lib/interfaces.c b/source/lib/interfaces.c
index 3797fc6..8925958 100644
--- a/source/lib/interfaces.c
+++ b/source/lib/interfaces.c
@@ -191,7 +191,6 @@ void make_net(struct sockaddr_storage *pss_out,
  Also gets IPv6 interfaces.
 ****************************************************************************/
 
-#if HAVE_IFACE_GETIFADDRS
 /****************************************************************************
  Get the netmask address for a local interface.
 ****************************************************************************/
@@ -269,339 +268,6 @@ static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
 	return total;
 }
 
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_GETIFADDRS */
-#if HAVE_IFACE_IFCONF
-
-/* this works for Linux 2.2, Solaris 2.5, SunOS4, HPUX 10.20, OSF1
-   V4.0, Ultrix 4.4, SCO Unix 3.2, IRIX 6.4 and FreeBSD 3.2.
-
-   It probably also works on any BSD style system.  */
-
-/****************************************************************************
- Get the netmask address for a local interface.
-****************************************************************************/
-
-static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
-{
-	struct ifconf ifc;
-	char buff[8192];
-	int fd, i, n;
-	struct ifreq *ifr=NULL;
-	int total = 0;
-
-	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-		return -1;
-	}
-
-	ifc.ifc_len = sizeof(buff);
-	ifc.ifc_buf = buff;
-
-	if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
-		close(fd);
-		return -1;
-	}
-
-	ifr = ifc.ifc_req;
-
-	n = ifc.ifc_len / sizeof(struct ifreq);
-
-	/* Loop through interfaces, looking for given IP address */
-	for (i=n-1;i>=0 && total < max_interfaces;i--) {
-
-		memset(&ifaces[total], '\0', sizeof(ifaces[total]));
-
-		/* Check the interface is up. */
-		if (ioctl(fd, SIOCGIFFLAGS, &ifr[i]) != 0) {
-			continue;
-		}
-
-		ifaces[total].flags = ifr[i].ifr_flags;
-
-		if (!(ifaces[total].flags & IFF_UP)) {
-			continue;
-		}
-
-		if (ioctl(fd, SIOCGIFADDR, &ifr[i]) != 0) {
-			continue;
-		}
-
-		strlcpy(ifaces[total].name, ifr[i].ifr_name,
-			sizeof(ifaces[total].name));
-
-		memcpy(&ifaces[total].ip, &ifr[i].ifr_addr,
-				sizeof(struct sockaddr_in));
-
-		if (ioctl(fd, SIOCGIFNETMASK, &ifr[i]) != 0) {
-			continue;
-		}
-
-		memcpy(&ifaces[total].netmask, &ifr[i].ifr_netmask,
-				sizeof(struct sockaddr_in));
-
-		if (ifaces[total].flags & IFF_BROADCAST) {
-			if (ioctl(fd, SIOCGIFBRDADDR, &ifr[i]) != 0) {
-				continue;
-			}
-			memcpy(&ifaces[total].bcast, &ifr[i].ifr_broadaddr,
-				sizeof(struct sockaddr_in));
-		} else if (ifaces[total].flags & IFF_POINTOPOINT) {
-			if (ioctl(fd, SIOCGIFDSTADDR, &ifr[i]) != 0) {
-				continue;
-			}
-			memcpy(&ifaces[total].bcast, &ifr[i].ifr_dstaddr,
-				sizeof(struct sockaddr_in));
-		} else {
-			continue;
-		}
-
-		total++;
-	}
-
-	close(fd);
-
-	return total;
-}
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_IFCONF */
-#ifdef HAVE_IFACE_IFREQ
-
-#ifndef I_STR
-#include <sys/stropts.h>
-#endif
-
-/****************************************************************************
- This should cover most of the streams based systems.
- Thanks to Andrej.Borsenkow at mow.siemens.ru for several ideas in this code.
-****************************************************************************/
-
-static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
-{
-	struct ifreq ifreq;
-	struct strioctl strioctl;
-	char buff[8192];
-	int fd, i, n;
-	struct ifreq *ifr=NULL;
-	int total = 0;
-
-	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-		return -1;
-	}
-
-	strioctl.ic_cmd = SIOCGIFCONF;
-	strioctl.ic_dp  = buff;
-	strioctl.ic_len = sizeof(buff);
-	if (ioctl(fd, I_STR, &strioctl) < 0) {
-		close(fd);
-		return -1;
-	}
-
-	/* we can ignore the possible sizeof(int) here as the resulting
-	   number of interface structures won't change */
-	n = strioctl.ic_len / sizeof(struct ifreq);
-
-	/* we will assume that the kernel returns the length as an int
-           at the start of the buffer if the offered size is a
-           multiple of the structure size plus an int */
-	if (n*sizeof(struct ifreq) + sizeof(int) == strioctl.ic_len) {
-		ifr = (struct ifreq *)(buff + sizeof(int));
-	} else {
-		ifr = (struct ifreq *)buff;
-	}
-
-	/* Loop through interfaces */
-
-	for (i = 0; i<n && total < max_interfaces; i++) {
-
-		memset(&ifaces[total], '\0', sizeof(ifaces[total]));
-
-		ifreq = ifr[i];
-
-		strioctl.ic_cmd = SIOCGIFFLAGS;
-		strioctl.ic_dp  = (char *)&ifreq;
-		strioctl.ic_len = sizeof(struct ifreq);
-		if (ioctl(fd, I_STR, &strioctl) != 0) {
-			continue;
-		}
-
-		ifaces[total].flags = ifreq.ifr_flags;
-
-		if (!(ifaces[total].flags & IFF_UP)) {
-			continue;
-		}
-
-		strioctl.ic_cmd = SIOCGIFADDR;
-		strioctl.ic_dp  = (char *)&ifreq;
-		strioctl.ic_len = sizeof(struct ifreq);
-		if (ioctl(fd, I_STR, &strioctl) != 0) {
-			continue;
-		}
-
-		strlcpy(ifaces[total].name,
-				ifreq.ifr_name,
-				sizeof(ifaces[total].name));
-
-		memcpy(&ifaces[total].ip, &ifreq.ifr_addr,
-				sizeof(struct sockaddr_in));
-
-		strioctl.ic_cmd = SIOCGIFNETMASK;
-		strioctl.ic_dp  = (char *)&ifreq;
-		strioctl.ic_len = sizeof(struct ifreq);
-		if (ioctl(fd, I_STR, &strioctl) != 0) {
-			continue;
-		}
-
-		memcpy(&ifaces[total].netmask, &ifreq.ifr_addr,
-				sizeof(struct sockaddr_in));
-
-		if (ifaces[total].flags & IFF_BROADCAST) {
-			strioctl.ic_cmd = SIOCGIFBRDADDR;
-			strioctl.ic_dp  = (char *)&ifreq;
-			strioctl.ic_len = sizeof(struct ifreq);
-			if (ioctl(fd, I_STR, &strioctl) != 0) {
-				continue;
-			}
-			memcpy(&ifaces[total].bcast, &ifreq.ifr_broadaddr,
-				sizeof(struct sockaddr_in));
-		} else if (ifaces[total].flags & IFF_POINTOPOINT) {
-			strioctl.ic_cmd = SIOCGIFDSTADDR;
-			strioctl.ic_dp  = (char *)&ifreq;
-			strioctl.ic_len = sizeof(struct ifreq);
-			if (ioctl(fd, I_STR, &strioctl) != 0) {
-				continue;
-			}
-			memcpy(&ifaces[total].bcast, &ifreq.ifr_dstaddr,
-				sizeof(struct sockaddr_in));
-		} else {
-			continue;
-		}
-
-		total++;
-	}
-
-	close(fd);
-
-	return total;
-}
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_IFREQ */
-#ifdef HAVE_IFACE_AIX
-
-/****************************************************************************
- This one is for AIX (tested on 4.2).
-****************************************************************************/
-
-static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
-{
-	char buff[8192];
-	int fd, i;
-	struct ifconf ifc;
-	struct ifreq *ifr=NULL;
-	int total = 0;
-
-	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-		return -1;
-	}
-
-
-	ifc.ifc_len = sizeof(buff);
-	ifc.ifc_buf = buff;
-
-	if (ioctl(fd, SIOCGIFCONF, &ifc) != 0) {
-		close(fd);
-		return -1;
-	}
-
-	ifr = ifc.ifc_req;
-
-	/* Loop through interfaces */
-	i = ifc.ifc_len;
-
-	while (i > 0 && total < max_interfaces) {
-		uint_t inc;
-
-		memset(&ifaces[total], '\0', sizeof(ifaces[total]));
-
-		inc = ifr->ifr_addr.sa_len;
-
-		if (ioctl(fd, SIOCGIFFLAGS, ifr) != 0) {
-			goto next;
-		}
-
-		ifaces[total].flags = ifr->ifr_flags;
-
-		if (!(ifaces[total].flags & IFF_UP)) {
-			goto next;
-		}
-
-		if (ioctl(fd, SIOCGIFADDR, ifr) != 0) {
-			goto next;
-		}
-
-		memcpy(&ifaces[total].ip, &ifr->ifr_addr,
-				sizeof(struct sockaddr_in));
-
-		strlcpy(ifaces[total].name, ifr->ifr_name,
-			sizeof(ifaces[total].name));
-
-		if (ioctl(fd, SIOCGIFNETMASK, ifr) != 0) {
-			goto next;
-		}
-
-		memcpy(&ifaces[total].netmask, &ifr->ifr_addr,
-				sizeof(struct sockaddr_in));
-
-		if (ifaces[total].flags & IFF_BROADCAST) {
-			if (ioctl(fd, SIOCGIFBRDADDR, ifr) != 0) {
-				goto next;
-			}
-			memcpy(&ifaces[total].bcast, &ifr->ifr_broadaddr,
-				sizeof(struct sockaddr_in));
-		} else if (ifaces[total].flags & IFF_POINTOPOINT) {
-			if (ioctl(fd, SIOCGIFDSTADDR, ifr) != 0) {
-				goto next;
-			}
-			memcpy(&ifaces[total].bcast, &ifr->ifr_dstaddr,
-				sizeof(struct sockaddr_in));
-		} else {
-			goto next;
-		}
-
-
-		total++;
-
-	next:
-		/*
-		 * Patch from Archie Cobbs (archie at whistle.com).  The
-		 * addresses in the SIOCGIFCONF interface list have a
-		 * minimum size. Usually this doesn't matter, but if
-		 * your machine has tunnel interfaces, etc. that have
-		 * a zero length "link address", this does matter.  */
-
-		if (inc < sizeof(ifr->ifr_addr))
-			inc = sizeof(ifr->ifr_addr);
-		inc += IFNAMSIZ;
-
-		ifr = (struct ifreq*) (((char*) ifr) + inc);
-		i -= inc;
-	}
-
-	close(fd);
-	return total;
-}
-
-#define _FOUND_IFACE_ANY
-#endif /* HAVE_IFACE_AIX */
-#ifndef _FOUND_IFACE_ANY
-static int _get_interfaces(struct iface_struct *ifaces, int max_interfaces)
-{
-	return -1;
-}
-#endif
-
-
 static int iface_comp(struct iface_struct *i1, struct iface_struct *i2)
 {
 	int r;
@@ -693,55 +359,3 @@ int get_interfaces(struct iface_struct *ifaces, int max_interfaces)
 	return total;
 }
 
-
-#ifdef AUTOCONF_TEST
-/* this is the autoconf driver to test get_interfaces() */
-
-static socklen_t calc_sa_size(struct sockaddr *psa)
-{
-	socklen_t sl = sizeof(struct sockaddr_in);
-#if defined(HAVE_IPV6)
-	if (psa->sa_family == AF_INET6) {
-		sl = sizeof(struct sockaddr_in6);
-	}
-#endif
-	return sl;
-}
-
- int main()
-{
-	struct iface_struct ifaces[MAX_INTERFACES];
-	int total = get_interfaces(ifaces, MAX_INTERFACES);
-	int i;
-
-	printf("got %d interfaces:\n", total);
-	if (total <= 0) {
-		exit(1);
-	}
-
-	for (i=0;i<total;i++) {
-		char addr[INET6_ADDRSTRLEN];
-		int ret;
-		printf("%-10s ", ifaces[i].name);
-		addr[0] = '\0';
-		ret = getnameinfo((struct sockaddr *)&ifaces[i].ip,
-				calc_sa_size(&ifaces[i].ip),
-				addr, sizeof(addr),
-				NULL, 0, NI_NUMERICHOST);
-		printf("IP=%s ", addr);
-		addr[0] = '\0';
-		ret = getnameinfo((struct sockaddr *)&ifaces[i].netmask,
-				calc_sa_size(&ifaces[i].netmask),
-				addr, sizeof(addr),
-				NULL, 0, NI_NUMERICHOST);
-		printf("NETMASK=%s ", addr);
-		addr[0] = '\0';
-		ret = getnameinfo((struct sockaddr *)&ifaces[i].bcast,
-				calc_sa_size(&ifaces[i].bcast),
-				addr, sizeof(addr),
-				NULL, 0, NI_NUMERICHOST);
-		printf("BCAST=%s\n", addr);
-	}
-	return 0;
-}
-#endif


-- 
Samba Shared Repository


More information about the samba-cvs mailing list