static inline void nft_set_pktinfo(struct nft_pktinfo *pkt,
                                   const struct nf_hook_ops *ops,
                                   struct sk_buff *skb,
-                                  const struct net_device *in,
-                                  const struct net_device *out)
+                                  const struct nf_hook_state *state)
 {
        pkt->skb = skb;
-       pkt->in = pkt->xt.in = in;
-       pkt->out = pkt->xt.out = out;
+       pkt->in = pkt->xt.in = state->in;
+       pkt->out = pkt->xt.out = state->out;
        pkt->ops = ops;
        pkt->xt.hooknum = ops->hooknum;
        pkt->xt.family = ops->pf;
 
 nft_set_pktinfo_ipv4(struct nft_pktinfo *pkt,
                     const struct nf_hook_ops *ops,
                     struct sk_buff *skb,
-                    const struct net_device *in,
-                    const struct net_device *out)
+                    const struct nf_hook_state *state)
 {
        struct iphdr *ip;
 
-       nft_set_pktinfo(pkt, ops, skb, in, out);
+       nft_set_pktinfo(pkt, ops, skb, state);
 
        ip = ip_hdr(pkt->skb);
        pkt->tprot = ip->protocol;
 
 nft_set_pktinfo_ipv6(struct nft_pktinfo *pkt,
                     const struct nf_hook_ops *ops,
                     struct sk_buff *skb,
-                    const struct net_device *in,
-                    const struct net_device *out)
+                    const struct nf_hook_state *state)
 {
        int protohdr, thoff = 0;
        unsigned short frag_off;
 
-       nft_set_pktinfo(pkt, ops, skb, in, out);
+       nft_set_pktinfo(pkt, ops, skb, state);
 
        protohdr = ipv6_find_hdr(pkt->skb, &thoff, -1, &frag_off, NULL);
        /* If malformed, drop it */
 
 static inline void nft_bridge_set_pktinfo_ipv4(struct nft_pktinfo *pkt,
                                               const struct nf_hook_ops *ops,
                                               struct sk_buff *skb,
-                                              const struct net_device *in,
-                                              const struct net_device *out)
+                                              const struct nf_hook_state *state)
 {
        if (nft_bridge_iphdr_validate(skb))
-               nft_set_pktinfo_ipv4(pkt, ops, skb, in, out);
+               nft_set_pktinfo_ipv4(pkt, ops, skb, state);
        else
-               nft_set_pktinfo(pkt, ops, skb, in, out);
+               nft_set_pktinfo(pkt, ops, skb, state);
 }
 
 static inline void nft_bridge_set_pktinfo_ipv6(struct nft_pktinfo *pkt,
-                                             const struct nf_hook_ops *ops,
-                                             struct sk_buff *skb,
-                                             const struct net_device *in,
-                                             const struct net_device *out)
+                                              const struct nf_hook_ops *ops,
+                                              struct sk_buff *skb,
+                                              const struct nf_hook_state *state)
 {
 #if IS_ENABLED(CONFIG_IPV6)
        if (nft_bridge_ip6hdr_validate(skb) &&
-           nft_set_pktinfo_ipv6(pkt, ops, skb, in, out) == 0)
+           nft_set_pktinfo_ipv6(pkt, ops, skb, state) == 0)
                return;
 #endif
-       nft_set_pktinfo(pkt, ops, skb, in, out);
+       nft_set_pktinfo(pkt, ops, skb, state);
 }
 
 static unsigned int
 
        switch (eth_hdr(skb)->h_proto) {
        case htons(ETH_P_IP):
-               nft_bridge_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
+               nft_bridge_set_pktinfo_ipv4(&pkt, ops, skb, state);
                break;
        case htons(ETH_P_IPV6):
-               nft_bridge_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out);
+               nft_bridge_set_pktinfo_ipv6(&pkt, ops, skb, state);
                break;
        default:
-               nft_set_pktinfo(&pkt, ops, skb, state->in, state->out);
+               nft_set_pktinfo(&pkt, ops, skb, state);
                break;
        }
 
 
 {
        struct nft_pktinfo pkt;
 
-       nft_set_pktinfo(&pkt, ops, skb, state->in, state->out);
+       nft_set_pktinfo(&pkt, ops, skb, state);
 
        return nft_do_chain(&pkt, ops);
 }
 
 {
        struct nft_pktinfo pkt;
 
-       nft_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
+       nft_set_pktinfo_ipv4(&pkt, ops, skb, state);
 
        return nft_do_chain(&pkt, ops);
 }
 
 {
        struct nft_pktinfo pkt;
 
-       nft_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
+       nft_set_pktinfo_ipv4(&pkt, ops, skb, state);
 
        return nft_do_chain(&pkt, ops);
 }
 
            ip_hdrlen(skb) < sizeof(struct iphdr))
                return NF_ACCEPT;
 
-       nft_set_pktinfo_ipv4(&pkt, ops, skb, state->in, state->out);
+       nft_set_pktinfo_ipv4(&pkt, ops, skb, state);
 
        mark = skb->mark;
        iph = ip_hdr(skb);
 
        struct nft_pktinfo pkt;
 
        /* malformed packet, drop it */
-       if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out) < 0)
+       if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state) < 0)
                return NF_DROP;
 
        return nft_do_chain(&pkt, ops);
 
 {
        struct nft_pktinfo pkt;
 
-       nft_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out);
+       nft_set_pktinfo_ipv6(&pkt, ops, skb, state);
 
        return nft_do_chain(&pkt, ops);
 }
 
        u32 mark, flowlabel;
 
        /* malformed packet, drop it */
-       if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state->in, state->out) < 0)
+       if (nft_set_pktinfo_ipv6(&pkt, ops, skb, state) < 0)
                return NF_DROP;
 
        /* save source/dest address, mark, hoplimit, flowlabel, priority */