ofproto-dpif: Introduce "slow path" datapath flows.
authorBen Pfaff <blp@nicira.com>
Fri, 4 May 2012 21:52:36 +0000 (14:52 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 9 May 2012 19:58:55 +0000 (12:58 -0700)
commit6a7e895f948c8cba1ad8f8609e6d628bf6a318f8
tree88eea2cbbbd11c06f1d77393a7bb02abf57455fe
parentc57b22267be8fab0e504f3c246b9c154937933cb
ofproto-dpif: Introduce "slow path" datapath flows.

Most exact-match flows can be handled directly in the datapath, but
for various reasons, some cannot: every packet in these flows must
be sent separately to userspace.  Until now, flows that cannot be
handled entirely in the kernel have been allowed to miss each time
in the datapath.  This is generally OK, but it has a few
disadvantages:

    * It can make troubleshooting at the level where one must look
      at datapath flows a bit confusing in some cases, because
      datapath misses due to genuinely new flows are mixed in with
      datapath misses for known flows that cannot be set up.

    * It means that the kernel-to-userspace packets for a given
      input port always go to a single kernel-to-userspace queue,
      even if we'd like to segregate out some of the packets for
      known flows.  (An upcoming commit has examples.)

This commit therefore introduces the concept of a "slow path" flow,
one that is installed in the datapath with a single action that
sends the flow's packets to userspace.  To make troubleshooting
easier, the action includes a reason code (displayed by "ovs-dpctl
dump-flows") that explains why the flow has been slow-pathed.

Bug #7550.
Signed-off-by: Ben Pfaff <blp@nicira.com>
lib/odp-util.c
lib/odp-util.h
ofproto/ofproto-dpif.c
tests/ofproto-dpif.at