|
@@ -268,6 +268,7 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,
|
|
|
__be32 remote = parms->iph.daddr;
|
|
|
__be32 local = parms->iph.saddr;
|
|
|
__be32 key = parms->i_key;
|
|
|
+ __be16 flags = parms->i_flags;
|
|
|
int link = parms->link;
|
|
|
struct ip_tunnel *t = NULL;
|
|
|
struct hlist_head *head = ip_bucket(itn, parms);
|
|
@@ -275,9 +276,9 @@ static struct ip_tunnel *ip_tunnel_find(struct ip_tunnel_net *itn,
|
|
|
hlist_for_each_entry_rcu(t, head, hash_node) {
|
|
|
if (local == t->parms.iph.saddr &&
|
|
|
remote == t->parms.iph.daddr &&
|
|
|
- key == t->parms.i_key &&
|
|
|
link == t->parms.link &&
|
|
|
- type == t->dev->type)
|
|
|
+ type == t->dev->type &&
|
|
|
+ ip_tunnel_key_match(&t->parms, flags, key))
|
|
|
break;
|
|
|
}
|
|
|
return t;
|