ofproto: Resubmit statistics improperly account during failover.
authorEthan Jackson <ethan@nicira.com>
Mon, 2 May 2011 20:15:59 +0000 (13:15 -0700)
committerEthan Jackson <ethan@nicira.com>
Fri, 6 May 2011 23:55:51 +0000 (16:55 -0700)
commit6f1435fc8f77e925fbdb5e5dad91d61645330c6c
tree330783141322094224caef87cf19af18751b659b
parentcc8d12f9364760456c86e92378d529c0dd9aaa66
ofproto: Resubmit statistics improperly account during failover.

In some cases, when a facet's actions change because it resubmits
into a different rule, it will account all packets it as accrued
in the datapath to the new rule.  Due to the algorithm we are
using, it is acceptable for a facet to miscount at most 1 second
worth of packets in this manner.  This patch implements the proper
behavior.

Generally speaking, when a facet is facet_put__() into the
datapath, the kernel returns the old flow's statistics so they may
be accounted for in user space.  These statistics are generally
pushed down to the relevant facet's resubmit children.  Before this
patch, facet_put__() did not compensate for the fact that many of
the statistics in the datapath may have been already pushed.
Thus the entire packet count stored in the datapath would be pushed
to its children instead of simply the packets which have accrued
since the last accounting.  This patch fixes the behavior by
subtracting already accounted for packets from the statistics
returned by the datapath.
ofproto/ofproto.c