diff --git a/configure.in b/configure.in index dc8d6e0c2a..47c35d8b1c 100644 --- a/configure.in +++ b/configure.in @@ -123,6 +123,11 @@ AC_INIT(configure.in) CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/local/include/libnet11" LDFLAGS="${LDFLAGS} -L/usr/local/lib -L/usr/local/lib/libnet11" ;; + *-*-openbsd*) + CFLAGS="${CFLAGS} -D__OpenBSD__" + CPPFLAGS="${CPPFLAGS} -I/usr/local/include -I/usr/local/include/libnet-1.1" + LDFLAGS="${LDFLAGS} -L/usr/local/lib -I/usr/local/lib/libnet-1.1" + ;; *darwin*|*Darwin*) CFLAGS="${CFLAGS} -DOS_DARWIN" CPPFLAGS="${CPPFLAGS} -I/opt/local/include" diff --git a/src/suricata-common.h b/src/suricata-common.h index 5ebe1827b6..a002350258 100644 --- a/src/suricata-common.h +++ b/src/suricata-common.h @@ -97,14 +97,14 @@ #include -#if HAVE_ARPA_INET_H -#include -#endif - #if HAVE_NETINET_IN_H #include #endif +#if HAVE_ARPA_INET_H +#include +#endif + #if HAVE_NETDB_H #include #endif diff --git a/src/threads.h b/src/threads.h index 4c82d0fee0..8b83e4ed94 100644 --- a/src/threads.h +++ b/src/threads.h @@ -27,9 +27,11 @@ #ifndef __THREADS_H__ #define __THREADS_H__ -#ifdef OS_FREEBSD +#if defined OS_FREEBSD || __OpenBSD__ +#if ! defined __OpenBSD__ #include +#endif enum { PRIO_LOW = 2, PRIO_MEDIUM = 0, @@ -99,6 +101,13 @@ enum { u_long tid = (u_long)tmpthid; \ tid; \ }) +#elif __OpenBSD__ +#define SCGetThreadIdLong(...) ({ \ + pid_t tpid; \ + tpid = getpid(); \ + u_long tid = (u_long)tpid; \ + tid; \ +}) #elif OS_WIN32 #define SCGetThreadIdLong(...) ({ \ u_long tid = (u_long)GetCurrentThreadId(); \ @@ -361,7 +370,7 @@ enum { */ #ifndef PR_SET_NAME /*PR_SET_NAME */ #define SCSetThreadName(n) -#elif OS_FREEBSD /* FreeBSD */ +#elif defined OS_FREEBSD || __OpenBSD__ /* FreeBSD or OpenBSD */ /** \todo Add implementation for FreeBSD */ #define SCSetThreadName(n) #elif OS_WIN32 /* Windows */ diff --git a/src/tm-threads.c b/src/tm-threads.c index 77d3e996d9..1f14e143c2 100644 --- a/src/tm-threads.c +++ b/src/tm-threads.c @@ -664,13 +664,9 @@ void TmVarSlotSetFuncAppend(ThreadVars *tv, TmModule *tm, void *data) { } } -#ifdef OS_WIN32 -static int SetCPUAffinitySet(uint32_t cs) { - return 0; -} -#else +#if !defined OS_WIN32 && !defined __OpenBSD__ static int SetCPUAffinitySet(cpu_set_t *cs) { -#ifdef OS_FREEBSD +#if defined OS_FREEBSD int r = cpuset_setaffinity(CPU_LEVEL_WHICH,CPU_WHICH_TID,SCGetThreadIdLong(),sizeof(cpu_set_t),cs); #elif OS_DARWIN int r = thread_policy_set(mach_thread_self(), THREAD_AFFINITY_POLICY, (void*)cs, THREAD_AFFINITY_POLICY_COUNT); @@ -696,11 +692,14 @@ static int SetCPUAffinitySet(cpu_set_t *cs) { * \retval 0 if all goes well; -1 if something is wrong */ static int SetCPUAffinity(uint16_t cpuid) { - +#if !defined __OpenBSD__ int cpu = (int)cpuid; +#endif #ifdef OS_WIN32 DWORD cs = 1 << cpu; +#elif defined __OpenBSD__ + return 0; #else cpu_set_t cs; @@ -717,7 +716,7 @@ static int SetCPUAffinity(uint16_t cpuid) { SCLogDebug("CPU Affinity for thread %lu set to CPU %" PRId32, SCGetThreadIdLong(), cpu); return 0; -#else +#elif !defined __OpenBSD__ return SetCPUAffinitySet(&cs); #endif /* OS_WIN32 */ } @@ -802,6 +801,7 @@ TmEcode TmThreadSetupOptions(ThreadVars *tv) { SCLogInfo("Setting affinity for \"%s\" Module to cpu/core %"PRIu16", thread id %lu", tv->name, tv->cpu_affinity, SCGetThreadIdLong()); SetCPUAffinity(tv->cpu_affinity); } +#if !defined OS_WIN32 && !defined __OpenBSD__ if (tv->thread_setup_flags & THREAD_SET_PRIORITY) TmThreadSetPrio(tv); if (tv->thread_setup_flags & THREAD_SET_AFFTYPE) { @@ -827,6 +827,7 @@ TmEcode TmThreadSetupOptions(ThreadVars *tv) { } TmThreadSetPrio(tv); } +#endif return TM_ECODE_OK; } diff --git a/src/util-affinity.c b/src/util-affinity.c index be6b12149e..28c72ab9a2 100644 --- a/src/util-affinity.c +++ b/src/util-affinity.c @@ -97,6 +97,7 @@ ThreadsAffinityType * GetAffinityTypeFromName(const char *name) { return NULL; } +#if !defined OS_WIN32 && !defined __OpenBSD__ static void AffinitySetupInit() { int i, j; @@ -112,7 +113,6 @@ static void AffinitySetupInit() } SCMutexInit(&thread_affinity[i].taf_mutex, NULL); } - return; } @@ -168,6 +168,7 @@ static void build_cpuset(ConfNode *node, cpu_set_t *cpu) break; } } +#endif /* OS_WIN32 and __OpenBSD__ */ /** * \brief Extract cpu affinity configuration from current config file @@ -175,6 +176,7 @@ static void build_cpuset(ConfNode *node, cpu_set_t *cpu) void AffinitySetupLoadFromConfig() { +#if !defined OS_WIN32 && !defined __OpenBSD__ ConfNode *root = ConfGetNode("threading.cpu_affinity"); ConfNode *affinity; @@ -269,6 +271,7 @@ void AffinitySetupLoadFromConfig() } } } +#endif /* OS_WIN32 and __OpenBSD__ */ } /** @@ -279,6 +282,7 @@ int AffinityGetNextCPU(ThreadsAffinityType *taf) { int ncpu = 0; +#if !defined OS_WIN32 && !defined __OpenBSD__ SCMutexLock(&taf->taf_mutex); ncpu = taf->lcpu; while (!CPU_ISSET(ncpu, &taf->cpu_set)) { @@ -291,5 +295,6 @@ int AffinityGetNextCPU(ThreadsAffinityType *taf) taf->lcpu = 0; SCMutexUnlock(&taf->taf_mutex); SCLogInfo("Setting affinity on CPU %d", ncpu); +#endif /* OS_WIN32 and __OpenBSD__ */ return ncpu; } diff --git a/src/util-affinity.h b/src/util-affinity.h index 3edb7a3e44..d03252b651 100644 --- a/src/util-affinity.h +++ b/src/util-affinity.h @@ -25,14 +25,18 @@ #define __UTIL_AFFINITY_H__ #include "suricata-common.h" -#ifdef OS_FREEBSD +#if defined OS_FREEBSD #include #include #include #include #include #define cpu_set_t cpuset_t -#elif OS_DARWIN +#elif defined __OpenBSD__ +#include +#include +#include +#elif defined OS_DARWIN #include #include #include @@ -62,13 +66,17 @@ enum { typedef struct ThreadsAffinityType_ { char *name; +#if !defined OS_WIN32 && !defined __OpenBSD__ cpu_set_t cpu_set; +#endif uint8_t mode_flag; int prio; int nb_threads; +#if !defined OS_WIN32 && !defined __OpenBSD__ cpu_set_t lowprio_cpu; cpu_set_t medprio_cpu; cpu_set_t hiprio_cpu; +#endif SCMutex taf_mutex; uint16_t lcpu; /* use by exclusive mode */ } ThreadsAffinityType; diff --git a/src/util-byte.h b/src/util-byte.h index 4f702b613f..443bcd1ab4 100644 --- a/src/util-byte.h +++ b/src/util-byte.h @@ -35,6 +35,11 @@ #define SCByteSwap16(x) bswap16(x) #define SCByteSwap32(x) bswap32(x) #define SCByteSwap64(x) bswap64(x) +#elif defined __OpenBSD__ +#include +#define SCByteSwap16(x) swap16(x) +#define SCByteSwap32(x) swap32(x) +#define SCByteSwap64(x) swap64(x) #elif OS_DARWIN #include #define SCByteSwap16(x) OSSwapInt16(x) diff --git a/src/util-debug.h b/src/util-debug.h index d3631fda2a..ec0309f636 100644 --- a/src/util-debug.h +++ b/src/util-debug.h @@ -29,7 +29,11 @@ #include "util-error.h" #include "pcre.h" #include "util-debug-filters.h" +#if defined __OpenBSD__ +//#include +#else #include "syslog.h" +#endif #ifndef __UTIL_DEBUG_H__ #define __UTIL_DEBUG_H__ diff --git a/src/util-fmemopen.c b/src/util-fmemopen.c index d6dfab1243..d551282368 100644 --- a/src/util-fmemopen.c +++ b/src/util-fmemopen.c @@ -33,6 +33,10 @@ #define USE_FMEM_WRAPPER 1 #endif +#ifdef __OpenBSD__ +#define USE_FMEM_WRAPPER 1 +#endif + #ifdef USE_FMEM_WRAPPER #ifdef OS_WIN32 diff --git a/src/util-fmemopen.h b/src/util-fmemopen.h index 826a67db50..4b558eaf98 100644 --- a/src/util-fmemopen.h +++ b/src/util-fmemopen.h @@ -37,6 +37,10 @@ #define USE_FMEM_WRAPPER 1 #endif +#ifdef __OpenBSD__ +#define USE_FMEM_WRAPPER 1 +#endif + #ifdef OS_WIN32 #define USE_FMEM_WRAPPER 1 #endif diff --git a/src/util-radix-tree.c b/src/util-radix-tree.c index c43f15e485..00f678d0e2 100644 --- a/src/util-radix-tree.c +++ b/src/util-radix-tree.c @@ -30,7 +30,7 @@ #include "suricata-common.h" #include "suricata-common.h" -#ifdef OS_FREEBSD +#if defined OS_FREEBSD || defined __OpenBSD__ #include #endif /* OS_FREEBSD */ #ifdef OS_DARWIN diff --git a/src/util-unittest-helper.c b/src/util-unittest-helper.c index f7fbe01351..7906a056b8 100644 --- a/src/util-unittest-helper.c +++ b/src/util-unittest-helper.c @@ -24,9 +24,9 @@ * when constructing unittests */ +#include "suricata-common.h" #include -#include "suricata-common.h" #include "decode.h"