#include <linux/init.h>
 extern void ipt_init(void) __init;
 
-#define ipt_register_target(tgt)       \
-({     (tgt)->family = AF_INET;        \
-       xt_register_target(tgt); })
-#define ipt_unregister_target(tgt) xt_unregister_target(tgt)
-
-#define ipt_register_match(mtch)       \
-({     (mtch)->family = AF_INET;       \
-       xt_register_match(mtch); })
-#define ipt_unregister_match(mtch) xt_unregister_match(mtch)
-
 //#define ipt_register_table(tbl, repl) xt_register_table(AF_INET, tbl, repl)
 //#define ipt_unregister_table(tbl) xt_unregister_table(AF_INET, tbl)
 
 extern void ipt_unregister_table(struct ipt_table *table);
 
 /* net/sched/ipt.c: Gimme access to your targets!  Gets target->me. */
-extern struct ipt_target *ipt_find_target(const char *name, u8 revision);
+extern struct xt_target *ipt_find_target(const char *name, u8 revision);
 
 /* Standard entry. */
 struct ipt_standard
 
 #include <linux/init.h>
 extern void ip6t_init(void) __init;
 
-#define ip6t_register_target(tgt)              \
-({     (tgt)->family = AF_INET6;               \
-       xt_register_target(tgt); })
-#define ip6t_unregister_target(tgt) xt_unregister_target(tgt)
-
-#define ip6t_register_match(match)             \
-({     (match)->family = AF_INET6;             \
-       xt_register_match(match); })
-#define ip6t_unregister_match(match) xt_unregister_match(match)
-
 extern int ip6t_register_table(struct ip6t_table *table,
                               const struct ip6t_replace *repl);
 extern void ip6t_unregister_table(struct ip6t_table *table);
 
                                    const struct net_device *in,
                                    const struct net_device *out,
                                    unsigned int hooknum,
-                                   const struct ipt_target *target,
+                                   const struct xt_target *target,
                                    const void *targinfo)
 {
        struct ip_conntrack *ct;
                                    const struct net_device *in,
                                    const struct net_device *out,
                                    unsigned int hooknum,
-                                   const struct ipt_target *target,
+                                   const struct xt_target *target,
                                    const void *targinfo)
 {
        struct ip_conntrack *ct;
 
 static int ipt_snat_checkentry(const char *tablename,
                               const void *entry,
-                              const struct ipt_target *target,
+                              const struct xt_target *target,
                               void *targinfo,
                               unsigned int hook_mask)
 {
 
 static int ipt_dnat_checkentry(const char *tablename,
                               const void *entry,
-                              const struct ipt_target *target,
+                              const struct xt_target *target,
                               void *targinfo,
                               unsigned int hook_mask)
 {
        return ret;
 }
 
-static struct ipt_target ipt_snat_reg = {
+static struct xt_target ipt_snat_reg = {
        .name           = "SNAT",
+       .family         = AF_INET,
        .target         = ipt_snat_target,
        .targetsize     = sizeof(struct ip_nat_multi_range_compat),
        .table          = "nat",
        .checkentry     = ipt_snat_checkentry,
 };
 
-static struct ipt_target ipt_dnat_reg = {
+static struct xt_target ipt_dnat_reg = {
        .name           = "DNAT",
+       .family         = AF_INET,
        .target         = ipt_dnat_target,
        .targetsize     = sizeof(struct ip_nat_multi_range_compat),
        .table          = "nat",
        ret = ipt_register_table(&nat_table, &nat_initial_table.repl);
        if (ret != 0)
                return ret;
-       ret = ipt_register_target(&ipt_snat_reg);
+       ret = xt_register_target(&ipt_snat_reg);
        if (ret != 0)
                goto unregister_table;
 
-       ret = ipt_register_target(&ipt_dnat_reg);
+       ret = xt_register_target(&ipt_dnat_reg);
        if (ret != 0)
                goto unregister_snat;
 
        return ret;
 
  unregister_snat:
-       ipt_unregister_target(&ipt_snat_reg);
+       xt_unregister_target(&ipt_snat_reg);
  unregister_table:
-       ipt_unregister_table(&nat_table);
+       xt_unregister_table(&nat_table);
 
        return ret;
 }
 
 void ip_nat_rule_cleanup(void)
 {
-       ipt_unregister_target(&ipt_dnat_reg);
-       ipt_unregister_target(&ipt_snat_reg);
+       xt_unregister_target(&ipt_dnat_reg);
+       xt_unregister_target(&ipt_snat_reg);
        ipt_unregister_table(&nat_table);
 }
 
 static inline int check_match(struct ipt_entry_match *m, const char *name,
                                const struct ipt_ip *ip, unsigned int hookmask)
 {
-       struct ipt_match *match;
+       struct xt_match *match;
        int ret;
 
        match = m->u.kernel.match;
            unsigned int hookmask,
            unsigned int *i)
 {
-       struct ipt_match *match;
+       struct xt_match *match;
        int ret;
 
        match = try_then_request_module(xt_find_match(AF_INET, m->u.user.name,
 static inline int check_target(struct ipt_entry *e, const char *name)
 {
        struct ipt_entry_target *t;
-       struct ipt_target *target;
+       struct xt_target *target;
        int ret;
 
        t = ipt_get_target(e);
            unsigned int *i)
 {
        struct ipt_entry_target *t;
-       struct ipt_target *target;
+       struct xt_target *target;
        int ret;
        unsigned int j;
 
            unsigned int hookmask,
            int *size, int *i)
 {
-       struct ipt_match *match;
+       struct xt_match *match;
 
        match = try_then_request_module(xt_find_match(AF_INET, m->u.user.name,
                                                   m->u.user.revision),
                           const char *name)
 {
        struct ipt_entry_target *t;
-       struct ipt_target *target;
+       struct xt_target *target;
        unsigned int entry_offset;
        int ret, off, h, j;
 
        struct xt_table_info *newinfo, unsigned char *base)
 {
        struct ipt_entry_target *t;
-       struct ipt_target *target;
+       struct xt_target *target;
        struct ipt_entry *de;
        unsigned int origsize;
        int ret, h;
 }
 
 /* The built-in targets: standard (NULL) and error. */
-static struct ipt_target ipt_standard_target = {
+static struct xt_target ipt_standard_target = {
        .name           = IPT_STANDARD_TARGET,
        .targetsize     = sizeof(int),
        .family         = AF_INET,
 #endif
 };
 
-static struct ipt_target ipt_error_target = {
+static struct xt_target ipt_error_target = {
        .name           = IPT_ERROR_TARGET,
        .target         = ipt_error,
        .targetsize     = IPT_FUNCTION_MAXNAMELEN,
 #endif
 };
 
-static struct ipt_match icmp_matchstruct = {
+static struct xt_match icmp_matchstruct = {
        .name           = "icmp",
        .match          = icmp_match,
        .matchsize      = sizeof(struct ipt_icmp),
 
 
 #include <linux/netfilter_arp.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
 #include <linux/netfilter_ipv4/ipt_CLUSTERIP.h>
 #include <net/netfilter/nf_conntrack_compat.h>
        if ((*pskb)->nh.iph->protocol == IPPROTO_ICMP
            && (ctinfo == IP_CT_RELATED 
                || ctinfo == IP_CT_RELATED+IP_CT_IS_REPLY))
-               return IPT_CONTINUE;
+               return XT_CONTINUE;
 
        /* ip_conntrack_icmp guarantees us that we only have ICMP_ECHO, 
         * TIMESTAMP, INFO_REQUEST or ADDRESS type icmp packets from here
         * actually a unicast IP packet. TCP doesn't like PACKET_MULTICAST */
        (*pskb)->pkt_type = PACKET_HOST;
 
-       return IPT_CONTINUE;
+       return XT_CONTINUE;
 }
 
 static int
        nf_ct_l3proto_module_put(target->family);
 }
 
-static struct ipt_target clusterip_tgt = {
+static struct xt_target clusterip_tgt = {
        .name           = "CLUSTERIP",
+       .family         = AF_INET,
        .target         = target,
        .targetsize     = sizeof(struct ipt_clusterip_tgt_info),
        .checkentry     = checkentry,
 {
        int ret;
 
-       ret = ipt_register_target(&clusterip_tgt);
+       ret = xt_register_target(&clusterip_tgt);
        if (ret < 0)
                return ret;
 
        nf_unregister_hook(&cip_arp_ops);
 #endif /* CONFIG_PROC_FS */
 cleanup_target:
-       ipt_unregister_target(&clusterip_tgt);
+       xt_unregister_target(&clusterip_tgt);
        return ret;
 }
 
        remove_proc_entry(clusterip_procdir->name, clusterip_procdir->parent);
 #endif
        nf_unregister_hook(&cip_arp_ops);
-       ipt_unregister_target(&clusterip_tgt);
+       xt_unregister_target(&clusterip_tgt);
 }
 
 module_init(ipt_clusterip_init);
 
  * ipt_ECN.c,v 1.5 2002/08/18 19:36:51 laforge Exp
 */
 
+#include <linux/in.h>
 #include <linux/module.h>
 #include <linux/skbuff.h>
 #include <linux/ip.h>
 #include <linux/tcp.h>
 #include <net/checksum.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
 #include <linux/netfilter_ipv4/ipt_ECN.h>
 
                if (!set_ect_tcp(pskb, einfo))
                        return NF_DROP;
 
-       return IPT_CONTINUE;
+       return XT_CONTINUE;
 }
 
 static int
                return 0;
        }
        if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR))
-           && (e->ip.proto != IPPROTO_TCP || (e->ip.invflags & IPT_INV_PROTO))) {
+           && (e->ip.proto != IPPROTO_TCP || (e->ip.invflags & XT_INV_PROTO))) {
                printk(KERN_WARNING "ECN: cannot use TCP operations on a "
                       "non-tcp rule\n");
                return 0;
        return 1;
 }
 
-static struct ipt_target ipt_ecn_reg = {
+static struct xt_target ipt_ecn_reg = {
        .name           = "ECN",
+       .family         = AF_INET,
        .target         = target,
        .targetsize     = sizeof(struct ipt_ECN_info),
        .table          = "mangle",
 
 static int __init ipt_ecn_init(void)
 {
-       return ipt_register_target(&ipt_ecn_reg);
+       return xt_register_target(&ipt_ecn_reg);
 }
 
 static void __exit ipt_ecn_fini(void)
 {
-       ipt_unregister_target(&ipt_ecn_reg);
+       xt_unregister_target(&ipt_ecn_reg);
 }
 
 module_init(ipt_ecn_init);
 
 #include <net/route.h>
 
 #include <linux/netfilter.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ipt_LOG.h>
 
 MODULE_LICENSE("GPL");
 
        ipt_log_packet(PF_INET, hooknum, *pskb, in, out, &li,
                       loginfo->prefix);
-       return IPT_CONTINUE;
+       return XT_CONTINUE;
 }
 
 static int ipt_log_checkentry(const char *tablename,
        return 1;
 }
 
-static struct ipt_target ipt_log_reg = {
+static struct xt_target ipt_log_reg = {
        .name           = "LOG",
+       .family         = AF_INET,
        .target         = ipt_log_target,
        .targetsize     = sizeof(struct ipt_log_info),
        .checkentry     = ipt_log_checkentry,
 {
        int ret;
 
-       ret = ipt_register_target(&ipt_log_reg);
+       ret = xt_register_target(&ipt_log_reg);
        if (ret < 0)
                return ret;
        if (nf_log_register(PF_INET, &ipt_log_logger) < 0) {
 static void __exit ipt_log_fini(void)
 {
        nf_log_unregister_logger(&ipt_log_logger);
-       ipt_unregister_target(&ipt_log_reg);
+       xt_unregister_target(&ipt_log_reg);
 }
 
 module_init(ipt_log_init);
 
 #else
 #include <linux/netfilter_ipv4/ip_nat_rule.h>
 #endif
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>");
        .notifier_call  = masq_inet_event,
 };
 
-static struct ipt_target masquerade = {
+static struct xt_target masquerade = {
        .name           = "MASQUERADE",
+       .family         = AF_INET,
        .target         = masquerade_target,
        .targetsize     = sizeof(struct ip_nat_multi_range_compat),
        .table          = "nat",
 {
        int ret;
 
-       ret = ipt_register_target(&masquerade);
+       ret = xt_register_target(&masquerade);
 
        if (ret == 0) {
                /* Register for device down reports */
 
 static void __exit ipt_masquerade_fini(void)
 {
-       ipt_unregister_target(&masquerade);
+       xt_unregister_target(&masquerade);
        unregister_netdevice_notifier(&masq_dev_notifier);
        unregister_inetaddr_notifier(&masq_inet_notifier);      
 }
 
 #include <linux/netdevice.h>
 #include <linux/netfilter.h>
 #include <linux/netfilter_ipv4.h>
+#include <linux/netfilter/x_tables.h>
 #ifdef CONFIG_NF_NAT_NEEDED
 #include <net/netfilter/nf_nat_rule.h>
 #else
        return ip_nat_setup_info(ct, &newrange, hooknum);
 }
 
-static struct ipt_target target_module = { 
+static struct xt_target target_module = {
        .name           = MODULENAME,
+       .family         = AF_INET,
        .target         = target, 
        .targetsize     = sizeof(struct ip_nat_multi_range_compat),
        .table          = "nat",
 
 static int __init ipt_netmap_init(void)
 {
-       return ipt_register_target(&target_module);
+       return xt_register_target(&target_module);
 }
 
 static void __exit ipt_netmap_fini(void)
 {
-       ipt_unregister_target(&target_module);
+       xt_unregister_target(&target_module);
 }
 
 module_init(ipt_netmap_init);
 
 #include <net/protocol.h>
 #include <net/checksum.h>
 #include <linux/netfilter_ipv4.h>
+#include <linux/netfilter/x_tables.h>
 #ifdef CONFIG_NF_NAT_NEEDED
 #include <net/netfilter/nf_nat_rule.h>
 #else
        return ip_nat_setup_info(ct, &newrange, hooknum);
 }
 
-static struct ipt_target redirect_reg = {
+static struct xt_target redirect_reg = {
        .name           = "REDIRECT",
+       .family         = AF_INET,
        .target         = redirect_target,
        .targetsize     = sizeof(struct ip_nat_multi_range_compat),
        .table          = "nat",
 
 static int __init ipt_redirect_init(void)
 {
-       return ipt_register_target(&redirect_reg);
+       return xt_register_target(&redirect_reg);
 }
 
 static void __exit ipt_redirect_fini(void)
 {
-       ipt_unregister_target(&redirect_reg);
+       xt_unregister_target(&redirect_reg);
 }
 
 module_init(ipt_redirect_init);
 
 #include <net/tcp.h>
 #include <net/route.h>
 #include <net/dst.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
 #include <linux/netfilter_ipv4/ipt_REJECT.h>
 #ifdef CONFIG_BRIDGE_NETFILTER
        } else if (rejinfo->with == IPT_TCP_RESET) {
                /* Must specify that it's a TCP packet */
                if (e->ip.proto != IPPROTO_TCP
-                   || (e->ip.invflags & IPT_INV_PROTO)) {
+                   || (e->ip.invflags & XT_INV_PROTO)) {
                        DEBUGP("REJECT: TCP_RESET invalid for non-tcp\n");
                        return 0;
                }
        return 1;
 }
 
-static struct ipt_target ipt_reject_reg = {
+static struct xt_target ipt_reject_reg = {
        .name           = "REJECT",
+       .family         = AF_INET,
        .target         = reject,
        .targetsize     = sizeof(struct ipt_reject_info),
        .table          = "filter",
 
 static int __init ipt_reject_init(void)
 {
-       return ipt_register_target(&ipt_reject_reg);
+       return xt_register_target(&ipt_reject_reg);
 }
 
 static void __exit ipt_reject_fini(void)
 {
-       ipt_unregister_target(&ipt_reject_reg);
+       xt_unregister_target(&ipt_reject_reg);
 }
 
 module_init(ipt_reject_init);
 
 #include <net/protocol.h>
 #include <net/checksum.h>
 #include <linux/netfilter_ipv4.h>
+#include <linux/netfilter/x_tables.h>
 #ifdef CONFIG_NF_NAT_NEEDED
 #include <net/netfilter/nf_nat_rule.h>
 #else
        return ip_nat_setup_info(ct, &newrange, hooknum);
 }
 
-static struct ipt_target same_reg = { 
+static struct xt_target same_reg = {
        .name           = "SAME",
+       .family         = AF_INET,
        .target         = same_target,
        .targetsize     = sizeof(struct ipt_same_info),
        .table          = "nat",
 
 static int __init ipt_same_init(void)
 {
-       return ipt_register_target(&same_reg);
+       return xt_register_target(&same_reg);
 }
 
 static void __exit ipt_same_fini(void)
 {
-       ipt_unregister_target(&same_reg);
+       xt_unregister_target(&same_reg);
 }
 
 module_init(ipt_same_init);
 
 #include <linux/ip.h>
 #include <net/checksum.h>
 
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ipt_TOS.h>
 
 MODULE_LICENSE("GPL");
                iph->tos = (iph->tos & IPTOS_PREC_MASK) | tosinfo->tos;
                nf_csum_replace2(&iph->check, htons(oldtos), htons(iph->tos));
        }
-       return IPT_CONTINUE;
+       return XT_CONTINUE;
 }
 
 static int
        return 1;
 }
 
-static struct ipt_target ipt_tos_reg = {
+static struct xt_target ipt_tos_reg = {
        .name           = "TOS",
+       .family         = AF_INET,
        .target         = target,
        .targetsize     = sizeof(struct ipt_tos_target_info),
        .table          = "mangle",
 
 static int __init ipt_tos_init(void)
 {
-       return ipt_register_target(&ipt_tos_reg);
+       return xt_register_target(&ipt_tos_reg);
 }
 
 static void __exit ipt_tos_fini(void)
 {
-       ipt_unregister_target(&ipt_tos_reg);
+       xt_unregister_target(&ipt_tos_reg);
 }
 
 module_init(ipt_tos_init);
 
 #include <linux/ip.h>
 #include <net/checksum.h>
 
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ipt_TTL.h>
 
 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
                iph->ttl = new_ttl;
        }
 
-       return IPT_CONTINUE;
+       return XT_CONTINUE;
 }
 
 static int ipt_ttl_checkentry(const char *tablename,
        return 1;
 }
 
-static struct ipt_target ipt_TTL = { 
+static struct xt_target ipt_TTL = {
        .name           = "TTL",
+       .family         = AF_INET,
        .target         = ipt_ttl_target, 
        .targetsize     = sizeof(struct ipt_TTL_info),
        .table          = "mangle",
 
 static int __init ipt_ttl_init(void)
 {
-       return ipt_register_target(&ipt_TTL);
+       return xt_register_target(&ipt_TTL);
 }
 
 static void __exit ipt_ttl_fini(void)
 {
-       ipt_unregister_target(&ipt_TTL);
+       xt_unregister_target(&ipt_TTL);
 }
 
 module_init(ipt_ttl_init);
 
 #include <linux/mm.h>
 #include <linux/moduleparam.h>
 #include <linux/netfilter.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ipt_ULOG.h>
 #include <net/sock.h>
 #include <linux/bitops.h>
        ub->qlen = 0;
        ub->skb = NULL;
        ub->lastnlh = NULL;
-
 }
 
 
 
        ipt_ulog_packet(hooknum, *pskb, in, out, loginfo, NULL);
  
-       return IPT_CONTINUE;
+       return XT_CONTINUE;
 }
  
 static void ipt_logfn(unsigned int pf,
        return 1;
 }
 
-static struct ipt_target ipt_ulog_reg = {
+static struct xt_target ipt_ulog_reg = {
        .name           = "ULOG",
+       .family         = AF_INET,
        .target         = ipt_ulog_target,
        .targetsize     = sizeof(struct ipt_ulog_info),
        .checkentry     = ipt_ulog_checkentry,
        if (!nflognl)
                return -ENOMEM;
 
-       ret = ipt_register_target(&ipt_ulog_reg);
+       ret = xt_register_target(&ipt_ulog_reg);
        if (ret < 0) {
                sock_release(nflognl->sk_socket);
                return ret;
 
        if (nflog)
                nf_log_unregister_logger(&ipt_ulog_logger);
-       ipt_unregister_target(&ipt_ulog_reg);
+       xt_unregister_target(&ipt_ulog_reg);
        sock_release(nflognl->sk_socket);
 
        /* remove pending timers and free allocated skb's */
                        ub->skb = NULL;
                }
        }
-
 }
 
 module_init(ipt_ulog_init);
 
 #include <net/route.h>
 
 #include <linux/netfilter_ipv4/ipt_addrtype.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
        return ret;
 }
 
-static struct ipt_match addrtype_match = {
+static struct xt_match addrtype_match = {
        .name           = "addrtype",
+       .family         = AF_INET,
        .match          = match,
        .matchsize      = sizeof(struct ipt_addrtype_info),
        .me             = THIS_MODULE
 
 static int __init ipt_addrtype_init(void)
 {
-       return ipt_register_match(&addrtype_match);
+       return xt_register_match(&addrtype_match);
 }
 
 static void __exit ipt_addrtype_fini(void)
 {
-       ipt_unregister_match(&addrtype_match);
+       xt_unregister_match(&addrtype_match);
 }
 
 module_init(ipt_addrtype_init);
 
  * published by the Free Software Foundation.
  */
 
+#include <linux/in.h>
 #include <linux/module.h>
 #include <linux/skbuff.h>
 #include <linux/ip.h>
 
 #include <linux/netfilter_ipv4/ipt_ah.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Yon Uriarte <yon@astaro.de>");
        return 1;
 }
 
-static struct ipt_match ah_match = {
+static struct xt_match ah_match = {
        .name           = "ah",
+       .family         = AF_INET,
        .match          = match,
        .matchsize      = sizeof(struct ipt_ah),
        .proto          = IPPROTO_AH,
 
 static int __init ipt_ah_init(void)
 {
-       return ipt_register_match(&ah_match);
+       return xt_register_match(&ah_match);
 }
 
 static void __exit ipt_ah_fini(void)
 {
-       ipt_unregister_match(&ah_match);
+       xt_unregister_match(&ah_match);
 }
 
 module_init(ipt_ah_init);
 
  * published by the Free Software Foundation.
  */
 
+#include <linux/in.h>
+#include <linux/ip.h>
 #include <linux/module.h>
 #include <linux/skbuff.h>
 #include <linux/tcp.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
 #include <linux/netfilter_ipv4/ipt_ecn.h>
 
        return 1;
 }
 
-static struct ipt_match ecn_match = {
+static struct xt_match ecn_match = {
        .name           = "ecn",
+       .family         = AF_INET,
        .match          = match,
        .matchsize      = sizeof(struct ipt_ecn_info),
        .checkentry     = checkentry,
 
 static int __init ipt_ecn_init(void)
 {
-       return ipt_register_match(&ecn_match);
+       return xt_register_match(&ecn_match);
 }
 
 static void __exit ipt_ecn_fini(void)
 {
-       ipt_unregister_match(&ecn_match);
+       xt_unregister_match(&ecn_match);
 }
 
 module_init(ipt_ecn_init);
 
 #include <linux/module.h>
 #include <linux/skbuff.h>
 #include <linux/ip.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ipt_iprange.h>
 
 MODULE_LICENSE("GPL");
        return 1;
 }
 
-static struct ipt_match iprange_match = {
+static struct xt_match iprange_match = {
        .name           = "iprange",
+       .family         = AF_INET,
        .match          = match,
        .matchsize      = sizeof(struct ipt_iprange_info),
-       .destroy        = NULL,
        .me             = THIS_MODULE
 };
 
 static int __init ipt_iprange_init(void)
 {
-       return ipt_register_match(&iprange_match);
+       return xt_register_match(&iprange_match);
 }
 
 static void __exit ipt_iprange_fini(void)
 {
-       ipt_unregister_match(&iprange_match);
+       xt_unregister_match(&iprange_match);
 }
 
 module_init(ipt_iprange_init);
 
 #include <net/sock.h>
 
 #include <linux/netfilter_ipv4/ipt_owner.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");
        return 1;
 }
 
-static struct ipt_match owner_match = {
+static struct xt_match owner_match = {
        .name           = "owner",
+       .family         = AF_INET,
        .match          = match,
        .matchsize      = sizeof(struct ipt_owner_info),
        .hooks          = (1 << NF_IP_LOCAL_OUT) | (1 << NF_IP_POST_ROUTING),
 
 static int __init ipt_owner_init(void)
 {
-       return ipt_register_match(&owner_match);
+       return xt_register_match(&owner_match);
 }
 
 static void __exit ipt_owner_fini(void)
 {
-       ipt_unregister_match(&owner_match);
+       xt_unregister_match(&owner_match);
 }
 
 module_init(ipt_owner_init);
 
  * Copyright 2002-2003, Stephen Frost, 2.5.x port by laforge@netfilter.org
  */
 #include <linux/init.h>
+#include <linux/ip.h>
 #include <linux/moduleparam.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
 #include <linux/skbuff.h>
 #include <linux/inet.h>
 
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv4/ipt_recent.h>
 
 MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
 };
 #endif /* CONFIG_PROC_FS */
 
-static struct ipt_match recent_match = {
+static struct xt_match recent_match = {
        .name           = "recent",
+       .family         = AF_INET,
        .match          = ipt_recent_match,
        .matchsize      = sizeof(struct ipt_recent_info),
        .checkentry     = ipt_recent_checkentry,
                return -EINVAL;
        ip_list_hash_size = 1 << fls(ip_list_tot);
 
-       err = ipt_register_match(&recent_match);
+       err = xt_register_match(&recent_match);
 #ifdef CONFIG_PROC_FS
        if (err)
                return err;
        proc_dir = proc_mkdir("ipt_recent", proc_net);
        if (proc_dir == NULL) {
-               ipt_unregister_match(&recent_match);
+               xt_unregister_match(&recent_match);
                err = -ENOMEM;
        }
 #endif
 static void __exit ipt_recent_exit(void)
 {
        BUG_ON(!list_empty(&tables));
-       ipt_unregister_match(&recent_match);
+       xt_unregister_match(&recent_match);
 #ifdef CONFIG_PROC_FS
        remove_proc_entry("ipt_recent", proc_net);
 #endif
 
  * published by the Free Software Foundation.
  */
 
+#include <linux/ip.h>
 #include <linux/module.h>
 #include <linux/skbuff.h>
 
 #include <linux/netfilter_ipv4/ipt_tos.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("iptables TOS match module");
        return (skb->nh.iph->tos == info->tos) ^ info->invert;
 }
 
-static struct ipt_match tos_match = {
+static struct xt_match tos_match = {
        .name           = "tos",
+       .family         = AF_INET,
        .match          = match,
        .matchsize      = sizeof(struct ipt_tos_info),
        .me             = THIS_MODULE,
 
 static int __init ipt_multiport_init(void)
 {
-       return ipt_register_match(&tos_match);
+       return xt_register_match(&tos_match);
 }
 
 static void __exit ipt_multiport_fini(void)
 {
-       ipt_unregister_match(&tos_match);
+       xt_unregister_match(&tos_match);
 }
 
 module_init(ipt_multiport_init);
 
  * published by the Free Software Foundation.
  */
 
+#include <linux/ip.h>
 #include <linux/module.h>
 #include <linux/skbuff.h>
 
 #include <linux/netfilter_ipv4/ipt_ttl.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
 MODULE_DESCRIPTION("IP tables TTL matching module");
        return 0;
 }
 
-static struct ipt_match ttl_match = {
+static struct xt_match ttl_match = {
        .name           = "ttl",
+       .family         = AF_INET,
        .match          = match,
        .matchsize      = sizeof(struct ipt_ttl_info),
        .me             = THIS_MODULE,
 
 static int __init ipt_ttl_init(void)
 {
-       return ipt_register_match(&ttl_match);
+       return xt_register_match(&ttl_match);
 }
 
 static void __exit ipt_ttl_fini(void)
 {
-       ipt_unregister_match(&ttl_match);
-
+       xt_unregister_match(&ttl_match);
 }
 
 module_init(ipt_ttl_init);
 
        return ret;
 }
 
-static struct ipt_target ipt_snat_reg = {
+static struct xt_target ipt_snat_reg = {
        .name           = "SNAT",
        .target         = ipt_snat_target,
        .targetsize     = sizeof(struct nf_nat_multi_range_compat),
 
            unsigned int hookmask,
            unsigned int *i)
 {
-       struct ip6t_match *match;
+       struct xt_match *match;
        int ret;
 
        match = try_then_request_module(xt_find_match(AF_INET6, m->u.user.name,
        return ret;
 }
 
-static struct ip6t_target ip6t_standard_target;
+static struct xt_target ip6t_standard_target;
 
 static inline int
 check_entry(struct ip6t_entry *e, const char *name, unsigned int size,
            unsigned int *i)
 {
        struct ip6t_entry_target *t;
-       struct ip6t_target *target;
+       struct xt_target *target;
        int ret;
        unsigned int j;
 
 }
 
 /* The built-in targets: standard (NULL) and error. */
-static struct ip6t_target ip6t_standard_target = {
+static struct xt_target ip6t_standard_target = {
        .name           = IP6T_STANDARD_TARGET,
        .targetsize     = sizeof(int),
        .family         = AF_INET6,
 };
 
-static struct ip6t_target ip6t_error_target = {
+static struct xt_target ip6t_error_target = {
        .name           = IP6T_ERROR_TARGET,
        .target         = ip6t_error,
        .targetsize     = IP6T_FUNCTION_MAXNAMELEN,
        .get            = do_ip6t_get_ctl,
 };
 
-static struct ip6t_match icmp6_matchstruct = {
+static struct xt_match icmp6_matchstruct = {
        .name           = "icmp6",
        .match          = &icmp6_match,
        .matchsize      = sizeof(struct ip6t_icmp),
 
 #include <linux/module.h>
 #include <linux/skbuff.h>
 #include <linux/ip.h>
+#include <linux/ipv6.h>
 
-#include <linux/netfilter_ipv6/ip6_tables.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6t_HL.h>
 
 MODULE_AUTHOR("Maciej Soltysiak <solt@dns.toxicfilms.tv>");
-MODULE_DESCRIPTION("IP tables Hop Limit modification module");
+MODULE_DESCRIPTION("IP6 tables Hop Limit modification module");
 MODULE_LICENSE("GPL");
 
 static unsigned int ip6t_hl_target(struct sk_buff **pskb, 
 
        ip6h->hop_limit = new_hl;
 
-       return IP6T_CONTINUE;
+       return XT_CONTINUE;
 }
 
 static int ip6t_hl_checkentry(const char *tablename,
        return 1;
 }
 
-static struct ip6t_target ip6t_HL = { 
+static struct xt_target ip6t_HL = {
        .name           = "HL", 
+       .family         = AF_INET6,
        .target         = ip6t_hl_target, 
        .targetsize     = sizeof(struct ip6t_HL_info),
        .table          = "mangle",
 
 static int __init ip6t_hl_init(void)
 {
-       return ip6t_register_target(&ip6t_HL);
+       return xt_register_target(&ip6t_HL);
 }
 
 static void __exit ip6t_hl_fini(void)
 {
-       ip6t_unregister_target(&ip6t_HL);
+       xt_unregister_target(&ip6t_HL);
 }
 
 module_init(ip6t_hl_init);
 
 #include <net/tcp.h>
 #include <net/ipv6.h>
 #include <linux/netfilter.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 
 MODULE_AUTHOR("Jan Rekorajski <baggins@pld.org.pl>");
 
        ip6t_log_packet(PF_INET6, hooknum, *pskb, in, out, &li,
                        loginfo->prefix);
-       return IP6T_CONTINUE;
+       return XT_CONTINUE;
 }
 
 
        return 1;
 }
 
-static struct ip6t_target ip6t_log_reg = {
+static struct xt_target ip6t_log_reg = {
        .name           = "LOG",
+       .family         = AF_INET6,
        .target         = ip6t_log_target, 
        .targetsize     = sizeof(struct ip6t_log_info),
        .checkentry     = ip6t_log_checkentry, 
 {
        int ret;
 
-       ret = ip6t_register_target(&ip6t_log_reg);
+       ret = xt_register_target(&ip6t_log_reg);
        if (ret < 0)
                return ret;
        if (nf_log_register(PF_INET6, &ip6t_logger) < 0) {
 static void __exit ip6t_log_fini(void)
 {
        nf_log_unregister_logger(&ip6t_logger);
-       ip6t_unregister_target(&ip6t_log_reg);
+       xt_unregister_target(&ip6t_log_reg);
 }
 
 module_init(ip6t_log_init);
 
 #include <net/ip6_fib.h>
 #include <net/ip6_route.h>
 #include <net/flow.h>
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 #include <linux/netfilter_ipv6/ip6t_REJECT.h>
 
        } else if (rejinfo->with == IP6T_TCP_RESET) {
                /* Must specify that it's a TCP packet */
                if (e->ipv6.proto != IPPROTO_TCP
-                   || (e->ipv6.invflags & IP6T_INV_PROTO)) {
+                   || (e->ipv6.invflags & XT_INV_PROTO)) {
                        DEBUGP("ip6t_REJECT: TCP_RESET illegal for non-tcp\n");
                        return 0;
                }
        return 1;
 }
 
-static struct ip6t_target ip6t_reject_reg = {
+static struct xt_target ip6t_reject_reg = {
        .name           = "REJECT",
+       .family         = AF_INET6,
        .target         = reject6_target,
        .targetsize     = sizeof(struct ip6t_reject_info),
        .table          = "filter",
 
 static int __init ip6t_reject_init(void)
 {
-       return ip6t_register_target(&ip6t_reject_reg);
+       return xt_register_target(&ip6t_reject_reg);
 }
 
 static void __exit ip6t_reject_fini(void)
 {
-       ip6t_unregister_target(&ip6t_reject_reg);
+       xt_unregister_target(&ip6t_reject_reg);
 }
 
 module_init(ip6t_reject_init);
 
 #include <net/checksum.h>
 #include <net/ipv6.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 #include <linux/netfilter_ipv6/ip6t_ah.h>
 
        return 1;
 }
 
-static struct ip6t_match ah_match = {
+static struct xt_match ah_match = {
        .name           = "ah",
+       .family         = AF_INET6,
        .match          = match,
        .matchsize      = sizeof(struct ip6t_ah),
        .checkentry     = checkentry,
 
 static int __init ip6t_ah_init(void)
 {
-       return ip6t_register_match(&ah_match);
+       return xt_register_match(&ah_match);
 }
 
 static void __exit ip6t_ah_fini(void)
 {
-       ip6t_unregister_match(&ah_match);
+       xt_unregister_match(&ah_match);
 }
 
 module_init(ip6t_ah_init);
 
 #include <linux/ipv6.h>
 #include <linux/if_ether.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 
 MODULE_DESCRIPTION("IPv6 EUI64 address checking match");
        return 0;
 }
 
-static struct ip6t_match eui64_match = {
+static struct xt_match eui64_match = {
        .name           = "eui64",
+       .family         = AF_INET6,
        .match          = match,
        .matchsize      = sizeof(int),
        .hooks          = (1 << NF_IP6_PRE_ROUTING) | (1 << NF_IP6_LOCAL_IN) |
 
 static int __init ip6t_eui64_init(void)
 {
-       return ip6t_register_match(&eui64_match);
+       return xt_register_match(&eui64_match);
 }
 
 static void __exit ip6t_eui64_fini(void)
 {
-       ip6t_unregister_match(&eui64_match);
+       xt_unregister_match(&eui64_match);
 }
 
 module_init(ip6t_eui64_init);
 
 #include <net/checksum.h>
 #include <net/ipv6.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 #include <linux/netfilter_ipv6/ip6t_frag.h>
 
        return 1;
 }
 
-static struct ip6t_match frag_match = {
+static struct xt_match frag_match = {
        .name           = "frag",
+       .family         = AF_INET6,
        .match          = match,
        .matchsize      = sizeof(struct ip6t_frag),
        .checkentry     = checkentry,
 
 static int __init ip6t_frag_init(void)
 {
-       return ip6t_register_match(&frag_match);
+       return xt_register_match(&frag_match);
 }
 
 static void __exit ip6t_frag_fini(void)
 {
-       ip6t_unregister_match(&frag_match);
+       xt_unregister_match(&frag_match);
 }
 
 module_init(ip6t_frag_init);
 
 
 #include <asm/byteorder.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 #include <linux/netfilter_ipv6/ip6t_opts.h>
 
 
  * published by the Free Software Foundation.
  */
 
+#include <linux/ipv6.h>
 #include <linux/module.h>
 #include <linux/skbuff.h>
 
 #include <linux/netfilter_ipv6/ip6t_hl.h>
-#include <linux/netfilter_ipv6/ip6_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_AUTHOR("Maciej Soltysiak <solt@dns.toxicfilms.tv>");
 MODULE_DESCRIPTION("IP tables Hop Limit matching module");
        return 0;
 }
 
-static struct ip6t_match hl_match = {
+static struct xt_match hl_match = {
        .name           = "hl",
+       .family         = AF_INET6,
        .match          = match,
        .matchsize      = sizeof(struct ip6t_hl_info),
        .me             = THIS_MODULE,
 
 static int __init ip6t_hl_init(void)
 {
-       return ip6t_register_match(&hl_match);
+       return xt_register_match(&hl_match);
 }
 
 static void __exit ip6t_hl_fini(void)
 {
-       ip6t_unregister_match(&hl_match);
-
+       xt_unregister_match(&hl_match);
 }
 
 module_init(ip6t_hl_init);
 
 #include <net/checksum.h>
 #include <net/ipv6.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 #include <linux/netfilter_ipv6/ip6t_ipv6header.h>
 
        return 1;
 }
 
-static struct ip6t_match ip6t_ipv6header_match = {
+static struct xt_match ip6t_ipv6header_match = {
        .name           = "ipv6header",
+       .family         = AF_INET6,
        .match          = &ipv6header_match,
        .matchsize      = sizeof(struct ip6t_ipv6header_info),
        .checkentry     = &ipv6header_checkentry,
 
 static int __init ipv6header_init(void)
 {
-       return ip6t_register_match(&ip6t_ipv6header_match);
+       return xt_register_match(&ip6t_ipv6header_match);
 }
 
 static void __exit ipv6header_exit(void)
 {
-       ip6t_unregister_match(&ip6t_ipv6header_match);
+       xt_unregister_match(&ip6t_ipv6header_match);
 }
 
 module_init(ipv6header_init);
 
 
 #include <linux/netfilter_ipv6/ip6t_owner.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
+#include <linux/netfilter/x_tables.h>
 
 MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");
 MODULE_DESCRIPTION("IP6 tables owner matching module");
        return 1;
 }
 
-static struct ip6t_match owner_match = {
+static struct xt_match owner_match = {
        .name           = "owner",
+       .family         = AF_INET6,
        .match          = match,
        .matchsize      = sizeof(struct ip6t_owner_info),
        .hooks          = (1 << NF_IP6_LOCAL_OUT) | (1 << NF_IP6_POST_ROUTING),
 
 static int __init ip6t_owner_init(void)
 {
-       return ip6t_register_match(&owner_match);
+       return xt_register_match(&owner_match);
 }
 
 static void __exit ip6t_owner_fini(void)
 {
-       ip6t_unregister_match(&owner_match);
+       xt_unregister_match(&owner_match);
 }
 
 module_init(ip6t_owner_init);
 
 
 #include <asm/byteorder.h>
 
+#include <linux/netfilter/x_tables.h>
 #include <linux/netfilter_ipv6/ip6_tables.h>
 #include <linux/netfilter_ipv6/ip6t_rt.h>
 
        return 1;
 }
 
-static struct ip6t_match rt_match = {
+static struct xt_match rt_match = {
        .name           = "rt",
+       .family         = AF_INET6,
        .match          = match,
        .matchsize      = sizeof(struct ip6t_rt),
        .checkentry     = checkentry,
 
 static int __init ip6t_rt_init(void)
 {
-       return ip6t_register_match(&rt_match);
+       return xt_register_match(&rt_match);
 }
 
 static void __exit ip6t_rt_fini(void)
 {
-       ip6t_unregister_match(&rt_match);
+       xt_unregister_match(&rt_match);
 }
 
 module_init(ip6t_rt_init);