datapath: call tnl_ops only after setting options
authorValient Gough <vgough@pobox.com>
Fri, 25 Feb 2011 05:45:18 +0000 (21:45 -0800)
committerJesse Gross <jesse@nicira.com>
Fri, 25 Feb 2011 20:32:47 +0000 (12:32 -0800)
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 <vgough@pobox.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
datapath/tunnel.c

index a0d9fd9..f1711f1 100644 (file)
@@ -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);