On Wed, Apr 13, 2022 at 05:30:19PM -0400, Rosemarie O'Riorden wrote:
> When OVS sees a tunnel push with a nested list next, it will not
> clone the packet, as a clone is not needed. However, a clone action will
> still be created with the tunnel push encapulated inside. There is no
> need to create the clone action in this case, as extra parsing will need
> to be performed, which is less efficient.
>
> Signed-off-by: Rosemarie O'Riorden <[email protected]>
> ---
> v2:
> - Fixes tests that are affected by this change
>
> ofproto/ofproto-dpif-xlate.c | 15 ++++--
> tests/nsh.at | 6 +--
> tests/packet-type-aware.at | 24 ++++-----
> tests/tunnel-push-pop-ipv6.at | 20 ++++----
> tests/tunnel-push-pop.at | 95 +++++++++++++++++++++++++----------
> 5 files changed, 103 insertions(+), 57 deletions(-)
>
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 9bd0b0a38..319bb6db5 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -3720,7 +3720,10 @@ native_tunnel_output(struct xlate_ctx *ctx, const
> struct xport *xport,
> size_t clone_ofs = 0;
> size_t push_action_size;
>
> - clone_ofs = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_CLONE);
> + if (!is_last_action) {
> + clone_ofs = nl_msg_start_nested(ctx->odp_actions,
> + OVS_ACTION_ATTR_CLONE);
> + }
Hi, this breaks tunnel encap offload, we should also consider it in :
parse_flow_actions
parse_clone_actions
> odp_put_tnl_push_action(ctx->odp_actions, &tnl_push_data);
> push_action_size = ctx->odp_actions->size;
>
> @@ -3763,10 +3766,12 @@ native_tunnel_output(struct xlate_ctx *ctx, const
> struct xport *xport,
> }
> xlate_cache_steal_entries(backup_xcache, ctx->xin->xcache);
>
> - if (ctx->odp_actions->size > push_action_size) {
> - nl_msg_end_non_empty_nested(ctx->odp_actions, clone_ofs);
> - } else {
> - nl_msg_cancel_nested(ctx->odp_actions, clone_ofs);
> + if (!is_last_action) {
> + if (ctx->odp_actions->size > push_action_size) {
> + nl_msg_end_non_empty_nested(ctx->odp_actions, clone_ofs);
> + } else {
> + nl_msg_cancel_nested(ctx->odp_actions, clone_ofs);
> + }
> }
>
> /* Restore context status. */
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev