Through out the code there is the same pattern that occurs in regards to to finish_freezing when ctx->freezing=true or xlate_action_set when ctx->freezing=false. Extract it to common function that is called from those places instead.
Signed-off-by: Ales Musil <[email protected]> --- ofproto/ofproto-dpif-xlate.c | 52 +++++++++++------------------------- 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c index fda802e83..0b5080e39 100644 --- a/ofproto/ofproto-dpif-xlate.c +++ b/ofproto/ofproto-dpif-xlate.c @@ -3861,6 +3861,16 @@ xlate_flow_is_protected(const struct xlate_ctx *ctx, const struct flow *flow, co xport_in->xbundle->protected && xport_out->xbundle->protected); } +static void +xlate_ctx_process_freezing(struct xlate_ctx *ctx) +{ + if (ctx->freezing) { + finish_freezing(ctx); + } else { + xlate_action_set(ctx); + } +} + /* Function handles when a packet is sent from one bridge to another bridge. * * The bridges are internally connected, either with patch ports or with @@ -3921,12 +3931,7 @@ patch_port_output(struct xlate_ctx *ctx, const struct xport *in_dev, xlate_table_action(ctx, flow->in_port.ofp_port, 0, true, true, false, is_last_action, clone_xlate_actions); - if (!ctx->freezing) { - xlate_action_set(ctx); - } - if (ctx->freezing) { - finish_freezing(ctx); - } + xlate_ctx_process_freezing(ctx); } else { /* Forwarding is disabled by STP and RSTP. Let OFPP_NORMAL and * the learning action look at the packet, then drop it. */ @@ -5844,12 +5849,7 @@ clone_xlate_actions(const struct ofpact *actions, size_t actions_len, if (reversible_actions(actions, actions_len) || is_last_action) { old_flow = ctx->xin->flow; do_xlate_actions(actions, actions_len, ctx, is_last_action, false); - if (!ctx->freezing) { - xlate_action_set(ctx); - } - if (ctx->freezing) { - finish_freezing(ctx); - } + xlate_ctx_process_freezing(ctx); goto xlate_done; } @@ -5868,12 +5868,7 @@ clone_xlate_actions(const struct ofpact *actions, size_t actions_len, /* Use clone action as datapath clone. */ offset = nl_msg_start_nested(ctx->odp_actions, OVS_ACTION_ATTR_CLONE); do_xlate_actions(actions, actions_len, ctx, true, false); - if (!ctx->freezing) { - xlate_action_set(ctx); - } - if (ctx->freezing) { - finish_freezing(ctx); - } + xlate_ctx_process_freezing(ctx); nl_msg_end_non_empty_nested(ctx->odp_actions, offset); goto dp_clone_done; } @@ -5884,12 +5879,7 @@ clone_xlate_actions(const struct ofpact *actions, size_t actions_len, ac_offset = nl_msg_start_nested(ctx->odp_actions, OVS_SAMPLE_ATTR_ACTIONS); do_xlate_actions(actions, actions_len, ctx, true, false); - if (!ctx->freezing) { - xlate_action_set(ctx); - } - if (ctx->freezing) { - finish_freezing(ctx); - } + xlate_ctx_process_freezing(ctx); if (nl_msg_end_non_empty_nested(ctx->odp_actions, ac_offset)) { nl_msg_cancel_nested(ctx->odp_actions, offset); } else { @@ -6450,12 +6440,7 @@ xlate_check_pkt_larger(struct xlate_ctx *ctx, value.u8_val = 1; mf_write_subfield_flow(&check_pkt_larger->dst, &value, &ctx->xin->flow); do_xlate_actions(remaining_acts, remaining_acts_len, ctx, true, false); - if (!ctx->freezing) { - xlate_action_set(ctx); - } - if (ctx->freezing) { - finish_freezing(ctx); - } + xlate_ctx_process_freezing(ctx); nl_msg_end_nested(ctx->odp_actions, offset_attr); ctx->base_flow = old_base; @@ -6475,12 +6460,7 @@ xlate_check_pkt_larger(struct xlate_ctx *ctx, value.u8_val = 0; mf_write_subfield_flow(&check_pkt_larger->dst, &value, &ctx->xin->flow); do_xlate_actions(remaining_acts, remaining_acts_len, ctx, true, false); - if (!ctx->freezing) { - xlate_action_set(ctx); - } - if (ctx->freezing) { - finish_freezing(ctx); - } + xlate_ctx_process_freezing(ctx); nl_msg_end_nested(ctx->odp_actions, offset_attr); nl_msg_end_nested(ctx->odp_actions, offset); -- 2.37.2 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
