vrf: Increment Icmp6InMsgs on the original netdev
Get the ingress interface and increment ICMP counters based on that instead of skb->dev when the the dev is a VRF device. This is a follow up on the following message: https://www.spinics.net/lists/netdev/msg560268.html v2: Avoid changing skb->dev since it has unintended effect for local delivery (David Ahern). Signed-off-by: Stephen Suryaputra <ssuryaextr@gmail.com> Reviewed-by: David Ahern <dsahern@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
f0d2ca1531
commit
e1ae5c2ea4
@@ -309,6 +309,22 @@ static inline struct inet6_dev *__in6_dev_get(const struct net_device *dev)
|
||||
return rcu_dereference_rtnl(dev->ip6_ptr);
|
||||
}
|
||||
|
||||
/**
|
||||
* __in6_dev_stats_get - get inet6_dev pointer for stats
|
||||
* @dev: network device
|
||||
* @skb: skb for original incoming interface if neeeded
|
||||
*
|
||||
* Caller must hold rcu_read_lock or RTNL, because this function
|
||||
* does not take a reference on the inet6_dev.
|
||||
*/
|
||||
static inline struct inet6_dev *__in6_dev_stats_get(const struct net_device *dev,
|
||||
const struct sk_buff *skb)
|
||||
{
|
||||
if (netif_is_l3_master(dev))
|
||||
dev = dev_get_by_index_rcu(dev_net(dev), inet6_iif(skb));
|
||||
return __in6_dev_get(dev);
|
||||
}
|
||||
|
||||
/**
|
||||
* __in6_dev_get_safely - get inet6_dev pointer from netdevice
|
||||
* @dev: network device
|
||||
|
Reference in New Issue
Block a user