Acked-by: Jarno Rajahalme <jrajaha...@nicira.com>

> On Jul 29, 2015, at 11:42 PM, Ben Pfaff <b...@nicira.com> wrote:
> 
> This takes advantage of common properties of the invocation of this
> function in both callers (both supply the same 'flow' and 'packet',
> although they write it differently) and avoids the need for a local
> variable in each place.
> 
> Signed-off-by: Ben Pfaff <b...@nicira.com>
> ---
> ofproto/ofproto-dpif-xlate.c | 42 +++++++++++++++++++++---------------------
> 1 file changed, 21 insertions(+), 21 deletions(-)
> 
> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> index 1ecc1e8..017ed06 100644
> --- a/ofproto/ofproto-dpif-xlate.c
> +++ b/ofproto/ofproto-dpif-xlate.c
> @@ -2647,20 +2647,22 @@ fix_sflow_action(struct xlate_ctx *ctx)
>                          ctx->sflow_odp_port, ctx->sflow_n_outputs, cookie);
> }
> 
> -static enum slow_path_reason
> -process_special(struct xlate_ctx *ctx, const struct flow *flow,
> -                const struct xport *xport, const struct dp_packet *packet)
> +static bool
> +process_special(struct xlate_ctx *ctx, const struct xport *xport)
> {
> +    const struct flow *flow = &ctx->xin->flow;
>     struct flow_wildcards *wc = ctx->wc;
>     const struct xbridge *xbridge = ctx->xbridge;
> +    const struct dp_packet *packet = ctx->xin->packet;
> +    enum slow_path_reason slow;
> 
>     if (!xport) {
> -        return 0;
> +        slow = 0;
>     } else if (xport->cfm && cfm_should_process_flow(xport->cfm, flow, wc)) {
>         if (packet) {
>             cfm_process_heartbeat(xport->cfm, packet);
>         }
> -        return SLOW_CFM;
> +        slow = SLOW_CFM;
>     } else if (xport->bfd && bfd_should_process_flow(xport->bfd, flow, wc)) {
>         if (packet) {
>             bfd_process_packet(xport->bfd, flow, packet);
> @@ -2669,13 +2671,13 @@ process_special(struct xlate_ctx *ctx, const struct 
> flow *flow,
>                 ofproto_dpif_monitor_port_send_soon(xport->ofport);
>             }
>         }
> -        return SLOW_BFD;
> +        slow = SLOW_BFD;
>     } else if (xport->xbundle && xport->xbundle->lacp
>                && flow->dl_type == htons(ETH_TYPE_LACP)) {
>         if (packet) {
>             lacp_process_packet(xport->xbundle->lacp, xport->ofport, packet);
>         }
> -        return SLOW_LACP;
> +        slow = SLOW_LACP;
>     } else if ((xbridge->stp || xbridge->rstp) &&
>                stp_should_process_flow(flow, wc)) {
>         if (packet) {
> @@ -2683,14 +2685,21 @@ process_special(struct xlate_ctx *ctx, const struct 
> flow *flow,
>                 ? stp_process_packet(xport, packet)
>                 : rstp_process_packet(xport, packet);
>         }
> -        return SLOW_STP;
> +        slow = SLOW_STP;
>     } else if (xport->lldp && lldp_should_process_flow(xport->lldp, flow)) {
>         if (packet) {
>             lldp_process_packet(xport->lldp, packet);
>         }
> -        return SLOW_LLDP;
> +        slow = SLOW_LLDP;
>     } else {
> -        return 0;
> +        slow = 0;
> +    }
> +
> +    if (slow) {
> +        ctx->xout->slow |= slow;
> +        return true;
> +    } else {
> +        return false;
>     }
> }
> 
> @@ -2890,7 +2899,6 @@ compose_output_action__(struct xlate_ctx *ctx, 
> ofp_port_t ofp_port,
>         struct flow old_flow = ctx->xin->flow;
>         bool old_was_mpls = ctx->was_mpls;
>         cls_version_t old_version = ctx->tables_version;
> -        enum slow_path_reason special;
>         struct ofpbuf old_stack = ctx->stack;
>         union mf_subvalue new_stack[1024 / sizeof(union mf_subvalue)];
>         struct ofpbuf old_action_set = ctx->action_set;
> @@ -2909,11 +2917,7 @@ compose_output_action__(struct xlate_ctx *ctx, 
> ofp_port_t ofp_port,
>         ctx->tables_version
>             = ofproto_dpif_get_tables_version(ctx->xbridge->ofproto);
> 
> -        special = process_special(ctx, &ctx->xin->flow, peer,
> -                                  ctx->xin->packet);
> -        if (special) {
> -            ctx->xout->slow |= special;
> -        } else if (may_receive(peer, ctx)) {
> +        if (!process_special(ctx, peer) && may_receive(peer, ctx)) {
>             if (xport_stp_forward_state(peer) && 
> xport_rstp_forward_state(peer)) {
>                 xlate_table_action(ctx, flow->in_port.ofp_port, 0, true, 
> true);
>                 if (ctx->action_set.size) {
> @@ -4779,7 +4783,6 @@ xlate_actions(struct xlate_in *xin, struct xlate_out 
> *xout)
>     memset(&ctx.base_flow.tunnel, 0, sizeof ctx.base_flow.tunnel);
>     ofpbuf_reserve(ctx.odp_actions, NL_A_U32_SIZE);
> 
> -    enum slow_path_reason special;
>     struct xport *in_port;
>     struct flow orig_flow;
>     bool tnl_may_send;
> @@ -4951,10 +4954,7 @@ xlate_actions(struct xlate_in *xin, struct xlate_out 
> *xout)
> 
>     /* Do not perform special processing on recirculated packets,
>      * as recirculated packets are not really received by the bridge. */
> -    if (!xin->recirc &&
> -        (special = process_special(&ctx, flow, in_port, ctx.xin->packet))) {
> -        ctx.xout->slow |= special;
> -    } else {
> +    if (xin->recirc || !process_special(&ctx, in_port)) {
>         size_t sample_actions_len;
> 
>         if (flow->in_port.ofp_port
> -- 
> 2.1.3
> 
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to