From 735e673bb9aa11e6f63e4721bc556ff1e4d1e3bd Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Sun, 29 Jan 2012 02:44:24 +0000 Subject: [PATCH] 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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@353176 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/netsock.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/main/netsock.c b/main/netsock.c index 2effc4a106..4b3ed11919 100644 --- a/main/netsock.c +++ b/main/netsock.c @@ -240,17 +240,17 @@ void ast_set_default_eid(struct ast_eid *eid) 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 @@ void ast_set_default_eid(struct ast_eid *eid) } 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));