summaryrefslogtreecommitdiff
path: root/main/netsock.c
diff options
context:
space:
mode:
authorRussell Bryant <russell@russellbryant.com>2012-01-29 02:45:28 +0000
committerRussell Bryant <russell@russellbryant.com>2012-01-29 02:45:28 +0000
commitdd35aa15556244a90d4e85992932dccf3a28e4f8 (patch)
treea746464c27ff13622ae001098dc11b1e1f855486 /main/netsock.c
parent702335009897b85d2c30c175cab27108908840e5 (diff)
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 ........ Merged revisions 353176 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@353177 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main/netsock.c')
-rw-r--r--main/netsock.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/main/netsock.c b/main/netsock.c
index 2effc4a10..4b3ed1191 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));