]> git.ipfire.org Git - thirdparty/xtables-addons.git/commitdiff
build: support for Linux 4.10
authorRalph Sennhauser <ralph.sennhauser@gmail.com>
Mon, 26 Dec 2016 15:14:02 +0000 (16:14 +0100)
committerJan Engelhardt <jengelh@inai.de>
Wed, 4 Jan 2017 01:40:41 +0000 (02:40 +0100)
Commit 613dbd95723aee7abd16860745691b6c7bda20dc (netfilter:
x_tables: move hook state into xt_action_param structure) changes the
struct xt_action_param, accommodate for it.

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
extensions/ACCOUNT/xt_ACCOUNT.c
extensions/compat_xtables.h
extensions/xt_CHAOS.c
extensions/xt_DELUDE.c
extensions/xt_DNETMAP.c
extensions/xt_ECHO.c
extensions/xt_LOGMARK.c
extensions/xt_TARPIT.c
extensions/xt_iface.c
extensions/xt_lscan.c

index ee178392a450c76e6dad1da3d6a16f09a8cc80fc..4705fa7acca66815904ea4daaa1e55ae20b98349 100644 (file)
@@ -482,11 +482,15 @@ static void ipt_acc_depth2_insert(struct ipt_acc_mask_8 *mask_8,
 static unsigned int
 ipt_acc_target(struct sk_buff *skb, const struct xt_action_param *par)
 {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       struct ipt_acc_net *ian = net_generic(par->state->net, ipt_acc_net_id);
+#else
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)
        struct ipt_acc_net *ian = net_generic(par->net, ipt_acc_net_id);
 #else
        struct net *net = dev_net(par->in ? par->in : par->out);
        struct ipt_acc_net *ian = net_generic(net, ipt_acc_net_id);
+#endif
 #endif
        struct ipt_acc_table *ipt_acc_tables = ian->ipt_acc_tables;
        const struct ipt_acc_info *info =
index a6c61ac02ea268091fd00c515c02d8d9599254c6..78a7fbfa9a308cf137996879f80d983ca81b4596 100644 (file)
@@ -82,11 +82,15 @@ static inline void proc_remove(struct proc_dir_entry *de)
 
 static inline struct net *par_net(const struct xt_action_param *par)
 {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0)
+       return par->state->net;
+#else
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)
        return par->net;
 #else
        return dev_net((par->in != NULL) ? par->in : par->out);
 #endif
+#endif
 }
 
 #endif /* _XTABLES_COMPAT_H */
index 9c8085566afeecc1906e8f85b6795ca65caac4db..cee20263e6fa63fea29d20b7367252f0127c3afc 100644 (file)
@@ -58,8 +58,12 @@ xt_chaos_total(struct sk_buff *skb, const struct xt_action_param *par)
 
        {
                struct xt_action_param local_par;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+               local_par.state    = par->state;
+#else
                local_par.in        = par->in,
                local_par.out       = par->out,
+#endif
                local_par.match     = xm_tcp;
                local_par.matchinfo = &tcp_params;
                local_par.fragoff   = fragoff;
@@ -74,12 +78,16 @@ xt_chaos_total(struct sk_buff *skb, const struct xt_action_param *par)
        destiny = (info->variant == XTCHAOS_TARPIT) ? xt_tarpit : xt_delude;
        {
                struct xt_action_param local_par;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+               local_par.state    = par->state;
+#else
                local_par.in       = par->in;
                local_par.out      = par->out;
                local_par.hooknum  = par->hooknum;
+               local_par.family   = par->family;
+#endif
                local_par.target   = destiny;
                local_par.targinfo = par->targinfo;
-               local_par.family   = par->family;
                destiny->target(skb, &local_par);
        }
 }
@@ -100,9 +108,13 @@ chaos_tg(struct sk_buff *skb, const struct xt_action_param *par)
 
        if ((unsigned int)prandom_u32() <= reject_percentage) {
                struct xt_action_param local_par;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+               local_par.state    = par->state;
+#else
                local_par.in       = par->in;
                local_par.out      = par->out;
                local_par.hooknum  = par->hooknum;
+#endif
                local_par.target   = xt_reject;
                local_par.targinfo = &reject_params;
                return xt_reject->target(skb, &local_par);
@@ -111,7 +123,12 @@ chaos_tg(struct sk_buff *skb, const struct xt_action_param *par)
        /* TARPIT/DELUDE may not be called from the OUTPUT chain */
        if (iph->protocol == IPPROTO_TCP &&
            info->variant != XTCHAOS_NORMAL &&
-           par->hooknum != NF_INET_LOCAL_OUT)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+           par->state->hook
+#else
+           par->hooknum
+#endif
+           != NF_INET_LOCAL_OUT)
                xt_chaos_total(skb, par);
 
        return NF_DROP;
index aff281f3bf7907ecae6dca7c7907c5e33b9bffed..80865ed6225123844398e1d7d73e2a544172930e 100644 (file)
@@ -151,7 +151,13 @@ delude_tg(struct sk_buff *skb, const struct xt_action_param *par)
         * a problem, as that is supported since Linux 2.6.35. But since we do not
         * actually want to have a connection open, we are still going to drop it.
         */
-       delude_send_reset(par_net(par), skb, par->hooknum);
+       delude_send_reset(par_net(par), skb,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+                         par->state->hook
+#else
+                         par->hooknum
+#endif
+                         );
        return NF_DROP;
 }
 
index bdef6d353de9c5df6d7ee24fc8a5746c618ad5b1..ec6177a0db70ea70d5ce8a514894fe9e601830d4 100644 (file)
@@ -356,7 +356,11 @@ out:
 static unsigned int
 dnetmap_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       struct net *net = dev_net(par->state->in ? par->state->in : par->state->out);
+#else
        struct net *net = dev_net(par->in ? par->in : par->out);
+#endif
        struct dnetmap_net *dnetmap_net = dnetmap_pernet(net);
        struct nf_conn *ct;
        enum ip_conntrack_info ctinfo;
@@ -367,16 +371,21 @@ dnetmap_tg(struct sk_buff *skb, const struct xt_action_param *par)
        struct dnetmap_entry *e;
        struct dnetmap_prefix *p;
        __s32 jttl;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       unsigned int hooknum = par->state->hook;
+#else
+       unsigned int hooknum = par->hooknum;
+#endif
 
-       NF_CT_ASSERT(par->hooknum == NF_INET_POST_ROUTING ||
-                    par->hooknum == NF_INET_LOCAL_OUT ||
-                    par->hooknum == NF_INET_PRE_ROUTING);
+       NF_CT_ASSERT(hooknum == NF_INET_POST_ROUTING ||
+                    hooknum == NF_INET_LOCAL_OUT ||
+                    hooknum == NF_INET_PRE_ROUTING);
        ct = nf_ct_get(skb, &ctinfo);
 
        jttl = tginfo->flags & XT_DNETMAP_TTL ? tginfo->ttl * HZ : jtimeout;
 
        /* in prerouting we try to map postnat-ip to prenat-ip */
-       if (par->hooknum == NF_INET_PRE_ROUTING) {
+       if (hooknum == NF_INET_PRE_ROUTING) {
                postnat_ip = ip_hdr(skb)->daddr;
 
                spin_lock_bh(&dnetmap_lock);
@@ -407,7 +416,7 @@ dnetmap_tg(struct sk_buff *skb, const struct xt_action_param *par)
                newrange.min_proto = mr->min_proto;
                newrange.max_proto = mr->max_proto;
                return nf_nat_setup_info(ct, &newrange,
-                                        HOOK2MANIP(par->hooknum));
+                                        HOOK2MANIP(hooknum));
        }
 
        prenat_ip = ip_hdr(skb)->saddr;
@@ -495,7 +504,11 @@ bind_new_prefix:
        newrange.max_addr.ip = postnat_ip;
        newrange.min_proto = mr->min_proto;
        newrange.max_proto = mr->max_proto;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       return nf_nat_setup_info(ct, &newrange, HOOK2MANIP(par->state->hook));
+#else
        return nf_nat_setup_info(ct, &newrange, HOOK2MANIP(par->hooknum));
+#endif
 
 no_rev_map:
 no_free_ip:
index fe7497c8a76cb7624b7fe3c5d3406885a6abcad0..60cb81554e558a8359e8a51e354a9c2ac3528d7c 100644 (file)
@@ -35,7 +35,11 @@ echo_tg6(struct sk_buff *oldskb, const struct xt_action_param *par)
        void *payload;
        struct flowi6 fl;
        struct dst_entry *dst = NULL;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       struct net *net = dev_net((par->state->in != NULL) ? par->state->in : par->state->out);
+#else
        struct net *net = dev_net((par->in != NULL) ? par->in : par->out);
+#endif
 
        /* This allows us to do the copy operation in fewer lines of code. */
        if (skb_linearize(oldskb) < 0)
index 761696227bd9ad09804eb86db253f92a39d686b0..ed146049e216a860876dbfcbe30732ce7b1ed153 100644 (file)
@@ -76,7 +76,11 @@ logmark_tg(struct sk_buff *skb, const struct xt_action_param *par)
        printk("<%u>%.*s""iif=%d hook=%s nfmark=0x%x "
               "secmark=0x%x classify=0x%x",
               info->level, (unsigned int)sizeof(info->prefix), info->prefix,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+              skb_ifindex(skb), hook_names[par->state->hook],
+#else
               skb_ifindex(skb), hook_names[par->hooknum],
+#endif
               skb_nfmark(skb), skb_secmark(skb), skb->priority);
 
        ct = nf_ct_get(skb, &ctinfo);
index 95faba032f342ed84755850d22955d8586600873..f759eb16dd45fccd1b522e13ca938f8317200fec 100644 (file)
@@ -455,7 +455,11 @@ tarpit_tg4(struct sk_buff *skb, const struct xt_action_param *par)
        if (iph->frag_off & htons(IP_OFFSET))
                return NF_DROP;
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       tarpit_tcp4(par_net(par), skb, par->state->hook, info->variant);
+#else
        tarpit_tcp4(par_net(par), skb, par->hooknum, info->variant);
+#endif
        return NF_DROP;
 }
 
@@ -497,7 +501,11 @@ tarpit_tg6(struct sk_buff *skb, const struct xt_action_param *par)
                return NF_DROP;
        }
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+       tarpit_tcp6(par_net(par), skb, par->state->hook, info->variant);
+#else
        tarpit_tcp6(par_net(par), skb, par->hooknum, info->variant);
+#endif
        return NF_DROP;
 }
 #endif
index 030a6448cd5e797c805a197f95a37526fcc8084f..be52a52e8af1549985187c65c109dd473ceacc82 100644 (file)
@@ -45,9 +45,17 @@ static const struct net_device *iface_get(const struct xt_iface_mtinfo *info,
     const struct xt_action_param *par, struct net_device **put)
 {
        if (info->flags & XT_IFACE_DEV_IN)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+               return par->state->in;
+#else
                return par->in;
+#endif
        else if (info->flags & XT_IFACE_DEV_OUT)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+               return par->state->out;
+#else
                return par->out;
+#endif
        return *put = dev_get_by_name(&init_net, info->ifname);
 }
 
index 184ee63996461e3bcc8e87eb0351ccf057596eef..3a7d2ed011a3ecc24436e5b6c871a3aa36d6b8f1 100644 (file)
@@ -204,7 +204,11 @@ lscan_mt(const struct sk_buff *skb, struct xt_action_param *par)
                unsigned int n;
 
                n = lscan_mt_full(ctdata->mark & connmark_mask, ctstate,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,10,0)
+                   par->state->in == init_net.loopback_dev, tcph,
+#else
                    par->in == init_net.loopback_dev, tcph,
+#endif
                    skb->len - par->thoff - 4 * tcph->doff);
 
                ctdata->mark = (ctdata->mark & ~connmark_mask) | n;