Thread (4 messages) flat view 4 messages, 2 authors, 2017-09-06

Re: [PATCH v3 2/2] ip6_tunnel: fix ip6 tunnel lookup in collect_md mode

From: 严海双 <hidden>
Date: 2017-09-06 06:39:14
Also in: lkml

On 2017年9月6日, at 上午11:14, Alexei Starovoitov [off-list ref] wrote:

On 9/4/17 1:36 AM, Haishuang Yan wrote:
quoted
In collect_md mode, if the tun dev is down, it still can call
__ip6_tnl_rcv to receive on packets, and the rx statistics increase
improperly.

Fixes: 8d79266bc48c ("ip6_tunnel: add collect_md mode to IPv6 tunnels")
Cc: Alexei Starovoitov <redacted>
Signed-off-by: Haishuang Yan <redacted>

---
Change since v3:
 * Increment rx_dropped if tunnel device is not up, suggested by
 Pravin B Shelar
 * Fix wrong recipient address
---
net/ipv6/ip6_tunnel.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 10a693a..e91d3b6 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -171,8 +171,11 @@ static struct net_device_stats *ip6_get_stats(struct net_device *dev)
	}

	t = rcu_dereference(ip6n->collect_md_tun);
-	if (t)
-		return t;
+	if (t) {
+		if (t->dev->flags & IFF_UP)
+			return t;
+		t->dev->stats.rx_dropped++;
+	}
Why increment the stats only for this drop case?
Because It was suggested by Pravin on v2 commit of the patch.
There are plenty of other conditions where packet
will be dropped in ip6 tunnel. I think it's important
to present consistent behavior to the users,
so I'd increment drop stats either for all drop cases
or for none. And today it's none.
The ! IFF_UP case should probably be return NULL too
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help