[ovs-dev] [PATCH 0/4] Adds capability to return packets back to the kernel

Chris Luke chrisy at flirble.org
Wed Jan 29 14:32:49 UTC 2014


This list has been busy just recently, so I am wondering if my teeny
patchset has been overlooked. :)

Cheers,
Chris.


> -----Original Message-----
> From: dev-bounces at openvswitch.org [mailto:dev-
> bounces at openvswitch.org] On Behalf Of Chris Luke
> Sent: Wednesday, January 15, 2014 8:22 PM
> To: dev at openvswitch.org
> Subject: [ovs-dev] [PATCH 0/4] Adds capability to return packets back to
the
> kernel
> 
> 
> Jesse, all,
> 
> This patchset provides a method to return packets to the kernel for
> handling as though OVS never touched them.
> 
> To support this, we extend the datapath on kernels since 2.6.39 to be
> able to pass packets back by providing a 'back_to_kernel' action which
> causes the network input hook to return RX_HANDLER_PASS and userspace
> packets to be re-submitted to the input queue.
> 
> The latter, the re-submission, can happen in one of two ways: Either
> with a new function in the kernel that can deliver an skb to the lower
> half of __netif_receive_skb_core() (see the patch at the HEAD of
> https://github.com/chrisy/linux/tree/feature/netif-receive-finish )
> or on other kernels without this function by submitting the packet to
> the queue with netif_rx_ni().
> 
> The downside of using netif_rx_ni() is that the packet has already
> traversed much of the input path and this risks duplication of action.
> We mitigate this using a flag that causes some steps to be skipped, but
> this is a hack (though the way we use this is cute in that the existing
> implementation resets the flag for us so it seems there are no side
> effects!)
> 
> Next, we add the 'back_to_kernel' action to OpenFlow which triggers a
> datapath output action using the datapath 'back_to_kernel' action.
> 
> Suggestions for better names for 'back_to_kernel' welcome. :)
> 
> TODO:
> - When using netif_rx_ni() to send packets back from userspace, we may
>   be double-counting the first packet of a flow in the stats. This is
>   since we have no way to avoid having the packet hit the rx_handler
>   hook a second time and relying on it matching its flow.
> - In the userspace datapath, look at whether AF_PACKET can reinsert
>   packets at the right place in the input path, otherwise use a tap
>   interface to do same.
> 
> Signed-off-by: Chris Luke <chris_luke at cable.comcast.com>
> ---
> Revision 1:
> - Alter kernel hook to be able to return packets to the kernel.
> - Add tweak to vswitch to use this feature instead of a learning
>    switch when it encounters OFPP_NORMAL.
> 
> Revision 2:  (supercedes patch 2606)
> - Refactor the path taken through the datapath to remove one skb clone
>    and lots of value returns.
> - Add capability to insert a packet back to the kernel input queue.
> - Add openflow action to send a packet back_to_kernel.
> - Update tests/docs.
> 
> Revision 3:  (supercedes patch 2651)
> - Break the patch into several;
>   - Datapath back_to_kernel action.
>   - OpenFlow action back_to_kernel. (requires datapath patch)
> - Add tests for back_to_kernel method.
> - Abandon the port_normal_mode and OFPP_NORMAL handling in vswitch
> patch.
> - Alter datapath method from a special output port to a discrete action.
> - skb header pointer "cleanup" has proven unnecessary.
> - Alter how packets that went via userspace are reinput to the kernel
>   (no more PACKET_LOOPBACK crud):
>   - Hijack the tc_verd field, if we have it, in the skb to signal that
>     the taps can be skipped. This works back to at least 2.6.36
>     (which is when the current rx_handler logic was introduced.)
>   - Proof of concept kernel patch to make this much more efficient.
> 
> 
> Chris Luke (4):
>   datapath: Action for returning packets to the kernel
>   datapath: New kernel function to insert packets async
>   lib,ofproto: Add 'back_to_kernel' OpenFlow action
>   doc: Documentation updates for the back_to_kernel patches
> 
>  AUTHORS                       |    1 +
>  FAQ                           |   87 ++++++++++++++++++++++++++++++-----
>  NEWS                          |    2 +
>  acinclude.m4                  |    3 ++
>  datapath/actions.c            |   40 +++++++++++++++++
>  datapath/datapath.c           |   23 ++++++++--
>  datapath/datapath.h           |    9 +++-
>  datapath/flow_netlink.c       |    6 ++-
>  datapath/vport-netdev.c       |  100
> ++++++++++++++++++++++++++++++++++++-----
>  datapath/vport.c              |   26 ++++++++++-
>  datapath/vport.h              |    4 +-
>  include/linux/openvswitch.h   |    1 +
>  include/openflow/nicira-ext.h |    1 +
>  lib/dpif-netdev.c             |    1 +
>  lib/dpif.c                    |    1 +
>  lib/odp-execute.c             |    4 ++
>  lib/odp-util.c                |   12 +++++
>  lib/ofp-actions.c             |   30 +++++++++++++
>  lib/ofp-actions.h             |    8 ++++
>  lib/ofp-parse.c               |    4 ++
>  lib/ofp-util.def              |    1 +
>  ofproto/ofproto-dpif-xlate.c  |   27 +++++++++++
>  tests/odp.at                  |    1 +
>  tests/ofproto-dpif.at         |   15 +++++++
>  tests/ovs-ofctl.at            |    2 +
>  utilities/ovs-ofctl.8.in      |    7 +++
>  26 files changed, 386 insertions(+), 30 deletions(-)
> 
> --
> 1.7.9.5
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
> 





More information about the dev mailing list