From 74c5da055ef1239a504d4624a7e1a1e5e46a5cf0 Mon Sep 17 00:00:00 2001 From: gandalf Date: Wed, 26 May 2004 15:58:07 +0000 Subject: Fix 64bit kernel / 32bit userspace issue. Sync header with kernel. --- extensions/libipt_SAME.c | 3 ++- extensions/libipt_ULOG.c | 30 ++++++++++++++++++++++++++---- include/linux/netfilter_ipv4/ipt_SAME.h | 11 ++++++----- include/linux/netfilter_ipv4/ipt_ULOG.h | 10 +++++++++- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/extensions/libipt_SAME.c b/extensions/libipt_SAME.c index e9c42a8..52a7e72 100644 --- a/extensions/libipt_SAME.c +++ b/extensions/libipt_SAME.c @@ -7,7 +7,8 @@ #include #include #include -#include +/* For 64bit kernel / 32bit userspace */ +#include "../include/linux/netfilter_ipv4/ipt_SAME.h" /* Function which prints out usage message. */ static void diff --git a/extensions/libipt_ULOG.c b/extensions/libipt_ULOG.c index 41ee991..5371911 100644 --- a/extensions/libipt_ULOG.c +++ b/extensions/libipt_ULOG.c @@ -17,10 +17,8 @@ #include #include #include -#include - -#define ULOG_DEFAULT_NLGROUP 1 -#define ULOG_DEFAULT_QTHRESHOLD 1 +/* For 64bit kernel / 32bit userspace */ +#include "../include/linux/netfilter_ipv4/ipt_ULOG.h" void print_groups(unsigned int gmask) @@ -124,7 +122,11 @@ static int parse(int c, char **argv, int invert, unsigned int *flags, if (atoi(optarg) < 0) exit_error(PARAMETER_PROBLEM, "Negative copy range?"); +#ifdef KERNEL_64_USERSPACE_32 + loginfo->copy_range = (unsigned long long)atoll(optarg); +#else loginfo->copy_range = atoi(optarg); +#endif *flags |= IPT_LOG_OPT_CPRANGE; break; case 'B': @@ -137,7 +139,11 @@ static int parse(int c, char **argv, int invert, unsigned int *flags, if (atoi(optarg) > ULOG_MAX_QLEN) exit_error(PARAMETER_PROBLEM, "Maximum queue length exceeded"); +#ifdef KERNEL_64_USERSPACE_32 + loginfo->qthreshold = (unsigned long long)atoll(optarg); +#else loginfo->qthreshold = atoi(optarg); +#endif *flags |= IPT_LOG_OPT_QTHRESHOLD; break; } @@ -163,11 +169,19 @@ static void save(const struct ipt_ip *ip, printf("--ulog-nlgroup "); print_groups(loginfo->nl_group); } +#ifdef KERNEL_64_USERSPACE_32 + if (loginfo->copy_range) + printf("--ulog-cprange %llu ", loginfo->copy_range); + + if (loginfo->qthreshold != ULOG_DEFAULT_QTHRESHOLD) + printf("--ulog-qthreshold %llu ", loginfo->qthreshold); +#else if (loginfo->copy_range) printf("--ulog-cprange %d ", loginfo->copy_range); if (loginfo->qthreshold != ULOG_DEFAULT_QTHRESHOLD) printf("--ulog-qthreshold %d ", loginfo->qthreshold); +#endif } /* Prints out the targinfo. */ @@ -179,11 +193,19 @@ print(const struct ipt_ip *ip, = (const struct ipt_ulog_info *) target->data; printf("ULOG "); +#ifdef KERNEL_64_USERSPACE_32 + printf("copy_range %llu nlgroup ", loginfo->copy_range); +#else printf("copy_range %d nlgroup ", loginfo->copy_range); +#endif print_groups(loginfo->nl_group); if (strcmp(loginfo->prefix, "") != 0) printf("prefix `%s' ", loginfo->prefix); +#ifdef KERNEL_64_USERSPACE_32 + printf("queue_threshold %llu ", loginfo->qthreshold); +#else printf("queue_threshold %d ", loginfo->qthreshold); +#endif } static diff --git a/include/linux/netfilter_ipv4/ipt_SAME.h b/include/linux/netfilter_ipv4/ipt_SAME.h index 428b213..89ba22f 100644 --- a/include/linux/netfilter_ipv4/ipt_SAME.h +++ b/include/linux/netfilter_ipv4/ipt_SAME.h @@ -8,12 +8,13 @@ struct ipt_same_info { unsigned char info; - - unsigned int rangesize; - - unsigned int ipnum; - + u_int32_t rangesize; + u_int32_t ipnum; +#ifdef KERNEL_64_USERSPACE_32 + u_int64_t placeholder; +#else u_int32_t *iparray; +#endif /* hangs off end. */ struct ip_nat_range range[IPT_SAME_MAX_RANGE]; diff --git a/include/linux/netfilter_ipv4/ipt_ULOG.h b/include/linux/netfilter_ipv4/ipt_ULOG.h index 86a99ee..f267ab8 100644 --- a/include/linux/netfilter_ipv4/ipt_ULOG.h +++ b/include/linux/netfilter_ipv4/ipt_ULOG.h @@ -1,4 +1,4 @@ -/* Header file for IP tables userspace logging, Version 1.8 +/* Header file for IP tables userspace logging, Version 1.8 * * (C) 2000-2002 by Harald Welte * @@ -11,6 +11,9 @@ #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 @@ -23,8 +26,13 @@ /* 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]; }; -- cgit v1.2.3