* meaningful. */
static void
dpif_execute_helper_cb(void *aux_, struct dpif_packet **packets, int cnt,
- struct pkt_metadata *md,
const struct nlattr *action, bool may_steal OVS_UNUSED)
{
struct dpif_execute_helper_aux *aux = aux_;
int type = nl_attr_type(action);
- struct ofpbuf * packet = &packets[0]->ofpbuf;
+ struct ofpbuf *packet = &packets[0]->ofpbuf;
+ struct pkt_metadata *md = &packets[0]->md;
ovs_assert(cnt == 1);
execute.packet = packet;
execute.md = *md;
execute.needs_help = false;
+ execute.probe = false;
aux->error = dpif_execute(aux->dpif, &execute);
log_execute_message(aux->dpif, &execute, true, aux->error);
COVERAGE_INC(dpif_execute_with_help);
packet.ofpbuf = *execute->packet;
+ packet.md = execute->md;
pp = &packet;
- odp_execute_actions(&aux, &pp, 1, false, &execute->md, execute->actions,
+ odp_execute_actions(&aux, &pp, 1, false, execute->actions,
execute->actions_len, dpif_execute_helper_cb);
/* Even though may_steal is set to false, some actions could modify or
* reallocate the ofpbuf memory. We need to pass those changes to the
* caller */
*execute->packet = packet.ofpbuf;
+ execute->md = packet.md;
return aux.error;
}
log_flow_put_message(struct dpif *dpif, const struct dpif_flow_put *put,
int error)
{
- if (should_log_flow_message(error)) {
+ if (should_log_flow_message(error) && !(put->flags & DPIF_FP_PROBE)) {
struct ds s;
ds_init(&s);
log_execute_message(struct dpif *dpif, const struct dpif_execute *execute,
bool subexecute, int error)
{
- if (!(error ? VLOG_DROP_WARN(&error_rl) : VLOG_DROP_DBG(&dpmsg_rl))) {
+ if (!(error ? VLOG_DROP_WARN(&error_rl) : VLOG_DROP_DBG(&dpmsg_rl))
+ && !execute->probe) {
struct ds ds = DS_EMPTY_INITIALIZER;
char *packet;