Acked-by: Ethan Jackson <et...@nicira.com>

On Sat, Mar 1, 2014 at 5:25 PM, Ben Pfaff <b...@nicira.com> wrote:
> When a flow_tnl is being translated to Netlink attributes, the tun_id field
> was included only if the FLOW_TNL_F_KEY flag was set.  This meant that for
> a mask, where one would not necessarily expect that flag to be set even if
> there were a key, the tun_id could be omitted even if it were nonzero.
> This led to kernel flows that did not match on a field that was required
> to be matched (possibly causing incorrect treatment of packets) and
> premature deletion of kernel flows due to mask mismatch.  This commit
> fixes the problem.
>
> Bug #1192516.
> Reported-by: Krishna Miriyala <miriya...@vmware.com>
> Signed-off-by: Ben Pfaff <b...@nicira.com>
> ---
>  lib/odp-util.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/lib/odp-util.c b/lib/odp-util.c
> index d86dbbb..463f008 100644
> --- a/lib/odp-util.c
> +++ b/lib/odp-util.c
> @@ -872,7 +872,8 @@ tun_key_to_attr(struct ofpbuf *a, const struct flow_tnl 
> *tun_key)
>
>      tun_key_ofs = nl_msg_start_nested(a, OVS_KEY_ATTR_TUNNEL);
>
> -    if (tun_key->flags & FLOW_TNL_F_KEY) {
> +    /* tun_id != 0 without FLOW_TNL_F_KEY is valid if tun_key is a mask. */
> +    if (tun_key->tun_id || tun_key->flags & FLOW_TNL_F_KEY) {
>          nl_msg_put_be64(a, OVS_TUNNEL_KEY_ATTR_ID, tun_key->tun_id);
>      }
>      if (tun_key->ip_src) {
> --
> 1.8.5.3
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to