X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fvport-gre.c;h=223644e27194fecbe8e918300554102d765816c0;hb=e2e744a852da97d86594b6ba4b6efeef57086fcf;hp=31d2d4f621efb317131dd5c355d8d79ac71dd0f8;hpb=d1eb60ccff0c2dbef2300cdfc5fead3c2d394beb;p=openvswitch diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c index 31d2d4f6..223644e2 100644 --- a/datapath/vport-gre.c +++ b/datapath/vport-gre.c @@ -48,9 +48,10 @@ static int gre_hdr_len(const struct tnl_port_config *port_config) return len; } -static void gre_build_header(struct sk_buff *skb, - const struct vport *vport, - const struct tnl_mutable_config *mutable) +static struct sk_buff *gre_build_header(struct sk_buff *skb, + const struct vport *vport, + const struct tnl_mutable_config *mutable, + struct dst_entry *dst) { struct gre_base_hdr *greh = (struct gre_base_hdr *)skb_transport_header(skb); __be32 *options = (__be32 *)(skb_network_header(skb) + mutable->tunnel_hlen @@ -81,6 +82,14 @@ static void gre_build_header(struct sk_buff *skb, skb->len - sizeof(struct iphdr), 0)); } + + /* + * Allow our local IP stack to fragment the outer packet even if the + * DF bit is set as a last resort. + */ + skb->local_df = 1; + + return skb; } static int parse_header(struct iphdr *iph, __be16 *flags, __be32 *key)