extern void arpt_unregister_table(struct xt_table *table);
 extern unsigned int arpt_do_table(struct sk_buff *skb,
                                  unsigned int hook,
-                                 const struct net_device *in,
-                                 const struct net_device *out,
+                                 const struct nf_hook_state *state,
                                  struct xt_table *table);
 
 #ifdef CONFIG_COMPAT
 
 
 unsigned int arpt_do_table(struct sk_buff *skb,
                           unsigned int hook,
-                          const struct net_device *in,
-                          const struct net_device *out,
+                          const struct nf_hook_state *state,
                           struct xt_table *table)
 {
        static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));
        if (!pskb_may_pull(skb, arp_hdr_len(skb->dev)))
                return NF_DROP;
 
-       indev = in ? in->name : nulldevname;
-       outdev = out ? out->name : nulldevname;
+       indev = state->in ? state->in->name : nulldevname;
+       outdev = state->out ? state->out->name : nulldevname;
 
        local_bh_disable();
        addend = xt_write_recseq_begin();
        e = get_entry(table_base, private->hook_entry[hook]);
        back = get_entry(table_base, private->underflow[hook]);
 
-       acpar.in      = in;
-       acpar.out     = out;
+       acpar.in      = state->in;
+       acpar.out     = state->out;
        acpar.hooknum = hook;
        acpar.family  = NFPROTO_ARP;
        acpar.hotdrop = false;
 
 {
        const struct net *net = dev_net(state->in ? state->in : state->out);
 
-       return arpt_do_table(skb, ops->hooknum, state->in, state->out,
+       return arpt_do_table(skb, ops->hooknum, state,
                             net->ipv4.arptable_filter);
 }