|
@@ -60,6 +60,7 @@ static int ip6_finish_output2(struct sock *sk, struct sk_buff *skb)
|
|
|
{
|
|
|
struct dst_entry *dst = skb_dst(skb);
|
|
|
struct net_device *dev = dst->dev;
|
|
|
+ struct net *net = dev_net(dev);
|
|
|
struct neighbour *neigh;
|
|
|
struct in6_addr *nexthop;
|
|
|
int ret;
|
|
@@ -71,7 +72,7 @@ static int ip6_finish_output2(struct sock *sk, struct sk_buff *skb)
|
|
|
struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb));
|
|
|
|
|
|
if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(sk) &&
|
|
|
- ((mroute6_socket(dev_net(dev), skb) &&
|
|
|
+ ((mroute6_socket(net, skb) &&
|
|
|
!(IP6CB(skb)->flags & IP6SKB_FORWARDED)) ||
|
|
|
ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr,
|
|
|
&ipv6_hdr(skb)->saddr))) {
|
|
@@ -86,15 +87,14 @@ static int ip6_finish_output2(struct sock *sk, struct sk_buff *skb)
|
|
|
dev_loopback_xmit);
|
|
|
|
|
|
if (ipv6_hdr(skb)->hop_limit == 0) {
|
|
|
- IP6_INC_STATS(dev_net(dev), idev,
|
|
|
+ IP6_INC_STATS(net, idev,
|
|
|
IPSTATS_MIB_OUTDISCARDS);
|
|
|
kfree_skb(skb);
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- IP6_UPD_PO_STATS(dev_net(dev), idev, IPSTATS_MIB_OUTMCAST,
|
|
|
- skb->len);
|
|
|
+ IP6_UPD_PO_STATS(net, idev, IPSTATS_MIB_OUTMCAST, skb->len);
|
|
|
|
|
|
if (IPV6_ADDR_MC_SCOPE(&ipv6_hdr(skb)->daddr) <=
|
|
|
IPV6_ADDR_SCOPE_NODELOCAL &&
|
|
@@ -116,8 +116,7 @@ static int ip6_finish_output2(struct sock *sk, struct sk_buff *skb)
|
|
|
}
|
|
|
rcu_read_unlock_bh();
|
|
|
|
|
|
- IP6_INC_STATS(dev_net(dst->dev),
|
|
|
- ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
|
|
|
+ IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES);
|
|
|
kfree_skb(skb);
|
|
|
return -EINVAL;
|
|
|
}
|