Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b296da1 authored by Hangbin Liu's avatar Hangbin Liu Committed by Greg Kroah-Hartman
Browse files

vti: do not confirm neighbor when do pmtu update



[ Upstream commit 8247a79efa2f28b44329f363272550c1738377de ]

When do IPv6 tunnel PMTU update and calls __ip6_rt_update_pmtu() in the end,
we should not call dst_confirm_neigh() as there is no two-way communication.

Although vti and vti6 are immune to this problem because they are IFF_NOARP
interfaces, as Guillaume pointed. There is still no sense to confirm neighbour
here.

v5: Update commit description.
v4: No change.
v3: Do not remove dst_confirm_neigh, but add a new bool parameter in
    dst_ops.update_pmtu to control whether we should do neighbor confirm.
    Also split the big patch to small ones for each area.
v2: Remove dst_confirm_neigh in __ip6_rt_update_pmtu.

Reviewed-by: default avatarGuillaume Nault <gnault@redhat.com>
Acked-by: default avatarDavid Ahern <dsahern@gmail.com>
Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b1467e87
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -244,7 +244,7 @@ static netdev_tx_t vti_xmit(struct sk_buff *skb, struct net_device *dev,


	mtu = dst_mtu(dst);
	mtu = dst_mtu(dst);
	if (skb->len > mtu) {
	if (skb->len > mtu) {
		skb_dst_update_pmtu(skb, mtu);
		skb_dst_update_pmtu_no_confirm(skb, mtu);
		if (skb->protocol == htons(ETH_P_IP)) {
		if (skb->protocol == htons(ETH_P_IP)) {
			icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
			icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
				  htonl(mtu));
				  htonl(mtu));
+1 −1
Original line number Original line Diff line number Diff line
@@ -483,7 +483,7 @@ vti6_xmit(struct sk_buff *skb, struct net_device *dev, struct flowi *fl)


	mtu = dst_mtu(dst);
	mtu = dst_mtu(dst);
	if (skb->len > mtu) {
	if (skb->len > mtu) {
		skb_dst_update_pmtu(skb, mtu);
		skb_dst_update_pmtu_no_confirm(skb, mtu);


		if (skb->protocol == htons(ETH_P_IPV6)) {
		if (skb->protocol == htons(ETH_P_IPV6)) {
			if (mtu < IPV6_MIN_MTU)
			if (mtu < IPV6_MIN_MTU)