desc->features = 0;
desc->speed = 0;
- if (p->port_no < 255) {
- /* FIXME: this is a layering violation and should really be
- * done in the secchan, as with OFPC_STP in
- * OFP_SUPPORTED_CAPABILITIES. */
- desc->features |= OFPPF_STP;
- }
-
spin_lock_irqsave(&p->lock, flags);
desc->flags = htonl(p->flags | p->status);
spin_unlock_irqrestore(&p->lock, flags);
static int flow_stats_dump_callback(struct sw_flow *flow, void *private)
{
+ struct sw_flow_actions *sf_acts = rcu_dereference(flow->sf_acts);
struct flow_stats_state *s = private;
struct ofp_flow_stats *ofs;
int actions_length;
int length;
- actions_length = sizeof *ofs->actions * flow->n_actions;
- length = sizeof *ofs + sizeof *ofs->actions * flow->n_actions;
+ actions_length = sizeof *ofs->actions * sf_acts->n_actions;
+ length = sizeof *ofs + actions_length;
if (length + s->bytes_used > s->bytes_allocated)
return 1;
memset(ofs->pad2, 0, sizeof ofs->pad2);
ofs->packet_count = cpu_to_be64(flow->packet_count);
ofs->byte_count = cpu_to_be64(flow->byte_count);
- memcpy(ofs->actions, flow->actions, actions_length);
+ memcpy(ofs->actions, sf_acts->actions, actions_length);
s->bytes_used += length;
return 0;
memset(ots->pad, 0, sizeof ots->pad);
ots->max_entries = htonl(stats.max_flows);
ots->active_count = htonl(stats.n_flows);
+ ots->lookup_count = cpu_to_be64(stats.n_lookup);
ots->matched_count = cpu_to_be64(stats.n_matched);
}
return 0;