summaryrefslogtreecommitdiff
path: root/ofproto/tunnel.c
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2014-03-01 17:15:00 -0800
committerBen Pfaff <blp@nicira.com>2014-03-01 17:38:09 -0800
commit87972a8fcd0f339c7229a014edd4c75fd9c1356c (patch)
tree8710b7da62dff58fc3da10a7fb87f5648f2d5c69 /ofproto/tunnel.c
parent27a8cbbc8e09e66cf4097c40757e797effbdd20c (diff)
downloadopenvswitch-87972a8fcd0f339c7229a014edd4c75fd9c1356c.tar.gz
tunnel: Do not set padding bits in tunnel mask.
On most architectures other than 32-bit x86, struct flow_tnl ends with 4 padding bytes. Until now, tnl_xlate_init() set those bytes to nonzero values in the wildcard mask. When the wildcard mask passed through Netlink attributes and back to userspace, the padding bytes of course became zero again, which caused a wildcard mask mismatch and premature deletion of the flow in revalidation. This commit fixes the problem. Bug #1192516. Reported-by: Krishna Miriyala <miriyalak@vmware.com> Signed-off-by: Ben Pfaff <blp@nicira.com> Acked-by: Ethan Jackson <ethan@nicira.com>
Diffstat (limited to 'ofproto/tunnel.c')
-rw-r--r--ofproto/tunnel.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/ofproto/tunnel.c b/ofproto/tunnel.c
index 38b782f6c..001045a53 100644
--- a/ofproto/tunnel.c
+++ b/ofproto/tunnel.c
@@ -324,10 +324,15 @@ tnl_xlate_init(const struct flow *base_flow, struct flow *flow,
struct flow_wildcards *wc)
{
if (tnl_port_should_receive(flow)) {
- memset(&wc->masks.tunnel, 0xff, sizeof wc->masks.tunnel);
+ wc->masks.tunnel.tun_id = OVS_BE64_MAX;
+ wc->masks.tunnel.ip_src = OVS_BE32_MAX;
+ wc->masks.tunnel.ip_dst = OVS_BE32_MAX;
wc->masks.tunnel.flags = (FLOW_TNL_F_DONT_FRAGMENT |
FLOW_TNL_F_CSUM |
FLOW_TNL_F_KEY);
+ wc->masks.tunnel.ip_tos = UINT8_MAX;
+ wc->masks.tunnel.ip_ttl = UINT8_MAX;
+
memset(&wc->masks.pkt_mark, 0xff, sizeof wc->masks.pkt_mark);
if (!tnl_ecn_ok(base_flow, flow)) {