From 423f360415e2834dd8de065434023b822e2ca3f8 Mon Sep 17 00:00:00 2001 From: mklyus Date: Fri, 11 Oct 2019 08:35:51 +0300 Subject: MPLS support + loop_vm_arp test fix Change-Id: I17b1b2a97f0bc185d3906250d5f91b4c8fcb9686 Signed-off-by: Max Klyus --- docs/testing/user/userguide/index.rst | 1 + docs/testing/user/userguide/mpls.rst | 93 +++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 docs/testing/user/userguide/mpls.rst (limited to 'docs') diff --git a/docs/testing/user/userguide/index.rst b/docs/testing/user/userguide/index.rst index 84c79b0..a61fa46 100644 --- a/docs/testing/user/userguide/index.rst +++ b/docs/testing/user/userguide/index.rst @@ -25,6 +25,7 @@ Table of Content examples advanced pvpl3 + mpls extchains fluentd sriov diff --git a/docs/testing/user/userguide/mpls.rst b/docs/testing/user/userguide/mpls.rst new file mode 100644 index 0000000..eaa9541 --- /dev/null +++ b/docs/testing/user/userguide/mpls.rst @@ -0,0 +1,93 @@ +========================== +MPLS encapsulation feature +========================== + +This feature allows to generate packets with standard MPLS L2VPN double stack MPLS labels, where the outer label is transport and the inner label is VPN. +The top layer of a packets encapsulated inside MPLS L2VPN seems to be an Ethernet layer with the rest of the IP stack inside. +Please refer to RFC-3031 for more details. +The whole MPLS packet structure looks like the following: + +###[ Ethernet ]### + dst = ['00:8a:96:bb:14:28'] + src = 3c:fd:fe:a3:48:7c + type = 0x8847 +###[ MPLS ]### <-------------- Outer Label + label = 16303 + cos = 1 + s = 0 + ttl = 255 +###[ MPLS ]### <-------------- Inner Label + label = 5010 + cos = 1 + s = 1 + ttl = 255 +###[ Ethernet ]### + dst = fa:16:3e:bd:02:b5 + src = 3c:fd:fe:a3:48:7c + type = 0x800 +###[ IP ]### + version = 4 + ihl = None + tos = 0x0 + len = None + id = 1 + flags = + frag = 0 + ttl = 64 + proto = udp + chksum = None + src = 16.0.0.1 + dst = 48.0.0.1 + \options \ +###[ UDP ]### + sport = 53 + dport = 53 + len = None + chksum = None + +Example: nfvbench generates mpls traffic port A ----> port B. This example assumes openstack is at the other end of the mpls tunnels. +Packets generated and sent to port B are delivered to the MPLS domain infrastructure which will transport that packet to the other end +of the MPLS transport tunnel using the outer label. At that point, the outer label is decapsulated and the inner label is used to +select the destination openstack network. After decapsulation of the inner label, the resulting L2 frame is then forwarded to the +destination VM corresponding to the destination MAC. When the VM receives the packet, it is sent back to far end port of the traffic +generator (port B) using either L2 forwarding or L3 routing though the peer virtual interface. The return packet is then encapsulated +with the inner label first then outer label to reach nfvbench on port B. + +Only 2 MPLS labels stack is supported. If more than two labels stack is required then these operations should be handled by MPLS transport +domain where nfvbench is attached next-hop mpls router and rest of the mpls domain should be configured accordingly to be able +pop/swap/push labels and deliver packet to the proper destination based on an initial transport label injected by nfvbench, VPN label +should stay unchanged until its delivered to PE (compute node). +Set nfvbench 'mpls' parameter to 'true' to enable MPLS encapsulation. +When this option is enabled internal networks 'network type' parameter value should be 'mpls' +MPLS and VxLAN encapsulations are mutual exclusive features if 'mpls' is 'true' then 'vxlan' should be set to 'false' and vise versa. +no_flow_stats, no_latency_stats, no_latency_streams parameters should be set to 'true' because these features are not supported at the moment. +In future when these features will be supported they will require special NIC hardware. + +Example of 1-chain MPLS configuration: + internal_networks: + left: + network_type: mpls + segmentation_id: 5010 + mpls_transport_labels: 16303 + physical_network: phys_sriov0 + right: + network_type: mpls + segmentation_id: 5011 + mpls_transport_labels: 16303 + physical_network: phys_sriov1 + +Example of 2-chain MPLS configuration: + internal_networks: + left: + network_type: mpls + segmentation_id: [5010, 5020] + mpls_transport_labels: [16303, 16304] + physical_network: phys_sriov0 + right: + network_type: mpls + segmentation_id: [5011, 5021] + mpls_transport_labels: [16303, 16304] + physical_network: phys_sriov1 + +Example of how to run: +nfvbench --rate 50000pps --duration 30 --mpls -- cgit 1.2.3-korg