Skip to content

Commit

Permalink
ofproto-dpif: Avoid figuring out sFlow and IPFIX actions twice.
Browse files Browse the repository at this point in the history
Not only is it easier to re-use the actions we already have, this avoids
potential problems due to the state that add_sflow_action() and
add_ipfix_action() look at having possibly been changed by
do_xlate_actions().  Currently those functions appear to look only at
the flow's 'in_port', which currently can't change.  However, an upcoming
commit will make it possible for actions to change the flow's 'in_port',
and in addition, with this change, one doesn't have to wonder whether these
functions might look at other state that translation might change.

Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
blp committed May 8, 2013
1 parent ccc0968 commit 94aa0d1
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions ofproto/ofproto-dpif.c
Original file line number Diff line number Diff line change
Expand Up @@ -7192,23 +7192,23 @@ xlate_actions(struct action_xlate_ctx *ctx,
} else {
static struct vlog_rate_limit trace_rl = VLOG_RATE_LIMIT_INIT(1, 1);
struct initial_vals initial_vals;
size_t sample_actions_len;
uint32_t local_odp_port;

initial_vals.vlan_tci = ctx->base_flow.vlan_tci;
initial_vals.tunnel_ip_tos = ctx->base_flow.tunnel.ip_tos;

add_sflow_action(ctx);
add_ipfix_action(ctx);
sample_actions_len = ctx->odp_actions->size;

if (tunnel_ecn_ok(ctx) && (!in_port || may_receive(in_port, ctx))) {
do_xlate_actions(ofpacts, ofpacts_len, ctx);

/* We've let OFPP_NORMAL and the learning action look at the
* packet, so drop it now if forwarding is disabled. */
if (in_port && !stp_forward_in_state(in_port->stp_state)) {
ofpbuf_clear(ctx->odp_actions);
add_sflow_action(ctx);
add_ipfix_action(ctx);
ctx->odp_actions->size = sample_actions_len;
}
}

Expand Down

0 comments on commit 94aa0d1

Please sign in to comment.