···3131extern void ip6t_unregister_table(struct net *net, struct xt_table *table);3232extern unsigned int ip6t_do_table(struct sk_buff *skb,3333 unsigned int hook,3434- const struct net_device *in,3535- const struct net_device *out,3434+ const struct nf_hook_state *state,3635 struct xt_table *table);37363837/* Check for an extension */
+6-7
net/ipv6/netfilter/ip6_tables.c
···317317unsigned int318318ip6t_do_table(struct sk_buff *skb,319319 unsigned int hook,320320- const struct net_device *in,321321- const struct net_device *out,320320+ const struct nf_hook_state *state,322321 struct xt_table *table)323322{324323 static const char nulldevname[IFNAMSIZ] __attribute__((aligned(sizeof(long))));···332333 unsigned int addend;333334334335 /* Initialization */335335- indev = in ? in->name : nulldevname;336336- outdev = out ? out->name : nulldevname;336336+ indev = state->in ? state->in->name : nulldevname;337337+ outdev = state->out ? state->out->name : nulldevname;337338 /* We handle fragments by dealing with the first fragment as338339 * if it was a normal packet. All other fragments are treated339340 * normally, except that they will NEVER match rules that ask···341342 * rule is also a fragment-specific rule, non-fragments won't342343 * match it. */343344 acpar.hotdrop = false;344344- acpar.in = in;345345- acpar.out = out;345345+ acpar.in = state->in;346346+ acpar.out = state->out;346347 acpar.family = NFPROTO_IPV6;347348 acpar.hooknum = hook;348349···392393#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE)393394 /* The packet is traced: log it */394395 if (unlikely(skb->nf_trace))395395- trace_packet(skb, hook, in, out,396396+ trace_packet(skb, hook, state->in, state->out,396397 table->name, private, e);397398#endif398399 /* Standard target? */