Hi. I compiled a page listing the changes to ipt_match ip6t_match ipt_target ip6t_target (and nowadays xt_match and xt_target) during the history of 2.4.28 and 2.6.x (checked until 2.6.19). I took the liberty to rearrange some entries which moved around at various times to make the diffs more useful.

In 2.6.16 ipt_match and ip6t_match were combined to xt_match, and ipt_target and ip6t_target were combined to xt_target. During the transition period 2.6.16-2.6.20 #define aliases were available for the old ipt_* and ip6t_ structs & functions.

2.4.28 (at least)

ipt_matchip6t_matchipt_targetip6t_target
 struct ipt_match
 {
        struct list_head list;
 
        const char name[IPT_FUNCTION_MAXNAMELEN];
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
        int (*match)(const struct sk_buff *skb,
                     const struct net_device *in,
                     const struct net_device *out,
                     const void *matchinfo,
                     int offset,
                     const void *hdr,
                     u_int16_t datalen,
                     int *hotdrop);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ipt_ip *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
 struct ip6t_match
 {
        struct list_head list;
 
        const char name[IP6T_FUNCTION_MAXNAMELEN];
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
        int (*match)(const struct sk_buff *skb,
                     const struct net_device *in,
                     const struct net_device *out,
                     const void *matchinfo,
                     int offset,
                     const void *hdr,
                     u_int16_t datalen,
                     int *hotdrop);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ip6t_ip6 *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
 struct ipt_target
 {
        struct list_head list;
 
        const char name[IPT_FUNCTION_MAXNAMELEN];
 
        /* Returns verdict. */
        unsigned int (*target)(struct sk_buff **pskb,
                               unsigned int hooknum,
                               const struct net_device *in,
                               const struct net_device *out,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ipt_entry *e,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
 struct ip6t_target
 {
        struct list_head list;
 
        const char name[IP6T_FUNCTION_MAXNAMELEN];
 
        /* Returns verdict. */
        unsigned int (*target)(struct sk_buff **pskb,
                               unsigned int hooknum,
                               const struct net_device *in,
                               const struct net_device *out,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ip6t_entry *e,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };

2.6.0 - 2.6.9

ipt_matchip6t_matchipt_targetip6t_target
 struct ipt_match
 {
        struct list_head list;
 
        const char name[IPT_FUNCTION_MAXNAMELEN];
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
+       /* Arguments changed since 2.4, as this must now handle
+           non-linear skbs, using skb_copy_bits and
+           skb_ip_make_writable. */
        int (*match)(const struct sk_buff *skb,
                     const struct net_device *in,
                     const struct net_device *out,
                     const void *matchinfo,
                     int offset,
-                    const void *hdr,
-                    u_int16_t datalen,
                     int *hotdrop);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ipt_ip *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
-       /* Set this to THIS_MODULE if you are a module, otherwise NULL */
+       /* Set this to THIS_MODULE. */
        struct module *me;
 };
no changes
 struct ipt_target
 {
        struct list_head list;
 
        const char name[IPT_FUNCTION_MAXNAMELEN];
 
-       /* Returns verdict. */
+       /* Returns verdict.  Argument order changed since 2.4, as this
+           must now handle non-linear skbs, using skb_copy_bits and
+           skb_ip_make_writable. */
        unsigned int (*target)(struct sk_buff **pskb,
-                              unsigned int hooknum,
                               const struct net_device *in,
                               const struct net_device *out,
+                              unsigned int hooknum,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ipt_entry *e,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
-       /* Set this to THIS_MODULE if you are a module, otherwise NULL */
+       /* Set this to THIS_MODULE. */
        struct module *me;
 };
no changes

2.6.10

ipt_matchip6t_matchipt_targetip6t_target
no changes

 {
        struct list_head list;
 
        const char name[IP6T_FUNCTION_MAXNAMELEN];
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
+       /* Arguments changed since 2.6.9, as this must now handle
+          non-linear skb, using skb_header_pointer and
+          skb_ip_make_writable. */
        int (*match)(const struct sk_buff *skb,
                     const struct net_device *in,
                     const struct net_device *out,
                     const void *matchinfo,
                     int offset,
-                    const void *hdr,
-                    u_int16_t datalen,
+                    unsigned int protoff,
                     int *hotdrop);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ip6t_ip6 *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
no changes
 struct ip6t_target
 {
        struct list_head list;
 
        const char name[IP6T_FUNCTION_MAXNAMELEN];
 
-       /* Returns verdict. */
+       /* Returns verdict. Argument order changed since 2.6.9, as this
+          must now handle non-linear skbs, using skb_copy_bits and
+          skb_ip_make_writable. */
        unsigned int (*target)(struct sk_buff **pskb,
-                              unsigned int hooknum,
                               const struct net_device *in,
                               const struct net_device *out,
+                              unsigned int hooknum,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ip6t_entry *e,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };

2.6.11 - 2.6.14

ipt_matchip6t_matchipt_targetip6t_target
 struct ipt_match
 {
        struct list_head list;
 
-       const char name[IPT_FUNCTION_MAXNAMELEN];
+       const char name[IPT_FUNCTION_MAXNAMELEN-1];
+
+       u_int8_t revision;
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
        /* Arguments changed since 2.4, as this must now handle
            non-linear skbs, using skb_copy_bits and
            skb_ip_make_writable. */
        int (*match)(const struct sk_buff *skb,
                     const struct net_device *in,
                     const struct net_device *out,
                     const void *matchinfo,
                     int offset,
                     int *hotdrop);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ipt_ip *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
        /* Set this to THIS_MODULE. */
        struct module *me;
 };
no changes
 struct ipt_target
 {
        struct list_head list;
 
-       const char name[IPT_FUNCTION_MAXNAMELEN];
+       const char name[IPT_FUNCTION_MAXNAMELEN-1];
+
+       u_int8_t revision;
 
        /* Returns verdict.  Argument order changed since 2.4, as this
            must now handle non-linear skbs, using skb_copy_bits and
            skb_ip_make_writable. */
        unsigned int (*target)(struct sk_buff **pskb,
                               const struct net_device *in,
                               const struct net_device *out,
                               unsigned int hooknum,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ipt_entry *e,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
        /* Set this to THIS_MODULE. */
        struct module *me;
 };
no changes

2.6.15

ipt_matchip6t_matchipt_targetip6t_target
no changes
 struct ip6t_match
 {
        struct list_head list;
 
-       const char name[IP6T_FUNCTION_MAXNAMELEN];
+       const char name[IP6T_FUNCTION_MAXNAMELEN-1];
+
+       u_int8_t revision;
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
        /* Arguments changed since 2.6.9, as this must now handle
           non-linear skb, using skb_header_pointer and
           skb_ip_make_writable. */
        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);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ip6t_ip6 *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
no changes
 struct ip6t_target
 {
        struct list_head list;
 
-       const char name[IP6T_FUNCTION_MAXNAMELEN];
+       const char name[IP6T_FUNCTION_MAXNAMELEN-1];
+
+       u_int8_t revision;
 
        /* Returns verdict. Argument order changed since 2.6.9, as this
           must now handle non-linear skbs, using skb_copy_bits and
           skb_ip_make_writable. */
        unsigned int (*target)(struct sk_buff **pskb,
                               const struct net_device *in,
                               const struct net_device *out,
                               unsigned int hooknum,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const struct ip6t_entry *e,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };

2.6.16 (new xt_* replacing ipt_* and ip6t_*)

ipt_match -> xt_matchip6t_match -> xt_matchipt_target -> xt_targetip6t_target -> xt_target
+#define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define ipt_match xt_match

-struct ipt_match
+struct xt_match
 {
        struct list_head list;
 
-       const char name[IPT_FUNCTION_MAXNAMELEN-1];
+       const char name[XT_FUNCTION_MAXNAMELEN-1];
 
        u_int8_t revision;
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
-       /* Arguments changed since 2.4, as this must now handle
-           non-linear skbs, using skb_copy_bits and
-           skb_ip_make_writable. */
+       /* Arguments changed since 2.6.9, as this must now handle
+          non-linear skb, using skb_header_pointer and
+          skb_ip_make_writable. */
        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);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
-                         const struct ipt_ip *ip,
+                         const void *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
-       /* Set this to THIS_MODULE. */
+       /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
+#define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define ip6t_match xt_match

-struct ip6t_match
+struct xt_match
 {
        struct list_head list;
 
-       const char name[IP6T_FUNCTION_MAXNAMELEN-1];
+       const char name[XT_FUNCTION_MAXNAMELEN-1];
 
        u_int8_t revision;
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
        /* Arguments changed since 2.6.9, as this must now handle
           non-linear skb, using skb_header_pointer and
           skb_ip_make_writable. */
        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);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
-                         const struct ip6t_ip6 *ip,
+                         const void *ip,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *matchinfo, unsigned int matchinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
+#define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define ipt_target xt_target

-struct ipt_target
+struct xt_target
 {
        struct list_head list;
 
-       const char name[IPT_FUNCTION_MAXNAMELEN-1];
+       const char name[XT_FUNCTION_MAXNAMELEN-1];
 
        u_int8_t revision;
 
-       /* Returns verdict.  Argument order changed since 2.4, as this
-           must now handle non-linear skbs, using skb_copy_bits and
-           skb_ip_make_writable. */
+       /* Returns verdict. Argument order changed since 2.6.9, as this
+          must now handle non-linear skbs, using skb_copy_bits and
+          skb_ip_make_writable. */
        unsigned int (*target)(struct sk_buff **pskb,
                               const struct net_device *in,
                               const struct net_device *out,
                               unsigned int hooknum,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
-                         const struct ipt_entry *e,
+                         const void *entry,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
-       /* Set this to THIS_MODULE. */
+       /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
+#define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
+#define ip6t_target xt_target

-struct ip6t_target
+struct xt_target
 {
        struct list_head list;
 
-       const char name[IP6T_FUNCTION_MAXNAMELEN-1];
+       const char name[XT_FUNCTION_MAXNAMELEN-1];
 
        u_int8_t revision;
 
        /* Returns verdict. Argument order changed since 2.6.9, as this
           must now handle non-linear skbs, using skb_copy_bits and
           skb_ip_make_writable. */
        unsigned int (*target)(struct sk_buff **pskb,
                               const struct net_device *in,
                               const struct net_device *out,
                               unsigned int hooknum,
                               const void *targinfo,
                               void *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
-                         const struct ip6t_entry *e,
+                         const void *entry,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
        void (*destroy)(void *targinfo, unsigned int targinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };

2.6.17 - 2.6.18

xt_matchxt_target
 struct xt_match
 {
        struct list_head list;
 
        const char name[XT_FUNCTION_MAXNAMELEN-1];
 
-       u_int8_t revision;
-
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
        /* Arguments changed since 2.6.9, as this must now handle
           non-linear skb, using skb_header_pointer and
           skb_ip_make_writable. */
        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);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const void *ip,
+                         const struct xt_match *match,
                          void *matchinfo,
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
-       void (*destroy)(void *matchinfo, unsigned int matchinfosize);
+       void (*destroy)(const struct xt_match *match, void *matchinfo,
+                       unsigned int matchinfosize);
+
+       /* Called when userspace align differs from kernel space one */
+       int (*compat)(void *match, void **dstptr, int *size, int convert);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
+
+       char *table;
+       unsigned int matchsize;
+       unsigned int hooks;
+       unsigned short proto;
+
+       unsigned short family;
+       u_int8_t revision;
 };
 struct xt_target
 {
        struct list_head list;
 
        const char name[XT_FUNCTION_MAXNAMELEN-1];
 
-       u_int8_t revision;
-
        /* Returns verdict. Argument order changed since 2.6.9, as this
           must now handle non-linear skbs, using skb_copy_bits and
           skb_ip_make_writable. */
        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 *userdata);
 
        /* Called when user tries to insert an entry of this type:
            hook_mask is a bitmask of hooks from which it can be
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const void *entry,
+                         const struct xt_target *target,
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
-       void (*destroy)(void *targinfo, unsigned int targinfosize);
+       void (*destroy)(const struct xt_target *target, void *targinfo,
+                       unsigned int targinfosize);
+
+       /* Called when userspace align differs from kernel space one */
+       int (*compat)(void *target, void **dstptr, int *size, int convert);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
+
+       char *table;
+       unsigned int targetsize;
+       unsigned int hooks;
+       unsigned short proto;
+
+       unsigned short family;
+       u_int8_t revision;
 };

2.6.19 - at least 2.6.21

xt_matchxt_target
 struct xt_match
 {
        struct list_head list;
 
        const char name[XT_FUNCTION_MAXNAMELEN-1];
 
        /* Return true or false: return FALSE and set *hotdrop = 1 to
            force immediate packet drop. */
        /* Arguments changed since 2.6.9, as this must now handle
           non-linear skb, using skb_header_pointer and
           skb_ip_make_writable. */
        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);
 
        /* Called when user tries to insert an entry of this type. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const void *ip,
                          const struct xt_match *match,
                          void *matchinfo,
-                         unsigned int matchinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
-       void (*destroy)(const struct xt_match *match, void *matchinfo,
-                       unsigned int matchinfosize);
+       void (*destroy)(const struct xt_match *match, void *matchinfo);
 
        /* Called when userspace align differs from kernel space one */
-       int (*compat)(void *match, void **dstptr, int *size, int convert);
+       void (*compat_from_user)(void *dst, void *src);
+       int (*compat_to_user)(void __user *dst, void *src);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 
+       /* Free to use by each match */
+       unsigned long data;
+
        char *table;
        unsigned int matchsize;
+       unsigned int compatsize;
        unsigned int hooks;
        unsigned short proto;
 
        unsigned short family;
        u_int8_t revision;
 };
 struct xt_target
 {
        struct list_head list;
 
        const char name[XT_FUNCTION_MAXNAMELEN-1];
 
        /* Returns verdict. Argument order changed since 2.6.9, as this
           must now handle non-linear skbs, using skb_copy_bits and
           skb_ip_make_writable. */
        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 *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
            called. */
        /* Should return true or false. */
        int (*checkentry)(const char *tablename,
                          const void *entry,
                          const struct xt_target *target,
                          void *targinfo,
-                         unsigned int targinfosize,
                          unsigned int hook_mask);
 
        /* Called when entry of this type deleted. */
-       void (*destroy)(const struct xt_target *target, void *targinfo,
-                       unsigned int targinfosize);
+       void (*destroy)(const struct xt_target *target, void *targinfo);
 
        /* Called when userspace align differs from kernel space one */
-       int (*compat)(void *target, void **dstptr, int *size, int convert);
+       void (*compat_from_user)(void *dst, void *src);
+       int (*compat_to_user)(void __user *dst, void *src);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 
        char *table;
        unsigned int targetsize;
+       unsigned int compatsize;
        unsigned int hooks;
        unsigned short proto;
 
        unsigned short family;
        u_int8_t revision;
 };