aboutsummaryrefslogtreecommitdiffstats
path: root/res/res_phoneprov.c
diff options
context:
space:
mode:
authortwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-01-10 00:22:50 +0000
committertwilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b>2008-01-10 00:22:50 +0000
commitc46162bb4ce79beca38b36c48f25aa81b0735808 (patch)
tree182ad3cf1300c85b5c36cada63833b494ade5c97 /res/res_phoneprov.c
parenta2a1eb045de773f5a8ff018121978fa0dbf06a1c (diff)
Attempt at making lookup_iface work under FreeBSD. Not yet tested, but it compiles under OS X. And still works under linux.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@97653 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res/res_phoneprov.c')
-rw-r--r--res/res_phoneprov.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/res/res_phoneprov.c b/res/res_phoneprov.c
index f03c4919c..a8a8ec53c 100644
--- a/res/res_phoneprov.c
+++ b/res/res_phoneprov.c
@@ -29,6 +29,8 @@
#include "asterisk.h"
#include <sys/ioctl.h>
+#include <sys/socket.h>
+#include <net/if.h>
ASTERISK_FILE_VERSION(__FILE__, "$Revision: 96773 $")
@@ -59,12 +61,6 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision: 96773 $")
#define VAR_BUF_SIZE 4096
/*! \brief for use in lookup_iface */
-struct my_ifreq {
- char ifrn_name[IFNAMSIZ]; /* Interface name, e.g. "eth0", "ppp0", etc. */
- struct sockaddr_in ifru_addr;
-};
-
-/*! \brief for use in lookup_iface */
static struct in_addr __ourip = { .s_addr = 0x00000000, };
/* \note This enum and the pp_variable_list must be in the same order or
@@ -183,10 +179,11 @@ static char *ftype2mtype(const char *ftype)
static int lookup_iface(const char *iface, struct in_addr *address)
{
int mysock, res = 0;
- struct my_ifreq ifreq;
+ struct ifreq ifr;
+ struct sockaddr_in *sin;
- memset(&ifreq, 0, sizeof(ifreq));
- ast_copy_string(ifreq.ifrn_name, iface, sizeof(ifreq.ifrn_name));
+ memset(&ifr, 0, sizeof(ifr));
+ ast_copy_string(ifr.ifr_name, iface, sizeof(ifr.ifr_name));
mysock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
if (mysock < 0) {
@@ -194,7 +191,7 @@ static int lookup_iface(const char *iface, struct in_addr *address)
return -1;
}
- res = ioctl(mysock, SIOCGIFADDR, &ifreq);
+ res = ioctl(mysock, SIOCGIFADDR, &ifr);
close(mysock);
@@ -203,7 +200,8 @@ static int lookup_iface(const char *iface, struct in_addr *address)
memcpy(address, &__ourip, sizeof(__ourip));
return -1;
} else {
- memcpy(address, &ifreq.ifru_addr.sin_addr, sizeof(ifreq.ifru_addr.sin_addr));
+ sin = (struct sockaddr_in *)&ifr.ifr_addr;
+ memcpy(address, &sin->sin_addr, sizeof(*address));
return 0;
}
}