]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'master' of git://dev.medozas.de/linux
authorPatrick McHardy <kaber@trash.net>
Tue, 11 May 2010 16:59:21 +0000 (18:59 +0200)
committerPatrick McHardy <kaber@trash.net>
Tue, 11 May 2010 16:59:21 +0000 (18:59 +0200)
98 files changed:
include/linux/netfilter/x_tables.h
net/bridge/netfilter/ebt_802_3.c
net/bridge/netfilter/ebt_among.c
net/bridge/netfilter/ebt_arp.c
net/bridge/netfilter/ebt_arpreply.c
net/bridge/netfilter/ebt_dnat.c
net/bridge/netfilter/ebt_ip.c
net/bridge/netfilter/ebt_ip6.c
net/bridge/netfilter/ebt_limit.c
net/bridge/netfilter/ebt_log.c
net/bridge/netfilter/ebt_mark.c
net/bridge/netfilter/ebt_mark_m.c
net/bridge/netfilter/ebt_nflog.c
net/bridge/netfilter/ebt_pkttype.c
net/bridge/netfilter/ebt_redirect.c
net/bridge/netfilter/ebt_snat.c
net/bridge/netfilter/ebt_stp.c
net/bridge/netfilter/ebt_ulog.c
net/bridge/netfilter/ebt_vlan.c
net/bridge/netfilter/ebtables.c
net/ipv4/netfilter/arp_tables.c
net/ipv4/netfilter/arpt_mangle.c
net/ipv4/netfilter/ip_tables.c
net/ipv4/netfilter/ipt_CLUSTERIP.c
net/ipv4/netfilter/ipt_ECN.c
net/ipv4/netfilter/ipt_LOG.c
net/ipv4/netfilter/ipt_MASQUERADE.c
net/ipv4/netfilter/ipt_NETMAP.c
net/ipv4/netfilter/ipt_REDIRECT.c
net/ipv4/netfilter/ipt_REJECT.c
net/ipv4/netfilter/ipt_ULOG.c
net/ipv4/netfilter/ipt_addrtype.c
net/ipv4/netfilter/ipt_ah.c
net/ipv4/netfilter/ipt_ecn.c
net/ipv4/netfilter/nf_nat_rule.c
net/ipv6/netfilter/ip6_tables.c
net/ipv6/netfilter/ip6t_LOG.c
net/ipv6/netfilter/ip6t_REJECT.c
net/ipv6/netfilter/ip6t_ah.c
net/ipv6/netfilter/ip6t_eui64.c
net/ipv6/netfilter/ip6t_frag.c
net/ipv6/netfilter/ip6t_hbh.c
net/ipv6/netfilter/ip6t_ipv6header.c
net/ipv6/netfilter/ip6t_mh.c
net/ipv6/netfilter/ip6t_rt.c
net/netfilter/xt_CLASSIFY.c
net/netfilter/xt_CONNSECMARK.c
net/netfilter/xt_CT.c
net/netfilter/xt_DSCP.c
net/netfilter/xt_HL.c
net/netfilter/xt_LED.c
net/netfilter/xt_NFLOG.c
net/netfilter/xt_NFQUEUE.c
net/netfilter/xt_NOTRACK.c
net/netfilter/xt_RATEEST.c
net/netfilter/xt_SECMARK.c
net/netfilter/xt_TCPMSS.c
net/netfilter/xt_TCPOPTSTRIP.c
net/netfilter/xt_TEE.c
net/netfilter/xt_TPROXY.c
net/netfilter/xt_TRACE.c
net/netfilter/xt_cluster.c
net/netfilter/xt_comment.c
net/netfilter/xt_connbytes.c
net/netfilter/xt_connlimit.c
net/netfilter/xt_connmark.c
net/netfilter/xt_conntrack.c
net/netfilter/xt_dccp.c
net/netfilter/xt_dscp.c
net/netfilter/xt_esp.c
net/netfilter/xt_hashlimit.c
net/netfilter/xt_helper.c
net/netfilter/xt_hl.c
net/netfilter/xt_iprange.c
net/netfilter/xt_length.c
net/netfilter/xt_limit.c
net/netfilter/xt_mac.c
net/netfilter/xt_mark.c
net/netfilter/xt_multiport.c
net/netfilter/xt_osf.c
net/netfilter/xt_owner.c
net/netfilter/xt_physdev.c
net/netfilter/xt_pkttype.c
net/netfilter/xt_policy.c
net/netfilter/xt_quota.c
net/netfilter/xt_rateest.c
net/netfilter/xt_realm.c
net/netfilter/xt_recent.c
net/netfilter/xt_sctp.c
net/netfilter/xt_socket.c
net/netfilter/xt_state.c
net/netfilter/xt_statistic.c
net/netfilter/xt_string.c
net/netfilter/xt_tcpmss.c
net/netfilter/xt_tcpudp.c
net/netfilter/xt_time.c
net/netfilter/xt_u32.c
net/sched/act_ipt.c

index eeb4884c30be06e7a81f11604926b97b4cade566..c2ee5d8550cf13bc84ac69fde5733b3ddf631577 100644 (file)
@@ -183,29 +183,39 @@ struct xt_counters_info {
 #include <linux/netdevice.h>
 
 /**
- * struct xt_match_param - parameters for match extensions' match functions
+ * struct xt_action_param - parameters for matches/targets
  *
+ * @match:     the match extension
+ * @target:    the target extension
+ * @matchinfo: per-match data
+ * @targetinfo:        per-target data
  * @in:                input netdevice
  * @out:       output netdevice
- * @match:     struct xt_match through which this function was invoked
- * @matchinfo: per-match data
  * @fragoff:   packet is a fragment, this is the data offset
  * @thoff:     position of transport header relative to skb->data
  * @hook:      hook number given packet came from
  * @family:    Actual NFPROTO_* through which the function is invoked
  *             (helpful when match->family == NFPROTO_UNSPEC)
+ *
+ * Fields written to by extensions:
+ *
  * @hotdrop:   drop packet if we had inspection problems
  * Network namespace obtainable using dev_net(in/out)
  */
-struct xt_match_param {
+struct xt_action_param {
+       union {
+               const struct xt_match *match;
+               const struct xt_target *target;
+       };
+       union {
+               const void *matchinfo, *targinfo;
+       };
        const struct net_device *in, *out;
-       const struct xt_match *match;
-       const void *matchinfo;
        int fragoff;
        unsigned int thoff;
        unsigned int hooknum;
        u_int8_t family;
-       bool *hotdrop;
+       bool hotdrop;
 };
 
 /**
@@ -242,23 +252,6 @@ struct xt_mtdtor_param {
        u_int8_t family;
 };
 
-/**
- * struct xt_target_param - parameters for target extensions' target functions
- *
- * @hooknum:   hook through which this target was invoked
- * @target:    struct xt_target through which this function was invoked
- * @targinfo:  per-target data
- *
- * Other fields see above.
- */
-struct xt_target_param {
-       const struct net_device *in, *out;
-       const struct xt_target *target;
-       const void *targinfo;
-       unsigned int hooknum;
-       u_int8_t family;
-};
-
 /**
  * struct xt_tgchk_param - parameters for target extensions'
  * checkentry functions
@@ -298,7 +291,7 @@ struct xt_match {
           non-linear skb, using skb_header_pointer and
           skb_ip_make_writable. */
        bool (*match)(const struct sk_buff *skb,
-                     const struct xt_match_param *);
+                     struct xt_action_param *);
 
        /* Called when user tries to insert an entry of this type. */
        int (*checkentry)(const struct xt_mtchk_param *);
@@ -335,7 +328,7 @@ struct xt_target {
           must now handle non-linear skbs, using skb_copy_bits and
           skb_ip_make_writable. */
        unsigned int (*target)(struct sk_buff *skb,
-                              const struct xt_target_param *);
+                              const struct xt_action_param *);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
index f7de8dbc3422bb22a3d64fc3baf9db4cd2ce4040..2a449b7ab8fac3c53cc777aa86a963092824029b 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/netfilter_bridge/ebt_802_3.h>
 
 static bool
-ebt_802_3_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_802_3_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_802_3_info *info = par->matchinfo;
        const struct ebt_802_3_hdr *hdr = ebt_802_3_hdr(skb);
index 20068e03fa81674a40fac84f44c33dd125a46eda..8b84c581be3082ea4c8a6a21a362a3077ab17751 100644 (file)
@@ -129,7 +129,7 @@ static int get_ip_src(const struct sk_buff *skb, __be32 *addr)
 }
 
 static bool
-ebt_among_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_among_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_among_info *info = par->matchinfo;
        const char *dmac, *smac;
index 952150cd5e7d1a713c4e153809a31350a643d378..cd457b891b27ec5836653f75b02ac5e8a3d44ef5 100644 (file)
@@ -16,7 +16,7 @@
 #include <linux/netfilter_bridge/ebt_arp.h>
 
 static bool
-ebt_arp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_arp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_arp_info *info = par->matchinfo;
        const struct arphdr *ah;
index 4581adb27583f33314eccb1c9664629afb476ed6..070cf134a22f983c915c488a48b09d942e16fcce 100644 (file)
@@ -16,7 +16,7 @@
 #include <linux/netfilter_bridge/ebt_arpreply.h>
 
 static unsigned int
-ebt_arpreply_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_arpreply_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_arpreply_info *info = par->targinfo;
        const __be32 *siptr, *diptr;
index 59d5b7c8a55740eb16574a3cfba7151e32e7b61a..c59f7bfae6e2c3dc8a2e4f3725f43498ae2542a2 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/netfilter_bridge/ebt_nat.h>
 
 static unsigned int
-ebt_dnat_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_dnat_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_nat_info *info = par->targinfo;
 
index a1c76c7e5219db51f0042eef9a9d03ac18f69279..23bca62d58d290f5085094b3b5d8c74b21a7c8fc 100644 (file)
@@ -25,7 +25,7 @@ struct tcpudphdr {
 };
 
 static bool
-ebt_ip_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_ip_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_ip_info *info = par->matchinfo;
        const struct iphdr *ih;
index 33f8413f05ad1e323d001ce214e301585014d00f..50a46afc2bcc28c2714c8b0f9cdde95432c569fd 100644 (file)
@@ -28,7 +28,7 @@ struct tcpudphdr {
 };
 
 static bool
-ebt_ip6_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_ip6_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_ip6_info *info = par->matchinfo;
        const struct ipv6hdr *ih6;
index 4b0e2e53fa57d4e6dd2774b99229daf210d5bab4..517e78befcb2688a76e307ba7e7064e334700cb1 100644 (file)
@@ -32,7 +32,7 @@ static DEFINE_SPINLOCK(limit_lock);
 #define CREDITS_PER_JIFFY POW2_BELOW32(MAX_CPJ)
 
 static bool
-ebt_limit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_limit_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct ebt_limit_info *info = (void *)par->matchinfo;
        unsigned long now = jiffies;
index c46024156539072eab91079dd7204d36dff7205b..6e5a8bb9b940ce3eb03e1dc6840f4e84ef4d1f98 100644 (file)
@@ -171,7 +171,7 @@ out:
 }
 
 static unsigned int
-ebt_log_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_log_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_log_info *info = par->targinfo;
        struct nf_loginfo li;
index 126e536ff8f4978a1b0d531a59610117a6ffa009..66697cbd0a8b82c9e132aebda93b96ee09e48fe8 100644 (file)
@@ -19,7 +19,7 @@
 #include <linux/netfilter_bridge/ebt_mark_t.h>
 
 static unsigned int
-ebt_mark_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_mark_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_mark_t_info *info = par->targinfo;
        int action = info->target & -16;
index e4366c0a1a43d615cca39c3174506a15b4ef3965..d98baefc4c7eef6a5f39039948064a4a95d64120 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/netfilter_bridge/ebt_mark_m.h>
 
 static bool
-ebt_mark_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_mark_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_mark_m_info *info = par->matchinfo;
 
index 22e2ad5f23e888ec9dd82a2615e0808c247f12c6..5be68bbcc3419585c99762a549a5fa8f820cdb06 100644 (file)
@@ -20,7 +20,7 @@
 #include <net/netfilter/nf_log.h>
 
 static unsigned int
-ebt_nflog_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_nflog_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_nflog_info *info = par->targinfo;
        struct nf_loginfo li;
index f34bcc3197bd712b1f96b0509b99c402f2e189ea..496a565153074e47286f928975898ad66326bcef 100644 (file)
@@ -13,7 +13,7 @@
 #include <linux/netfilter_bridge/ebt_pkttype.h>
 
 static bool
-ebt_pkttype_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_pkttype_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_pkttype_info *info = par->matchinfo;
 
index a6044a6f2383aae2a9e9d0ff069e13d43a1ad544..9e19166ba4534321ad2a9139960fd247dd958e36 100644 (file)
@@ -16,7 +16,7 @@
 #include <linux/netfilter_bridge/ebt_redirect.h>
 
 static unsigned int
-ebt_redirect_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_redirect_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_redirect_info *info = par->targinfo;
 
index 79caca34ae2b17d9bf5dcdb02b0373b10ce3666a..f8f0bd1a1d5122e01bae405a1ad78d70be7a25ce 100644 (file)
@@ -17,7 +17,7 @@
 #include <linux/netfilter_bridge/ebt_nat.h>
 
 static unsigned int
-ebt_snat_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_snat_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ebt_nat_info *info = par->targinfo;
 
index 02f28fdda393b366a296151dccc9047e01476249..5b33a2e634a67ad231263ccb3c963e598b5bef6e 100644 (file)
@@ -120,7 +120,7 @@ static bool ebt_filter_config(const struct ebt_stp_info *info,
 }
 
 static bool
-ebt_stp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_stp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_stp_info *info = par->matchinfo;
        const struct stp_header *sp;
index 852f37c27659bb05a7235ce89ec46287dd87c23d..ae3c7cef1484ff16c0a5ff187e23ea4c799de775 100644 (file)
@@ -243,7 +243,7 @@ static void ebt_log_packet(u_int8_t pf, unsigned int hooknum,
 }
 
 static unsigned int
-ebt_ulog_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ebt_ulog_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        ebt_ulog_packet(par->hooknum, skb, par->in, par->out,
                        par->targinfo, NULL);
index bf8ae5c7a0c5501fcc4f583a5a984511519b951c..87b53b3a921daefd40c0fd85ade33d5240f4262a 100644 (file)
@@ -36,7 +36,7 @@ MODULE_LICENSE("GPL");
 #define EXIT_ON_MISMATCH(_MATCH_,_MASK_) {if (!((info->_MATCH_ == _MATCH_)^!!(info->invflags & _MASK_))) return false; }
 
 static bool
-ebt_vlan_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+ebt_vlan_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ebt_vlan_info *info = par->matchinfo;
        const struct vlan_hdr *fp;
index 1d8c2c0a7470bdca0859e7aaf1c75a4a4fabf617..59ca00e40dec2401b483bad4a7799775766e9f0d 100644 (file)
@@ -86,7 +86,7 @@ static struct xt_target ebt_standard_target = {
 
 static inline int
 ebt_do_watcher(const struct ebt_entry_watcher *w, struct sk_buff *skb,
-              struct xt_target_param *par)
+              struct xt_action_param *par)
 {
        par->target   = w->u.watcher;
        par->targinfo = w->data;
@@ -95,8 +95,9 @@ ebt_do_watcher(const struct ebt_entry_watcher *w, struct sk_buff *skb,
        return 0;
 }
 
-static inline int ebt_do_match (struct ebt_entry_match *m,
-   const struct sk_buff *skb, struct xt_match_param *par)
+static inline int
+ebt_do_match(struct ebt_entry_match *m, const struct sk_buff *skb,
+            struct xt_action_param *par)
 {
        par->match     = m->u.match;
        par->matchinfo = m->data;
@@ -185,15 +186,13 @@ unsigned int ebt_do_table (unsigned int hook, struct sk_buff *skb,
        struct ebt_entries *chaininfo;
        const char *base;
        const struct ebt_table_info *private;
-       bool hotdrop = false;
-       struct xt_match_param mtpar;
-       struct xt_target_param tgpar;
+       struct xt_action_param acpar;
 
-       mtpar.family  = tgpar.family = NFPROTO_BRIDGE;
-       mtpar.in      = tgpar.in  = in;
-       mtpar.out     = tgpar.out = out;
-       mtpar.hotdrop = &hotdrop;
-       mtpar.hooknum = tgpar.hooknum = hook;
+       acpar.family  = NFPROTO_BRIDGE;
+       acpar.in      = in;
+       acpar.out     = out;
+       acpar.hotdrop = false;
+       acpar.hooknum = hook;
 
        read_lock_bh(&table->lock);
        private = table->private;
@@ -214,9 +213,9 @@ unsigned int ebt_do_table (unsigned int hook, struct sk_buff *skb,
                if (ebt_basic_match(point, eth_hdr(skb), in, out))
                        goto letscontinue;
 
-               if (EBT_MATCH_ITERATE(point, ebt_do_match, skb, &mtpar) != 0)
+               if (EBT_MATCH_ITERATE(point, ebt_do_match, skb, &acpar) != 0)
                        goto letscontinue;
-               if (hotdrop) {
+               if (acpar.hotdrop) {
                        read_unlock_bh(&table->lock);
                        return NF_DROP;
                }
@@ -227,7 +226,7 @@ unsigned int ebt_do_table (unsigned int hook, struct sk_buff *skb,
 
                /* these should only watch: not modify, nor tell us
                   what to do with the packet */
-               EBT_WATCHER_ITERATE(point, ebt_do_watcher, skb, &tgpar);
+               EBT_WATCHER_ITERATE(point, ebt_do_watcher, skb, &acpar);
 
                t = (struct ebt_entry_target *)
                   (((char *)point) + point->target_offset);
@@ -235,9 +234,9 @@ unsigned int ebt_do_table (unsigned int hook, struct sk_buff *skb,
                if (!t->u.target->target)
                        verdict = ((struct ebt_standard_target *)t)->verdict;
                else {
-                       tgpar.target   = t->u.target;
-                       tgpar.targinfo = t->data;
-                       verdict = t->u.target->target(skb, &tgpar);
+                       acpar.target   = t->u.target;
+                       acpar.targinfo = t->data;
+                       verdict = t->u.target->target(skb, &acpar);
                }
                if (verdict == EBT_ACCEPT) {
                        read_unlock_bh(&table->lock);
index 07a699059390e06ab464afe5c33fa8e938c009e3..03352fcba1720c48bfd9e5f202e1addf6cf73454 100644 (file)
@@ -224,7 +224,7 @@ static inline int arp_checkentry(const struct arpt_arp *arp)
 }
 
 static unsigned int
-arpt_error(struct sk_buff *skb, const struct xt_target_param *par)
+arpt_error(struct sk_buff *skb, const struct xt_action_param *par)
 {
        if (net_ratelimit())
                printk("arp_tables: error: '%s'\n",
@@ -260,12 +260,11 @@ unsigned int arpt_do_table(struct sk_buff *skb,
        static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
        unsigned int verdict = NF_DROP;
        const struct arphdr *arp;
-       bool hotdrop = false;
        struct arpt_entry *e, *back;
        const char *indev, *outdev;
        void *table_base;
        const struct xt_table_info *private;
-       struct xt_target_param tgpar;
+       struct xt_action_param acpar;
 
        if (!pskb_may_pull(skb, arp_hdr_len(skb->dev)))
                return NF_DROP;
@@ -280,10 +279,11 @@ unsigned int arpt_do_table(struct sk_buff *skb,
        e = get_entry(table_base, private->hook_entry[hook]);
        back = get_entry(table_base, private->underflow[hook]);
 
-       tgpar.in      = in;
-       tgpar.out     = out;
-       tgpar.hooknum = hook;
-       tgpar.family  = NFPROTO_ARP;
+       acpar.in      = in;
+       acpar.out     = out;
+       acpar.hooknum = hook;
+       acpar.family  = NFPROTO_ARP;
+       acpar.hotdrop = false;
 
        arp = arp_hdr(skb);
        do {
@@ -333,9 +333,9 @@ unsigned int arpt_do_table(struct sk_buff *skb,
                /* Targets which reenter must return
                 * abs. verdicts
                 */
-               tgpar.target   = t->u.kernel.target;
-               tgpar.targinfo = t->data;
-               verdict = t->u.kernel.target->target(skb, &tgpar);
+               acpar.target   = t->u.kernel.target;
+               acpar.targinfo = t->data;
+               verdict = t->u.kernel.target->target(skb, &acpar);
 
                /* Target might have changed stuff. */
                arp = arp_hdr(skb);
@@ -345,10 +345,10 @@ unsigned int arpt_do_table(struct sk_buff *skb,
                else
                        /* Verdict */
                        break;
-       } while (!hotdrop);
+       } while (!acpar.hotdrop);
        xt_info_rdunlock_bh();
 
-       if (hotdrop)
+       if (acpar.hotdrop)
                return NF_DROP;
        else
                return verdict;
@@ -1828,22 +1828,23 @@ void arpt_unregister_table(struct xt_table *table)
 }
 
 /* The built-in targets: standard (NULL) and error. */
-static struct xt_target arpt_standard_target __read_mostly = {
-       .name           = ARPT_STANDARD_TARGET,
-       .targetsize     = sizeof(int),
-       .family         = NFPROTO_ARP,
+static struct xt_target arpt_builtin_tg[] __read_mostly = {
+       {
+               .name             = ARPT_STANDARD_TARGET,
+               .targetsize       = sizeof(int),
+               .family           = NFPROTO_ARP,
 #ifdef CONFIG_COMPAT
-       .compatsize     = sizeof(compat_int_t),
-       .compat_from_user = compat_standard_from_user,
-       .compat_to_user = compat_standard_to_user,
+               .compatsize       = sizeof(compat_int_t),
+               .compat_from_user = compat_standard_from_user,
+               .compat_to_user   = compat_standard_to_user,
 #endif
-};
-
-static struct xt_target arpt_error_target __read_mostly = {
-       .name           = ARPT_ERROR_TARGET,
-       .target         = arpt_error,
-       .targetsize     = ARPT_FUNCTION_MAXNAMELEN,
-       .family         = NFPROTO_ARP,
+       },
+       {
+               .name             = ARPT_ERROR_TARGET,
+               .target           = arpt_error,
+               .targetsize       = ARPT_FUNCTION_MAXNAMELEN,
+               .family           = NFPROTO_ARP,
+       },
 };
 
 static struct nf_sockopt_ops arpt_sockopts = {
@@ -1887,12 +1888,9 @@ static int __init arp_tables_init(void)
                goto err1;
 
        /* Noone else will be downing sem now, so we won't sleep */
-       ret = xt_register_target(&arpt_standard_target);
+       ret = xt_register_targets(arpt_builtin_tg, ARRAY_SIZE(arpt_builtin_tg));
        if (ret < 0)
                goto err2;
-       ret = xt_register_target(&arpt_error_target);
-       if (ret < 0)
-               goto err3;
 
        /* Register setsockopt */
        ret = nf_register_sockopt(&arpt_sockopts);
@@ -1903,9 +1901,7 @@ static int __init arp_tables_init(void)
        return 0;
 
 err4:
-       xt_unregister_target(&arpt_error_target);
-err3:
-       xt_unregister_target(&arpt_standard_target);
+       xt_unregister_targets(arpt_builtin_tg, ARRAY_SIZE(arpt_builtin_tg));
 err2:
        unregister_pernet_subsys(&arp_tables_net_ops);
 err1:
@@ -1915,8 +1911,7 @@ err1:
 static void __exit arp_tables_fini(void)
 {
        nf_unregister_sockopt(&arpt_sockopts);
-       xt_unregister_target(&arpt_error_target);
-       xt_unregister_target(&arpt_standard_target);
+       xt_unregister_targets(arpt_builtin_tg, ARRAY_SIZE(arpt_builtin_tg));
        unregister_pernet_subsys(&arp_tables_net_ops);
 }
 
index 4b51a027f307234e71565a039e780ff75d6e72de..e1be7dd1171b368eb4a0e1593abc9b8b2294838a 100644 (file)
@@ -9,7 +9,7 @@ MODULE_AUTHOR("Bart De Schuymer <bdschuym@pandora.be>");
 MODULE_DESCRIPTION("arptables arp payload mangle target");
 
 static unsigned int
-target(struct sk_buff *skb, const struct xt_target_param *par)
+target(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct arpt_mangle *mangle = par->targinfo;
        const struct arphdr *arp;
index 3e6af1036fbcc6c5778f2c8136ad75e8d653cd0a..49b9e4fb54600d4775fd719001b33b1e29fda04d 100644 (file)
@@ -165,7 +165,7 @@ ip_checkentry(const struct ipt_ip *ip)
 }
 
 static unsigned int
-ipt_error(struct sk_buff *skb, const struct xt_target_param *par)
+ipt_error(struct sk_buff *skb, const struct xt_action_param *par)
 {
        if (net_ratelimit())
                pr_info("error: `%s'\n", (const char *)par->targinfo);
@@ -173,21 +173,6 @@ ipt_error(struct sk_buff *skb, const struct xt_target_param *par)
        return NF_DROP;
 }
 
-/* Performance critical - called for every packet */
-static inline bool
-do_match(const struct ipt_entry_match *m, const struct sk_buff *skb,
-        struct xt_match_param *par)
-{
-       par->match     = m->u.kernel.match;
-       par->matchinfo = m->data;
-
-       /* Stop iteration if it doesn't match */
-       if (!m->u.kernel.match->match(skb, par))
-               return true;
-       else
-               return false;
-}
-
 /* Performance critical */
 static inline struct ipt_entry *
 get_entry(const void *base, unsigned int offset)
@@ -323,7 +308,6 @@ ipt_do_table(struct sk_buff *skb,
 {
        static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
        const struct iphdr *ip;
-       bool hotdrop = false;
        /* Initializing verdict to NF_DROP keeps gcc happy. */
        unsigned int verdict = NF_DROP;
        const char *indev, *outdev;
@@ -331,8 +315,7 @@ ipt_do_table(struct sk_buff *skb,
        struct ipt_entry *e, **jumpstack;
        unsigned int *stackptr, origptr, cpu;
        const struct xt_table_info *private;
-       struct xt_match_param mtpar;
-       struct xt_target_param tgpar;
+       struct xt_action_param acpar;
 
        /* Initialization */
        ip = ip_hdr(skb);
@@ -344,13 +327,13 @@ ipt_do_table(struct sk_buff *skb,
         * things we don't know, ie. tcp syn flag or ports).  If the
         * rule is also a fragment-specific rule, non-fragments won't
         * match it. */
-       mtpar.fragoff = ntohs(ip->frag_off) & IP_OFFSET;
-       mtpar.thoff   = ip_hdrlen(skb);
-       mtpar.hotdrop = &hotdrop;
-       mtpar.in      = tgpar.in  = in;
-       mtpar.out     = tgpar.out = out;
-       mtpar.family  = tgpar.family = NFPROTO_IPV4;
-       mtpar.hooknum = tgpar.hooknum = hook;
+       acpar.fragoff = ntohs(ip->frag_off) & IP_OFFSET;
+       acpar.thoff   = ip_hdrlen(skb);
+       acpar.hotdrop = false;
+       acpar.in      = in;
+       acpar.out     = out;
+       acpar.family  = NFPROTO_IPV4;
+       acpar.hooknum = hook;
 
        IP_NF_ASSERT(table->valid_hooks & (1 << hook));
        xt_info_rdlock_bh();
@@ -373,15 +356,18 @@ ipt_do_table(struct sk_buff *skb,
 
                IP_NF_ASSERT(e);
                if (!ip_packet_match(ip, indev, outdev,
-                   &e->ip, mtpar.fragoff)) {
+                   &e->ip, acpar.fragoff)) {
  no_match:
                        e = ipt_next_entry(e);
                        continue;
                }
 
-               xt_ematch_foreach(ematch, e)
-                       if (do_match(ematch, skb, &mtpar) != 0)
+               xt_ematch_foreach(ematch, e) {
+                       acpar.match     = ematch->u.kernel.match;
+                       acpar.matchinfo = ematch->data;
+                       if (!acpar.match->match(skb, &acpar))
                                goto no_match;
+               }
 
                ADD_COUNTER(e->counters, ntohs(ip->tot_len), 1);
 
@@ -434,11 +420,10 @@ ipt_do_table(struct sk_buff *skb,
                        continue;
                }
 
-               tgpar.target   = t->u.kernel.target;
-               tgpar.targinfo = t->data;
-
+               acpar.target   = t->u.kernel.target;
+               acpar.targinfo = t->data;
 
-               verdict = t->u.kernel.target->target(skb, &tgpar);
+               verdict = t->u.kernel.target->target(skb, &acpar);
                /* Target might have changed stuff. */
                ip = ip_hdr(skb);
                if (verdict == IPT_CONTINUE)
@@ -446,7 +431,7 @@ ipt_do_table(struct sk_buff *skb,
                else
                        /* Verdict */
                        break;
-       } while (!hotdrop);
+       } while (!acpar.hotdrop);
        xt_info_rdunlock_bh();
        pr_debug("Exiting %s; resetting sp from %u to %u\n",
                 __func__, *stackptr, origptr);
@@ -454,7 +439,7 @@ ipt_do_table(struct sk_buff *skb,
 #ifdef DEBUG_ALLOW_ALL
        return NF_ACCEPT;
 #else
-       if (hotdrop)
+       if (acpar.hotdrop)
                return NF_DROP;
        else return verdict;
 #endif
@@ -591,7 +576,7 @@ check_entry(const struct ipt_entry *e, const char *name)
        const struct ipt_entry_target *t;
 
        if (!ip_checkentry(&e->ip)) {
-               duprintf("ip check failed %p %s.\n", e, name);
+               duprintf("ip check failed %p %s.\n", e, par->match->name);
                return -EINVAL;
        }
 
@@ -618,7 +603,7 @@ check_match(struct ipt_entry_match *m, struct xt_mtchk_param *par)
        ret = xt_check_match(par, m->u.match_size - sizeof(*m),
              ip->proto, ip->invflags & IPT_INV_PROTO);
        if (ret < 0) {
-               duprintf("check failed for `%s'.\n", par.match->name);
+               duprintf("check failed for `%s'.\n", par->match->name);
                return ret;
        }
        return 0;
@@ -2152,7 +2137,7 @@ icmp_type_code_match(u_int8_t test_type, u_int8_t min_code, u_int8_t max_code,
 }
 
 static bool
-icmp_match(const struct sk_buff *skb, const struct xt_match_param *par)
+icmp_match(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct icmphdr *ic;
        struct icmphdr _icmph;
@@ -2168,7 +2153,7 @@ icmp_match(const struct sk_buff *skb, const struct xt_match_param *par)
                 * can't.  Hence, no choice but to drop.
                 */
                duprintf("Dropping evil ICMP tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
@@ -2187,23 +2172,23 @@ static int icmp_checkentry(const struct xt_mtchk_param *par)
        return (icmpinfo->invflags & ~IPT_ICMP_INV) ? -EINVAL : 0;
 }
 
-/* The built-in targets: standard (NULL) and error. */
-static struct xt_target ipt_standard_target __read_mostly = {
-       .name           = IPT_STANDARD_TARGET,
-       .targetsize     = sizeof(int),
-       .family         = NFPROTO_IPV4,
+static struct xt_target ipt_builtin_tg[] __read_mostly = {
+       {
+               .name             = IPT_STANDARD_TARGET,
+               .targetsize       = sizeof(int),
+               .family           = NFPROTO_IPV4,
 #ifdef CONFIG_COMPAT
-       .compatsize     = sizeof(compat_int_t),
-       .compat_from_user = compat_standard_from_user,
-       .compat_to_user = compat_standard_to_user,
+               .compatsize       = sizeof(compat_int_t),
+               .compat_from_user = compat_standard_from_user,
+               .compat_to_user   = compat_standard_to_user,
 #endif
-};
-
-static struct xt_target ipt_error_target __read_mostly = {
-       .name           = IPT_ERROR_TARGET,
-       .target         = ipt_error,
-       .targetsize     = IPT_FUNCTION_MAXNAMELEN,
-       .family         = NFPROTO_IPV4,
+       },
+       {
+               .name             = IPT_ERROR_TARGET,
+               .target           = ipt_error,
+               .targetsize       = IPT_FUNCTION_MAXNAMELEN,
+               .family           = NFPROTO_IPV4,
+       },
 };
 
 static struct nf_sockopt_ops ipt_sockopts = {
@@ -2223,13 +2208,15 @@ static struct nf_sockopt_ops ipt_sockopts = {
        .owner          = THIS_MODULE,
 };
 
-static struct xt_match icmp_matchstruct __read_mostly = {
-       .name           = "icmp",
-       .match          = icmp_match,
-       .matchsize      = sizeof(struct ipt_icmp),
-       .checkentry     = icmp_checkentry,
-       .proto          = IPPROTO_ICMP,
-       .family         = NFPROTO_IPV4,
+static struct xt_match ipt_builtin_mt[] __read_mostly = {
+       {
+               .name       = "icmp",
+               .match      = icmp_match,
+               .matchsize  = sizeof(struct ipt_icmp),
+               .checkentry = icmp_checkentry,
+               .proto      = IPPROTO_ICMP,
+               .family     = NFPROTO_IPV4,
+       },
 };
 
 static int __net_init ip_tables_net_init(struct net *net)
@@ -2256,13 +2243,10 @@ static int __init ip_tables_init(void)
                goto err1;
 
        /* Noone else will be downing sem now, so we won't sleep */
-       ret = xt_register_target(&ipt_standard_target);
+       ret = xt_register_targets(ipt_builtin_tg, ARRAY_SIZE(ipt_builtin_tg));
        if (ret < 0)
                goto err2;
-       ret = xt_register_target(&ipt_error_target);
-       if (ret < 0)
-               goto err3;
-       ret = xt_register_match(&icmp_matchstruct);
+       ret = xt_register_matches(ipt_builtin_mt, ARRAY_SIZE(ipt_builtin_mt));
        if (ret < 0)
                goto err4;
 
@@ -2275,11 +2259,9 @@ static int __init ip_tables_init(void)
        return 0;
 
 err5:
-       xt_unregister_match(&icmp_matchstruct);
+       xt_unregister_matches(ipt_builtin_mt, ARRAY_SIZE(ipt_builtin_mt));
 err4:
-       xt_unregister_target(&ipt_error_target);
-err3:
-       xt_unregister_target(&ipt_standard_target);
+       xt_unregister_targets(ipt_builtin_tg, ARRAY_SIZE(ipt_builtin_tg));
 err2:
        unregister_pernet_subsys(&ip_tables_net_ops);
 err1:
@@ -2290,10 +2272,8 @@ static void __exit ip_tables_fini(void)
 {
        nf_unregister_sockopt(&ipt_sockopts);
 
-       xt_unregister_match(&icmp_matchstruct);
-       xt_unregister_target(&ipt_error_target);
-       xt_unregister_target(&ipt_standard_target);
-
+       xt_unregister_matches(ipt_builtin_mt, ARRAY_SIZE(ipt_builtin_mt));
+       xt_unregister_targets(ipt_builtin_tg, ARRAY_SIZE(ipt_builtin_tg));
        unregister_pernet_subsys(&ip_tables_net_ops);
 }
 
index 8815d458de463638522ed955b9ca01cdeb5c801e..f91c94b9a7900017b3589598a26c3491ef6a2407 100644 (file)
@@ -282,7 +282,7 @@ clusterip_responsible(const struct clusterip_config *config, u_int32_t hash)
  ***********************************************************************/
 
 static unsigned int
-clusterip_tg(struct sk_buff *skb, const struct xt_target_param *par)
+clusterip_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ipt_clusterip_tgt_info *cipinfo = par->targinfo;
        struct nf_conn *ct;
index 563049f31aefec69d5ff770db74e629a01011171..4bf3dc49ad1ea84d59815cb9a46aa3cd3fd374b5 100644 (file)
@@ -77,7 +77,7 @@ set_ect_tcp(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
 }
 
 static unsigned int
-ecn_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ecn_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ipt_ECN_info *einfo = par->targinfo;
 
index 3bd35f3708172a0ab45e97687842d05744e2e05a..5234f4f3499ad87e06c9d1bfab14e27d35b77fe6 100644 (file)
@@ -425,7 +425,7 @@ ipt_log_packet(u_int8_t pf,
 }
 
 static unsigned int
-log_tg(struct sk_buff *skb, const struct xt_target_param *par)
+log_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ipt_log_info *loginfo = par->targinfo;
        struct nf_loginfo li;
index 02b1bc47799846a9b9ac321b34b5c6fe8a673d20..d2ed9dc74ebc3c029e134295f4ed490f27af0ef6 100644 (file)
@@ -44,7 +44,7 @@ static int masquerade_tg_check(const struct xt_tgchk_param *par)
 }
 
 static unsigned int
-masquerade_tg(struct sk_buff *skb, const struct xt_target_param *par)
+masquerade_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct nf_conn *ct;
        struct nf_conn_nat *nat;
index 708c7f8f7eea614dae5d793e4576d7799145bac9..f43867d1697f2b6c262030672ed7411af5b2b2a4 100644 (file)
@@ -38,7 +38,7 @@ static int netmap_tg_check(const struct xt_tgchk_param *par)
 }
 
 static unsigned int
-netmap_tg(struct sk_buff *skb, const struct xt_target_param *par)
+netmap_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct nf_conn *ct;
        enum ip_conntrack_info ctinfo;
index 3cf10191652377a6058003f15c7e0473478f5846..18a0656505a02046099219b0563a1617bce321dd 100644 (file)
@@ -42,7 +42,7 @@ static int redirect_tg_check(const struct xt_tgchk_param *par)
 }
 
 static unsigned int
-redirect_tg(struct sk_buff *skb, const struct xt_target_param *par)
+redirect_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct nf_conn *ct;
        enum ip_conntrack_info ctinfo;
index a86135a280588b4d6d98ed47ec4255b1b1fa9e85..f5f4a888e4ec71243f2d6589507355f28273c5e9 100644 (file)
@@ -136,7 +136,7 @@ static inline void send_unreach(struct sk_buff *skb_in, int code)
 }
 
 static unsigned int
-reject_tg(struct sk_buff *skb, const struct xt_target_param *par)
+reject_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ipt_reject_info *reject = par->targinfo;
 
index 8f60749e87a3fc54bef21d85a5a1d45e9f68cf8e..446e0f467a17eed968b7a9cba12b001b05de1154 100644 (file)
@@ -276,7 +276,7 @@ alloc_failure:
 }
 
 static unsigned int
-ulog_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ulog_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        ipt_ulog_packet(par->hooknum, skb, par->in, par->out,
                        par->targinfo, NULL);
index e4b8f2bf8aaaf94c42270adf23ca597f41bfaa0c..db8bff0fb86dc711f1d422ba188a41f85a33d32f 100644 (file)
@@ -30,7 +30,7 @@ static inline bool match_type(struct net *net, const struct net_device *dev,
 }
 
 static bool
-addrtype_mt_v0(const struct sk_buff *skb, const struct xt_match_param *par)
+addrtype_mt_v0(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct net *net = dev_net(par->in ? par->in : par->out);
        const struct ipt_addrtype_info *info = par->matchinfo;
@@ -48,7 +48,7 @@ addrtype_mt_v0(const struct sk_buff *skb, const struct xt_match_param *par)
 }
 
 static bool
-addrtype_mt_v1(const struct sk_buff *skb, const struct xt_match_param *par)
+addrtype_mt_v1(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct net *net = dev_net(par->in ? par->in : par->out);
        const struct ipt_addrtype_info_v1 *info = par->matchinfo;
index 9f98102048925aea2afcabe3bb823cad505149eb..14a2aa8b8a142502095e4da8a034eae6e78a8313 100644 (file)
@@ -30,7 +30,7 @@ spi_match(u_int32_t min, u_int32_t max, u_int32_t spi, bool invert)
        return r;
 }
 
-static bool ah_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool ah_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct ip_auth_hdr _ahdr;
        const struct ip_auth_hdr *ah;
@@ -46,7 +46,7 @@ static bool ah_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                 * can't.  Hence, no choice but to drop.
                 */
                pr_debug("Dropping evil AH tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return 0;
        }
 
index 32e24100d8d1ee51b9fa94c62069519bab004e07..af6e9c778345ff802916cc7fa0078cbd79735c81 100644 (file)
@@ -67,7 +67,7 @@ static inline bool match_tcp(const struct sk_buff *skb,
        return true;
 }
 
-static bool ecn_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool ecn_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ipt_ecn_info *info = par->matchinfo;
 
@@ -78,7 +78,7 @@ static bool ecn_mt(const struct sk_buff *skb, const struct xt_match_param *par)
        if (info->operation & (IPT_ECN_OP_MATCH_ECE|IPT_ECN_OP_MATCH_CWR)) {
                if (ip_hdr(skb)->protocol != IPPROTO_TCP)
                        return false;
-               if (!match_tcp(skb, info, par->hotdrop))
+               if (!match_tcp(skb, info, &par->hotdrop))
                        return false;
        }
 
index b48a0fc3d9ed67d191719de797e4998fc50e8465..98ed78281aee15eae5da8b99105c3f2da36836bd 100644 (file)
@@ -39,7 +39,7 @@ static const struct xt_table nat_table = {
 
 /* Source NAT */
 static unsigned int
-ipt_snat_target(struct sk_buff *skb, const struct xt_target_param *par)
+ipt_snat_target(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct nf_conn *ct;
        enum ip_conntrack_info ctinfo;
@@ -58,7 +58,7 @@ ipt_snat_target(struct sk_buff *skb, const struct xt_target_param *par)
 }
 
 static unsigned int
-ipt_dnat_target(struct sk_buff *skb, const struct xt_target_param *par)
+ipt_dnat_target(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct nf_conn *ct;
        enum ip_conntrack_info ctinfo;
index 7afa117731648f9a1f584e5c9966f6824e3634c6..56782336474fcce14804fbd99902c6bc1b4cb7e3 100644 (file)
@@ -197,7 +197,7 @@ ip6_checkentry(const struct ip6t_ip6 *ipv6)
 }
 
 static unsigned int
-ip6t_error(struct sk_buff *skb, const struct xt_target_param *par)
+ip6t_error(struct sk_buff *skb, const struct xt_action_param *par)
 {
        if (net_ratelimit())
                pr_info("error: `%s'\n", (const char *)par->targinfo);
@@ -205,21 +205,6 @@ ip6t_error(struct sk_buff *skb, const struct xt_target_param *par)
        return NF_DROP;
 }
 
-/* Performance critical - called for every packet */
-static inline bool
-do_match(const struct ip6t_entry_match *m, const struct sk_buff *skb,
-        struct xt_match_param *par)
-{
-       par->match     = m->u.kernel.match;
-       par->matchinfo = m->data;
-
-       /* Stop iteration if it doesn't match */
-       if (!m->u.kernel.match->match(skb, par))
-               return true;
-       else
-               return false;
-}
-
 static inline struct ip6t_entry *
 get_entry(const void *base, unsigned int offset)
 {
@@ -352,7 +337,6 @@ ip6t_do_table(struct sk_buff *skb,
              struct xt_table *table)
 {
        static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
-       bool hotdrop = false;
        /* Initializing verdict to NF_DROP keeps gcc happy. */
        unsigned int verdict = NF_DROP;
        const char *indev, *outdev;
@@ -360,8 +344,7 @@ ip6t_do_table(struct sk_buff *skb,
        struct ip6t_entry *e, **jumpstack;
        unsigned int *stackptr, origptr, cpu;
        const struct xt_table_info *private;
-       struct xt_match_param mtpar;
-       struct xt_target_param tgpar;
+       struct xt_action_param acpar;
 
        /* Initialization */
        indev = in ? in->name : nulldevname;
@@ -372,11 +355,11 @@ ip6t_do_table(struct sk_buff *skb,
         * things we don't know, ie. tcp syn flag or ports).  If the
         * rule is also a fragment-specific rule, non-fragments won't
         * match it. */
-       mtpar.hotdrop = &hotdrop;
-       mtpar.in      = tgpar.in  = in;
-       mtpar.out     = tgpar.out = out;
-       mtpar.family  = tgpar.family = NFPROTO_IPV6;
-       mtpar.hooknum = tgpar.hooknum = hook;
+       acpar.hotdrop = false;
+       acpar.in      = in;
+       acpar.out     = out;
+       acpar.family  = NFPROTO_IPV6;
+       acpar.hooknum = hook;
 
        IP_NF_ASSERT(table->valid_hooks & (1 << hook));
 
@@ -396,15 +379,18 @@ ip6t_do_table(struct sk_buff *skb,
 
                IP_NF_ASSERT(e);
                if (!ip6_packet_match(skb, indev, outdev, &e->ipv6,
-                   &mtpar.thoff, &mtpar.fragoff, &hotdrop)) {
+                   &acpar.thoff, &acpar.fragoff, &acpar.hotdrop)) {
  no_match:
                        e = ip6t_next_entry(e);
                        continue;
                }
 
-               xt_ematch_foreach(ematch, e)
-                       if (do_match(ematch, skb, &mtpar) != 0)
+               xt_ematch_foreach(ematch, e) {
+                       acpar.match     = ematch->u.kernel.match;
+                       acpar.matchinfo = ematch->data;
+                       if (!acpar.match->match(skb, &acpar))
                                goto no_match;
+               }
 
                ADD_COUNTER(e->counters,
                            ntohs(ipv6_hdr(skb)->payload_len) +
@@ -451,16 +437,16 @@ ip6t_do_table(struct sk_buff *skb,
                        continue;
                }
 
-               tgpar.target   = t->u.kernel.target;
-               tgpar.targinfo = t->data;
+               acpar.target   = t->u.kernel.target;
+               acpar.targinfo = t->data;
 
-               verdict = t->u.kernel.target->target(skb, &tgpar);
+               verdict = t->u.kernel.target->target(skb, &acpar);
                if (verdict == IP6T_CONTINUE)
                        e = ip6t_next_entry(e);
                else
                        /* Verdict */
                        break;
-       } while (!hotdrop);
+       } while (!acpar.hotdrop);
 
        xt_info_rdunlock_bh();
        *stackptr = origptr;
@@ -468,7 +454,7 @@ ip6t_do_table(struct sk_buff *skb,
 #ifdef DEBUG_ALLOW_ALL
        return NF_ACCEPT;
 #else
-       if (hotdrop)
+       if (acpar.hotdrop)
                return NF_DROP;
        else return verdict;
 #endif
@@ -2167,7 +2153,7 @@ icmp6_type_code_match(u_int8_t test_type, u_int8_t min_code, u_int8_t max_code,
 }
 
 static bool
-icmp6_match(const struct sk_buff *skb, const struct xt_match_param *par)
+icmp6_match(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct icmp6hdr *ic;
        struct icmp6hdr _icmph;
@@ -2183,7 +2169,7 @@ icmp6_match(const struct sk_buff *skb, const struct xt_match_param *par)
                 * can't.  Hence, no choice but to drop.
                 */
                duprintf("Dropping evil ICMP tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
@@ -2204,22 +2190,23 @@ static int icmp6_checkentry(const struct xt_mtchk_param *par)
 }
 
 /* The built-in targets: standard (NULL) and error. */
-static struct xt_target ip6t_standard_target __read_mostly = {
-       .name           = IP6T_STANDARD_TARGET,
-       .targetsize     = sizeof(int),
-       .family         = NFPROTO_IPV6,
+static struct xt_target ip6t_builtin_tg[] __read_mostly = {
+       {
+               .name             = IP6T_STANDARD_TARGET,
+               .targetsize       = sizeof(int),
+               .family           = NFPROTO_IPV6,
 #ifdef CONFIG_COMPAT
-       .compatsize     = sizeof(compat_int_t),
-       .compat_from_user = compat_standard_from_user,
-       .compat_to_user = compat_standard_to_user,
+               .compatsize       = sizeof(compat_int_t),
+               .compat_from_user = compat_standard_from_user,
+               .compat_to_user   = compat_standard_to_user,
 #endif
-};
-
-static struct xt_target ip6t_error_target __read_mostly = {
-       .name           = IP6T_ERROR_TARGET,
-       .target         = ip6t_error,
-       .targetsize     = IP6T_FUNCTION_MAXNAMELEN,
-       .family         = NFPROTO_IPV6,
+       },
+       {
+               .name             = IP6T_ERROR_TARGET,
+               .target           = ip6t_error,
+               .targetsize       = IP6T_FUNCTION_MAXNAMELEN,
+               .family           = NFPROTO_IPV6,
+       },
 };
 
 static struct nf_sockopt_ops ip6t_sockopts = {
@@ -2239,13 +2226,15 @@ static struct nf_sockopt_ops ip6t_sockopts = {
        .owner          = THIS_MODULE,
 };
 
-static struct xt_match icmp6_matchstruct __read_mostly = {
-       .name           = "icmp6",
-       .match          = icmp6_match,
-       .matchsize      = sizeof(struct ip6t_icmp),
-       .checkentry     = icmp6_checkentry,
-       .proto          = IPPROTO_ICMPV6,
-       .family         = NFPROTO_IPV6,
+static struct xt_match ip6t_builtin_mt[] __read_mostly = {
+       {
+               .name       = "icmp6",
+               .match      = icmp6_match,
+               .matchsize  = sizeof(struct ip6t_icmp),
+               .checkentry = icmp6_checkentry,
+               .proto      = IPPROTO_ICMPV6,
+               .family     = NFPROTO_IPV6,
+       },
 };
 
 static int __net_init ip6_tables_net_init(struct net *net)
@@ -2272,13 +2261,10 @@ static int __init ip6_tables_init(void)
                goto err1;
 
        /* Noone else will be downing sem now, so we won't sleep */
-       ret = xt_register_target(&ip6t_standard_target);
+       ret = xt_register_targets(ip6t_builtin_tg, ARRAY_SIZE(ip6t_builtin_tg));
        if (ret < 0)
                goto err2;
-       ret = xt_register_target(&ip6t_error_target);
-       if (ret < 0)
-               goto err3;
-       ret = xt_register_match(&icmp6_matchstruct);
+       ret = xt_register_matches(ip6t_builtin_mt, ARRAY_SIZE(ip6t_builtin_mt));
        if (ret < 0)
                goto err4;
 
@@ -2291,11 +2277,9 @@ static int __init ip6_tables_init(void)
        return 0;
 
 err5:
-       xt_unregister_match(&icmp6_matchstruct);
+       xt_unregister_matches(ip6t_builtin_mt, ARRAY_SIZE(ip6t_builtin_mt));
 err4:
-       xt_unregister_target(&ip6t_error_target);
-err3:
-       xt_unregister_target(&ip6t_standard_target);
+       xt_unregister_targets(ip6t_builtin_tg, ARRAY_SIZE(ip6t_builtin_tg));
 err2:
        unregister_pernet_subsys(&ip6_tables_net_ops);
 err1:
@@ -2306,10 +2290,8 @@ static void __exit ip6_tables_fini(void)
 {
        nf_unregister_sockopt(&ip6t_sockopts);
 
-       xt_unregister_match(&icmp6_matchstruct);
-       xt_unregister_target(&ip6t_error_target);
-       xt_unregister_target(&ip6t_standard_target);
-
+       xt_unregister_matches(ip6t_builtin_mt, ARRAY_SIZE(ip6t_builtin_mt));
+       xt_unregister_targets(ip6t_builtin_tg, ARRAY_SIZE(ip6t_builtin_tg));
        unregister_pernet_subsys(&ip6_tables_net_ops);
 }
 
index 1f47a525f48416effce0bdfa19ae0fc0ee0cf36d..af4ee11f206609861708443150ae20abbc8e64b6 100644 (file)
@@ -436,7 +436,7 @@ ip6t_log_packet(u_int8_t pf,
 }
 
 static unsigned int
-log_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+log_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ip6t_log_info *loginfo = par->targinfo;
        struct nf_loginfo li;
index af1d6494ac39f7506a05acb6acc788b88affe665..47d2277137585648f57711618fe9b573ec83a1ff 100644 (file)
@@ -175,7 +175,7 @@ send_unreach(struct net *net, struct sk_buff *skb_in, unsigned char code,
 }
 
 static unsigned int
-reject_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+reject_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct ip6t_reject_info *reject = par->targinfo;
        struct net *net = dev_net((par->in != NULL) ? par->in : par->out);
index 1580693c86c1dad1ae55751cbc2ee41c19490be0..89cccc5a9c929a1912a400858e322d09bb829279 100644 (file)
@@ -36,7 +36,7 @@ spi_match(u_int32_t min, u_int32_t max, u_int32_t spi, bool invert)
        return r;
 }
 
-static bool ah_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool ah_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct ip_auth_hdr _ah;
        const struct ip_auth_hdr *ah;
@@ -48,13 +48,13 @@ static bool ah_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
        err = ipv6_find_hdr(skb, &ptr, NEXTHDR_AUTH, NULL);
        if (err < 0) {
                if (err != -ENOENT)
-                       *par->hotdrop = true;
+                       par->hotdrop = true;
                return false;
        }
 
        ah = skb_header_pointer(skb, ptr, sizeof(_ah), &_ah);
        if (ah == NULL) {
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index ca287f6d2bcec9539ccc5a34e874b95e68316622..aab0706908c5491fc4405468232dfdd440f23c4d 100644 (file)
@@ -20,14 +20,14 @@ MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Andras Kis-Szabo <kisza@sch.bme.hu>");
 
 static bool
-eui64_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+eui64_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        unsigned char eui64[8];
 
        if (!(skb_mac_header(skb) >= skb->head &&
              skb_mac_header(skb) + ETH_HLEN <= skb->data) &&
            par->fragoff != 0) {
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index a5daf0ffb4ec8e840a14e3e6eebb417952e25c71..eda898fda6ca0615ec5a314f47b1f86be9c1a280 100644 (file)
@@ -35,7 +35,7 @@ id_match(u_int32_t min, u_int32_t max, u_int32_t id, bool invert)
 }
 
 static bool
-frag_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+frag_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct frag_hdr _frag;
        const struct frag_hdr *fh;
@@ -46,13 +46,13 @@ frag_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
        err = ipv6_find_hdr(skb, &ptr, NEXTHDR_FRAGMENT, NULL);
        if (err < 0) {
                if (err != -ENOENT)
-                       *par->hotdrop = true;
+                       par->hotdrop = true;
                return false;
        }
 
        fh = skb_header_pointer(skb, ptr, sizeof(_frag), &_frag);
        if (fh == NULL) {
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index e424e7c8f8248690d80b64d17da787c83c9e3297..59df051eaef636cc7f665a2cfb5dc2d21b30b33f 100644 (file)
@@ -44,7 +44,7 @@ MODULE_ALIAS("ip6t_dst");
 static struct xt_match hbh_mt6_reg[] __read_mostly;
 
 static bool
-hbh_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+hbh_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct ipv6_opt_hdr _optsh;
        const struct ipv6_opt_hdr *oh;
@@ -65,13 +65,13 @@ hbh_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
                            NEXTHDR_HOP : NEXTHDR_DEST, NULL);
        if (err < 0) {
                if (err != -ENOENT)
-                       *par->hotdrop = true;
+                       par->hotdrop = true;
                return false;
        }
 
        oh = skb_header_pointer(skb, ptr, sizeof(_optsh), &_optsh);
        if (oh == NULL) {
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index 46fbabb493faea61842f0186d3423124d7a32f29..54bd9790603f253a417971eea50a4157fd0c75ae 100644 (file)
@@ -27,7 +27,7 @@ MODULE_DESCRIPTION("Xtables: IPv6 header types match");
 MODULE_AUTHOR("Andras Kis-Szabo <kisza@sch.bme.hu>");
 
 static bool
-ipv6header_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+ipv6header_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ip6t_ipv6header_info *info = par->matchinfo;
        unsigned int temp;
index c9f443e0138f5729acc7006f4ebef76ca60e573a..0c90c66b199257dfd6123c1cc6a2ec904aa0053a 100644 (file)
@@ -32,7 +32,7 @@ type_match(u_int8_t min, u_int8_t max, u_int8_t type, bool invert)
        return (type >= min && type <= max) ^ invert;
 }
 
-static bool mh_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool mh_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct ip6_mh _mh;
        const struct ip6_mh *mh;
@@ -47,14 +47,14 @@ static bool mh_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
                /* We've been asked to examine this packet, and we
                   can't.  Hence, no choice but to drop. */
                pr_debug("Dropping evil MH tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
        if (mh->ip6mh_proto != IPPROTO_NONE) {
                pr_debug("Dropping invalid MH Payload Proto: %u\n",
                         mh->ip6mh_proto);
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index 09322720d2a673b1a62cc779806d744841281e07..d8488c50a8e0292e3b59515ec0c8ea6d7bf79f66 100644 (file)
@@ -36,7 +36,7 @@ segsleft_match(u_int32_t min, u_int32_t max, u_int32_t id, bool invert)
        return r;
 }
 
-static bool rt_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool rt_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct ipv6_rt_hdr _route;
        const struct ipv6_rt_hdr *rh;
@@ -52,13 +52,13 @@ static bool rt_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
        err = ipv6_find_hdr(skb, &ptr, NEXTHDR_ROUTING, NULL);
        if (err < 0) {
                if (err != -ENOENT)
-                       *par->hotdrop = true;
+                       par->hotdrop = true;
                return false;
        }
 
        rh = skb_header_pointer(skb, ptr, sizeof(_route), &_route);
        if (rh == NULL) {
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index 011bc80dd2a176715cb66311cee1cf0e2aa1f40b..c2c0e4abeb996fe689ebac8e964a9aa11163ce9f 100644 (file)
@@ -27,7 +27,7 @@ MODULE_ALIAS("ipt_CLASSIFY");
 MODULE_ALIAS("ip6t_CLASSIFY");
 
 static unsigned int
-classify_tg(struct sk_buff *skb, const struct xt_target_param *par)
+classify_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_classify_target_info *clinfo = par->targinfo;
 
index e953e302141d95991c812de136672b72114e8f32..e04dc282e3bba104d361cbc07e450ffdf3c2c3a0 100644 (file)
@@ -64,7 +64,7 @@ static void secmark_restore(struct sk_buff *skb)
 }
 
 static unsigned int
-connsecmark_tg(struct sk_buff *skb, const struct xt_target_param *par)
+connsecmark_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_connsecmark_target_info *info = par->targinfo;
 
index c8f547829badc04b00790299e6adc9e071efa3a7..562bf3266e043d421621ee7472aad72b50b0da51 100644 (file)
@@ -20,7 +20,7 @@
 #include <net/netfilter/nf_conntrack_zones.h>
 
 static unsigned int xt_ct_target(struct sk_buff *skb,
-                                const struct xt_target_param *par)
+                                const struct xt_action_param *par)
 {
        const struct xt_ct_target_info *info = par->targinfo;
        struct nf_conn *ct = info->ct;
index 969634f293e5232a8c71757162534097d88b3d07..0a229191e55b2f8e15e00e459b2ceb20fe226893 100644 (file)
@@ -28,7 +28,7 @@ MODULE_ALIAS("ipt_TOS");
 MODULE_ALIAS("ip6t_TOS");
 
 static unsigned int
-dscp_tg(struct sk_buff *skb, const struct xt_target_param *par)
+dscp_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_DSCP_info *dinfo = par->targinfo;
        u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
@@ -45,7 +45,7 @@ dscp_tg(struct sk_buff *skb, const struct xt_target_param *par)
 }
 
 static unsigned int
-dscp_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+dscp_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_DSCP_info *dinfo = par->targinfo;
        u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
@@ -72,7 +72,7 @@ static int dscp_tg_check(const struct xt_tgchk_param *par)
 }
 
 static unsigned int
-tos_tg(struct sk_buff *skb, const struct xt_target_param *par)
+tos_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_tos_target_info *info = par->targinfo;
        struct iphdr *iph = ip_hdr(skb);
@@ -92,7 +92,7 @@ tos_tg(struct sk_buff *skb, const struct xt_target_param *par)
 }
 
 static unsigned int
-tos_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+tos_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_tos_target_info *info = par->targinfo;
        struct ipv6hdr *iph = ipv6_hdr(skb);
index 77b99f732711ffc6af1483346085ec5c4f8215f1..95b084800fcc7ca5672b817167528a0334c2246f 100644 (file)
@@ -26,7 +26,7 @@ MODULE_DESCRIPTION("Xtables: Hoplimit/TTL Limit field modification target");
 MODULE_LICENSE("GPL");
 
 static unsigned int
-ttl_tg(struct sk_buff *skb, const struct xt_target_param *par)
+ttl_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct iphdr *iph;
        const struct ipt_TTL_info *info = par->targinfo;
@@ -66,7 +66,7 @@ ttl_tg(struct sk_buff *skb, const struct xt_target_param *par)
 }
 
 static unsigned int
-hl_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+hl_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct ipv6hdr *ip6h;
        const struct ip6t_HL_info *info = par->targinfo;
index ab6f8ff9c9a7d374ad9e7cd4aeb4e5bdcdd08960..a4140509eea1f3e821bd6ffb56b5b747dfd8c9fc 100644 (file)
@@ -49,7 +49,7 @@ struct xt_led_info_internal {
 };
 
 static unsigned int
-led_tg(struct sk_buff *skb, const struct xt_target_param *par)
+led_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_led_info *ledinfo = par->targinfo;
        struct xt_led_info_internal *ledinternal = ledinfo->internal_data;
index 42dd8747b4215124ef6c03636cb1907b5df1e2f0..a17dd0f589b22d3ffce573177414c4afa0790c1d 100644 (file)
@@ -22,7 +22,7 @@ MODULE_ALIAS("ipt_NFLOG");
 MODULE_ALIAS("ip6t_NFLOG");
 
 static unsigned int
-nflog_tg(struct sk_buff *skb, const struct xt_target_param *par)
+nflog_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_nflog_info *info = par->targinfo;
        struct nf_loginfo li;
index f9217cb56fe376349131f454c14aa5944e2cc2bb..039cce1bde3dc60ccdbb3e6857bb2685dc123079 100644 (file)
@@ -31,7 +31,7 @@ static u32 jhash_initval __read_mostly;
 static bool rnd_inited __read_mostly;
 
 static unsigned int
-nfqueue_tg(struct sk_buff *skb, const struct xt_target_param *par)
+nfqueue_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_NFQ_info *tinfo = par->targinfo;
 
@@ -65,7 +65,7 @@ static u32 hash_v6(const struct sk_buff *skb)
 #endif
 
 static unsigned int
-nfqueue_tg_v1(struct sk_buff *skb, const struct xt_target_param *par)
+nfqueue_tg_v1(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_NFQ_info_v1 *info = par->targinfo;
        u32 queue = info->queuenum;
index e7a0a54fd4eae42f268ee91262532e00fa84199b..512b9123252f0a0caa625a0a43cead965865864c 100644 (file)
@@ -13,7 +13,7 @@ MODULE_ALIAS("ipt_NOTRACK");
 MODULE_ALIAS("ip6t_NOTRACK");
 
 static unsigned int
-notrack_tg(struct sk_buff *skb, const struct xt_target_param *par)
+notrack_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        /* Previously seen (loopback)? Ignore. */
        if (skb->nfct != NULL)
index a02193f06e397978a8086f0a0d814c0c590b3dbc..69c01e10f8afe00ebcdefd1becdec4875fa84a06 100644 (file)
@@ -73,7 +73,7 @@ void xt_rateest_put(struct xt_rateest *est)
 EXPORT_SYMBOL_GPL(xt_rateest_put);
 
 static unsigned int
-xt_rateest_tg(struct sk_buff *skb, const struct xt_target_param *par)
+xt_rateest_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_rateest_target_info *info = par->targinfo;
        struct gnet_stats_basic_packed *stats = &info->est->bstats;
index a91d4a7d5a2c622f0a348cdb46066afa2fb55c6b..23b2d6c486b573927dcefd00b575546b35376bfa 100644 (file)
@@ -30,7 +30,7 @@ MODULE_ALIAS("ip6t_SECMARK");
 static u8 mode;
 
 static unsigned int
-secmark_tg(struct sk_buff *skb, const struct xt_target_param *par)
+secmark_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        u32 secmark = 0;
        const struct xt_secmark_target_info *info = par->targinfo;
index d04606459c9de093f4fbced5ef4801a6e8e0cb88..62ec021fbd50ddd278da5f9f53756587d83fb786 100644 (file)
@@ -172,7 +172,7 @@ static u_int32_t tcpmss_reverse_mtu(const struct sk_buff *skb,
 }
 
 static unsigned int
-tcpmss_tg4(struct sk_buff *skb, const struct xt_target_param *par)
+tcpmss_tg4(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct iphdr *iph = ip_hdr(skb);
        __be16 newlen;
@@ -195,7 +195,7 @@ tcpmss_tg4(struct sk_buff *skb, const struct xt_target_param *par)
 
 #if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE)
 static unsigned int
-tcpmss_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+tcpmss_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct ipv6hdr *ipv6h = ipv6_hdr(skb);
        u8 nexthdr;
index e8b57609ddc02c27097152e77b265f49a83a836f..9dc9ecfdd546298e4bc6dca11a20844367562416 100644 (file)
@@ -74,7 +74,7 @@ tcpoptstrip_mangle_packet(struct sk_buff *skb,
 }
 
 static unsigned int
-tcpoptstrip_tg4(struct sk_buff *skb, const struct xt_target_param *par)
+tcpoptstrip_tg4(struct sk_buff *skb, const struct xt_action_param *par)
 {
        return tcpoptstrip_mangle_packet(skb, par->targinfo, ip_hdrlen(skb),
               sizeof(struct iphdr) + sizeof(struct tcphdr));
@@ -82,7 +82,7 @@ tcpoptstrip_tg4(struct sk_buff *skb, const struct xt_target_param *par)
 
 #if defined(CONFIG_IP6_NF_MANGLE) || defined(CONFIG_IP6_NF_MANGLE_MODULE)
 static unsigned int
-tcpoptstrip_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+tcpoptstrip_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        struct ipv6hdr *ipv6h = ipv6_hdr(skb);
        int tcphoff;
index 49da6c05f4e0898c96cf5b91a170c9c2f7823560..d7920d9f49e904c96739e404c523ba97adbaa8dc 100644 (file)
@@ -84,7 +84,7 @@ tee_tg_route4(struct sk_buff *skb, const struct xt_tee_tginfo *info)
 }
 
 static unsigned int
-tee_tg4(struct sk_buff *skb, const struct xt_target_param *par)
+tee_tg4(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_tee_tginfo *info = par->targinfo;
        struct iphdr *iph;
@@ -165,7 +165,7 @@ tee_tg_route6(struct sk_buff *skb, const struct xt_tee_tginfo *info)
 }
 
 static unsigned int
-tee_tg6(struct sk_buff *skb, const struct xt_target_param *par)
+tee_tg6(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_tee_tginfo *info = par->targinfo;
 
index 4f246ddc5c481f5ccaf9545e55b87cc9d331c0ca..e1a0dedac2580b1aeb5fe1d52d6e5f60f082005b 100644 (file)
@@ -25,7 +25,7 @@
 #include <net/netfilter/nf_tproxy_core.h>
 
 static unsigned int
-tproxy_tg(struct sk_buff *skb, const struct xt_target_param *par)
+tproxy_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct iphdr *iph = ip_hdr(skb);
        const struct xt_tproxy_target_info *tgi = par->targinfo;
index fbb04b86c46b8c96b7d933d7bd11ff7bbd8b5fca..df48967af38210e766f2bb85568f4d5ddb67bbfa 100644 (file)
@@ -11,7 +11,7 @@ MODULE_ALIAS("ipt_TRACE");
 MODULE_ALIAS("ip6t_TRACE");
 
 static unsigned int
-trace_tg(struct sk_buff *skb, const struct xt_target_param *par)
+trace_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        skb->nf_trace = 1;
        return XT_CONTINUE;
index 6c941e1c6b9eb3ddf94034a525afcd54f922ff76..30b95a1c1c892da3018bbf9084e4fe3a8d59b4b1 100644 (file)
@@ -86,7 +86,7 @@ xt_cluster_is_multicast_addr(const struct sk_buff *skb, u_int8_t family)
 }
 
 static bool
-xt_cluster_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+xt_cluster_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct sk_buff *pskb = (struct sk_buff *)skb;
        const struct xt_cluster_match_info *info = par->matchinfo;
index e82179832acd252bd6595b940fb97388612cad0d..5c861d2f21ca6feb528355e209ab679fd749a638 100644 (file)
@@ -16,7 +16,7 @@ MODULE_ALIAS("ipt_comment");
 MODULE_ALIAS("ip6t_comment");
 
 static bool
-comment_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+comment_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        /* We always match */
        return true;
index ff738a5f963a72e4591468cfe5c9e9d5fc7844c1..73517835303d4fa68b2b34247d3907e2a7f4c3ca 100644 (file)
@@ -18,7 +18,7 @@ MODULE_ALIAS("ipt_connbytes");
 MODULE_ALIAS("ip6t_connbytes");
 
 static bool
-connbytes_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+connbytes_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_connbytes_info *sinfo = par->matchinfo;
        const struct nf_conn *ct;
index 326bc1b816810838caec49f3087b0af1ace385dc..5c5b6b921b845b2fe1ba438ef9c13a2161e5b0ea 100644 (file)
@@ -173,7 +173,7 @@ static int count_them(struct net *net,
 }
 
 static bool
-connlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+connlimit_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct net *net = dev_net(par->in ? par->in : par->out);
        const struct xt_connlimit_info *info = par->matchinfo;
@@ -206,14 +206,14 @@ connlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
 
        if (connections < 0) {
                /* kmalloc failed, drop it entirely */
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
        return (connections > info->limit) ^ info->inverse;
 
  hotdrop:
-       *par->hotdrop = true;
+       par->hotdrop = true;
        return false;
 }
 
index ae1015484ae2ed01a6cb1d5d6b0b471a893cf81c..7278145e6a68385c71b1d64efccc3aee71cb2412 100644 (file)
@@ -37,7 +37,7 @@ MODULE_ALIAS("ipt_connmark");
 MODULE_ALIAS("ip6t_connmark");
 
 static unsigned int
-connmark_tg(struct sk_buff *skb, const struct xt_target_param *par)
+connmark_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_connmark_tginfo1 *info = par->targinfo;
        enum ip_conntrack_info ctinfo;
@@ -91,7 +91,7 @@ static void connmark_tg_destroy(const struct xt_tgdtor_param *par)
 }
 
 static bool
-connmark_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+connmark_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_connmark_mtinfo1 *info = par->matchinfo;
        enum ip_conntrack_info ctinfo;
index 3348706ce56d306bc12cc11e0866567dc47a8d57..39681f10291c13a8a72efbfebad857ca10a7d750 100644 (file)
@@ -113,7 +113,7 @@ ct_proto_port_check(const struct xt_conntrack_mtinfo2 *info,
 }
 
 static bool
-conntrack_mt(const struct sk_buff *skb, const struct xt_match_param *par,
+conntrack_mt(const struct sk_buff *skb, struct xt_action_param *par,
              u16 state_mask, u16 status_mask)
 {
        const struct xt_conntrack_mtinfo2 *info = par->matchinfo;
@@ -191,7 +191,7 @@ conntrack_mt(const struct sk_buff *skb, const struct xt_match_param *par,
 }
 
 static bool
-conntrack_mt_v1(const struct sk_buff *skb, const struct xt_match_param *par)
+conntrack_mt_v1(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_conntrack_mtinfo1 *info = par->matchinfo;
 
@@ -199,7 +199,7 @@ conntrack_mt_v1(const struct sk_buff *skb, const struct xt_match_param *par)
 }
 
 static bool
-conntrack_mt_v2(const struct sk_buff *skb, const struct xt_match_param *par)
+conntrack_mt_v2(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_conntrack_mtinfo2 *info = par->matchinfo;
 
index 0d260aec487feb0806cc61a14c960cde9aefdb0a..b63d2a3d80ba5f6a601b23a031f7a4889978dd01 100644 (file)
@@ -96,7 +96,7 @@ match_option(u_int8_t option, const struct sk_buff *skb, unsigned int protoff,
 }
 
 static bool
-dccp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+dccp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_dccp_info *info = par->matchinfo;
        const struct dccp_hdr *dh;
@@ -107,7 +107,7 @@ dccp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
 
        dh = skb_header_pointer(skb, par->thoff, sizeof(_dh), &_dh);
        if (dh == NULL) {
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
@@ -120,7 +120,7 @@ dccp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                && DCCHECK(match_types(dh, info->typemask),
                           XT_DCCP_TYPE, info->flags, info->invflags)
                && DCCHECK(match_option(info->option, skb, par->thoff, dh,
-                                       par->hotdrop),
+                                       &par->hotdrop),
                           XT_DCCP_OPTION, info->flags, info->invflags);
 }
 
index 9db51fddbdb82fc24080eb2591375eadbd94c0be..64670fc5d0e1a581f4e3b3885d8117c7a70b0edb 100644 (file)
@@ -25,7 +25,7 @@ MODULE_ALIAS("ipt_tos");
 MODULE_ALIAS("ip6t_tos");
 
 static bool
-dscp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+dscp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_dscp_info *info = par->matchinfo;
        u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
@@ -34,7 +34,7 @@ dscp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
 }
 
 static bool
-dscp_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+dscp_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_dscp_info *info = par->matchinfo;
        u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
@@ -54,7 +54,7 @@ static int dscp_mt_check(const struct xt_mtchk_param *par)
        return 0;
 }
 
-static bool tos_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool tos_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_tos_match_info *info = par->matchinfo;
 
index 143bfdc8e38f8ed563d3025d85d94043fb2f8d13..171ba82b5902095202d72705fd0ec00906e241b8 100644 (file)
@@ -36,7 +36,7 @@ spi_match(u_int32_t min, u_int32_t max, u_int32_t spi, bool invert)
        return r;
 }
 
-static bool esp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool esp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ip_esp_hdr *eh;
        struct ip_esp_hdr _esp;
@@ -52,7 +52,7 @@ static bool esp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                 * can't.  Hence, no choice but to drop.
                 */
                pr_debug("Dropping evil ESP tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index 0c366d387c8cb25d47a2d2355a2ddd1951ed7bf5..b46a8390896d012dc4524e220a14d817d378dfd7 100644 (file)
@@ -516,7 +516,7 @@ hashlimit_init_dst(const struct xt_hashlimit_htable *hinfo,
 }
 
 static bool
-hashlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+hashlimit_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_hashlimit_mtinfo1 *info = par->matchinfo;
        struct xt_hashlimit_htable *hinfo = info->hinfo;
@@ -562,7 +562,7 @@ hashlimit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
        return info->cfg.mode & XT_HASHLIMIT_INVERT;
 
  hotdrop:
-       *par->hotdrop = true;
+       par->hotdrop = true;
        return false;
 }
 
index b8b3e13dc71ea86ab1d48f49bc3a2d8ae0f29133..9f4ab00c80500635e8015b2384d25dea98641c56 100644 (file)
@@ -24,7 +24,7 @@ MODULE_ALIAS("ip6t_helper");
 
 
 static bool
-helper_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+helper_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_helper_info *info = par->matchinfo;
        const struct nf_conn *ct;
index be53f729962316a8a871e6ca5512f29f8eb85e67..7d12221ead8966136fc84b5a8ddce158a212258b 100644 (file)
@@ -25,7 +25,7 @@ MODULE_LICENSE("GPL");
 MODULE_ALIAS("ipt_ttl");
 MODULE_ALIAS("ip6t_hl");
 
-static bool ttl_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool ttl_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ipt_ttl_info *info = par->matchinfo;
        const u8 ttl = ip_hdr(skb)->ttl;
@@ -44,7 +44,7 @@ static bool ttl_mt(const struct sk_buff *skb, const struct xt_match_param *par)
        return false;
 }
 
-static bool hl_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool hl_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct ip6t_hl_info *info = par->matchinfo;
        const struct ipv6hdr *ip6h = ipv6_hdr(skb);
index 8471d9715bde71479478aa23388d801c7026be94..88f7c3511c72c2554de292e97c844cc934367c9e 100644 (file)
@@ -17,7 +17,7 @@
 #include <linux/netfilter/xt_iprange.h>
 
 static bool
-iprange_mt4(const struct sk_buff *skb, const struct xt_match_param *par)
+iprange_mt4(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_iprange_mtinfo *info = par->matchinfo;
        const struct iphdr *iph = ip_hdr(skb);
@@ -68,7 +68,7 @@ iprange_ipv6_sub(const struct in6_addr *a, const struct in6_addr *b)
 }
 
 static bool
-iprange_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+iprange_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_iprange_mtinfo *info = par->matchinfo;
        const struct ipv6hdr *iph = ipv6_hdr(skb);
index c4871ca6c86da8874545fe9b517b33511ee80450..176e5570a9991727c8613de3bd8fe3341a852501 100644 (file)
@@ -21,7 +21,7 @@ MODULE_ALIAS("ipt_length");
 MODULE_ALIAS("ip6t_length");
 
 static bool
-length_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+length_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_length_info *info = par->matchinfo;
        u_int16_t pktlen = ntohs(ip_hdr(skb)->tot_len);
@@ -30,7 +30,7 @@ length_mt(const struct sk_buff *skb, const struct xt_match_param *par)
 }
 
 static bool
-length_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+length_mt6(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_length_info *info = par->matchinfo;
        const u_int16_t pktlen = ntohs(ipv6_hdr(skb)->payload_len) +
index 88215dca19cbd91b8895c4553f90aedbbbf7ad9e..32b7a579a032cde09c831f47c5ee8eae83adbd41 100644 (file)
@@ -65,7 +65,7 @@ static DEFINE_SPINLOCK(limit_lock);
 #define CREDITS_PER_JIFFY POW2_BELOW32(MAX_CPJ)
 
 static bool
-limit_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+limit_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_rateinfo *r = par->matchinfo;
        struct xt_limit_priv *priv = r->master;
index b971ce93773e6648890bf23dacd995c52ec9b7e2..8160f6b1435d699371af378f3a5c90c2530161b5 100644 (file)
@@ -25,7 +25,7 @@ MODULE_DESCRIPTION("Xtables: MAC address match");
 MODULE_ALIAS("ipt_mac");
 MODULE_ALIAS("ip6t_mac");
 
-static bool mac_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool mac_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_mac_info *info = par->matchinfo;
        bool ret;
index 035c468a00409a574f00f4974a82eb5c47a8a6af..23345238711b515805a63687b774cdb4b6d788f4 100644 (file)
@@ -25,7 +25,7 @@ MODULE_ALIAS("ipt_MARK");
 MODULE_ALIAS("ip6t_MARK");
 
 static unsigned int
-mark_tg(struct sk_buff *skb, const struct xt_target_param *par)
+mark_tg(struct sk_buff *skb, const struct xt_action_param *par)
 {
        const struct xt_mark_tginfo2 *info = par->targinfo;
 
@@ -34,7 +34,7 @@ mark_tg(struct sk_buff *skb, const struct xt_target_param *par)
 }
 
 static bool
-mark_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+mark_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_mark_mtinfo1 *info = par->matchinfo;
 
index 83b77ceb264f1d0747f13262beb375437606eac3..ac1d3c3d09e72dbbfbf49f4dcdad6fc7600dcded 100644 (file)
@@ -72,7 +72,7 @@ ports_match_v1(const struct xt_multiport_v1 *minfo,
 }
 
 static bool
-multiport_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+multiport_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const __be16 *pptr;
        __be16 _ports[2];
@@ -87,7 +87,7 @@ multiport_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                 * can't.  Hence, no choice but to drop.
                 */
                pr_debug("Dropping evil offset=0 tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
@@ -117,7 +117,7 @@ static int multiport_mt_check(const struct xt_mtchk_param *par)
        const struct xt_multiport_v1 *multiinfo = par->matchinfo;
 
        return check(ip->proto, ip->invflags, multiinfo->flags,
-                    multiinfo->count);
+                    multiinfo->count) ? 0 : -EINVAL;
 }
 
 static int multiport_mt6_check(const struct xt_mtchk_param *par)
@@ -126,7 +126,7 @@ static int multiport_mt6_check(const struct xt_mtchk_param *par)
        const struct xt_multiport_v1 *multiinfo = par->matchinfo;
 
        return check(ip->proto, ip->invflags, multiinfo->flags,
-                    multiinfo->count);
+                    multiinfo->count) ? 0 : -EINVAL;
 }
 
 static struct xt_match multiport_mt_reg[] __read_mostly = {
index 8dcde13a0781439b7458fdc8a3c7eb07146f9054..4327e101c047ff1f9c1469a1cfa1dc544dbda5b8 100644 (file)
@@ -193,8 +193,8 @@ static inline int xt_osf_ttl(const struct sk_buff *skb, const struct xt_osf_info
        return ip->ttl == f_ttl;
 }
 
-static bool xt_osf_match_packet(const struct sk_buff *skb,
-               const struct xt_match_param *p)
+static bool
+xt_osf_match_packet(const struct sk_buff *skb, struct xt_action_param *p)
 {
        const struct xt_osf_info *info = p->matchinfo;
        const struct iphdr *ip = ip_hdr(skb);
index d24c76dffee298a01a11126fe0fad2bb54301712..772d7389b3376d623c9ab3a6ce71883619e356e1 100644 (file)
@@ -18,7 +18,7 @@
 #include <linux/netfilter/xt_owner.h>
 
 static bool
-owner_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+owner_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_owner_match_info *info = par->matchinfo;
        const struct file *filp;
index d0bdf3dd4d2575ad452caa3ffbff23bc04174692..d7ca16b8b8dfbcd8dec7c7ab67f9d6e5c3f957d9 100644 (file)
@@ -22,7 +22,7 @@ MODULE_ALIAS("ip6t_physdev");
 
 
 static bool
-physdev_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+physdev_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
        const struct xt_physdev_info *info = par->matchinfo;
index 69da1d3a1d85974a66c13c060078aa205a610963..5b645cb598fc261d52d8b44c6acc63ac8d388dea 100644 (file)
@@ -23,7 +23,7 @@ MODULE_ALIAS("ipt_pkttype");
 MODULE_ALIAS("ip6t_pkttype");
 
 static bool
-pkttype_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+pkttype_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_pkttype_info *info = par->matchinfo;
        u_int8_t type;
index 1fa239c1fb93c9d11601f01b66d7ad3f128cbc85..f23e97bb42d7c0f860cdf15258e530a11bb54bef 100644 (file)
@@ -110,7 +110,7 @@ match_policy_out(const struct sk_buff *skb, const struct xt_policy_info *info,
 }
 
 static bool
-policy_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+policy_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_policy_info *info = par->matchinfo;
        int ret;
index 7c95d69f6f066129331a5917cc61148d091cc4e0..b4f7dfea59805f3c705859163bfcf57fcb6b4da8 100644 (file)
@@ -23,7 +23,7 @@ MODULE_ALIAS("ip6t_quota");
 static DEFINE_SPINLOCK(quota_lock);
 
 static bool
-quota_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+quota_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct xt_quota_info *q = (void *)par->matchinfo;
        struct xt_quota_priv *priv = q->master;
index 23805f8a444bc005662c80d9bb5e34c4baf60f2c..76a083184d8e6991b0e49e4fb77db3e78d47488b 100644 (file)
@@ -15,7 +15,7 @@
 
 
 static bool
-xt_rateest_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+xt_rateest_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_rateest_match_info *info = par->matchinfo;
        struct gnet_stats_rate_est *r;
index 484d1689bfde167d43474b3eeb35947b073e026c..459a7b256eb2592c31d6150be137e08ed3f18079 100644 (file)
@@ -22,7 +22,7 @@ MODULE_DESCRIPTION("Xtables: Routing realm match");
 MODULE_ALIAS("ipt_realm");
 
 static bool
-realm_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+realm_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_realm_info *info = par->matchinfo;
        const struct dst_entry *dst = skb_dst(skb);
index b88d63b9c76ac13598b1efdbbd55ddcb6d4346ef..76aec6a44762df7de9a371ea61bab9925c933be8 100644 (file)
@@ -224,7 +224,7 @@ static void recent_table_flush(struct recent_table *t)
 }
 
 static bool
-recent_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+recent_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        struct net *net = dev_net(par->in ? par->in : par->out);
        struct recent_net *recent_net = recent_pernet(net);
@@ -268,7 +268,7 @@ recent_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                        goto out;
                e = recent_entry_init(t, &addr, par->family, ttl);
                if (e == NULL)
-                       *par->hotdrop = true;
+                       par->hotdrop = true;
                ret = !ret;
                goto out;
        }
index c3694df5467273e29ab9891c7539a8116896a5b9..c04fcf385c591875ec45f2f50812b9c564657869 100644 (file)
@@ -114,7 +114,7 @@ match_packet(const struct sk_buff *skb,
 }
 
 static bool
-sctp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+sctp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_sctp_info *info = par->matchinfo;
        const sctp_sctphdr_t *sh;
@@ -128,7 +128,7 @@ sctp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
        sh = skb_header_pointer(skb, par->thoff, sizeof(_sh), &_sh);
        if (sh == NULL) {
                pr_debug("Dropping evil TCP offset=0 tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
        pr_debug("spt: %d\tdpt: %d\n", ntohs(sh->source), ntohs(sh->dest));
@@ -140,7 +140,7 @@ sctp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                        && ntohs(sh->dest) <= info->dpts[1],
                        XT_SCTP_DEST_PORTS, info->flags, info->invflags)
                && SCCHECK(match_packet(skb, par->thoff + sizeof(sctp_sctphdr_t),
-                                       info, par->hotdrop),
+                                       info, &par->hotdrop),
                           XT_SCTP_CHUNK_TYPES, info->flags, info->invflags);
 }
 
index a9b16867e1f7b67f4a3624ec79f7334aa70894c2..3d54c236a1ba0643ba0077eee8caf4f93078155f 100644 (file)
@@ -88,7 +88,7 @@ extract_icmp_fields(const struct sk_buff *skb,
 
 
 static bool
-socket_match(const struct sk_buff *skb, const struct xt_match_param *par,
+socket_match(const struct sk_buff *skb, struct xt_action_param *par,
             const struct xt_socket_mtinfo1 *info)
 {
        const struct iphdr *iph = ip_hdr(skb);
@@ -174,13 +174,13 @@ socket_match(const struct sk_buff *skb, const struct xt_match_param *par,
 }
 
 static bool
-socket_mt_v0(const struct sk_buff *skb, const struct xt_match_param *par)
+socket_mt_v0(const struct sk_buff *skb, struct xt_action_param *par)
 {
        return socket_match(skb, par, NULL);
 }
 
 static bool
-socket_mt_v1(const struct sk_buff *skb, const struct xt_match_param *par)
+socket_mt_v1(const struct sk_buff *skb, struct xt_action_param *par)
 {
        return socket_match(skb, par, par->matchinfo);
 }
index bb1271852d50a37aa6c1826d202ccd0bc306f550..e12e053d3782ba8f9252a5b5b8a2d3085b2345c3 100644 (file)
@@ -21,7 +21,7 @@ MODULE_ALIAS("ipt_state");
 MODULE_ALIAS("ip6t_state");
 
 static bool
-state_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+state_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_state_info *sinfo = par->matchinfo;
        enum ip_conntrack_info ctinfo;
index 5aeca1d023d85c1d287538f828daef0f80454afc..96e62b8fd6b10d063f7bdc4cc2ee0ba28ed9991a 100644 (file)
@@ -30,7 +30,7 @@ MODULE_ALIAS("ip6t_statistic");
 static DEFINE_SPINLOCK(nth_lock);
 
 static bool
-statistic_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+statistic_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_statistic_info *info = par->matchinfo;
        bool ret = info->flags & XT_STATISTIC_INVERT;
index f6d5112175e6b945820e1564c854854847fe0dc7..d3c48b14ab94c09d74f0c74e62b94ed5fcb58af7 100644 (file)
@@ -23,7 +23,7 @@ MODULE_ALIAS("ipt_string");
 MODULE_ALIAS("ip6t_string");
 
 static bool
-string_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+string_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_string_info *conf = par->matchinfo;
        struct ts_state state;
index 4809b34b10f823f6f8fb62b6ed7f9e9335400dce..c53d4d18eadf7176754dbcd6e99cea8f12639786 100644 (file)
@@ -25,7 +25,7 @@ MODULE_ALIAS("ipt_tcpmss");
 MODULE_ALIAS("ip6t_tcpmss");
 
 static bool
-tcpmss_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+tcpmss_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_tcpmss_match_info *info = par->matchinfo;
        const struct tcphdr *th;
@@ -73,7 +73,7 @@ out:
        return info->invert;
 
 dropit:
-       *par->hotdrop = true;
+       par->hotdrop = true;
        return false;
 }
 
index efa2ede24ae6120487b453ca6898fd7b7d70be6b..c14d4645daa3525d3ce45548344e4973763cd599 100644 (file)
@@ -62,7 +62,7 @@ tcp_find_option(u_int8_t option,
        return invert;
 }
 
-static bool tcp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool tcp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct tcphdr *th;
        struct tcphdr _tcph;
@@ -77,7 +77,7 @@ static bool tcp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                */
                if (par->fragoff == 1) {
                        pr_debug("Dropping evil TCP offset=1 frag.\n");
-                       *par->hotdrop = true;
+                       par->hotdrop = true;
                }
                /* Must not be a fragment. */
                return false;
@@ -90,7 +90,7 @@ static bool tcp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                /* We've been asked to examine this packet, and we
                   can't.  Hence, no choice but to drop. */
                pr_debug("Dropping evil TCP offset=0 tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
@@ -108,13 +108,13 @@ static bool tcp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                return false;
        if (tcpinfo->option) {
                if (th->doff * 4 < sizeof(_tcph)) {
-                       *par->hotdrop = true;
+                       par->hotdrop = true;
                        return false;
                }
                if (!tcp_find_option(tcpinfo->option, skb, par->thoff,
                                     th->doff*4 - sizeof(_tcph),
                                     tcpinfo->invflags & XT_TCP_INV_OPTION,
-                                    par->hotdrop))
+                                    &par->hotdrop))
                        return false;
        }
        return true;
@@ -128,7 +128,7 @@ static int tcp_mt_check(const struct xt_mtchk_param *par)
        return (tcpinfo->invflags & ~XT_TCP_INV_MASK) ? -EINVAL : 0;
 }
 
-static bool udp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool udp_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct udphdr *uh;
        struct udphdr _udph;
@@ -143,7 +143,7 @@ static bool udp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
                /* We've been asked to examine this packet, and we
                   can't.  Hence, no choice but to drop. */
                pr_debug("Dropping evil UDP tinygram.\n");
-               *par->hotdrop = true;
+               par->hotdrop = true;
                return false;
        }
 
index d8556fdda440258ba0587ca5d4909441a1799e1f..79234bb19d05fc56a2fed75f7fa64f1f755c60d6 100644 (file)
@@ -152,7 +152,7 @@ static void localtime_3(struct xtm *r, time_t time)
 }
 
 static bool
-time_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+time_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_time_info *info = par->matchinfo;
        unsigned int packet_time;
index d7c05f03a7e76018a7f7adb6800284d929497fb7..a95b50342dbb1d1f1a43663e46104e031f4f295a 100644 (file)
@@ -86,7 +86,7 @@ static bool u32_match_it(const struct xt_u32 *data,
        return true;
 }
 
-static bool u32_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+static bool u32_mt(const struct sk_buff *skb, struct xt_action_param *par)
 {
        const struct xt_u32 *data = par->matchinfo;
        bool ret;
index 03f80a0fa1676eda92f1db3d0e2c9a579765a495..1f9595467c17ed02f26981c390aa59400428efdd 100644 (file)
@@ -199,7 +199,7 @@ static int tcf_ipt(struct sk_buff *skb, struct tc_action *a,
 {
        int ret = 0, result = 0;
        struct tcf_ipt *ipt = a->priv;
-       struct xt_target_param par;
+       struct xt_action_param par;
 
        if (skb_cloned(skb)) {
                if (pskb_expand_head(skb, 0, 0, GFP_ATOMIC))