A Nicira internal build recently failed the "ofproto-dpif - NetFlow flow
expiration" test because of the following difference in output:
header: v5, seq 0, engine 2,1
-rec: [...], 1 pkts, 60 bytes, ICMP 8:0, time <moment>
+rec: [...], 1 pkts, 60 bytes, ICMP 8:0, time <range>
Looking at the actual output, it is:
rec: 192.168.0.1 > 192.168.0.2, if 1 > 65535, 1 pkts, 60 bytes,
ICMP 8:0, time 8...9
That is, a one-packet flow was shown to have more than a momentary
duration, which doesn't make sense.
This commit fixes the problem by making sure that creating a facet and then
its initial subfacet only checks the current time once.
Signed-off-by: Ben Pfaff <[email protected]>
---
ofproto/ofproto-dpif.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
index 1c57196..da42272 100644
--- a/ofproto/ofproto-dpif.c
+++ b/ofproto/ofproto-dpif.c
@@ -4244,6 +4244,14 @@ subfacet_create(struct facet *facet, enum
odp_key_fitness key_fitness,
if (list_is_empty(&facet->subfacets)) {
subfacet = &facet->one_subfacet;
+
+ /* This subfacet should conceptually be created, and have its first
+ * packet pass through, at the same time that its facet was created.
+ * If we called time_msec() here, then the subfacet could look
+ * (occasionally) as though it was used some time after the facet was
+ * used. That can make a one-packet flow look like it has a nonzero
+ * duration, which looks odd in e.g. NetFlow statistics. */
+ subfacet->used = facet->used;
} else {
subfacet = subfacet_find__(ofproto, key, key_len, key_hash,
&facet->flow);
@@ -4258,6 +4266,7 @@ subfacet_create(struct facet *facet, enum odp_key_fitness
key_fitness,
}
subfacet = xmalloc(sizeof *subfacet);
+ subfacet->used = time_msec();
}
hmap_insert(&ofproto->subfacets, &subfacet->hmap_node, key_hash);
@@ -4271,7 +4280,6 @@ subfacet_create(struct facet *facet, enum odp_key_fitness
key_fitness,
subfacet->key = NULL;
subfacet->key_len = 0;
}
- subfacet->used = time_msec();
subfacet->dp_packet_count = 0;
subfacet->dp_byte_count = 0;
subfacet->actions_len = 0;
--
1.7.2.5
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev