return skb;
 }
 
-static void ndisc_send_skb(struct sk_buff *skb, struct net_device *dev,
+static void ndisc_send_skb(struct sk_buff *skb,
                           const struct in6_addr *daddr,
                           const struct in6_addr *saddr,
                           struct icmp6hdr *icmp6h)
 {
        struct flowi6 fl6;
        struct dst_entry *dst;
-       struct net *net = dev_net(dev);
+       struct net *net = dev_net(skb->dev);
        struct sock *sk = net->ipv6.ndisc_sk;
        struct inet6_dev *idev;
        int err;
 
        type = icmp6h->icmp6_type;
 
-       icmpv6_flow_init(sk, &fl6, type, saddr, daddr, dev->ifindex);
-       dst = icmp6_dst_alloc(dev, &fl6);
+       icmpv6_flow_init(sk, &fl6, type, saddr, daddr, skb->dev->ifindex);
+       dst = icmp6_dst_alloc(skb->dev, &fl6);
        if (IS_ERR(dst)) {
                kfree_skb(skb);
                return;
        if (!skb)
                return;
 
-       ndisc_send_skb(skb, dev, daddr, saddr, icmp6h);
+       ndisc_send_skb(skb, daddr, saddr, icmp6h);
 }
 
 static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,