datapath: Avoid confusing tunnels that have different types.
authorBen Pfaff <blp@nicira.com>
Fri, 14 Oct 2011 21:33:11 +0000 (14:33 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 17 Oct 2011 15:59:44 +0000 (08:59 -0700)
Without this change, the following commands succeed:
    # ovs-dpctl add-if br1 gre1,type=gre,remote_ip=1.2.3.4,local_ip=2.3.4.5
    # ovs-dpctl add-if br1 gre0,type=gre,remote_ip=1.2.3.4
but if they are run in the opposite order, they fail with:
    ovs-dpctl: adding gre1 to br1 failed (File exists)

This fixes the problem.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
datapath/tunnel.c

index 5b3d7f51d6694919d82927093fdf31d7e0c89197..e97b9f216ed85f133fc2d1e04d1399c419ec556a 100644 (file)
@@ -1326,10 +1326,7 @@ static int tnl_set_config(struct nlattr *options, const struct tnl_ops *tnl_ops,
 
        mutable->tunnel_hlen += sizeof(struct iphdr);
 
-       old_vport = tnl_find_port(mutable->key.saddr, mutable->key.daddr,
-                                 mutable->key.in_key, mutable->key.tunnel_type,
-                                 &old_mutable);
-
+       old_vport = port_table_lookup(&mutable->key, &old_mutable);
        if (old_vport && old_vport != cur_vport)
                return -EEXIST;