From 54d80a73b42bd1d9c606e0bb4ae0b98e0162cb26 Mon Sep 17 00:00:00 2001 From: Jan Engelhardt Date: Fri, 14 May 2010 11:51:34 +0200 Subject: [PATCH] compat_xtables: more 2.6.35 support --- configure.ac | 2 +- extensions/compat_xtables.c | 9 +++++++++ extensions/xt_CHAOS.c | 38 ++++++++++++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/configure.ac b/configure.ac index 4533454..07cc421 100644 --- a/configure.ac +++ b/configure.ac @@ -62,7 +62,7 @@ else fi; fi; echo "Found kernel version $kmajor.$kminor.$kmicro.$kstable in $kbuilddir"; -if test "$kmajor" -gt 2 -o "$kminor" -gt 6 -o "$kmicro" -gt 34; then +if test "$kmajor" -gt 2 -o "$kminor" -gt 6 -o "$kmicro" -gt 35; then echo "WARNING: You are trying a newer kernel. Results may vary. :-)"; elif test \( "$kmajor" -lt 2 -o "$kminor" -lt 6 -o "$kmicro" -lt 17 \) -o \ \( "$kmajor" -eq 2 -a "$kminor" -eq 6 -a "$kmicro" -eq 18 -a \ diff --git a/extensions/compat_xtables.c b/extensions/compat_xtables.c index 9ee4dfb..8514af8 100644 --- a/extensions/compat_xtables.c +++ b/extensions/compat_xtables.c @@ -275,6 +275,15 @@ xtnu_target_run(struct sk_buff *skb, const struct xt_target_param *par) return nt->target(&skb, &local_par); } #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35) +static unsigned int +xtnu_target_run(struct sk_buff *skb, const struct xt_action_param *par) +{ + struct xtnu_target *nt = xtcompat_nutarget(par->target); + + return nt->target(&skb, par); +} +#endif #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18) static int xtnu_target_check(const char *table, const void *entry, diff --git a/extensions/xt_CHAOS.c b/extensions/xt_CHAOS.c index 44492df..d98af4d 100644 --- a/extensions/xt_CHAOS.c +++ b/extensions/xt_CHAOS.c @@ -62,7 +62,7 @@ xt_chaos_total(struct sk_buff *skb, const struct xt_action_param *par) #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 27) ret = xm_tcp->match(skb, par->in, par->out, xm_tcp, &tcp_params, fragoff, thoff, &hotdrop); -#else +#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 34) { struct xt_match_param local_par = { .in = par->in, @@ -75,6 +75,19 @@ xt_chaos_total(struct sk_buff *skb, const struct xt_action_param *par) }; ret = xm_tcp->match(skb, &local_par); } +#else + { + struct xt_action_param local_par; + local_par.in = par->in, + local_par.out = par->out, + local_par.match = xm_tcp; + local_par.matchinfo = &tcp_params; + local_par.fragoff = fragoff; + local_par.thoff = thoff; + local_par.hotdrop = false; + ret = xm_tcp->match(skb, &local_par); + hotdrop = local_par.hotdrop; + } #endif if (!ret || hotdrop || (unsigned int)net_random() > delude_percentage) return; @@ -86,7 +99,7 @@ xt_chaos_total(struct sk_buff *skb, const struct xt_action_param *par) destiny->target(&skb, par->in, par->out, par->hooknum, destiny, NULL); #elif LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 27) destiny->target(skb, par->in, par->out, par->hooknum, destiny, NULL); -#else +#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 34) { struct xt_target_param local_par = { .in = par->in, @@ -98,6 +111,17 @@ xt_chaos_total(struct sk_buff *skb, const struct xt_action_param *par) }; destiny->target(skb, &local_par); } +#else + { + struct xt_action_param local_par; + local_par.in = par->in; + local_par.out = par->out; + local_par.hooknum = par->hooknum; + local_par.target = destiny; + local_par.targinfo = par->targinfo; + local_par.family = par->family; + destiny->target(skb, &local_par); + } #endif } @@ -126,7 +150,7 @@ chaos_tg(struct sk_buff **pskb, const struct xt_action_param *par) #elif LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 27) return xt_reject->target(skb, par->in, par->out, par->hooknum, xt_reject, &reject_params); -#else +#elif LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 34) struct xt_target_param local_par = { .in = par->in, .out = par->out, @@ -135,6 +159,14 @@ chaos_tg(struct sk_buff **pskb, const struct xt_action_param *par) .targinfo = &reject_params, }; return xt_reject->target(skb, &local_par); +#else + struct xt_action_param local_par; + local_par.in = par->in; + local_par.out = par->out; + local_par.hooknum = par->hooknum; + local_par.target = xt_reject; + local_par.targinfo = &reject_params; + return xt_reject->target(skb, &local_par); #endif }