This series implements support for layer 3 ports.  By removing the
assumption that all packets/flows have Ethernet header, this series adds
generic support for layer 3 ports in OVS. Support for layer 3 GRE tunnels
is also added by this patchset.

The implementation automatically adds appropriate pop_eth and push_eth
actions to datapath flows for layer 3 vports.  This may change in the
future when OpenFlow support for these actions will be added, since
discussions on EXT-112 in the ONF showed preference for explicitly
requiring the pop_eth and push_eth actions in OpenFlow rules.

This series is based on work by Lorand Jakab, Thomas Morin and others.

Unlike Lorand's work this series does not update the kernel datapath
nor the LISP vport implementation in the version of the kernel datapath
in the OVS tree. Rather it focuses only on userspace including
the user-space datapath, and provides layer 3 GRE support. It should,
however, be in keeping with his goal of providing a clean path for
porting the LISP datapath support to the mainline kernel for inclusion
there.

To aid review this series is available at:

tree: https://github.com//horms/openvswitch
branch: me/l3-vpn
tag: l3-vpn-v10

I have prepared a separate series for the kernel datapath against the
net-next tree.  I plan to post it once net-next re-opens.  In the meantime
it may be found on github:

tree: https://github.com//horms/linux
branch: me/l3-vpn
tag: l3-vpn-alpha-20160120


Changes from v8:
  * Rebased
  * Addressed review of v8 (I picked most of this out of Jakubs tree on github)
  * Support non-IP packets
  * Support non-tap GRE vports

Changes from v7:
  * Rebased
  * Addressed Jesse's comments:
    * Clean up ovs_packet_cmd_execute()
    * Use attributes instead of reaching into the IP header to determine L3 
      protocol

Changes from v6:
  * Rebased
  * Patch 2: Removed MFF_ETH_SRC and MFF_ETH_DST from Ethernet prerequisites to
    allow setting Ethernet addresses in push_eth without knowing a priori the
    layer of the output port; this will be reverted when {push,pop}_eth will be
    explicit (see above)
  * Patch 3: Re-added "key->eth.tci = 0" in flow_extract(), since removal broke
    validation of flows
  * Added support for layer 3 packets in "ovs_packet" netlink messages which
    execute actions on a packet received in a miss upcall.  Support is in two
    new commits, one for user space, one for the linux datapath, to make review
    easier.

Changes from v5:
  * Addressed the new round of comments from Jesse
    * Renamed noeth to is_layer3
    * Fixed is_layer3 wildcarding
    * Fixed style issues

Changes from v4:
  * Addressed the new round of comments from Jesse
  * Rebased several times

Changes from v3:
  * Addressed the new round of comments from Ben
  * Rebased several times

Changes from v2:
  * Addressed the new round of comments from Ben
  * Addressed Jesse's comments
  * Rebased several times

Changes from the initial version:
  * Addressed all comments from Ben's review
  * Fixed all failing unit tests

Lorand Jakab (3):
  userspace: add support for pop_eth and push_eth actions
  userspace: add layer 3 flow and switching support
  userspace: add layer 3 support to packet metadata

Simon Horman (4):
  flow: add miniflow_push_uint8
  flow: add miniflow_pad_from_64
  userspace: extend layer 3 support to cover non-IP packets
  userspace: add non-tap (l3) support to GRE vports

 build-aux/extract-ofp-fields                      |   1 +
 datapath-windows/ovsext/Vport.c                   |   4 +
 datapath/linux/compat/include/linux/openvswitch.h |  19 +-
 lib/dp-packet.h                                   |  14 +-
 lib/dpif-netdev.c                                 |   6 +-
 lib/dpif-netlink.c                                |   9 +
 lib/dpif.c                                        |   9 +-
 lib/flow.c                                        | 157 +++++++++----
 lib/flow.h                                        |  22 +-
 lib/match.c                                       |  13 +-
 lib/match.h                                       |   1 +
 lib/meta-flow.c                                   |  10 +
 lib/meta-flow.h                                   |   9 +-
 lib/netdev-bsd.c                                  |   2 +
 lib/netdev-dummy.c                                |   1 +
 lib/netdev-linux.c                                |   5 +-
 lib/netdev-vport.c                                |  88 ++++++--
 lib/netdev-vport.h                                |   1 +
 lib/nx-match.c                                    |   2 +-
 lib/odp-execute.c                                 |  29 +++
 lib/odp-util.c                                    | 255 +++++++++++++++++-----
 lib/odp-util.h                                    |   7 +-
 lib/ofp-print.c                                   |  28 ++-
 lib/ofp-print.h                                   |   8 +-
 lib/ofp-util.c                                    |   2 +-
 lib/packets.c                                     |  33 +++
 lib/packets.h                                     |   6 +
 lib/tnl-ports.c                                   |  74 +++++--
 lib/tnl-ports.h                                   |   4 +-
 ofproto/ofproto-dpif-ipfix.c                      |   2 +-
 ofproto/ofproto-dpif-rid.h                        |   2 +-
 ofproto/ofproto-dpif-sflow.c                      |  11 +-
 ofproto/ofproto-dpif-xlate.c                      |  29 ++-
 ofproto/ofproto-dpif-xlate.h                      |   2 +-
 ofproto/ofproto-dpif.c                            |   2 +-
 ofproto/tunnel.c                                  |   7 +-
 tests/ofproto-dpif.at                             |   6 +-
 tests/tunnel-push-pop-ipv6.at                     |  20 +-
 tests/tunnel-push-pop.at                          |  43 +++-
 tests/tunnel.at                                   |  10 +-
 tests/vlan-splinters.at                           |   4 +-
 41 files changed, 757 insertions(+), 200 deletions(-)

-- 
2.1.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to