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