diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-10-23 21:41:17 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-10-23 21:41:17 +0000 |
commit | 570efbaa4501ab30f4b0e68b74d589556651c7a1 (patch) | |
tree | 72f9130b9fe11ae4df11c9e29c4b1604dcf17be2 /pbx | |
parent | 264c53472d0a3b95dae8f07ffe5379296150cf87 (diff) |
Fix for FreeBSD (netbsd too?) (bug #2702)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4068 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'pbx')
-rwxr-xr-x | pbx/pbx_dundi.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c index b09c3dee0..7dc346764 100755 --- a/pbx/pbx_dundi.c +++ b/pbx/pbx_dundi.c @@ -39,13 +39,18 @@ #include <sys/socket.h> #include <string.h> #include <errno.h> -#if defined(__NetBSD__) +#if defined(__FreeBSD__) || defined(__NetBSD__) +#include <sys/types.h> #include <netinet/in_systm.h> #endif #include <netinet/ip.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <net/if.h> +#if defined(__FreeBSD__) +#include <net/if_dl.h> +#include <ifaddrs.h> +#endif #include <zlib.h> #define MAX_RESULTS 64 @@ -354,7 +359,7 @@ static void dundi_reject(struct dundi_hdr *h, struct sockaddr_in *sin) static void reset_global_eid(void) { -#if !defined(__NetBSD__) +#if defined(SIOCGIFHWADDR) int x,s; char eid_str[20]; struct ifreq ifr; @@ -372,6 +377,27 @@ static void reset_global_eid(void) } } } +#else +#if defined(ifa_broadaddr) + char eid_str[20]; + struct ifaddrs *ifap; + + if (getifaddrs(&ifap) == 0) { + struct ifaddrs *p; + for (p = ifap; p; p = p->ifa_next) { + if (p->ifa_addr->sa_family == AF_LINK) { + struct sockaddr_dl* sdp = (struct sockaddr_dl*) p->ifa_addr; + memcpy( + &(global_eid.eid), + sdp->sdl_data + sdp->sdl_nlen, 6); + ast_log(LOG_DEBUG, "Seeding global EID '%s' from '%s'\n", dundi_eid_to_str(eid_str, sizeof(eid_str), &global_eid), ifap->ifa_name); + freeifaddrs(ifap); + return; + } + } + freeifaddrs(ifap); + } +#endif #endif ast_log(LOG_NOTICE, "No ethernet interface found for seeding global EID You will have to set it manually.\n"); } |