X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=datapath%2Fvport-gre.c;h=24c53f89680d4b46ee85f180fe8d197e692b3c88;hb=57d6a4c71bd0b4ed477ec273d4d4f84c5e4ed465;hp=fc489e9252b632eecd144aed981afad4255399b2;hpb=c19e653509deb3f1002c4ed99714e16549ec74e9;p=openvswitch diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c index fc489e92..24c53f89 100644 --- a/datapath/vport-gre.c +++ b/datapath/vport-gre.c @@ -103,9 +103,12 @@ static struct sk_buff *gre_update_header(const struct vport *vport, 0)); /* * Allow our local IP stack to fragment the outer packet even if the - * DF bit is set as a last resort. + * 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), dst, 0); return skb; } @@ -342,7 +345,7 @@ static int gre_rcv(struct sk_buff *skb) __skb_pull(skb, hdr_len); skb_postpull_rcsum(skb, skb_transport_header(skb), hdr_len + ETH_HLEN); - tnl_rcv(vport, skb); + tnl_rcv(vport, skb, iph->tos); return 0; error: @@ -385,13 +388,12 @@ static void gre_exit(void) } const struct vport_ops gre_vport_ops = { - .type = ODP_VPORT_TYPE_GRE, + .type = OVS_VPORT_TYPE_GRE, .flags = VPORT_F_GEN_STATS | VPORT_F_TUN_ID, .init = gre_init, .exit = gre_exit, .create = gre_create, .destroy = tnl_destroy, - .set_mtu = tnl_set_mtu, .set_addr = tnl_set_addr, .get_name = tnl_get_name, .get_addr = tnl_get_addr, @@ -400,6 +402,5 @@ const struct vport_ops gre_vport_ops = { .get_dev_flags = vport_gen_get_dev_flags, .is_running = vport_gen_is_running, .get_operstate = vport_gen_get_operstate, - .get_mtu = tnl_get_mtu, .send = tnl_send, };