From 1bf1067674f1480c0ea3fc54beb067223458b13d Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 4 Jan 2012 20:37:32 +0000 Subject: [PATCH] Include some ugly hacks to enable compilation for 1.3.x iptables --- iptables-extension/Makefile | 31 +++++++++- iptables-extension/libxt_MEDIAPROXY.c | 83 +++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 3 deletions(-) diff --git a/iptables-extension/Makefile b/iptables-extension/Makefile index 7400ec4bf..4b99a2cf5 100644 --- a/iptables-extension/Makefile +++ b/iptables-extension/Makefile @@ -1,12 +1,37 @@ CFLAGS = -O2 -Wall -shared -fPIC CFLAGS += -DMEDIAPROXY_VERSION="\"$(shell dpkg-parsechangelog -l../debian/changelog | awk '/^Version: / {print $$2}')\"" -.PHONY: all clean +XTABLES = $(shell test -e /usr/include/xtables.h && echo 1) +IPTABLES = $(shell test -e /usr/include/iptables.h && echo 1) +IP6TABLES = $(shell test -e /usr/include/ip6tables.h && echo 1) -all: libxt_MEDIAPROXY.so +.PHONY: all module clean + +all: module + +ifeq ($(XTABLES),1) + +module: libxt_MEDIAPROXY.so libxt_MEDIAPROXY.so: libxt_MEDIAPROXY.c gcc $(CFLAGS) -o libxt_MEDIAPROXY.so libxt_MEDIAPROXY.c +else + +ifeq ($(IPTABLES),1) +module: libipt_MEDIAPROXY.so +endif +ifeq ($(IP6TABLES),1) +module: libip6t_MEDIAPROXY.so +endif + +libipt_MEDIAPROXY.so: libxt_MEDIAPROXY.c + gcc $(CFLAGS) -D__ipt -o libipt_MEDIAPROXY.so libxt_MEDIAPROXY.c + +libip6t_MEDIAPROXY.so: libxt_MEDIAPROXY.c + gcc $(CFLAGS) -D__ip6t -o libip6t_MEDIAPROXY.so libxt_MEDIAPROXY.c + +endif + clean: - rm -f libxt_MEDIAPROXY.so + rm -f libxt_MEDIAPROXY.so libipt_MEDIAPROXY.so libip6t_MEDIAPROXY.so diff --git a/iptables-extension/libxt_MEDIAPROXY.c b/iptables-extension/libxt_MEDIAPROXY.c index e40eae69a..c307c991b 100644 --- a/iptables-extension/libxt_MEDIAPROXY.c +++ b/iptables-extension/libxt_MEDIAPROXY.c @@ -4,9 +4,25 @@ #include #include #include + +#if defined(__ipt) +#include +#elif defined(__ip6t) +#include +#else #include +#endif + #include + +#if defined(__ipt) +#include +#elif defined(__ip6t) +#include +#else #include +#endif + #include "../kernel-module/xt_MEDIAPROXY.h" @@ -19,12 +35,28 @@ static void help(void) { ); } +#if defined(__ipt) +static int parse(int c, + char **argv, + int invert, + unsigned int *flags, + const struct ipt_entry *entry, + struct ipt_entry_target **target) { +#elif defined(__ip6t) +static int parse(int c, + char **argv, + int invert, + unsigned int *flags, + const struct ip6t_entry *entry, + struct ip6t_entry_target **target) { +#else static int parse(int c, char **argv, int invert, unsigned int *flags, const void *entry, struct xt_entry_target **target) { +#endif struct xt_mediaproxy_info *info = (void *) (*target)->data; @@ -40,17 +72,34 @@ static int parse(int c, } static void final_check(unsigned int flags) { +#if defined(__ipt) || defined(__ip6t) + if (!flags) + exit_error(PARAMETER_PROBLEM, "You must specify --id"); +#else if (!flags) xtables_error(PARAMETER_PROBLEM, "You must specify --id"); +#endif } +#if defined(__ipt) +static void print(const struct ipt_ip *ip, const struct xt_entry_target *target, int numeric) { +#elif defined(__ip6t) +static void print(const struct ip6t_ip6 *ip, const struct xt_entry_target *target, int numeric) { +#else static void print(const void *ip, const struct xt_entry_target *target, int numeric) { +#endif struct xt_mediaproxy_info *info = (void *) target->data; printf("id %u", info->id); } +#if defined(__ipt) +static void save(const struct ipt_ip *ip, const struct xt_entry_target *target) { +#elif defined(__ip6t) +static void save(const struct ip6t_ip6 *ip, const struct xt_entry_target *target) { +#else static void save(const void *ip, const struct xt_entry_target *target) { +#endif struct xt_mediaproxy_info *info = (void *) target->data; printf("--id %u", info->id); @@ -62,6 +111,33 @@ static struct option opts[] = { }; +#if defined(__ipt) +static struct iptables_target mediaproxy4 = { + .name = "MEDIAPROXY", + .version = "1.3.6", + .size = IPT_ALIGN(sizeof(struct xt_mediaproxy_info)), + .userspacesize = IPT_ALIGN(sizeof(struct xt_mediaproxy_info)), + .help = help, + .parse = parse, + .final_check = final_check, + .print = print, + .save = save, + .extra_opts = opts, +}; +#elif defined(__ip6t) +static struct ip6tables_target mediaproxy6 = { + .name = "MEDIAPROXY", + .version = "1.3.6", + .size = IP6T_ALIGN(sizeof(struct xt_mediaproxy_info)), + .userspacesize = IP6T_ALIGN(sizeof(struct xt_mediaproxy_info)), + .help = help, + .parse = parse, + .final_check = final_check, + .print = print, + .save = save, + .extra_opts = opts, +}; +#else static struct xtables_target mediaproxy4 = { .name = "MEDIAPROXY", .family = NFPROTO_IPV4, @@ -89,8 +165,15 @@ static struct xtables_target mediaproxy6 = { .save = save, .extra_opts = opts, }; +#endif void _init(void) { +#if defined(__ipt) + register_target(&mediaproxy4); +#elif defined(__ip6t) + register_target6(&mediaproxy6); +#else xtables_register_target(&mediaproxy4); xtables_register_target(&mediaproxy6); +#endif }