From: Valient Gough Date: Fri, 25 Feb 2011 05:45:18 +0000 (-0800) Subject: datapath: call tnl_ops only after setting options X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab182259ed24ebe2027a2ac7a3b8629da43e5a89;p=openvswitch datapath: call tnl_ops only after setting options Calling methods in tnl_ops should be done only after initializing the tunnel configuration options. This patch moves the hdr_len call after the output key setup. Signed-off-by: Valient Gough Signed-off-by: Jesse Gross --- diff --git a/datapath/tunnel.c b/datapath/tunnel.c index a0d9fd95..f1711f1f 100644 --- a/datapath/tunnel.c +++ b/datapath/tunnel.c @@ -1369,12 +1369,6 @@ static int tnl_set_config(struct nlattr *options, const struct tnl_ops *tnl_ops, if (a[ODP_TUNNEL_ATTR_TTL]) mutable->ttl = nla_get_u8(a[ODP_TUNNEL_ATTR_TTL]); - mutable->tunnel_hlen = tnl_ops->hdr_len(mutable); - if (mutable->tunnel_hlen < 0) - return mutable->tunnel_hlen; - - mutable->tunnel_hlen += sizeof(struct iphdr); - mutable->tunnel_type = tnl_ops->tunnel_type; if (!a[ODP_TUNNEL_ATTR_IN_KEY]) { mutable->tunnel_type |= TNL_T_KEY_MATCH; @@ -1389,6 +1383,12 @@ static int tnl_set_config(struct nlattr *options, const struct tnl_ops *tnl_ops, else mutable->out_key = nla_get_be64(a[ODP_TUNNEL_ATTR_OUT_KEY]); + mutable->tunnel_hlen = tnl_ops->hdr_len(mutable); + if (mutable->tunnel_hlen < 0) + return mutable->tunnel_hlen; + + mutable->tunnel_hlen += sizeof(struct iphdr); + old_vport = tnl_find_port(mutable->saddr, mutable->daddr, mutable->in_key, mutable->tunnel_type, &old_mutable);