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

Jesse Gross jesse at nicira.com
Thu Jan 30 00:22:16 UTC 2014


Not overlooked, just overwhelmed at the moment. :) Thanks for your patience.

On Wed, Jan 29, 2014 at 6:32 AM, Chris Luke <chrisy at flirble.org> wrote:
> 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
>>
>
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list