Fine tuning for OpenBSD and GNU/kfreebsd.
authorMats Erik Andersson <mats.andersson@gisladisker.se>
Wed, 29 Sep 2010 14:36:54 +0000 (16:36 +0200)
committerEmil Mikulic <emikulic@gmail.com>
Mon, 9 May 2011 12:40:26 +0000 (22:40 +1000)
GNU/Linux and FreeBSD are also fine with these.

darkstat.c
decode.c
decode.h
http.c
localip.c

index 308cba5..da3b92d 100644 (file)
@@ -106,7 +106,10 @@ static void cb_bindaddr(const char *arg)
    struct addrinfo hints, *ai;
 
    memset(&hints, '\0', sizeof(hints));
-   hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
+   hints.ai_flags = AI_PASSIVE;
+#ifdef AI_ADDRCONFIG
+   hints.ai_flags |= AI_ADDRCONFIG;
+#endif
    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
 
index e20b0b3..c3bb176 100644 (file)
--- a/decode.c
+++ b/decode.c
 #define ETHERTYPE_PPPOE 0x8864
 #endif
 
+#ifndef ETHERTYPE_IPV6
+# include <net/if_ether.h>     /* ETH_P_IPV6 for GNU/kfreebsd */
+# define ETHERTYPE_IPV6 ETH_P_IPV6
+#endif
+
 #include <net/if.h> /* struct ifreq */
 #include <netinet/in_systm.h> /* n_long */
 #include <netinet/ip.h> /* struct ip */
index 73c20e7..5e70dad 100644 (file)
--- a/decode.h
+++ b/decode.h
@@ -8,6 +8,7 @@
  */
 
 #include <pcap.h>
+#include <netinet/in_systm.h>  /* n_time */
 #include <netinet/in.h> /* in_addr_t */
 #include <netinet/ip.h> /* struct ip */
 
diff --git a/http.c b/http.c
index b232705..a79f567 100644 (file)
--- a/http.c
+++ b/http.c
@@ -873,10 +873,13 @@ void http_init(const char *bindaddr, const unsigned short bindport,
     memset(&hints, '\0', sizeof(hints));
     hints.ai_family = AF_UNSPEC;
     hints.ai_socktype = SOCK_STREAM;
-    hints.ai_flags = AI_PASSIVE | AI_ADDRCONFIG;
+    hints.ai_flags = AI_PASSIVE;
+#ifdef AI_ADDRCONFIG
+    hints.ai_flags |= AI_ADDRCONFIG;
+#endif
     snprintf(portstr, sizeof(portstr), "%u", bindport);
 
-    if (ret = getaddrinfo(bindaddr, portstr, &hints, &aiptr))
+    if ((ret = getaddrinfo(bindaddr, portstr, &hints, &aiptr)))
         err(1, "getaddrinfo(): %s", gai_strerror(ret));
 
     for (ai = aiptr; ai; ai = ai->ai_next) {
@@ -899,8 +902,7 @@ void http_init(const char *bindaddr, const unsigned short bindport,
 
         /* bind socket */
         memcpy(&addrin, ai->ai_addr, ai->ai_addrlen);
-        if (bind(sockin, (struct sockaddr *)&addrin,
-                sizeof(addrin)) == -1) {
+        if (bind(sockin, (struct sockaddr *)&addrin, ai->ai_addrlen) == -1) {
             close(sockin);
             continue;
         }
index 622decf..11330cd 100644 (file)
--- a/localip.c
+++ b/localip.c
@@ -71,16 +71,11 @@ localip_update(void)
       }
 
       /* IPv6 needs some obvious exceptions. */
-      if( ifa->ifa_addr->sa_family == AF_INET6 ) {
+      if ( ifa->ifa_addr->sa_family == AF_INET6 ) {
          struct sockaddr_in6 *sa6 = (struct sockaddr_in6 *) ifa->ifa_addr;
 
-#ifdef __FreeBSD__
-         if( IN6_IS_ADDR_LINKLOCAL(&(sa6->sin6_addr))
-            || IN6_IS_ADDR_SITELOCAL(&(sa6->sin6_addr)) )
-#else
-         if( IN6_IS_ADDR_LINKLOCAL(&(sa6->sin6_addr.s6_addr))
-            || IN6_IS_ADDR_SITELOCAL(&(sa6->sin6_addr.s6_addr)) )
-#endif
+         if ( IN6_IS_ADDR_LINKLOCAL(&(sa6->sin6_addr))
+              || IN6_IS_ADDR_SITELOCAL(&(sa6->sin6_addr)) )
             continue;
          else
             /* Only standard IPv6 can reach this point. */