X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Ftunnel.c;h=8d5a6d47cb09c1c54fb5f79ef042d8e1bfe846b7;hb=26fd9d16d32078ccbea0d8a7bc87d2ed4793039f;hp=83d2c413170341ffa86c2a6607918efb382d3aae;hpb=c25ea53406a819bc2acff7b50e804c21f307bdec;p=sliver-openvswitch.git diff --git a/datapath/tunnel.c b/datapath/tunnel.c index 83d2c4131..8d5a6d47c 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -280,6 +280,15 @@ int ovs_tnl_send(struct vport *vport, struct sk_buff *skb) /* Push Tunnel header. */ tnl_vport->tnl_ops->build_header(vport, skb, tunnel_hlen); + /* + * Allow our local IP stack to fragment the outer packet even + * if the DF bit is set as a last resort. We also need to + * force selection of an IP ID here because Linux will + * otherwise leave it at 0 if the packet originally had DF set. + */ + skb->local_df = 1; + __ip_select_ident(ip_hdr(skb), skb_dst(skb), 0); + /* Push IP header. */ iph = ip_hdr(skb); iph->version = 4;