Support for Debian/FreeBSD
authorHenning Rogge <hrogge@googlemail.com>
Sun, 13 Sep 2009 19:50:47 +0000 (21:50 +0200)
committerHenning Rogge <hrogge@googlemail.com>
Sun, 13 Sep 2009 19:50:47 +0000 (21:50 +0200)
18 files changed:
lib/dot_draw/src/olsrd_dot_draw.c
lib/httpinfo/src/olsrd_httpinfo.c
lib/nameservice/src/compat.c
lib/nameservice/src/compat.h
lib/pgraph/src/olsrd_pgraph.c
lib/quagga/src/quagga/zebra.h
lib/secure/src/olsrd_secure.c
lib/txtinfo/src/olsrd_txtinfo.c
make/Makefile.kfbsd [new file with mode: 0644]
make/guess_os.sh
src/bsd/net.c
src/cfgparser/olsrd_conf.c
src/hysteresis.c
src/linux/net.c
src/main.c
src/olsr_cfg.h
src/olsr_types.h
src/unix/ifnet.c

index 3b09bb1..fad4b5a 100644 (file)
@@ -209,7 +209,7 @@ plugin_ipc_init(void)
     CLOSE(ipc_socket);
     return 0;
   }
-#if defined __FreeBSD__ && defined SO_NOSIGPIPE
+#if (defined __FreeBSD__ || __FreeBSD_kernel__) && defined SO_NOSIGPIPE
   if (setsockopt(ipc_socket, SOL_SOCKET, SO_NOSIGPIPE, (char *)&yes, sizeof(yes)) < 0) {
     perror("SO_REUSEADDR failed");
     CLOSE(ipc_socket);
index 33ecd93..8526d17 100644 (file)
@@ -80,7 +80,7 @@
 #ifdef linux
 #define OS "GNU/Linux"
 #endif
-#ifdef __FreeBSD__
+#if defined __FreeBSD__ || defined __FreeBSD_kernel__
 #define OS "FreeBSD"
 #endif
 
index b598758..4d639be 100644 (file)
@@ -1,6 +1,6 @@
 #include "compat.h"
 
-#ifndef linux
+#if !defined(__linux__) && !defined(__GLIBC__)
 #include <stdlib.h>
 #include <string.h>
 
index 66a0b38..c607c91 100644 (file)
@@ -3,7 +3,9 @@
 
 #include <sys/types.h>
 
+#if !defined(__linux__) && !defined(__GLIBC__)
 char *strndup(const char *ptr, size_t size);
+#endif
 
 #endif
 
index 9175b4f..2f79e96 100644 (file)
@@ -226,7 +226,7 @@ plugin_ipc_init(void)
       perror("SO_REUSEADDR failed");
       return 0;
     }
-#ifdef __FreeBSD__
+#if defined __FreeBSD__
     if (setsockopt(ipc_socket, SOL_SOCKET, SO_NOSIGPIPE, (char *)&yes, sizeof(yes)) < 0) {
       perror("SO_NOSIGPIPE failed");
       return 0;
@@ -385,7 +385,7 @@ ipc_send(const char *data, int size)
   if (ipc_connection == -1)
     return 0;
 
-#if defined __FreeBSD__ || defined __MacOSX__ || __OpenBSD__
+#if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__ || __OpenBSD__
 #define FLAG 0
 #else
 #define FLAG MSG_NOSIGNAL
index af33c6e..2ce871f 100644 (file)
@@ -318,7 +318,7 @@ struct in_pktinfo {
  * OpenBSD: network byte order, apart from older versions which are as per
  *          *BSD
  */
-#if defined(__NetBSD__) || defined(__FreeBSD__) \
+#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__)\
    || (defined(__OpenBSD__) && (OpenBSD < 200311)) \
    || (defined(SUNOS_5) && defined(WORDS_BIGENDIAN))
 #define HAVE_IP_HDRINCL_BSD_ORDER
index d9a61bc..007d794 100644 (file)
@@ -100,7 +100,7 @@ MD5_checksum(const uint8_t * data, const uint16_t data_len, uint8_t * hashbuf)
 #ifdef linux
 #define OS "GNU/Linux"
 #endif
-#ifdef __FreeBSD__
+#if defined __FreeBSD__ || defined __FreeBSD_kernel__
 #define OS "FreeBSD"
 #endif
 
index e552f3a..c31555f 100644 (file)
@@ -175,7 +175,7 @@ plugin_ipc_init(void)
 #endif
       return 0;
     }
-#if defined __FreeBSD__ && defined SO_NOSIGPIPE
+#if (defined __FreeBSD__ || defined __FreeBSD_kernel__) && defined SO_NOSIGPIPE
     if (setsockopt(ipc_socket, SOL_SOCKET, SO_NOSIGPIPE, (char *)&yes, sizeof(yes)) < 0) {
       perror("SO_REUSEADDR failed");
       return 0;
diff --git a/make/Makefile.kfbsd b/make/Makefile.kfbsd
new file mode 100644 (file)
index 0000000..32fea95
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# FREEBSD SPECIFIC CONFIGURATION
+#
+
+PREFIX ?= /usr/local
+SBINDIR = $(PREFIX)/sbin
+ETCDIR = $(PREFIX)/etc
+LIBDIR = $(PREFIX)/lib
+DOCDIR = $(PREFIX)/share/doc
+MANDIR = $(PREFIX)/man
+
+SRCS +=                $(wildcard src/bsd/*.c) $(wildcard src/unix/*.c)
+HDRS +=                $(wildcard src/bsd/*.h) $(wildcard src/unix/*.h)
+
+LIBS =
+
+CPPFLAGS +=    -DOLSRD_GLOBAL_CONF_FILE=\"$(CFGFILE)\"
+
+ifdef NO_80211
+CPPFLAGS +=    -DFBSD_NO_80211=1
+endif
+
+ifdef LIBNET
+
+CPPFLAGS +=    -DSPOOF -I$(PREFIX)/include
+LIBS +=                -L$(PREFIX)/lib -lnet
+
+endif
+
+ifdef OLSRD_PLUGIN
+GENERATE_PIC = true
+endif
+ifeq ($(filter-out alpha x86_64 parisc64 ia64, $(ARCH)),)
+GENERATE_PIC = true
+endif
+
+ifdef GENERATE_PIC
+CFLAGS +=      -fPIC
+LDFLAGS +=     -fPIC
+endif
+
+PLUGIN_FULLNAME ?= $(PLUGIN_NAME).so.$(PLUGIN_VER)
+INSTALL_LIB =  install -m 755 $(PLUGIN_FULLNAME) $(LIBDIR)/$(PLUGIN_FULLNAME);
+
+OS_LIB_PTHREAD = -pthread
+OS_CFLAG_PTHREAD = -pthread
+OS_LIB_DYNLOAD = -ldl
+
+# Local Variables:
+# mode: makefile
+# End:
index 8cec52f..8bdc528 100755 (executable)
@@ -8,14 +8,15 @@ else
        # get it from uname
        arch=`uname -s | tr '[A-Z]' '[a-z]'`
        case "$arch" in
-               linux)          arch=linux ;;
-               freebsd*)       arch=fbsd ;;
-               netbsd*)        arch=nbsd ;;
-               openbsd*)       arch=obsd ;;
-               darwin*)        arch=osx ;;
-               cygwin_*)       arch=win32 ;;
-               Windows_*)      arch=win32 ;;
-               *)              arch="UNKNOWN" ;;
+               linux)               arch=linux ;;
+               freebsd*)            arch=fbsd ;;
+               gnu/kfreebsd*) arch=kfbsd ;;
+               netbsd*)             arch=nbsd ;;
+               openbsd*)            arch=obsd ;;
+               darwin*)             arch=osx ;;
+               cygwin_*)            arch=win32 ;;
+               Windows_*)         arch=win32 ;;
+               *)                       arch="UNKNOWN" ;;
        esac
        echo $arch
 fi
index 6e6661d..b512e29 100644 (file)
  *
  */
 
+#if defined __FreeBSD_kernel__
+#define _GNU_SOURCE 1
+#endif
+
 #include "../defs.h"
 #include "../net_os.h"
 #include "../ipcalc.h"
 #include <net80211/ieee80211_ioctl.h>
 #endif
 
-#ifdef __FreeBSD__
-#include <ifaddrs.h>
+#if defined __FreeBSD__ || __FreeBSD_kernel__
 #include <net/if_var.h>
 #include <net/ethernet.h>
 #include <netinet/in_var.h>
+#include <ifaddrs.h>
 #ifndef FBSD_NO_80211
 #include <net80211/ieee80211.h>
 #include <net80211/ieee80211_ioctl.h>
@@ -130,7 +134,7 @@ static int
 set_sysctl_int(const char *name, int new)
 {
   int old;
-#if defined(__FreeBSD__) || defined(__MacOSX__) || defined(__OpenBSD__) || defined(__NetBSD__)
+#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__MacOSX__) || defined(__OpenBSD__) || defined(__NetBSD__)
   size_t len = sizeof(old);
 #else
   unsigned int len = sizeof(old);
@@ -201,7 +205,7 @@ disable_redirects_global(int version)
     name = "net.inet6.icmp6.rediraccept";
 
   ignore_redir = set_sysctl_int(name, 0);
-#elif defined __FreeBSD__ || defined __MacOSX__
+#elif defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__
   if (version == AF_INET) {
     name = "net.inet.icmp.drop_redirect";
     ignore_redir = set_sysctl_int(name, 1);
@@ -273,7 +277,7 @@ restore_settings(int version)
 
 #ifdef __OpenBSD__
   name = version == AF_INET ? "net.inet.icmp.rediraccept" : "net.inet6.icmp6.rediraccept";
-#elif defined __FreeBSD__ || defined __MacOSX__
+#elif defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__
   name = version == AF_INET ? "net.inet.icmp.drop_redirect" : "net.inet6.icmp6.rediraccept";
 #else
   name = version == AF_INET ? "net.inet.icmp.drop_redirect" : "net.inet6.icmp6.drop_redirect";
@@ -756,14 +760,14 @@ olsr_select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, s
 int
 check_wireless_interface(char *ifname)
 {
-#if defined __FreeBSD__ &&  !defined FBSD_NO_80211
+#if (defined __FreeBSD__ || defined __FreeBSD_kernel__ ) &&  !defined FBSD_NO_80211
 
 /* From FreeBSD ifconfig/ifieee80211.c ieee80211_status() */
   struct ieee80211req ireq;
   u_int8_t data[32];
 
   memset(&ireq, 0, sizeof(ireq));
-  strlcpy(ireq.i_name, ifname, sizeof(ireq.i_name));
+  strscpy(ireq.i_name, ifname, sizeof(ireq.i_name));
   ireq.i_data = &data;
   ireq.i_type = IEEE80211_IOC_SSID;
   ireq.i_val = -1;
@@ -771,7 +775,7 @@ check_wireless_interface(char *ifname)
 #elif defined __OpenBSD__
   struct ieee80211_nodereq nr;
   bzero(&nr, sizeof(nr));
-  strlcpy(nr.nr_ifname, ifname, sizeof(nr.nr_ifname));
+  strscpy(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;
@@ -779,7 +783,7 @@ check_wireless_interface(char *ifname)
   int ret;
 
   memset(&ireq, 0, sizeof(ireq));
-  strlcpy(ireq.ifr_name, ifname, sizeof(ireq.ifr_name));
+  strscpy(ireq.ifr_name, ifname, sizeof(ireq.ifr_name));
   ireq.ifr_data = &data;
   ret = ioctl(olsr_cnf->ioctl_s, SIOCG80211NWID, &ireq);
   if(ret == 0)
@@ -806,7 +810,7 @@ calculate_if_metric(char *ifname)
     struct ifmediareq ifm;
 
     memset(&ifm, 0, sizeof(ifm));
-    strlcpy(ifm.ifm_name, ifname, sizeof(ifm.ifm_name));
+    strscpy(ifm.ifm_name, ifname, sizeof(ifm.ifm_name));
 
     if (ioctl(olsr_cnf->ioctl_s, SIOCGIFMEDIA, &ifm) < 0) {
       OLSR_PRINTF(1, "Error SIOCGIFMEDIA(%s)\n", ifm.ifm_name);
index e4becd1..129d8e0 100644 (file)
@@ -459,7 +459,7 @@ set_default_cnf(struct olsrd_config *cnf)
   cnf->rtnl_s = 0;
 #endif
 
-#if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
+#if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
   cnf->rts = 0;
 #endif
 }
index 37e3e80..7388ff3 100644 (file)
@@ -40,6 +40,7 @@
  */
 
 #include <time.h>
+#include <stdlib.h>
 
 #include "olsr_protocol.h"
 #include "hysteresis.h"
index dbe7329..0a39241 100644 (file)
@@ -549,7 +549,7 @@ join_mcast(struct interface *ifs, int sock)
   mcastreq.ipv6mr_multiaddr = ifs->int6_multaddr.sin6_addr;
   mcastreq.ipv6mr_interface = ifs->if_index;
 
-#if !defined __FreeBSD__ && !defined __MacOSX__ && !defined __NetBSD__
+#if !defined __FreeBSD__ && !defined __FreeBSD_kernel__ && !defined __MacOSX__ && !defined __NetBSD__
   OLSR_PRINTF(3, "Interface %s joining multicast %s...", ifs->int_name, ip6_to_string(&buf, &ifs->int6_multaddr.sin6_addr));
   /* Send multicast */
   if (setsockopt(sock, IPPROTO_IPV6, IPV6_ADD_MEMBERSHIP, (char *)&mcastreq, sizeof(struct ipv6_mreq)) < 0) {
index 604cc23..0620a54 100644 (file)
@@ -317,7 +317,7 @@ int main(int argc, char *argv[]) {
   /*
    * create routing socket
    */
-#if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
+#if defined __FreeBSD__ || __FreeBSD_kernel__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
   olsr_cnf->rts = socket(PF_ROUTE, SOCK_RAW, 0);
   if (olsr_cnf->rts < 0) {
     olsr_syslog(OLSR_LOG_ERR, "routing socket: %m");
@@ -552,7 +552,7 @@ static void olsr_shutdown(int signo __attribute__ ((unused)))
   close(olsr_cnf->rtnl_s);
 #endif
 
-#if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
+#if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
   /* routing socket */
   close(olsr_cnf->rts);
 #endif
index 29ff74b..8b1ce47 100644 (file)
@@ -240,7 +240,7 @@ struct olsrd_config {
   int rtnl_s;                          /* Socket used for rtnetlink messages */
 #endif
 
-#if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
+#if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
   int rts;                             /* Socket used for route changes on BSDs */
 #endif
   float lq_nat_thresh;
index bf6fa70..dddf3b9 100644 (file)
@@ -47,7 +47,7 @@
 #ifndef _OLSR_TYPES_H
 #define        _OLSR_TYPES_H
 
-#if !defined linux && !defined __MacOSX__ && !defined WIN32 && !defined __FreeBSD__ && !defined __NetBSD__ && !defined __OpenBSD__
+#if !defined linux && !defined __MacOSX__ && !defined WIN32 && !defined __FreeBSD__ && !defined __FreeBSD_kernel__ && !defined __NetBSD__ && !defined __OpenBSD__
 #       error "Unsupported system"
 #endif
 
index 078935c..d4b3560 100644 (file)
@@ -39,7 +39,7 @@
  *
  */
 
-#if defined __FreeBSD__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
+#if defined __FreeBSD__ || defined __FreeBSD_kernel__ || defined __MacOSX__ || defined __NetBSD__ || defined __OpenBSD__
 #define ifr_netmask ifr_addr
 #endif