From a04029553ce3bfbae039becebaef04a0ea0ae1ab Mon Sep 17 00:00:00 2001 From: "/C=DE/ST=Berlin/L=Berlin/O=Netfilter Project/OU=Development/CN=kaber/emailAddress=kaber@netfilter.org" Date: Fri, 13 Oct 2006 06:38:26 +0000 Subject: [PATCH]: ulogd fix for kernel 64bits/userspace 32bits system (Eric Leblond) --- ulogd/Rules.make.in | 3 +- ulogd/configure.in | 16 ++++++ ulogd/libipulog/include/libipulog/libipulog.h | 4 +- .../include/linux/netfilter_ipv4/ipt_ULOG.h | 62 ++++++++++++++++++++++ 4 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 ulogd/libipulog/include/linux/netfilter_ipv4/ipt_ULOG.h (limited to 'ulogd') 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 #include @@ -12,7 +12,7 @@ #include #include #include -#include +#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 + * + * 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*/ -- cgit v1.2.3