If the inside packet is fragmented already, Linux kernel hands us
packets with skb->ignore_df=0.  Since this is applied to the encapsulated
packet, the kernel will then refuse to fragment the resulting UDP/IPv6
packet (for IPv4, it seems to look at the actual DF bit, which does
not exist for IPv6).

Always set ignore_df=1 in the udp6 output path.

Fixes t_client tests with "ping -s 3000" across UDP6 tunnels.

Signed-off-by: Gert Doering <g...@greenie.muc.de>
---
 drivers/net/ovpn-dco/udp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ovpn-dco/udp.c b/drivers/net/ovpn-dco/udp.c
index 4c54068..9416338 100644
--- a/drivers/net/ovpn-dco/udp.c
+++ b/drivers/net/ovpn-dco/udp.c
@@ -215,6 +215,9 @@ static int ovpn_udp6_output(struct ovpn_struct *ovpn, 
struct ovpn_bind *bind,
        dst_cache_set_ip6(cache, dst, &fl.saddr);
 
 transmit:
+       /* always permit openvpn-created packets to be (outside) fragmented */
+       skb->ignore_df = 1;
+
        udp_tunnel6_xmit_skb(dst, sk, skb, skb->dev, &fl.saddr, &fl.daddr, 0,
                             ip6_dst_hoplimit(dst), 0, fl.fl6_sport,
                             fl.fl6_dport, udp_get_no_check6_tx(sk));
-- 
2.25.1



_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to