const struct net_device *out,
                               unsigned int hooknum,
                               const struct xt_target *target,
-                              const void *targinfo,
-                              void *userdata);
+                              const void *targinfo);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
 
                                  unsigned int hook,
                                  const struct net_device *in,
                                  const struct net_device *out,
-                                 struct arpt_table *table,
-                                 void *userdata);
+                                 struct arpt_table *table);
 
 #define ARPT_ALIGN(s) (((s) + (__alignof__(struct arpt_entry)-1)) & ~(__alignof__(struct arpt_entry)-1))
 #endif /*__KERNEL__*/
 
                                 unsigned int hook,
                                 const struct net_device *in,
                                 const struct net_device *out,
-                                struct ipt_table *table,
-                                void *userdata);
+                                struct ipt_table *table);
 
 #define IPT_ALIGN(s) XT_ALIGN(s)
 
 
                                  unsigned int hook,
                                  const struct net_device *in,
                                  const struct net_device *out,
-                                 struct ip6t_table *table,
-                                 void *userdata);
+                                 struct ip6t_table *table);
 
 /* Check for an extension */
 extern int ip6t_ext_hdr(u8 nexthdr);
 
                               const struct net_device *out,
                               unsigned int hooknum,
                               const struct xt_target *target,
-                              const void *targinfo,
-                              void *userinfo)
+                              const void *targinfo)
 {
        if (net_ratelimit())
                printk("arp_tables: error: '%s'\n", (char *)targinfo);
                           unsigned int hook,
                           const struct net_device *in,
                           const struct net_device *out,
-                          struct arpt_table *table,
-                          void *userdata)
+                          struct arpt_table *table)
 {
        static const char nulldevname[IFNAMSIZ];
        unsigned int verdict = NF_DROP;
                                                                     in, out,
                                                                     hook,
                                                                     t->u.kernel.target,
-                                                                    t->data,
-                                                                    userdata);
+                                                                    t->data);
 
                                /* Target might have changed stuff. */
                                arp = (*pskb)->nh.arph;
 
 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 void *targinfo)
 {
        const struct arpt_mangle *mangle = targinfo;
        struct arphdr *arp;
 
                              const struct net_device *out,
                              int (*okfn)(struct sk_buff *))
 {
-       return arpt_do_table(pskb, hook, in, out, &packet_filter, NULL);
+       return arpt_do_table(pskb, hook, in, out, &packet_filter);
 }
 
 static struct nf_hook_ops arpt_ops[] = {
 
                                    const struct net_device *out,
                                    unsigned int hooknum,
                                    const struct ipt_target *target,
-                                   const void *targinfo,
-                                   void *userinfo)
+                                   const void *targinfo)
 {
        struct ip_conntrack *ct;
        enum ip_conntrack_info ctinfo;
                                    const struct net_device *out,
                                    unsigned int hooknum,
                                    const struct ipt_target *target,
-                                   const void *targinfo,
-                                   void *userinfo)
+                                   const void *targinfo)
 {
        struct ip_conntrack *ct;
        enum ip_conntrack_info ctinfo;
 {
        int ret;
 
-       ret = ipt_do_table(pskb, hooknum, in, out, &nat_table, NULL);
+       ret = ipt_do_table(pskb, hooknum, in, out, &nat_table);
 
        if (ret == NF_ACCEPT) {
                if (!ip_nat_initialized(ct, HOOK2MANIP(hooknum)))
 
          const struct net_device *out,
          unsigned int hooknum,
          const struct xt_target *target,
-         const void *targinfo,
-         void *userinfo)
+         const void *targinfo)
 {
        if (net_ratelimit())
                printk("ip_tables: error: `%s'\n", (char *)targinfo);
             unsigned int hook,
             const struct net_device *in,
             const struct net_device *out,
-            struct ipt_table *table,
-            void *userdata)
+            struct ipt_table *table)
 {
        static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
        u_int16_t offset;
                                                                     in, out,
                                                                     hook,
                                                                     t->u.kernel.target,
-                                                                    t->data,
-                                                                    userdata);
+                                                                    t->data);
 
 #ifdef CONFIG_NETFILTER_DEBUG
                                if (((struct ipt_entry *)table_base)->comefrom
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        const struct ipt_clusterip_tgt_info *cipinfo = targinfo;
        enum ip_conntrack_info ctinfo;
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        const struct ipt_ECN_info *einfo = targinfo;
 
 
               const struct net_device *out,
               unsigned int hooknum,
               const struct xt_target *target,
-              const void *targinfo,
-              void *userinfo)
+              const void *targinfo)
 {
        const struct ipt_log_info *loginfo = targinfo;
        struct nf_loginfo li;
 
                  const struct net_device *out,
                  unsigned int hooknum,
                  const struct xt_target *target,
-                 const void *targinfo,
-                 void *userinfo)
+                 const void *targinfo)
 {
        struct ip_conntrack *ct;
        enum ip_conntrack_info ctinfo;
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        struct ip_conntrack *ct;
        enum ip_conntrack_info ctinfo;
 
                const struct net_device *out,
                unsigned int hooknum,
                const struct xt_target *target,
-               const void *targinfo,
-               void *userinfo)
+               const void *targinfo)
 {
        struct ip_conntrack *ct;
        enum ip_conntrack_info ctinfo;
 
                           const struct net_device *out,
                           unsigned int hooknum,
                           const struct xt_target *target,
-                          const void *targinfo,
-                          void *userinfo)
+                          const void *targinfo)
 {
        const struct ipt_reject_info *reject = targinfo;
 
 
                const struct net_device *out,
                unsigned int hooknum,
                const struct xt_target *target,
-               const void *targinfo,
-               void *userinfo)
+               const void *targinfo)
 {
        struct ip_conntrack *ct;
        enum ip_conntrack_info ctinfo;
 
                  const struct net_device *out,
                  unsigned int hooknum,
                  const struct xt_target *target,
-                 const void *targinfo,
-                 void *userinfo)
+                 const void *targinfo)
 {
        const struct ipt_tcpmss_info *tcpmssinfo = targinfo;
        struct tcphdr *tcph;
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        const struct ipt_tos_target_info *tosinfo = targinfo;
        struct iphdr *iph = (*pskb)->nh.iph;
 
 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)
+              const void *targinfo)
 {
        struct iphdr *iph;
        const struct ipt_TTL_info *info = targinfo;
 
                                    const struct net_device *out,
                                    unsigned int hooknum,
                                    const struct xt_target *target,
-                                   const void *targinfo, void *userinfo)
+                                   const void *targinfo)
 {
        struct ipt_ulog_info *loginfo = (struct ipt_ulog_info *) targinfo;
 
 
         const struct net_device *out,
         int (*okfn)(struct sk_buff *))
 {
-       return ipt_do_table(pskb, hook, in, out, &packet_filter, NULL);
+       return ipt_do_table(pskb, hook, in, out, &packet_filter);
 }
 
 static unsigned int
                return NF_ACCEPT;
        }
 
-       return ipt_do_table(pskb, hook, in, out, &packet_filter, NULL);
+       return ipt_do_table(pskb, hook, in, out, &packet_filter);
 }
 
 static struct nf_hook_ops ipt_ops[] = {
 
         const struct net_device *out,
         int (*okfn)(struct sk_buff *))
 {
-       return ipt_do_table(pskb, hook, in, out, &packet_mangler, NULL);
+       return ipt_do_table(pskb, hook, in, out, &packet_mangler);
 }
 
 static unsigned int
        daddr = (*pskb)->nh.iph->daddr;
        tos = (*pskb)->nh.iph->tos;
 
-       ret = ipt_do_table(pskb, hook, in, out, &packet_mangler, NULL);
+       ret = ipt_do_table(pskb, hook, in, out, &packet_mangler);
        /* Reroute for ANY change. */
        if (ret != NF_DROP && ret != NF_STOLEN && ret != NF_QUEUE
            && ((*pskb)->nh.iph->saddr != saddr
 
         const struct net_device *out,
         int (*okfn)(struct sk_buff *))
 {
-       return ipt_do_table(pskb, hook, in, out, &packet_raw, NULL);
+       return ipt_do_table(pskb, hook, in, out, &packet_raw);
 }
 
 /* 'raw' is the very first table. */
 
          const struct net_device *out,
          unsigned int hooknum,
          const struct xt_target *target,
-         const void *targinfo,
-         void *userinfo)
+         const void *targinfo)
 {
        if (net_ratelimit())
                printk("ip6_tables: error: `%s'\n", (char *)targinfo);
              unsigned int hook,
              const struct net_device *in,
              const struct net_device *out,
-             struct xt_table *table,
-             void *userdata)
+             struct xt_table *table)
 {
        static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
        int offset = 0;
                                                                     in, out,
                                                                     hook,
                                                                     t->u.kernel.target,
-                                                                    t->data,
-                                                                    userdata);
+                                                                    t->data);
 
 #ifdef CONFIG_NETFILTER_DEBUG
                                if (((struct ip6t_entry *)table_base)->comefrom
 
                                   const struct net_device *out,
                                   unsigned int hooknum,
                                   const struct xt_target *target,
-                                  const void *targinfo, void *userinfo)
+                                  const void *targinfo)
 {
        struct ipv6hdr *ip6h;
        const struct ip6t_HL_info *info = targinfo;
 
                const struct net_device *out,
                unsigned int hooknum,
                const struct xt_target *target,
-               const void *targinfo,
-               void *userinfo)
+               const void *targinfo)
 {
        const struct ip6t_log_info *loginfo = targinfo;
        struct nf_loginfo li;
 
                           const struct net_device *out,
                           unsigned int hooknum,
                           const struct xt_target *target,
-                          const void *targinfo,
-                          void *userinfo)
+                          const void *targinfo)
 {
        const struct ip6t_reject_info *reject = targinfo;
 
 
         const struct net_device *out,
         int (*okfn)(struct sk_buff *))
 {
-       return ip6t_do_table(pskb, hook, in, out, &packet_filter, NULL);
+       return ip6t_do_table(pskb, hook, in, out, &packet_filter);
 }
 
 static unsigned int
        }
 #endif
 
-       return ip6t_do_table(pskb, hook, in, out, &packet_filter, NULL);
+       return ip6t_do_table(pskb, hook, in, out, &packet_filter);
 }
 
 static struct nf_hook_ops ip6t_ops[] = {
 
         const struct net_device *out,
         int (*okfn)(struct sk_buff *))
 {
-       return ip6t_do_table(pskb, hook, in, out, &packet_mangler, NULL);
+       return ip6t_do_table(pskb, hook, in, out, &packet_mangler);
 }
 
 static unsigned int
        /* flowlabel and prio (includes version, which shouldn't change either */
        flowlabel = *((u_int32_t *) (*pskb)->nh.ipv6h);
 
-       ret = ip6t_do_table(pskb, hook, in, out, &packet_mangler, NULL);
+       ret = ip6t_do_table(pskb, hook, in, out, &packet_mangler);
 
        if (ret != NF_DROP && ret != NF_STOLEN 
                && (memcmp(&(*pskb)->nh.ipv6h->saddr, &saddr, sizeof(saddr))
 
         const struct net_device *out,
         int (*okfn)(struct sk_buff *))
 {
-       return ip6t_do_table(pskb, hook, in, out, &packet_raw, NULL);
+       return ip6t_do_table(pskb, hook, in, out, &packet_raw);
 }
 
 static struct nf_hook_ops ip6t_ops[] = { 
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        const struct xt_classify_target_info *clinfo = targinfo;
 
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        const struct xt_connmark_target_info *markinfo = targinfo;
        u_int32_t diff;
 
 static unsigned int 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 void *targinfo)
 {
        struct sk_buff *skb = *pskb;
        const struct xt_connsecmark_target_info *info = targinfo;
 
                           const struct net_device *out,
                           unsigned int hooknum,
                           const struct xt_target *target,
-                          const void *targinfo,
-                          void *userinfo)
+                          const void *targinfo)
 {
        const struct xt_DSCP_info *dinfo = targinfo;
        u_int8_t dscp = ipv4_get_dsfield((*pskb)->nh.iph) >> XT_DSCP_SHIFT;
                            const struct net_device *out,
                            unsigned int hooknum,
                            const struct xt_target *target,
-                           const void *targinfo,
-                           void *userinfo)
+                           const void *targinfo)
 {
        const struct xt_DSCP_info *dinfo = targinfo;
        u_int8_t dscp = ipv6_get_dsfield((*pskb)->nh.ipv6h) >> XT_DSCP_SHIFT;
 
          const struct net_device *out,
          unsigned int hooknum,
          const struct xt_target *target,
-         const void *targinfo,
-         void *userinfo)
+         const void *targinfo)
 {
        const struct xt_mark_target_info *markinfo = targinfo;
 
          const struct net_device *out,
          unsigned int hooknum,
          const struct xt_target *target,
-         const void *targinfo,
-         void *userinfo)
+         const void *targinfo)
 {
        const struct xt_mark_target_info_v1 *markinfo = targinfo;
        int mark = 0;
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        const struct xt_NFQ_info *tinfo = targinfo;
 
 
        const struct net_device *out,
        unsigned int hooknum,
        const struct xt_target *target,
-       const void *targinfo,
-       void *userinfo)
+       const void *targinfo)
 {
        /* Previously seen (loopback)? Ignore. */
        if ((*pskb)->nfct != NULL)
 
 static unsigned int 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 void *targinfo)
 {
        u32 secmark = 0;
        const struct xt_secmark_target_info *info = targinfo;
 
        return 1;
 }
 
-static struct xt_match xt_connbytes_match = {
+static struct xt_match xt_connbytes_match[] = {
        {
                .name           = "connbytes",
                .family         = AF_INET,
 
        ret = ipt->tcfi_t->u.kernel.target->target(&skb, skb->dev, NULL,
                                                   ipt->tcfi_hook,
                                                   ipt->tcfi_t->u.kernel.target,
-                                                  ipt->tcfi_t->data, NULL);
+                                                  ipt->tcfi_t->data);
        switch (ret) {
        case NF_ACCEPT:
                result = TC_ACT_OK;