dst.s_addr = ntohl(flow->dest_ip);
strcpy(sip, inet_ntoa(src));
strcpy(dip, inet_ntoa(dst));
- printlog(LOG_DEBUG, "ALLOC:%s:%hd -> %s:%hd\n", sip,
+ printlog(LOG_DEBUG, "ALLOC:%s:%hu -> %s:%hu\n", sip,
flow->source_port, dip, flow->dest_port);
}
void standard_table_remove(standard_flow_table table, standard_flow *flow) {
key_flow key;
uint32_t hash;
- standard_flow *current, *prev;
assert(flow);
/* It's the head of the hash list. */
table->flows[hash] = flow->nexth;
} else {
+ standard_flow *current, *prev;
+
prev = table->flows[hash];
- current = table->flows[hash]->nexth;
- while (current != NULL) {
+ for (current = table->flows[hash]->nexth; current; current = current->nexth) {
if (current == flow) {
prev->nexth = flow->nexth;
break;
} else {
prev = current;
- current = current->next;
}
}
+ if (current == NULL) {
+ printlog(LOG_CRITICAL, "Flow %p disappeared?\n", flow);
+ }
assert(current != NULL);
}
struct in_addr src, dst;
char sip[22], dip[22];
+ /* Reset statistics. */
+ table->common->num_flows = 0;
+ table->common->num_flows_5k = 0;
+ table->common->num_flows_10k = 0;
+ table->common->num_flows_20k = 0;
+ table->common->num_flows_50k = 0;
+ table->common->avg_rate = 0;
+ /* End statistics. */
+
time_delta = timeval_subtract(now, table->common->last_update);
if (time_delta <= 0) {
maxflowrate = current->rate;
}
+ if (current->rate > 51200) {
+ table->common->num_flows_50k += 1;
+ table->common->num_flows_20k += 1;
+ table->common->num_flows_10k += 1;
+ table->common->num_flows_5k += 1;
+ table->common->num_flows += 1;
+ } else if (current->rate > 20480) {
+ table->common->num_flows_20k += 1;
+ table->common->num_flows_10k += 1;
+ table->common->num_flows_5k += 1;
+ table->common->num_flows += 1;
+ } else if (current->rate > 10240) {
+ table->common->num_flows_10k += 1;
+ table->common->num_flows_5k += 1;
+ table->common->num_flows += 1;
+ } else if (current->rate > 5120) {
+ table->common->num_flows_5k += 1;
+ table->common->num_flows += 1;
+ } else {
+ table->common->num_flows += 1;
+ }
+
src.s_addr = ntohl(current->source_ip);
dst.s_addr = ntohl(current->dest_ip);
strcpy(sip, inet_ntoa(src));
current->rate);
}
+ if (table->common->num_flows > 0) {
+ table->common->avg_rate = table->common->rate / table->common->num_flows;
+ }
+
printlog(LOG_DEBUG, "FLOW:--\n--\n");
table->common->max_flow_rate = maxflowrate;