|
@@ -336,7 +336,8 @@ int ip6_forward(struct sk_buff *skb)
|
|
|
goto drop;
|
|
|
|
|
|
if (!xfrm6_policy_check(NULL, XFRM_POLICY_FWD, skb)) {
|
|
|
- IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_INDISCARDS);
|
|
|
+ IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
|
|
|
+ IPSTATS_MIB_INDISCARDS);
|
|
|
goto drop;
|
|
|
}
|
|
|
|
|
@@ -370,8 +371,8 @@ int ip6_forward(struct sk_buff *skb)
|
|
|
/* Force OUTPUT device used as source address */
|
|
|
skb->dev = dst->dev;
|
|
|
icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, 0);
|
|
|
- IP6_INC_STATS_BH(net,
|
|
|
- ip6_dst_idev(dst), IPSTATS_MIB_INHDRERRORS);
|
|
|
+ IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
|
|
|
+ IPSTATS_MIB_INHDRERRORS);
|
|
|
|
|
|
kfree_skb(skb);
|
|
|
return -ETIMEDOUT;
|
|
@@ -384,14 +385,15 @@ int ip6_forward(struct sk_buff *skb)
|
|
|
if (proxied > 0)
|
|
|
return ip6_input(skb);
|
|
|
else if (proxied < 0) {
|
|
|
- IP6_INC_STATS(net, ip6_dst_idev(dst),
|
|
|
- IPSTATS_MIB_INDISCARDS);
|
|
|
+ IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
|
|
|
+ IPSTATS_MIB_INDISCARDS);
|
|
|
goto drop;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!xfrm6_route_forward(skb)) {
|
|
|
- IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_INDISCARDS);
|
|
|
+ IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
|
|
|
+ IPSTATS_MIB_INDISCARDS);
|
|
|
goto drop;
|
|
|
}
|
|
|
dst = skb_dst(skb);
|
|
@@ -448,16 +450,17 @@ int ip6_forward(struct sk_buff *skb)
|
|
|
/* Again, force OUTPUT device used as source address */
|
|
|
skb->dev = dst->dev;
|
|
|
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu);
|
|
|
- IP6_INC_STATS_BH(net,
|
|
|
- ip6_dst_idev(dst), IPSTATS_MIB_INTOOBIGERRORS);
|
|
|
- IP6_INC_STATS_BH(net,
|
|
|
- ip6_dst_idev(dst), IPSTATS_MIB_FRAGFAILS);
|
|
|
+ IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
|
|
|
+ IPSTATS_MIB_INTOOBIGERRORS);
|
|
|
+ IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
|
|
|
+ IPSTATS_MIB_FRAGFAILS);
|
|
|
kfree_skb(skb);
|
|
|
return -EMSGSIZE;
|
|
|
}
|
|
|
|
|
|
if (skb_cow(skb, dst->dev->hard_header_len)) {
|
|
|
- IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTDISCARDS);
|
|
|
+ IP6_INC_STATS_BH(net, ip6_dst_idev(dst),
|
|
|
+ IPSTATS_MIB_OUTDISCARDS);
|
|
|
goto drop;
|
|
|
}
|
|
|
|