diff options
author | Martin Josefsson <gandalf@wlug.westbo.se> | 2004-05-26 15:58:07 +0000 |
---|---|---|
committer | Martin Josefsson <gandalf@wlug.westbo.se> | 2004-05-26 15:58:07 +0000 |
commit | 1eb0081027ee567e822b24377ea614e66c408ff2 (patch) | |
tree | 37c3d4dafd4a06e38a554207890185404933d2ed | |
parent | b105bc9f4bf61ffa835950c3d4e4b6162e1e16f8 (diff) |
Fix 64bit kernel / 32bit userspace issue.
Sync header with kernel.
-rw-r--r-- | extensions/libipt_SAME.c | 3 | ||||
-rw-r--r-- | extensions/libipt_ULOG.c | 30 | ||||
-rw-r--r-- | include/linux/netfilter_ipv4/ipt_SAME.h | 11 | ||||
-rw-r--r-- | 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 e9c42a80..52a7e728 100644 --- a/extensions/libipt_SAME.c +++ b/extensions/libipt_SAME.c @@ -7,7 +7,8 @@ #include <iptables.h> #include <linux/netfilter_ipv4/ip_tables.h> #include <linux/netfilter_ipv4/ip_nat_rule.h> -#include <linux/netfilter_ipv4/ipt_SAME.h> +/* 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 41ee9911..53719116 100644 --- a/extensions/libipt_ULOG.c +++ b/extensions/libipt_ULOG.c @@ -17,10 +17,8 @@ #include <getopt.h> #include <iptables.h> #include <linux/netfilter_ipv4/ip_tables.h> -#include <linux/netfilter_ipv4/ipt_ULOG.h> - -#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 428b2137..89ba22fa 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 86a99ee7..f267ab8e 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 <laforge@gnumonks.org> * @@ -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]; }; |