Fixes to run olsrd on netbsd
authorHenning Rogge <hrogge@googlemail.com>
Sun, 16 Aug 2009 16:26:04 +0000 (18:26 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 16 Aug 2009 16:26:04 +0000 (18:26 +0200)
src/bsd/net.c

index f7b5cec..5823a36 100644 (file)
@@ -73,6 +73,9 @@
 
 #ifdef __NetBSD__
 #include <net/if_ether.h>
+#include <netinet6/in6_var.h>   /* For struct in6_ifreq */
+#include <net80211/ieee80211_ioctl.h>
+#include <ifaddrs.h>
 #endif
 
 #ifdef __OpenBSD__
@@ -127,7 +130,7 @@ static int
 set_sysctl_int(const char *name, int new)
 {
   int old;
-#if __MacOSX__ || __OpenBSD__
+#if defined(__MacOSX__) || defined(__OpenBSD__) || defined(__NetBSD__)
   size_t len = sizeof(old);
 #else
   unsigned int len = sizeof(old);
@@ -191,7 +194,7 @@ disable_redirects_global(int version)
 
   /* do not accept ICMP redirects */
 
-#ifdef __OpenBSD__
+#if defined(__OpenBSD__) || defined(__NetBSD__)
   if (version == AF_INET)
     name = "net.inet.icmp.rediraccept";
   else
@@ -731,9 +734,11 @@ olsr_recvfrom(int s, void *buf, size_t len, int flags __attribute__ ((unused)),
               inet_ntop(olsr_cnf->ip_version, olsr_cnf->ip_version == AF_INET6 ? (char *)&sin6->sin6_addr : (char *)&sin->sin_addr,
                         addrstr, sizeof(addrstr)), ifc->int_name, iname);
 
+#ifndef __NetBSD__
   if (strcmp(ifc->int_name, iname) != 0) {
     return (0);
   }
+#endif
 
   return (count);
 }
@@ -768,6 +773,18 @@ check_wireless_interface(char *ifname)
   bzero(&nr, sizeof(nr));
   strlcpy(nr.nr_ifname, ifname, sizeof(nr.nr_ifname));
   return (ioctl(olsr_cnf->ioctl_s, SIOCG80211FLAGS, &nr) >= 0) ? 1 : 0;
+#elif defined __NetBSD__
+  struct ifreq ireq;
+  struct ieee80211_nwid data;
+  int ret;
+
+  memset(&ireq, 0, sizeof(ireq));
+  strlcpy(ireq.ifr_name, ifname, sizeof(ireq.ifr_name));
+  ireq.ifr_data = &data;
+  ret = ioctl(olsr_cnf->ioctl_s, SIOCG80211NWID, &ireq);
+  if(ret == 0)
+         return 1;
+  return 0;
 #else
   ifname = NULL;                /* squelsh compiler warning */
   return 0;