Acked-by: Jarno Rajahalme <ja...@ovn.org>

It seems to me that the UFID is still passed down alongside the key, assuming 
that is ok.

  Jarno

> On May 10, 2016, at 3:42 PM, Joe Stringer <j...@ovn.org> wrote:
> 
> Windows datapath folks have reported instances where OVS userspace will
> pass down a flow_get request to the datapath using a UFID even though the
> datapath has no support for UFIDs. Since commit e672ff9b4d22
> ("ofproto-dpif: Restore metadata and registers on recirculation."), if a
> flow dump provides a flow that userspace isn't aware of, and the flow
> dump doesn't provide actions for that flow, then userspace will attempt
> a flow_get using just the UFID. This is because the ofproto-dpif layer
> doesn't pass the key down to the dpif layer even if it's available.
> Prior to the above commit, the codepath was only hit if the key was not
> available, which would have implied UFID support. This assumption is now
> broken: An empty set of actions could also trigger flow_get, and
> datapaths without UFID support are free to pass up empty actions lists.
> 
> This patch should fix the issue by ensuring that the flow key is passed
> down, so the dpif layer should have all of the relevant information to
> craft the appropriate datapath flow_get request for the underlying
> datapath, whether UFID is supported or not.
> 
> Fixes: e672ff9b4d22 ("ofproto-dpif: Restore metadata and registers on 
> recirculation.")
> Reported-by: Sairam Venugopal <vsai...@vmware.com>
> Signed-off-by: Joe Stringer <j...@ovn.org>
> ---
> ofproto/ofproto-dpif-upcall.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c
> index f62f46b8e337..52c42ab41a47 100644
> --- a/ofproto/ofproto-dpif-upcall.c
> +++ b/ofproto/ofproto-dpif-upcall.c
> @@ -1518,7 +1518,7 @@ ukey_create_from_dpif_flow(const struct udpif *udpif,
>         /* If the key or actions were not provided by the datapath, fetch the
>          * full flow. */
>         ofpbuf_use_stack(&buf, &stub, sizeof stub);
> -        err = dpif_flow_get(udpif->dpif, NULL, 0, &flow->ufid,
> +        err = dpif_flow_get(udpif->dpif, flow->key, flow->key_len, 
> &flow->ufid,
>                             flow->pmd_id, &buf, &full_flow);
>         if (err) {
>             return err;
> -- 
> 2.1.4
> 
> _______________________________________________
> 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