Hi Eli,
Thanks for the patch, very interesting work.
I'm trying to understand the patch. some questions below:

On Mon, Jan 20, 2020 at 7:09 AM Eli Britstein <el...@mellanox.com> wrote:
>
> A miss in virtual port offloads means the flow with tnl_pop was
> offloaded, but not the following one. Recover the state and continue
> with SW processing.

Why do we have a miss in virtual port offloads? Isn't we only
offloading to physical port or uplink?
at patch 25/25, you mentioned
"For virtual port (as "vxlan"), HW rules match tunnel properties
(outer header) and inner packet fields, and with a decap action. The
rules are placed on all uplinks as they are the potential for the origin
of the traffic."

>
> Co-authored-by: Eli Britstein <el...@mellanox.com>
> Signed-off-by: Ophir Munk <ophi...@mellanox.com>
> Reviewed-by: Roni Bar Yanai <ron...@mellanox.com>
> Signed-off-by: Eli Britstein <el...@mellanox.com>
> ---
>  lib/netdev-offload-dpdk.c | 34 +++++++++++++++++++++++++++++++++-
>  1 file changed, 33 insertions(+), 1 deletion(-)
>
> diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c
> index fc890b915..c4d77c115 100644
> --- a/lib/netdev-offload-dpdk.c
> +++ b/lib/netdev-offload-dpdk.c
> @@ -385,7 +385,6 @@ put_flow_miss_ctx_id(uint32_t flow_ctx_id)
>      put_context_data_by_id(&flow_miss_ctx_md, flow_ctx_id);
>  }
>
> -OVS_UNUSED
>  static int
>  find_flow_miss_ctx(int flow_ctx_id, struct flow_miss_ctx *ctx)
>  {
> @@ -1769,10 +1768,43 @@ out:
>      return ret;
>  }
>
> +static int
> +netdev_offload_dpdk_hw_miss_packet_recover(struct netdev *netdev,
> +                                           uint32_t flow_miss_ctx_id,
> +                                           struct dp_packet *packet)
> +{
> +    struct flow_miss_ctx flow_miss_ctx;
> +    struct netdev *vport_netdev;
> +
> +    if (find_flow_miss_ctx(flow_miss_ctx_id, &flow_miss_ctx)) {
> +        return -1;
> +    }
> +
> +    if (flow_miss_ctx.vport != ODPP_NONE) {
> +        vport_netdev = netdev_ports_get(flow_miss_ctx.vport,
> +                                        netdev->dpif_type);
> +        if (vport_netdev) {
> +            pkt_metadata_init(&packet->md, flow_miss_ctx.vport);
> +            if (vport_netdev->netdev_class->pop_header) {
> +                vport_netdev->netdev_class->pop_header(packet);

IIUC, we need to pop header here because now we translate
tnl_pop to mark + jump.
So the outer tunnel header does not get pop/unset in hardware,
so at SW side before upcall to OVS, we need to pop here, right?

William
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to