cinfo->pairs.values[cinfo->pairs.n++] =
xstrdup(rconn_get_state(rconn));
- cinfo->pairs.keys[cinfo->pairs.n] = "time_in_state";
- cinfo->pairs.values[cinfo->pairs.n++] =
- xasprintf("%u", rconn_get_state_elapsed(rconn));
+ if (rconn_is_admitted(rconn)) {
+ cinfo->pairs.keys[cinfo->pairs.n] = "time_connected";
+ cinfo->pairs.values[cinfo->pairs.n++] =
+ xasprintf("%ld", time_now() - rconn_get_last_connection(rconn));
+ } else {
+ cinfo->pairs.keys[cinfo->pairs.n] = "time_disconnected";
+ cinfo->pairs.values[cinfo->pairs.n++] =
+ xasprintf("%d", rconn_failure_duration(rconn));
+ }
}
}
* individually since we are about to blow away all the facets with
* dpif_flow_flush(). */
facet->installed = false;
+ facet->dp_packet_count = 0;
+ facet->dp_byte_count = 0;
facet_remove(ofproto, facet);
}
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);
}
}
facet->installed = false;
facet->dp_packet_count = 0;
facet->dp_byte_count = 0;
+ } else {
+ assert(facet->dp_packet_count == 0);
+ assert(facet->dp_byte_count == 0);
}
}
list_push_back(&new_rule->facets, &facet->list_node);
facet->rule = new_rule;
facet->used = new_rule->created;
+ facet->rs_used = facet->used;
}
ofpbuf_delete(odp_actions);
static bool
is_valid_table(uint8_t table_id)
{
- return table_id == 0 || table_id == 0xff;
+ if (table_id == 0 || table_id == 0xff) {
+ return true;
+ } else {
+ /* It would probably be better to reply with an error but there doesn't
+ * seem to be any appropriate value, so that might just be
+ * confusing. */
+ VLOG_WARN_RL(&rl, "controller asked for invalid table %"PRIu8,
+ table_id);
+ return false;
+ }
}
static int
facet_update_stats(struct ofproto *ofproto, struct facet *facet,
const struct dpif_flow_stats *stats)
{
- if (stats->n_packets) {
+ if (stats->n_packets || stats->used > facet->used) {
facet_update_time(ofproto, facet, stats->used);
facet->packet_count += stats->n_packets;
facet->byte_count += stats->n_bytes;