This patch adds support for NSH function implementation which can be used for
service function chaining. It covers control plane, kernel dataplane and
DPDK-netdev dataplane.
Three modes are enabled in this patch: Decapsulation and encapsulation,
special none decapsulation, NSH conversion.
Decapsulation and encapsulation for packet are basic feature for NSH. This
patch can support decapsulation and encapsulation for packet with
VxLAN-GPE+NSH format in both kernel dataplane and DPDK-netdev dataplane, and
support it with Ethernet+NSH format only in DPDK-netdev dataplane.
The VxLAN-GPE+NSH design is based on the basic VxLAN implementation, and the
default UDP destination for VxLAN-GPE+NSH VTEP is '4790'. The type 'eth_nsh'
for tunnel port is added to support Ethernet+NSH, and ET '0x894F' is used to
indicate this format. New fields in metadata for NSH is added: service path
header (nsp, nsi) and context header with NSH MD-type 1(nshc1, nshc2, nshc3,
nshc4), which can be used for match field and set field according to the
VxLAN-GPE NSH configuration and related rules.
Speical none decapsulation mode is used for decapsulation-reencapsulation case
in DPDK-netdev dataplane. In this mode, tunnel port will parse the input tunnel
packets with VxLAN-GPE+NSH or Etherne+NSH format, and tunnel header will be
kept. This feature can boost the performance for decapsulation-reencapsulation
case.
NSH conversion mode is used for converting VxLAN-GPE+NSH to Ethernet+NSH and
Ethernet+NSH to VxLAN-GPE+NSH in DPKD-netdev dataplane. The vport with the
feature of conversion from VxLAN-GPE+NSH to Ethernet+NSH, can remove the outer
MAC header, IP header, UDP header and VxLAN-GPE header from packet with
VxLAN-GPE+NSH format, then add the Outer MAC header to build the packet with
Ethernet+NSH format. For the vport with the feature of conversion from
Ethernet+NSH to VxLAN-GPE+NSH, the packets are processed inversely.
Ricky Li, Mengke Liu, Pritesh Kothari(7):
vxlan-gpe-nsh: decap and encap in kernel dataplane and control plane.
vxlan-gpe-nsh: decap and encap in DPDK-netdev dataplane and control
plane.
vxlan-gpe-nsh: tun_nodecap mode in DPDk-netdev dataplane.
vxlan-gpe-nsh: convert vxlan-gpe nsh to ethernet nsh in DPDK-netdev
dataplane.
Ethernet-nsh: decap and encap in DPDK-netdev dataplane.
Ethernet-nsh: tun_nodecap mode in DPDK-netdev dataplane.
Ethernet-nsh: convert eth nsh to vxlan-gpe nsh in DPDK-netdev
dataplane.
datapath/flow.h | 30 +-
datapath/flow_netlink.c | 70 ++
datapath/linux/Modules.mk | 1 +
datapath/linux/compat/include/linux/openvswitch.h | 36 +
datapath/linux/compat/include/net/ip_tunnels.h | 8 +
datapath/linux/compat/include/net/nsh.h | 103 +++
datapath/linux/compat/include/net/vxlan.h | 20 +-
datapath/linux/compat/vxlan.c | 97 ++-
datapath/vport-geneve.c | 2 +-
datapath/vport-gre.c | 2 +-
datapath/vport-lisp.c | 2 +-
datapath/vport-stt.c | 2 +-
datapath/vport-vxlan.c | 15 +-
datapath/vport.c | 5 +
lib/dpif-netdev.c | 36 +
lib/dpif-netlink.c | 3 +
lib/dpif.c | 4 +-
lib/flow.c | 51 +-
lib/match.c | 91 +++
lib/match.h | 14 +
lib/meta-flow.c | 135 ++++
lib/meta-flow.h | 102 +++
lib/netdev-bsd.c | 1 +
lib/netdev-dpdk.c | 1 +
lib/netdev-dummy.c | 1 +
lib/netdev-linux.c | 1 +
lib/netdev-provider.h | 4 +
lib/netdev-vport.c | 875 +++++++++++++++++++++-
lib/netdev.c | 24 +
lib/netdev.h | 60 ++
lib/nx-match.c | 6 +
lib/odp-execute.c | 5 +
lib/odp-util.c | 807 ++++++++++++++++----
lib/odp-util.h | 15 +-
lib/ofp-actions.c | 353 ++++++++-
lib/ofp-actions.h | 48 ++
lib/ofp-parse.c | 13 +
lib/ofp-parse.h | 1 +
lib/ofp-print.c | 1 +
lib/ovs-router.c | 64 ++
lib/ovs-router.h | 1 +
lib/packets.c | 30 +
lib/packets.h | 147 +++-
lib/tnl-ports.c | 32 +
lib/tnl-ports.h | 2 +
ofproto/ofproto-dpif-ipfix.c | 4 +
ofproto/ofproto-dpif-sflow.c | 4 +
ofproto/ofproto-dpif-xlate.c | 306 +++++++-
ofproto/tunnel.c | 624 +++++++++++++--
ofproto/tunnel.h | 25 +-
tests/ofproto.at | 10 +-
tests/tunnel.at | 403 ++++++++++
52 files changed, 4430 insertions(+), 267 deletions(-)
create mode 100644 datapath/linux/compat/include/net/nsh.h
--
1.9.3
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev