facet_execute() should rely on facet_update_stats() to update the
relevant facet's used parameter.
Before this patch, in very rare cases, the current practice could
lead to assertion failures. The used value of a facet could be
slightly in the future due to the clocks being out of sync between
the kernel and user space. Thus manually setting the used
parameter of a facet could put it slightly behind an already pushed
used value causing an assertion failure.
Bug #4745.
assert(ofpbuf_headroom(packet) >= sizeof(struct ofp_packet_in));
flow_extract_stats(&facet->flow, packet, &stats);
+ stats.used = time_msec();
if (execute_odp_actions(ofproto, &facet->flow,
facet->actions, facet->actions_len, packet)) {
- facet->used = time_msec();
facet_update_stats(ofproto, facet, &stats);
- netflow_flow_update_time(ofproto->netflow,
- &facet->nf_flow, facet->used);
}
}