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;
}
__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:
}
const struct vport_ops gre_vport_ops = {
- .type = ODP_VPORT_TYPE_GRE,
- .flags = VPORT_F_GEN_STATS | VPORT_F_TUN_ID,
+ .type = OVS_VPORT_TYPE_GRE,
+ .flags = VPORT_F_TUN_ID,
.init = gre_init,
.exit = gre_exit,
.create = gre_create,