]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Find even more network interfaces.
authorRussell Bryant <russell@russellbryant.com>
Sun, 29 Jan 2012 02:42:59 +0000 (02:42 +0000)
committerRussell Bryant <russell@russellbryant.com>
Sun, 29 Jan 2012 02:42:59 +0000 (02:42 +0000)
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().

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@353175 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/netsock.c

index e20e03b0c87411f9d3eba67c730888e91eba91a4..a05e295b4426130adc64a2f618a8255930b6d3b5 100644 (file)
@@ -238,17 +238,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;
@@ -256,7 +256,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));