summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
author/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=kaber/emailAddress=kaber@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=kaber/emailAddress=kaber@netfilter.org>2006-10-13 06:38:26 +0000
committer/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=kaber/emailAddress=kaber@netfilter.org </C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=kaber/emailAddress=kaber@netfilter.org>2006-10-13 06:38:26 +0000
commita04029553ce3bfbae039becebaef04a0ea0ae1ab (patch)
treebe996a47c320bb703ecd73cc2efb6165b27e16ce
parente26f2d38607d42afe903e18a731ee0a0f85fb6d5 (diff)
[PATCH]: ulogd fix for kernel 64bits/userspace 32bits system (Eric Leblond)
-rw-r--r--ulogd/Rules.make.in3
-rw-r--r--ulogd/configure.in16
-rw-r--r--ulogd/libipulog/include/libipulog/libipulog.h4
-rw-r--r--ulogd/libipulog/include/linux/netfilter_ipv4/ipt_ULOG.h62
4 files changed, 82 insertions, 3 deletions
diff --git a/ulogd/Rules.make.in b/ulogd/Rules.make.in
index a4a7084..b637cfb 100644
--- a/ulogd/Rules.make.in
+++ b/ulogd/Rules.make.in
@@ -20,8 +20,9 @@ INSTALL=@INSTALL@
CFLAGS=@CFLAGS@ @CPPFLAGS@ -Wall
CFLAGS+=-DULOGD_CONFIGFILE=\"$(ULOGD_CONFIGFILE)\"
+CFLAGS+=@KERNEL64_USERSPACE32@
# doesn't work for subdirs
-#CFLAGS+=$(INCIPULOG) $(INCCONFFILE)
+CFLAGS+=$(INCIPULOG)
CFLAGS+=-I/lib/modules/`uname -r`/build/include
#CFLAGS+=@DEFS@
#CFLAGS+=-g -DDEBUG -DDEBUG_MYSQL -DDEBUG_PGSQL
diff --git a/ulogd/configure.in b/ulogd/configure.in
index 5cf508f..708b27f 100644
--- a/ulogd/configure.in
+++ b/ulogd/configure.in
@@ -31,6 +31,8 @@ DATABASE_LIB_DIR=""
DATABASE_DRIVERS=""
+KERNEL64_USERSPACE32=""
+
dnl
dnl test for MySQL
dnl
@@ -250,6 +252,18 @@ AC_ARG_WITH(sqlite3-log-ip-as-string,
AC_MSG_WARN(the use of --with-sqlite3-log-ip-as-string is discouraged)
])
+dnl
+dnl Kernel 64
+dnl
+
+AC_ARG_WITH(kernel-64-user-32,
+ --with-kernel-64-user-32 Use this flag to compile on system where kernel is 64 bits
+ userspace is 32.
+,[
+ KERNEL64_USERSPACE32="-DKERNEL_64_USERSPACE_32"
+ AC_MSG_WARN(The use of the flag kernel-64-user-32 could interfere with kernel evolution. Use it at your own risk.)
+])
+
AC_SUBST(DATABASE_DIR)
AC_SUBST(DATABASE_LIB)
@@ -262,6 +276,8 @@ AC_SUBST(EXTRA_SQLITE3_DEF)
AC_SUBST(DATABASE_DRIVERS)
AC_SUBST(HAVE_PCAP_H)
+AC_SUBST(KERNEL64_USERSPACE32)
+
AM_CONDITIONAL(HAVE_MYSQL, test x$mysqldir != x)
AM_CONDITIONAL(HAVE_PGSQL, test x$pgsqldir != x)
AM_CONDITIONAL(HAVE_SQLITE3, test x$sqlite3dir != x)
diff --git a/ulogd/libipulog/include/libipulog/libipulog.h b/ulogd/libipulog/include/libipulog/libipulog.h
index 307510c..b3805d7 100644
--- a/ulogd/libipulog/include/libipulog/libipulog.h
+++ b/ulogd/libipulog/include/libipulog/libipulog.h
@@ -1,7 +1,7 @@
#ifndef _LIBIPULOG_H
#define _LIBIPULOG_H
-/* $Id: libipulog.h,v 1.6 2002/07/30 07:23:36 laforge Exp $ */
+/* $Id$ */
#include <errno.h>
#include <unistd.h>
@@ -12,7 +12,7 @@
#include <asm/types.h>
#include <linux/netlink.h>
#include <net/if.h>
-#include <linux/netfilter_ipv4/ipt_ULOG.h>
+#include "linux/netfilter_ipv4/ipt_ULOG.h"
/* FIXME: glibc sucks */
#ifndef MSG_TRUNC
diff --git a/ulogd/libipulog/include/linux/netfilter_ipv4/ipt_ULOG.h b/ulogd/libipulog/include/linux/netfilter_ipv4/ipt_ULOG.h
new file mode 100644
index 0000000..de062cd
--- /dev/null
+++ b/ulogd/libipulog/include/linux/netfilter_ipv4/ipt_ULOG.h
@@ -0,0 +1,62 @@
+/* Header file for IP tables userspace logging, Version 1.8
+ *
+ * (C) 2000-2002 by Harald Welte <laforge@gnumonks.org>
+ *
+ * Distributed under the terms of GNU GPL */
+#ifndef _IPT_ULOG_H
+#define _IPT_ULOG_H
+
+#ifndef NETLINK_NFLOG
+#define NETLINK_NFLOG 5
+#endif
+
+#define ULOG_DEFAULT_NLGROUP 1
+#define ULOG_DEFAULT_QTHRESHOLD 1
+
+#define ULOG_MAC_LEN 80
+#define ULOG_PREFIX_LEN 32
+
+#define ULOG_MAX_QLEN 50
+/* Why 50? Well... there is a limit imposed by the slab cache 131000
+ * bytes. So the multipart netlink-message has to be < 131000 bytes.
+ * Assuming a standard ethernet-mtu of 1500, we could define this up
+ * to 80... but even 50 seems to be big enough. */
+
+/* private data structure for each rule with a ULOG target */
+struct ipt_ulog_info {
+ unsigned int nl_group;
+#ifdef KERNEL_64_USERSPACE_32
+ unsigned long long copy_range;
+ unsigned long long qthreshold;
+#else
+ size_t copy_range;
+ size_t qthreshold;
+#endif
+ char prefix[ULOG_PREFIX_LEN];
+};
+
+/* Format of the ULOG packets passed through netlink */
+typedef struct ulog_packet_msg {
+ unsigned long mark;
+#ifdef KERNEL_64_USERSPACE_32
+ long long timestamp_sec;
+ long long timestamp_usec;
+#else
+ long timestamp_sec;
+ long timestamp_usec;
+#endif
+ unsigned int hook;
+ char indev_name[IFNAMSIZ];
+ char outdev_name[IFNAMSIZ];
+#ifdef KERNEL_64_USERSPACE_32
+ unsigned long long data_len;
+#else
+ size_t data_len;
+#endif
+ char prefix[ULOG_PREFIX_LEN];
+ unsigned char mac_len;
+ unsigned char mac[ULOG_MAC_LEN];
+ unsigned char payload[0];
+} ulog_packet_msg_t;
+
+#endif /*_IPT_ULOG_H*/