The patches make "ODP_FIT_TOO_LITTLE" logic more clear for me.
But it seems not fix the problem I mentioned at beginnig:
revalidate_ukey__() always return UKEY_DELETE for igmp, because
flow_wildcards_has_extra() return true.

Should we UKEY_KEEP igmp or other "ODP_FIT_TOO_LITTLE" flows whose
action is already "slow_path(action, match)" ?

On Thu, Jan 25, 2018 at 3:40 AM, Ben Pfaff <[email protected]> wrote:
> OVS datapaths don't understand or parse IGMP fields, but OVS userspace
> does, so this commit updates odp_flow_key_to_flow() to report that properly
> to the caller.
>
> Reported-by: Huanle Han <[email protected]>
> Reported-at: 
> https://mail.openvswitch.org/pipermail/ovs-dev/2018-January/343665.html
> Signed-off-by: Ben Pfaff <[email protected]>
> ---
>  lib/odp-util.c | 5 +++++
>  1 file changed, 5 insertions(+)
>
> diff --git a/lib/odp-util.c b/lib/odp-util.c
> index 6a29a76de5cd..67fd538e8aea 100644
> --- a/lib/odp-util.c
> +++ b/lib/odp-util.c
> @@ -6210,6 +6210,11 @@ parse_l2_5_onward(const struct nlattr 
> *attrs[OVS_KEY_ATTR_MAX + 1],
>                  }
>              }
>          }
> +    } else if (src_flow->nw_proto == IPPROTO_IGMP
> +               && src_flow->dl_type == htons(ETH_TYPE_IP)) {
> +        /* OVS userspace parses the IGMP type, code, and group, but its
> +         * datapaths do not, so there is always missing information. */
> +        return ODP_FIT_TOO_LITTLE;
>      }
>      if (is_mask && expected_bit != OVS_KEY_ATTR_UNSPEC) {
>          if ((flow->tp_src || flow->tp_dst) && flow->nw_proto != 0xff) {
> --
> 2.10.2
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to