const struct net_device *in,
                               const struct net_device *out,
                               unsigned int hooknum,
+                              const struct xt_target *target,
                               const void *targinfo,
                               void *userinfo)
 {
 
 MODULE_DESCRIPTION("arptables arp payload mangle target");
 
 static unsigned int
-target(struct sk_buff **pskb, const struct net_device *in,
-   const struct net_device *out, unsigned int hooknum, const void *targinfo,
-   void *userinfo)
+target(struct sk_buff **pskb,
+       const struct net_device *in, const struct net_device *out,
+       unsigned int hooknum, const struct xt_target *target,
+       const void *targinfo, void *userinfo)
 {
        const struct arpt_mangle *mangle = targinfo;
        struct arphdr *arp;
 }
 
 static int
-checkentry(const char *tablename, const void *e, void *targinfo,
-   unsigned int targinfosize, unsigned int hook_mask)
+checkentry(const char *tablename, const void *e, const struct xt_target *target,
+           void *targinfo, unsigned int targinfosize, unsigned int hook_mask)
 {
        const struct arpt_mangle *mangle = targinfo;
 
 
                                    const struct net_device *in,
                                    const struct net_device *out,
                                    unsigned int hooknum,
+                                   const struct ipt_target *target,
                                    const void *targinfo,
                                    void *userinfo)
 {
                                    const struct net_device *in,
                                    const struct net_device *out,
                                    unsigned int hooknum,
+                                   const struct ipt_target *target,
                                    const void *targinfo,
                                    void *userinfo)
 {
 
 static int ipt_snat_checkentry(const char *tablename,
                               const void *entry,
+                              const struct ipt_target *target,
                               void *targinfo,
                               unsigned int targinfosize,
                               unsigned int hook_mask)
 
 static int ipt_dnat_checkentry(const char *tablename,
                               const void *entry,
+                              const struct ipt_target *target,
                               void *targinfo,
                               unsigned int targinfosize,
                               unsigned int hook_mask)
 
          const struct net_device *in,
          const struct net_device *out,
          unsigned int hooknum,
+         const struct xt_target *target,
          const void *targinfo,
          void *userinfo)
 {
 icmp_match(const struct sk_buff *skb,
           const struct net_device *in,
           const struct net_device *out,
+          const struct xt_match *match,
           const void *matchinfo,
           int offset,
           unsigned int protoff,
 static int
 icmp_checkentry(const char *tablename,
           const void *info,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchsize,
           unsigned int hook_mask)
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 static int
 checkentry(const char *tablename,
           const void *e_void,
+          const struct xt_target *target,
            void *targinfo,
            unsigned int targinfosize,
            unsigned int hook_mask)
 }
 
 /* drop reference count of cluster config when rule is deleted */
-static void destroy(void *matchinfo, unsigned int matchinfosize)
+static void destroy(const struct xt_target *target, void *targinfo,
+                   unsigned int targinfosize)
 {
-       struct ipt_clusterip_tgt_info *cipinfo = matchinfo;
+       struct ipt_clusterip_tgt_info *cipinfo = targinfo;
 
        /* if no more entries are referencing the config, remove it
         * from the list and destroy the proc entry */
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 static int
 checkentry(const char *tablename,
           const void *e_void,
+          const struct xt_target *target,
            void *targinfo,
            unsigned int targinfosize,
            unsigned int hook_mask)
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 static int
 checkentry(const char *tablename,
           const void *e_void,
+          const struct xt_target *target,
            void *targinfo,
            unsigned int targinfosize,
            unsigned int hook_mask)
 
               const struct net_device *in,
               const struct net_device *out,
               unsigned int hooknum,
+              const struct xt_target *target,
               const void *targinfo,
               void *userinfo)
 {
 
 static int ipt_log_checkentry(const char *tablename,
                              const void *e,
+                             const struct xt_target *target,
                              void *targinfo,
                              unsigned int targinfosize,
                              unsigned int hook_mask)
 
 static int
 masquerade_check(const char *tablename,
                 const void *e,
+                const struct xt_target *target,
                 void *targinfo,
                 unsigned int targinfosize,
                 unsigned int hook_mask)
                  const struct net_device *in,
                  const struct net_device *out,
                  unsigned int hooknum,
+                 const struct xt_target *target,
                  const void *targinfo,
                  void *userinfo)
 {
 
 static int
 check(const char *tablename,
       const void *e,
+      const struct xt_target *target,
       void *targinfo,
       unsigned int targinfosize,
       unsigned int hook_mask)
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 
 static int
 redirect_check(const char *tablename,
               const void *e,
+              const struct xt_target *target,
               void *targinfo,
               unsigned int targinfosize,
               unsigned int hook_mask)
                const struct net_device *in,
                const struct net_device *out,
                unsigned int hooknum,
+               const struct xt_target *target,
                const void *targinfo,
                void *userinfo)
 {
 
                           const struct net_device *in,
                           const struct net_device *out,
                           unsigned int hooknum,
+                          const struct xt_target *target,
                           const void *targinfo,
                           void *userinfo)
 {
 
 static int check(const char *tablename,
                 const void *e_void,
+                const struct xt_target *target,
                 void *targinfo,
                 unsigned int targinfosize,
                 unsigned int hook_mask)
 
 static int
 same_check(const char *tablename,
              const void *e,
+             const struct xt_target *target,
              void *targinfo,
              unsigned int targinfosize,
              unsigned int hook_mask)
 }
 
 static void 
-same_destroy(void *targinfo,
+same_destroy(const struct xt_target *target, void *targinfo,
                unsigned int targinfosize)
 {
        struct ipt_same_info *mr = targinfo;
                const struct net_device *in,
                const struct net_device *out,
                unsigned int hooknum,
+               const struct xt_target *target,
                const void *targinfo,
                void *userinfo)
 {
 
                  const struct net_device *in,
                  const struct net_device *out,
                  unsigned int hooknum,
+                 const struct xt_target *target,
                  const void *targinfo,
                  void *userinfo)
 {
 static int
 ipt_tcpmss_checkentry(const char *tablename,
                      const void *e_void,
+                     const struct xt_target *target,
                      void *targinfo,
                      unsigned int targinfosize,
                      unsigned int hook_mask)
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 static int
 checkentry(const char *tablename,
           const void *e_void,
+          const struct xt_target *target,
            void *targinfo,
            unsigned int targinfosize,
            unsigned int hook_mask)
 
 MODULE_LICENSE("GPL");
 
 static unsigned int 
-ipt_ttl_target(struct sk_buff **pskb, const struct net_device *in, 
-               const struct net_device *out, unsigned int hooknum, 
-               const void *targinfo, void *userinfo)
+ipt_ttl_target(struct sk_buff **pskb,
+              const struct net_device *in, const struct net_device *out,
+              unsigned int hooknum, const struct xt_target *target,
+              const void *targinfo, void *userinfo)
 {
        struct iphdr *iph;
        const struct ipt_TTL_info *info = targinfo;
 
 static int ipt_ttl_checkentry(const char *tablename,
                const void *e,
+               const struct xt_target *target,
                void *targinfo,
                unsigned int targinfosize,
                unsigned int hook_mask)
 
                                    const struct net_device *in,
                                    const struct net_device *out,
                                    unsigned int hooknum,
+                                   const struct xt_target *target,
                                    const void *targinfo, void *userinfo)
 {
        struct ipt_ulog_info *loginfo = (struct ipt_ulog_info *) targinfo;
 
 static int ipt_ulog_checkentry(const char *tablename,
                               const void *e,
+                              const struct xt_target *target,
                               void *targinfo,
                               unsigned int targinfosize,
                               unsigned int hookmask)
 
        return !!(mask & (1 << inet_addr_type(addr)));
 }
 
-static int match(const struct sk_buff *skb, const struct net_device *in,
-                const struct net_device *out, const void *matchinfo,
+static int match(const struct sk_buff *skb,
+                const struct net_device *in, const struct net_device *out,
+                const struct xt_match *match, const void *matchinfo,
                 int offset, unsigned int protoff, int *hotdrop)
 {
        const struct ipt_addrtype_info *info = matchinfo;
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *ip_void,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
 MODULE_DESCRIPTION("iptables DSCP matching module");
 MODULE_LICENSE("GPL");
 
-static int match(const struct sk_buff *skb, const struct net_device *in,
-                const struct net_device *out, const void *matchinfo,
+static int match(const struct sk_buff *skb,
+                const struct net_device *in, const struct net_device *out,
+                const struct xt_match *match, const void *matchinfo,
                 int offset, unsigned int protoff, int *hotdrop)
 {
        const struct ipt_dscp_info *info = matchinfo;
 
        return 1;
 }
 
-static int match(const struct sk_buff *skb, const struct net_device *in,
-                const struct net_device *out, const void *matchinfo,
+static int match(const struct sk_buff *skb,
+                const struct net_device *in, const struct net_device *out,
+                const struct xt_match *match, const void *matchinfo,
                 int offset, unsigned int protoff, int *hotdrop)
 {
        const struct ipt_ecn_info *info = matchinfo;
 }
 
 static int checkentry(const char *tablename, const void *ip_void,
+                     const struct xt_match *match,
                      void *matchinfo, unsigned int matchsize,
                      unsigned int hook_mask)
 {
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *ip_void,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
 hashlimit_match(const struct sk_buff *skb,
                const struct net_device *in,
                const struct net_device *out,
+               const struct xt_match *match,
                const void *matchinfo,
                int offset,
                unsigned int protoff,
 static int
 hashlimit_checkentry(const char *tablename,
                     const void *inf,
+                    const struct xt_match *match,
                     void *matchinfo,
                     unsigned int matchsize,
                     unsigned int hook_mask)
 }
 
 static void
-hashlimit_destroy(void *matchinfo, unsigned int matchsize)
+hashlimit_destroy(const struct xt_match *match, void *matchinfo,
+                 unsigned int matchsize)
 {
        struct ipt_hashlimit_info *r = (struct ipt_hashlimit_info *) matchinfo;
 
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset, unsigned int protoff, int *hotdrop)
 {
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 match_v1(const struct sk_buff *skb,
         const struct net_device *in,
         const struct net_device *out,
+        const struct xt_match *match,
         const void *matchinfo,
         int offset,
         unsigned int protoff,
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
            const void *ip,
+          const struct xt_match *match,
            void *matchinfo,
            unsigned int matchsize,
            unsigned int hook_mask)
 
 static int match(const struct sk_buff *skb,
                  const struct net_device *in,
                  const struct net_device *out,
+                const struct xt_match *match,
                  const void *matchinfo,
                  int offset,
                  unsigned int protoff,
 }
 
 static int checkentry(const char *tablename, const void *ip_void,
+                     const struct xt_match *match,
                       void *matchinfo, unsigned int matchsize,
                       unsigned int hook_mask)
 {
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
        skb->nh.iph->daddr = 0;
        /* Clear ttl since we have no way of knowing it */
        skb->nh.iph->ttl = 0;
-       match(skb,NULL,NULL,info,0,0,NULL);
+       match(skb,NULL,NULL,NULL,info,0,0,NULL);
 
        kfree(skb->nh.iph);
 out_free_skb:
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
            const void *ip,
+          const struct xt_match *match,
            void *matchinfo,
            unsigned int matchsize,
            unsigned int hook_mask)
  * up its memory.
  */
 static void
-destroy(void *matchinfo, unsigned int matchsize)
+destroy(const struct xt_match *match, void *matchinfo, unsigned int matchsize)
 {
        const struct ipt_recent_info *info = matchinfo;
        struct recent_ip_tables *curr_table, *last_table;
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 MODULE_DESCRIPTION("IP tables TTL matching module");
 MODULE_LICENSE("GPL");
 
-static int match(const struct sk_buff *skb, const struct net_device *in,
-                const struct net_device *out, const void *matchinfo,
+static int match(const struct sk_buff *skb,
+                const struct net_device *in, const struct net_device *out,
+                const struct xt_match *match, const void *matchinfo,
                 int offset, unsigned int protoff, int *hotdrop)
 {
        const struct ipt_ttl_info *info = matchinfo;
 
          const struct net_device *in,
          const struct net_device *out,
          unsigned int hooknum,
+         const struct xt_target *target,
          const void *targinfo,
          void *userinfo)
 {
 icmp6_match(const struct sk_buff *skb,
           const struct net_device *in,
           const struct net_device *out,
+          const struct xt_match *match,
           const void *matchinfo,
           int offset,
           unsigned int protoff,
 static int
 icmp6_checkentry(const char *tablename,
           const void *entry,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchsize,
           unsigned int hook_mask)
 
                                   const struct net_device *in,
                                   const struct net_device *out,
                                   unsigned int hooknum,
+                                  const struct xt_target *target,
                                   const void *targinfo, void *userinfo)
 {
        struct ipv6hdr *ip6h;
 
 static int ip6t_hl_checkentry(const char *tablename,
                const void *entry,
+               const struct xt_target *target,
                void *targinfo,
                unsigned int targinfosize,
                unsigned int hook_mask)
 
                const struct net_device *in,
                const struct net_device *out,
                unsigned int hooknum,
+               const struct xt_target *target,
                const void *targinfo,
                void *userinfo)
 {
 
 static int ip6t_log_checkentry(const char *tablename,
                               const void *entry,
+                              const struct xt_target *target,
                               void *targinfo,
                               unsigned int targinfosize,
                               unsigned int hook_mask)
 
                           const struct net_device *in,
                           const struct net_device *out,
                           unsigned int hooknum,
+                          const struct xt_target *target,
                           const void *targinfo,
                           void *userinfo)
 {
 
 static int check(const char *tablename,
                 const void *entry,
+                const struct xt_target *target,
                 void *targinfo,
                 unsigned int targinfosize,
                 unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *entry,
+         const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *info,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *ip,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *ip,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *entry,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
 MODULE_DESCRIPTION("IP tables Hop Limit matching module");
 MODULE_LICENSE("GPL");
 
-static int match(const struct sk_buff *skb, const struct net_device *in,
-                const struct net_device *out, const void *matchinfo,
-                int offset, unsigned int protoff,
-                int *hotdrop)
+static int match(const struct sk_buff *skb,
+                const struct net_device *in, const struct net_device *out,
+                const struct xt_match *match, const void *matchinfo,
+                int offset, unsigned int protoff, int *hotdrop)
 {
        const struct ip6t_hl_info *info = matchinfo;
        const struct ipv6hdr *ip6h = skb->nh.ipv6h;
 
 ipv6header_match(const struct sk_buff *skb,
                 const struct net_device *in,
                 const struct net_device *out,
+                const struct xt_match *match,
                 const void *matchinfo,
                 int offset,
                 unsigned int protoff,
 static int
 ipv6header_checkentry(const char *tablename,
                      const void *ip,
+                     const struct xt_match *match,
                      void *matchinfo,
                      unsigned int matchsize,
                      unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *info,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchsize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *ip,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchsize,
           unsigned int hook_mask)
 
 static int match(const struct sk_buff *skb,
                  const struct net_device *in,
                  const struct net_device *out,
+                const struct xt_match *match,
                  const void *matchinfo,
                 int offset,
                 unsigned int protoff,
 }
 
 static int checkentry(const char *tablename, const void *ip_void,
-                      void *matchinfo, unsigned int matchsize,
-                      unsigned int hook_mask)
+                      const struct xt_match *match, void *matchinfo,
+                     unsigned int matchsize, unsigned int hook_mask)
 {
        struct ip6t_policy_info *info = matchinfo;
 
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *entry,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchinfosize,
           unsigned int hook_mask)
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 static int
 checkentry(const char *tablename,
           const void *entry,
+          const struct xt_target *target,
           void *targinfo,
           unsigned int targinfosize,
           unsigned int hook_mask)
 
          const struct net_device *in,
          const struct net_device *out,
          unsigned int hooknum,
+         const struct xt_target *target,
          const void *targinfo,
          void *userinfo)
 {
          const struct net_device *in,
          const struct net_device *out,
          unsigned int hooknum,
+         const struct xt_target *target,
          const void *targinfo,
          void *userinfo)
 {
 static int
 checkentry_v0(const char *tablename,
              const void *entry,
+             const struct xt_target *target,
              void *targinfo,
              unsigned int targinfosize,
              unsigned int hook_mask)
 static int
 checkentry_v1(const char *tablename,
              const void *entry,
+             const struct xt_target *target,
              void *targinfo,
              unsigned int targinfosize,
              unsigned int hook_mask)
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 
        const struct net_device *in,
        const struct net_device *out,
        unsigned int hooknum,
+       const struct xt_target *target,
        const void *targinfo,
        void *userinfo)
 {
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protooff,
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 static int check(const char *tablename,
                 const void *ip,
+                const struct xt_match *match,
                 void *matchinfo,
                 unsigned int matchsize,
                 unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *ip,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchsize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *inf,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchsize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 static int check(const char *tablename,
                 const void *inf,
+                const struct xt_match *match,
                 void *matchinfo,
                 unsigned int matchsize,
                 unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 match6(const struct sk_buff *skb,
        const struct net_device *in,
        const struct net_device *out,
+       const struct xt_match *match,
        const void *matchinfo,
        int offset,
        unsigned int protoff,
 
 ipt_limit_match(const struct sk_buff *skb,
                const struct net_device *in,
                const struct net_device *out,
+               const struct xt_match *match,
                const void *matchinfo,
                int offset,
                unsigned int protoff,
 static int
 ipt_limit_checkentry(const char *tablename,
                     const void *inf,
+                    const struct xt_match *match,
                     void *matchinfo,
                     unsigned int matchsize,
                     unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
            const void *entry,
+          const struct xt_match *match,
            void *matchinfo,
            unsigned int matchsize,
            unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
                       const void *ip,
+                      const struct xt_match *match,
                       void *matchinfo,
                       unsigned int matchsize,
                       unsigned int hook_mask)
 
 static int match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 static int
 checkentry(const char *tablename,
           const void *inf,
+          const struct xt_match *match,
           void *matchinfo,
           unsigned int matchsize,
           unsigned int hook_mask)
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 static int match(const struct sk_buff *skb,
                 const struct net_device *in,
                 const struct net_device *out,
+                const struct xt_match *match,
                 const void *matchinfo,
                 int offset,
                 unsigned int protoff,
 
 static int checkentry(const char *tablename,
                      const void *ip,
+                     const struct xt_match *match,
                      void *matchinfo,
                      unsigned int matchsize,
                      unsigned int hook_mask)
        return 1;
 }
 
-static void destroy(void *matchinfo, unsigned int matchsize)
+static void destroy(const struct xt_match *match, void *matchinfo,
+                   unsigned int matchsize)
 {
        textsearch_destroy(STRING_TEXT_PRIV(matchinfo)->config);
 }
 
 match(const struct sk_buff *skb,
       const struct net_device *in,
       const struct net_device *out,
+      const struct xt_match *match,
       const void *matchinfo,
       int offset,
       unsigned int protoff,
 
 tcp_match(const struct sk_buff *skb,
          const struct net_device *in,
          const struct net_device *out,
+         const struct xt_match *match,
          const void *matchinfo,
          int offset,
          unsigned int protoff,
 static int
 tcp_checkentry(const char *tablename,
               const void *info,
+              const struct xt_match *match,
               void *matchinfo,
               unsigned int matchsize,
               unsigned int hook_mask)
 udp_match(const struct sk_buff *skb,
          const struct net_device *in,
          const struct net_device *out,
+         const struct xt_match *match,
          const void *matchinfo,
          int offset,
          unsigned int protoff,
 static int
 udp_checkentry(const char *tablename,
               const void *info,
+              const struct xt_match *match,
               void *matchinfo,
               unsigned int matchsize,
               unsigned int hook_mask)