projects
/
openvswitch
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tunnel: Zero keys if marked as not present.
[openvswitch]
/
datapath
/
vport-gre.c
diff --git
a/datapath/vport-gre.c
b/datapath/vport-gre.c
index 7f8bc9a70bd5685e6d99b46fc00cf274b4d3e59f..3c134993086c0eaa5f2edfc2f25186f3f001abb6 100644
(file)
--- a/
datapath/vport-gre.c
+++ b/
datapath/vport-gre.c
@@
-353,15
+353,16
@@
static bool check_checksum(struct sk_buff *skb)
}
static u32 gre_flags_to_tunnel_flags(const struct tnl_mutable_config *mutable,
}
static u32 gre_flags_to_tunnel_flags(const struct tnl_mutable_config *mutable,
- __be16 gre_flags)
+ __be16 gre_flags
, __be64 *key
)
{
u32 tunnel_flags = 0;
if (gre_flags & GRE_KEY) {
{
u32 tunnel_flags = 0;
if (gre_flags & GRE_KEY) {
- if (mutable->key.daddr && (mutable->flags & TNL_F_IN_KEY_MATCH))
- tunnel_flags = OVS_TNL_F_KEY;
- else if (!mutable->key.daddr)
+ if (mutable->flags & TNL_F_IN_KEY_MATCH ||
+ !mutable->key.daddr)
tunnel_flags = OVS_TNL_F_KEY;
tunnel_flags = OVS_TNL_F_KEY;
+ else
+ *key = 0;
}
if (gre_flags & GRE_CSUM)
}
if (gre_flags & GRE_CSUM)
@@
-378,7
+379,8
@@
static int gre_rcv(struct sk_buff *skb)
int hdr_len;
struct iphdr *iph;
struct ovs_key_ipv4_tunnel tun_key;
int hdr_len;
struct iphdr *iph;
struct ovs_key_ipv4_tunnel tun_key;
- __be16 flags;
+ __be16 gre_flags;
+ u32 tnl_flags;
__be64 key;
u32 tunnel_type;
__be64 key;
u32 tunnel_type;
@@
-387,7
+389,7
@@
static int gre_rcv(struct sk_buff *skb)
if (unlikely(!check_checksum(skb)))
goto error;
if (unlikely(!check_checksum(skb)))
goto error;
- hdr_len = parse_header(ip_hdr(skb), &flags, &key, &tunnel_type);
+ hdr_len = parse_header(ip_hdr(skb), &
gre_
flags, &key, &tunnel_type);
if (unlikely(hdr_len < 0))
goto error;
if (unlikely(hdr_len < 0))
goto error;
@@
-402,7
+404,8
@@
static int gre_rcv(struct sk_buff *skb)
goto error;
}
goto error;
}
- tnl_tun_key_init(&tun_key, iph, key, gre_flags_to_tunnel_flags(mutable, flags));
+ tnl_flags = gre_flags_to_tunnel_flags(mutable, gre_flags, &key);
+ tnl_tun_key_init(&tun_key, iph, key, tnl_flags);
OVS_CB(skb)->tun_key = &tun_key;
__skb_pull(skb, hdr_len);
OVS_CB(skb)->tun_key = &tun_key;
__skb_pull(skb, hdr_len);