[asterisk-commits] russell: branch 10 r353176 - in /branches/10: ./ main/netsock.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Sat Jan 28 20:44:28 CST 2012


Author: russell
Date: Sat Jan 28 20:44:24 2012
New Revision: 353176

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=353176
Log:
Find even more network interfaces.

The previous change made the code look for emN and pciN in addition to what
it did originally, which was search for ethN.  However, it needed to be looking
for pciN#N, so that's what it does now.

This also moves the memset() to be before every ioctl().
........

Merged revisions 353175 from http://svn.asterisk.org/svn/asterisk/branches/1.8

Modified:
    branches/10/   (props changed)
    branches/10/main/netsock.c

Propchange: branches/10/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Modified: branches/10/main/netsock.c
URL: http://svnview.digium.com/svn/asterisk/branches/10/main/netsock.c?view=diff&rev=353176&r1=353175&r2=353176
==============================================================================
--- branches/10/main/netsock.c (original)
+++ branches/10/main/netsock.c Sat Jan 28 20:44:24 2012
@@ -240,17 +240,17 @@
 	int s, x = 0;
 	char eid_str[20];
 	struct ifreq ifr;
+	static const unsigned int MAXIF = 10;
 
 	s = socket(AF_INET, SOCK_STREAM, 0);
 	if (s < 0)
 		return;
-	for (x = 0; x < 10; x++) {
-		static const char *prefixes[] = { "eth", "em", "pci" };
+	for (x = 0; x < MAXIF; x++) {
+		static const char *prefixes[] = { "eth", "em" };
 		unsigned int i;
 
-		memset(&ifr, 0, sizeof(ifr));
-
 		for (i = 0; i < ARRAY_LEN(prefixes); i++) {
+			memset(&ifr, 0, sizeof(ifr));
 			snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s%d", prefixes[i], x);
 			if (!ioctl(s, SIOCGIFHWADDR, &ifr)) {
 				break;
@@ -258,7 +258,17 @@
 		}
 
 		if (i == ARRAY_LEN(prefixes)) {
-			continue;
+			/* Try pciX#[1..N] */
+			for (i = 0; i < MAXIF; i++) {
+				memset(&ifr, 0, sizeof(ifr));
+				snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "pci%u#%u", x, i);
+				if (!ioctl(s, SIOCGIFHWADDR, &ifr)) {
+					break;
+				}
+			}
+			if (i == MAXIF) {
+				continue;
+			}
 		}
 
 		memcpy(eid, ((unsigned char *)&ifr.ifr_hwaddr) + 2, sizeof(*eid));




More information about the asterisk-commits mailing list