X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=datapath%2Ftunnel.c;h=ec3ad936f824fbaf6857a38ef9a79a1bb53b13df;hb=7f009380f61edda538c4c4d6333a14014258ca8f;hp=b6bd6f65dc0204e1422a83137c4b2981c9bfbe1c;hpb=c3827f619a38d3d202020838e1f92860046a3dbe;p=openvswitch diff --git a/datapath/tunnel.c b/datapath/tunnel.c index b6bd6f65..ec3ad936 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -29,6 +29,7 @@ #include #include "actions.h" +#include "checksum.h" #include "datapath.h" #include "table.h" #include "tunnel.h" @@ -883,22 +884,17 @@ static struct tnl_cache *build_cache(struct vport *vport, #endif if (is_internal_dev(rt_dst(rt).dev)) { - int err; + struct odp_flow_key flow_key; + struct tbl_node *flow_node; struct vport *vport; - struct dp_port *dp_port; struct sk_buff *skb; bool is_frag; - struct odp_flow_key flow_key; - struct tbl_node *flow_node; + int err; vport = internal_dev_get_vport(rt_dst(rt).dev); if (!vport) goto done; - dp_port = vport_get_dp_port(vport); - if (!dp_port) - goto done; - skb = alloc_skb(cache->len, GFP_ATOMIC); if (!skb) goto done; @@ -906,13 +902,13 @@ static struct tnl_cache *build_cache(struct vport *vport, __skb_put(skb, cache->len); memcpy(skb->data, get_cached_header(cache), cache->len); - err = flow_extract(skb, dp_port->port_no, &flow_key, &is_frag); + err = flow_extract(skb, vport->port_no, &flow_key, &is_frag); kfree_skb(skb); if (err || is_frag) goto done; - flow_node = tbl_lookup(rcu_dereference(dp_port->dp->table), + flow_node = tbl_lookup(rcu_dereference(vport->dp->table), &flow_key, flow_hash(&flow_key), flow_cmp); if (flow_node) { @@ -1352,7 +1348,7 @@ struct vport *tnl_create(const struct vport_parms *parms, int initial_frag_id; int err; - vport = vport_alloc(sizeof(struct tnl_vport), vport_ops); + vport = vport_alloc(sizeof(struct tnl_vport), vport_ops, parms); if (IS_ERR(vport)) { err = PTR_ERR(vport); goto error;