summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2009-04-17 13:31:41 +0000
committerRoy Marples <roy@marples.name>2009-04-17 13:31:41 +0000
commit9d5fe47f4534167fc51dffdcd2a50490dfb7c5de (patch)
treecc70cad3c24ea189365b9f188fe0c7020decc047
parentd3088c74911ad6f3c4905b2ae4abab8c2279bced (diff)
downloaddhcpcd-9d5fe47f4534167fc51dffdcd2a50490dfb7c5de.tar.xz
Fix compile on NetBSD
-rw-r--r--if-bsd.c1
-rw-r--r--net.c20
2 files changed, 17 insertions, 4 deletions
diff --git a/if-bsd.c b/if-bsd.c
index 43170bd7..7517e714 100644
--- a/if-bsd.c
+++ b/if-bsd.c
@@ -35,7 +35,6 @@
#include <arpa/inet.h>
#include <net/if.h>
#include <net/if_dl.h>
-#include <net/if_types.h>
#include <net/route.h>
#include <netinet/in.h>
#ifdef __DragonFly__
diff --git a/net.c b/net.c
index 062002e1..c3d154a0 100644
--- a/net.c
+++ b/net.c
@@ -34,6 +34,10 @@
#include <arpa/inet.h>
#include <net/if.h>
#include <net/if_arp.h>
+#ifdef AF_LINK
+# include <net/if_dl.h>
+# include <net/if_types.h>
+#endif
#include <netinet/in_systm.h>
#include <netinet/in.h>
#include <netinet/ip.h>
@@ -271,6 +275,12 @@ discover_interfaces(int argc, char * const *argv)
#ifdef AF_LINK
if (ifa->ifa_addr->sa_family != AF_LINK)
continue;
+ /* FIXME: Why do I get 2 AF_LINK addresses per interface? */
+ for (ifp = ifs; ifp; ifp = ifp->next)
+ if (strcmp(ifp->name, ifa->ifa_name) == 0)
+ break;
+ if (ifp)
+ continue;
#elif AF_PACKET
if (ifa->ifa_addr->sa_family != AF_PACKET)
continue;
@@ -326,7 +336,7 @@ discover_interfaces(int argc, char * const *argv)
break;
}
ifp->hwlen = sdl->sdl_alen;
- memcpy(ifp->hwaddr, LLADDR(sdl), ifp->hwlen);
+ memcpy(ifp->hwaddr, CLLADDR(sdl), ifp->hwlen);
#elif AF_PACKET
sll = (const struct sockaddr_ll *)(void *)ifa->ifa_addr;
ifp->family = sll->sll_hatype;
@@ -364,8 +374,12 @@ do_address(const char *ifname,
a = (const struct sockaddr_in *)(void *)&ifa->ifa_addr;
n = (const struct sockaddr_in *)(void *)&ifa->ifa_netmask;
if (ifa->ifa_flags & IFF_POINTOPOINT)
- d = (const struct sockaddr_in *)
- (void *)&ifa->ifa_ifu.ifu_dstaddr;
+ d = (const struct sockaddr_in *)(void *)
+#ifdef __linux__
+ &ifa->ifa_ifu.ifu_dstaddr;
+#else
+ &ifa->ifa_dstaddr;
+#endif
else
d = NULL;
if (act == 1) {