aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Bidirectional Test with PROX.md226
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-OvS-DPDK.yaml68
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-VPP.yaml68
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-OvS-DPDK.yaml68
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-VPP.yaml68
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/TRex-pod/userspace-trex-pod-2-interfaces-VPP.yaml64
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-ovs-netAttach.yaml47
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-vpp-netAttach-memif.yaml46
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/README.md9
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/parameters.lua11
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/prox.cfg61
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/parameters.lua17
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/prox.cfg102
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/parameters.lua11
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/prox.cfg69
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/parameters.lua7
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/prox.cfg35
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/parameters.lua8
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/prox.cfg51
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/parameters.lua7
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/prox.cfg43
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.env36
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.tst43
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.env33
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.tst43
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Configurations/TRex/vsperf-trex.conf36
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Limitations.md10
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Requirements.md116
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Test with PROX and OVS.md372
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Test with PROX and VPP.md375
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Test with TRex and VPP.md228
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/Topologies-EastWest.md34
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen-swap.pngbin0 -> 27990 bytes
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen.pngbin0 -> 31489 bytes
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/images/topologies.pngbin0 -> 79037 bytes
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/images/topology1.pngbin0 -> 17692 bytes
-rw-r--r--docs/testing/user/userguide/east-west-benchmarking/images/trex-screen.pngbin0 -> 26692 bytes
37 files changed, 2412 insertions, 0 deletions
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Bidirectional Test with PROX.md b/docs/testing/user/userguide/east-west-benchmarking/Bidirectional Test with PROX.md
new file mode 100644
index 00000000..5f4e6f3a
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Bidirectional Test with PROX.md
@@ -0,0 +1,226 @@
+# Configure PROX for bidirectional traffic
+
+To configure PROX for bidirectional traffic starting from a unidirectional setup just modify the `parameters.lua` and the `prox.cfg` and then modify the vSwitch configuration to connect the interfaces also in the opposite direction.
+
+### Modify the `parameters.lua` file
+
+Duplicate these parameters:
+
+- `local_ip`
+- `local_hex_ip`
+- `local_hex_mac`
+- `gencores`
+- `latcores`
+
+Adjust the names to make them unique. The file now should look like this:
+
+```
+...
+local_ip1="192.168.30.11/24"
+local_hex_ip1=convertIPToHex(local_ip1)
+local_ip2="192.168.30.12/24"
+local_hex_ip2=convertIPToHex(local_ip2)
+...
+local_hex_mac1="de ad c3 52 79 9b"
+local_hex_mac2="02 09 c0 fd ba 1f"
+gencores1="15"
+gencores2="16"
+latcores1="17"
+latcores2="18"
+...
+```
+
+### Modify the `prox.cfg` file
+
+In this file duplicate the gencore and the latcore tasks adjust the tasks names and the variables names according to the ones in `parameters.lua` and then invert the ports number in the new tasks.
+
+After these changes, the result is below:
+
+```
+[core $gencores1]
+name=p0
+task=0
+mode=gen
+tx port=p0
+bps=1250000000
+pkt inline=${local_hex_mac2} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip1} ${local_hex_ip2} 0b b8 0b b9 00 1a 55 7b
+pkt size=60
+min bulk size=$mbs
+max bulk size=16
+drop=yes
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+;arp update time=1
+
+[core $gencores2]
+name=p1
+task=0
+mode=gen
+tx port=p1
+bps=1250000000
+pkt inline=${local_hex_mac1} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip2} ${local_hex_ip1} 0b b8 0b b9 00 1a 55 7b
+pkt size=60
+min bulk size=$mbs
+max bulk size=16
+drop=yes
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+;arp update time=1
+
+[core $latcores1]
+name=lat1
+task=0
+mode=lat
+;sub mode=l3
+rx port=p1
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+accuracy limit nsec=1000000
+latency bucket size=${bucket_size_exp}
+;arp update time=1
+
+[core $latcores2]
+name=lat2
+task=0
+mode=lat
+;sub mode=l3
+rx port=p0
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+accuracy limit nsec=1000000
+latency bucket size=${bucket_size_exp}
+;arp update time=1
+```
+
+### Modify VPP
+
+To configure the opposite direction just copy the l2patches for the unidirectional traffic and invert the ports number:
+
+```
+vpp# show l2patch
+ memif1/0 -> memif3/0
+ memif4/0 -> memif2/0
+vpp# test l2patch rx memif2/0 tx memif4/0
+vpp# test l2patch rx memif3/0 tx memif1/0
+vpp# show l2patch
+ memif1/0 -> memif3/0
+ memif2/0 -> memif4/0
+ memif3/0 -> memif1/0
+ memif4/0 -> memif2/0
+```
+
+### Modify OvS-DPDK
+
+To configure the opposite direction just edit the `setup-flows.sh` copying the existing flows for the unidirectional traffic and invert the ports actions:
+
+``` bash
+udo ovs-ofctl --timeout 10 -O OpenFlow13 del-flows vsperf-br0
+sudo ovs-ofctl --timeout 10 -O Openflow13 add-flow vsperf-br0 in_port=1,idle_timeout=0,action=output:3
+sudo ovs-ofctl --timeout 10 -O Openflow13 add-flow vsperf-br0 in_port=4,idle_timeout=0,action=output:2
+sudo ovs-ofctl --timeout 10 -O Openflow13 add-flow vsperf-br0 in_port=3,idle_timeout=0,action=output:1
+sudo ovs-ofctl --timeout 10 -O Openflow13 add-flow vsperf-br0 in_port=2,idle_timeout=0,action=output:4
+```
+
+Run `sudo ./setup_flows.sh` and verify that the flows are correct by running `sudo ovs-ofctl dump-flows vsperf-br0`:
+
+``` bash
+[opnfv@worker utilities]$ sudo ovs-ofctl dump-flows vsperf-br0
+ cookie=0x0, duration=10.400s, table=0, n_packets=0, n_bytes=0, in_port=1 actions=output:3
+ cookie=0x0, duration=10.348s, table=0, n_packets=0, n_bytes=0, in_port=4 actions=output:2
+ cookie=0x0, duration=10.410s, table=0, n_packets=0, n_bytes=0, in_port=3 actions=output:1
+ cookie=0x0, duration=10.358s, table=0, n_packets=0, n_bytes=0, in_port=2 actions=output:4
+```
+
+### Configure rapid environment and files
+
+On Node 1 source the rapidenv and enter the rapid folder:
+
+```bash
+[opnfv@worker ~]$ source rapidenv/bin/activate
+(rapidenv) [opnfv@worker ~]$ cd rapid
+(rapidenv) [opnfv@worker rapid]$
+```
+
+Now we need to modify the `.env` , `.tst` files to run the `runrapid.py` script that do the tests.
+
+For the `topology-3.env`:
+
+```
+[rapid]
+loglevel = DEBUG
+version = 19.6.30
+total_number_of_machines = 1
+
+[M1]
+name = rapid-pod-1
+admin_ip = 10.244.1.157
+dp_ip1 = 192.168.30.11
+dp_mac1 = de:ad:c3:52:79:9b
+dp_ip2 = 192.168.30.12
+dp_mac2 = 02:09:c0:fd:ba:1f
+
+
+[ssh]
+key=rapid_rsa_key
+user = root
+
+[Varia]
+vim = Openstack
+stack = rapid
+```
+
+Before editing the `.tst` file, the new `prox.cfg` file should be copied under a folder in the same Node, in this case under `~/configs` and renamed as `prox-bi.cfg`.
+
+The `topology-3.tst`:
+
+```
+[TestParameters]
+name = Rapid_ETSINFV_TST009
+number_of_tests = 1
+total_number_of_test_machines = 1
+lat_percentile = 99
+
+[TestM1]
+name = Generator
+prox_launch_exit = false
+config_file = configs/prox-bi.cfg
+dest_vm = 1
+mcore = [14]
+gencores = [15,16]
+latcores = [17,18]
+
+[test1]
+test=TST009test
+warmupflowsize=128
+warmupimix=[64]
+warmupspeed=1
+warmuptime=2
+imixs=[[64],[128],[256],[512],[1024],[1280],[1512]]
+flows=[1]
+drop_rate_threshold = 0
+MAXr = 3
+MAXz = 5000
+MAXFramesPerSecondAllIngress = 12000000
+StepSize = 10000
+```
+
+### Running the tests
+
+Now that it's all configured, the test can be started form the rapid folder with the `runrapid.py` script, passing the two files as arguments:
+
+``` bash
+(rapidenv) [opnfv@worker rapid]$ python runrapid.py --env topology-3.env --test topology-3.tst --map machine.map --runtime 10 --screenlog DEBUG
+```
+
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-OvS-DPDK.yaml b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-OvS-DPDK.yaml
new file mode 100644
index 00000000..4d1532dd
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-OvS-DPDK.yaml
@@ -0,0 +1,68 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: userspace-rapid-pod-t1-p1
+ annotations:
+ k8s.v1.cni.cncf.io/networks: userspace-ovs-net
+spec:
+ containers:
+ - name: ovs-vhost
+ image: opnfv/rapid:latest
+ imagePullPolicy: Never
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - mountPath: /etc/podnetinfo
+ name: podinfo
+ readOnly: false
+ - mountPath: /usrspcni/
+ name: shared-dir
+ - mountPath: /opt/prox/
+ name: prox-dir
+ - mountPath: /dev/hugepages
+ name: hugepage
+ resources:
+ requests:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ limits:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ nodeSelector:
+ vswitch: ovs
+ volumes:
+ - name: podinfo
+ downwardAPI:
+ items:
+ - path: "labels"
+ fieldRef:
+ fieldPath: metadata.labels
+ - path: "annotations"
+ fieldRef:
+ fieldPath: metadata.annotations
+ - name: shared-dir
+ hostPath:
+ path: /var/lib/cni/usrspcni/data/
+ - name: prox-dir
+ hostPath:
+ path: /opt/prox/
+ - name: hugepage
+ emptyDir:
+ medium: HugePages
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-VPP.yaml b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-VPP.yaml
new file mode 100644
index 00000000..e9d26667
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-1-interface-VPP.yaml
@@ -0,0 +1,68 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: userspace-rapid-pod-t1-p1
+ annotations:
+ k8s.v1.cni.cncf.io/networks: userspace-vpp-net
+spec:
+ containers:
+ - name: vpp-vhost
+ image: opnfv/rapid:latest
+ imagePullPolicy: Never
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - mountPath: /etc/podnetinfo
+ name: podinfo
+ readOnly: false
+ - mountPath: /usrspcni/
+ name: shared-dir
+ - mountPath: /opt/prox/
+ name: prox-dir
+ - mountPath: /dev/hugepages
+ name: hugepage
+ resources:
+ requests:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ limits:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ nodeSelector:
+ vswitch: ovs
+ volumes:
+ - name: podinfo
+ downwardAPI:
+ items:
+ - path: "labels"
+ fieldRef:
+ fieldPath: metadata.labels
+ - path: "annotations"
+ fieldRef:
+ fieldPath: metadata.annotations
+ - name: shared-dir
+ hostPath:
+ path: /var/lib/cni/usrspcni/data/
+ - name: prox-dir
+ hostPath:
+ path: /opt/prox/
+ - name: hugepage
+ emptyDir:
+ medium: HugePages
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-OvS-DPDK.yaml b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-OvS-DPDK.yaml
new file mode 100644
index 00000000..fcae5981
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-OvS-DPDK.yaml
@@ -0,0 +1,68 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: userspace-rapid-pod-t1-p1
+ annotations:
+ k8s.v1.cni.cncf.io/networks: userspace-ovs-net, userspace-ovs-net
+spec:
+ containers:
+ - name: ovs-vhost
+ image: opnfv/rapid:latest
+ imagePullPolicy: Never
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - mountPath: /etc/podnetinfo
+ name: podinfo
+ readOnly: false
+ - mountPath: /usrspcni/
+ name: shared-dir
+ - mountPath: /opt/prox/
+ name: prox-dir
+ - mountPath: /dev/hugepages
+ name: hugepage
+ resources:
+ requests:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ limits:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ nodeSelector:
+ vswitch: ovs
+ volumes:
+ - name: podinfo
+ downwardAPI:
+ items:
+ - path: "labels"
+ fieldRef:
+ fieldPath: metadata.labels
+ - path: "annotations"
+ fieldRef:
+ fieldPath: metadata.annotations
+ - name: shared-dir
+ hostPath:
+ path: /var/lib/cni/usrspcni/data/
+ - name: prox-dir
+ hostPath:
+ path: /opt/prox/
+ - name: hugepage
+ emptyDir:
+ medium: HugePages
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-VPP.yaml b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-VPP.yaml
new file mode 100644
index 00000000..a67106ab
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-VPP.yaml
@@ -0,0 +1,68 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: userspace-rapid-pod-t1-p1
+ annotations:
+ k8s.v1.cni.cncf.io/networks: userspace-vpp-net, userspace-vpp-net
+spec:
+ containers:
+ - name: vpp-vhost
+ image: opnfv/rapid:latest
+ imagePullPolicy: Never
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - mountPath: /etc/podnetinfo
+ name: podinfo
+ readOnly: false
+ - mountPath: /usrspcni/
+ name: shared-dir
+ - mountPath: /opt/prox/
+ name: prox-dir
+ - mountPath: /dev/hugepages
+ name: hugepage
+ resources:
+ requests:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ limits:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ nodeSelector:
+ vswitch: ovs
+ volumes:
+ - name: podinfo
+ downwardAPI:
+ items:
+ - path: "labels"
+ fieldRef:
+ fieldPath: metadata.labels
+ - path: "annotations"
+ fieldRef:
+ fieldPath: metadata.annotations
+ - name: shared-dir
+ hostPath:
+ path: /var/lib/cni/usrspcni/data/
+ - name: prox-dir
+ hostPath:
+ path: /opt/prox/
+ - name: hugepage
+ emptyDir:
+ medium: HugePages
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/TRex-pod/userspace-trex-pod-2-interfaces-VPP.yaml b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/TRex-pod/userspace-trex-pod-2-interfaces-VPP.yaml
new file mode 100644
index 00000000..418d3ede
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/TRex-pod/userspace-trex-pod-2-interfaces-VPP.yaml
@@ -0,0 +1,64 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: v1
+kind: Pod
+metadata:
+ name: userspace-trex-pod-t1-p1
+ annotations:
+ k8s.v1.cni.cncf.io/networks: userspace-vpp-net, userspace-vpp-net
+spec:
+ containers:
+ - name: vpp-vhost
+ image: trex:latest
+ imagePullPolicy: Never
+ securityContext:
+ privileged: true
+ volumeMounts:
+ - mountPath: /etc/podnetinfo
+ name: podinfo
+ readOnly: false
+ - mountPath: /usrspcni/
+ name: shared-dir
+ - mountPath: /dev/hugepages
+ name: hugepage
+ resources:
+ requests:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ limits:
+ cpu: "6000m"
+ memory: "4000Mi"
+ hugepages-1Gi: 4Gi
+ nodeSelector:
+ vswitch: ovs
+ volumes:
+ - name: podinfo
+ downwardAPI:
+ items:
+ - path: "labels"
+ fieldRef:
+ fieldPath: metadata.labels
+ - path: "annotations"
+ fieldRef:
+ fieldPath: metadata.annotations
+ - name: shared-dir
+ hostPath:
+ path: /var/lib/cni/usrspcni/data/
+ - name: hugepage
+ emptyDir:
+ medium: HugePages
+
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-ovs-netAttach.yaml b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-ovs-netAttach.yaml
new file mode 100644
index 00000000..a2ee5ea8
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-ovs-netAttach.yaml
@@ -0,0 +1,47 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: userspace-ovs-net
+spec:
+ config: '{
+ "cniVersion": "0.3.1",
+ "type": "userspace",
+ "name": "userspace-ovs-net-1",
+ "kubeconfig": "/etc/cni/net.d/multus.d/multus.kubeconfig",
+ "logFile": "/var/log/userspace-ovs-net.log",
+ "logLevel": "debug",
+ "host": {
+ "engine": "ovs-dpdk",
+ "iftype": "vhostuser",
+ "netType": "bridge",
+ "vhost": {
+ "mode": "server"
+ },
+ "bridge": {
+ "bridgeName": "vsperf-br0"
+ }
+ },
+ "container": {
+ "engine": "ovs-dpdk",
+ "iftype": "vhostuser",
+ "netType": "interface",
+ "vhost": {
+ "mode": "client"
+ }
+ }
+ }'
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-vpp-netAttach-memif.yaml b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-vpp-netAttach-memif.yaml
new file mode 100644
index 00000000..3b199686
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Kubernetes/userspace-vpp-netAttach-memif.yaml
@@ -0,0 +1,46 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: userspace-vpp-net
+spec:
+ config: '{
+ "cniVersion": "0.3.1",
+ "type": "userspace",
+ "name": "userspace-vpp-net",
+ "kubeconfig": "/etc/cni/net.d/multus.d/multus.kubeconfig",
+ "logFile": "/var/log/userspace-vpp-net-1-cni.log",
+ "logLevel": "debug",
+ "host": {
+ "engine": "vpp",
+ "iftype": "memif",
+ "netType": "interface",
+ "memif": {
+ "role": "master",
+ "mode": "ethernet"
+ }
+ },
+ "container": {
+ "engine": "vpp",
+ "iftype": "memif",
+ "netType": "interface",
+ "memif": {
+ "role": "slave",
+ "mode": "ethernet"
+ }
+ }
+ }'
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/README.md b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/README.md
new file mode 100644
index 00000000..f6c1c8b5
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/README.md
@@ -0,0 +1,9 @@
+# PROX Configuration files
+
+In this folder there are all the files to configure a pod, with one or two interfaces running PROX, as a generator or a swap.
+
+The `eal` parameter in all `parameters.lua` files are configured for VPP and memif interfaces. To use OvS-DPDK and virtio-user interfaces replace that line with something like this:
+
+- One interface: `eal="--socket-mem=256,0 --vdev=virtio_user0,path=/usrspcni/563e4f024755-net1"`
+- Two interface: `eal="--socket-mem=256,0 --vdev=virtio_user0,path=/usrspcni/563e4f024755-net1 --vdev=virtio_user1,path=/usrspcni/563e4f024755-net2"`
+
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/parameters.lua b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/parameters.lua
new file mode 100644
index 00000000..5e1481df
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/parameters.lua
@@ -0,0 +1,11 @@
+require "helper"
+name="Generator"
+local_ip1="192.168.30.11/24"
+local_hex_ip1=convertIPToHex(local_ip1)
+eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-8449692251a6-net1.sock,role=slave"
+mcore="14"
+local_hex_mac1="de ad c3 52 79 9b"
+gencores1="15"
+latcores1="16"
+bucket_size_exp="11"
+heartbeat="60"
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/prox.cfg b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/prox.cfg
new file mode 100644
index 00000000..91838e5a
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_1-interface/unidirectional/prox.cfg
@@ -0,0 +1,61 @@
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=p0
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=gen_tap
+lsc=no
+
+[variables]
+$mbs=8
+
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+heartbeat timeout=${heartbeat}
+
+[core $mcore]
+mode=master
+
+[core $gencores1]
+name=p0
+task=0
+mode=gen
+tx port=p0
+bps=1250000000
+pkt inline=${local_hex_mac2} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip1} ${local_hex_ip2} 0b b8 0b b9 00 1a 55 7b
+pkt size=60
+min bulk size=$mbs
+max bulk size=16
+drop=yes
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+;arp update time=1
+
+[core $latcores1]
+name=lat1
+task=0
+mode=lat
+;sub mode=l3
+rx port=p0
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+accuracy limit nsec=1000000
+latency bucket size=${bucket_size_exp}
+;arp update time=1
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/parameters.lua b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/parameters.lua
new file mode 100644
index 00000000..adebdd1a
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/parameters.lua
@@ -0,0 +1,17 @@
+require "helper"
+name="Generator"
+local_ip1="192.168.30.11/24"
+local_hex_ip1=convertIPToHex(local_ip1)
+local_ip2="192.168.30.12/24"
+local_hex_ip2=convertIPToHex(local_ip2)
+eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-8449692251a6-net1.sock,role=slave --vdev=net_memif1,socket=/usrspcni/memif-8449692251a6-net2.sock,role=slave"
+mcore="14"
+local_hex_mac1="de ad c3 52 79 9b"
+local_hex_mac2="02 09 c0 fd ba 1f"
+gencores1="15"
+gencores2="16"
+latcores1="17"
+latcores2="18"
+latcores1="16"
+bucket_size_exp="11"
+heartbeat="60"
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/prox.cfg b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/prox.cfg
new file mode 100644
index 00000000..cac15bc9
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/bidirectional/prox.cfg
@@ -0,0 +1,102 @@
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=p0
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=gen_tap
+lsc=no
+
+[port 1]
+name=p1
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=rec_tap
+lsc=no
+
+[variables]
+$mbs=8
+
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+heartbeat timeout=${heartbeat}
+
+[core $mcore]
+mode=master
+
+[core $gencores1]
+name=p0
+task=0
+mode=gen
+tx port=p0
+bps=1250000000
+pkt inline=${local_hex_mac2} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip1} ${local_hex_ip2} 0b b8 0b b9 00 1a 55 7b
+pkt size=60
+min bulk size=$mbs
+max bulk size=16
+drop=yes
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+;arp update time=1
+
+[core $gencores2]
+name=p1
+task=0
+mode=gen
+tx port=p1
+bps=1250000000
+pkt inline=${local_hex_mac1} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip2} ${local_hex_ip1} 0b b8 0b b9 00 1a 55 7b
+pkt size=60
+min bulk size=$mbs
+max bulk size=16
+drop=yes
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+;arp update time=1
+
+[core $latcores1]
+name=lat1
+task=0
+mode=lat
+;sub mode=l3
+rx port=p1
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+accuracy limit nsec=1000000
+latency bucket size=${bucket_size_exp}
+;arp update time=1
+
+[core $latcores2]
+name=lat2
+task=0
+mode=lat
+;sub mode=l3
+rx port=p0
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+accuracy limit nsec=1000000
+latency bucket size=${bucket_size_exp}
+;arp update time=1
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/parameters.lua b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/parameters.lua
new file mode 100644
index 00000000..784b9ccc
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/parameters.lua
@@ -0,0 +1,11 @@
+require "helper"
+name="Generator"
+local_ip1="192.168.30.11/24"
+local_hex_ip1=convertIPToHex(local_ip1)
+eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-8449692251a6-net1.sock,role=slave --vdev=net_memif1,socket=/usrspcni/memif-8449692251a6-net2.sock,role=slave"
+mcore="14"
+local_hex_mac1="de ad c3 52 79 9b"
+gencores1="15"
+latcores1="16"
+bucket_size_exp="11"
+heartbeat="60"
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/prox.cfg b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/prox.cfg
new file mode 100644
index 00000000..4520a26c
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/generator-pod_2-interfaces/unidirectional/prox.cfg
@@ -0,0 +1,69 @@
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=p0
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=gen_tap
+lsc=no
+
+[port 1]
+name=p1
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=rec_tap
+lsc=no
+
+[variables]
+$mbs=8
+
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+heartbeat timeout=${heartbeat}
+
+[core $mcore]
+mode=master
+
+[core $gencores1]
+name=p0
+task=0
+mode=gen
+tx port=p0
+bps=1250000000
+pkt inline=${local_hex_mac2} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip1} ${local_hex_ip2} 0b b8 0b b9 00 1a 55 7b
+pkt size=60
+min bulk size=$mbs
+max bulk size=16
+drop=yes
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+;arp update time=1
+
+[core $latcores1]
+name=lat1
+task=0
+mode=lat
+;sub mode=l3
+rx port=p1
+lat pos=42
+accuracy pos=46
+packet id pos=50
+signature=0x98765432
+signature pos=56
+accuracy limit nsec=1000000
+latency bucket size=${bucket_size_exp}
+;arp update time=1
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/parameters.lua b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/parameters.lua
new file mode 100644
index 00000000..e9f707da
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/parameters.lua
@@ -0,0 +1,7 @@
+require "helper"
+name="Swap"
+eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-b42cff2335c2-net1.sock"
+mcore="14"
+swapone="17"
+bucket_size_exp="11"
+heartbeat="60"
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/prox.cfg b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/prox.cfg
new file mode 100644
index 00000000..98d93bb9
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_1-interface/unidirectional/prox.cfg
@@ -0,0 +1,35 @@
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=p0
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=gen_tap
+lsc=no
+
+[variables]
+$mbs=8
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+heartbeat timeout=${heartbeat}
+
+[core $mcore]
+mode=master
+
+[core $swapone]
+name=swap1
+task=0
+mode=swap
+rx port=p0
+tx port=p0
+drop=no
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/parameters.lua b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/parameters.lua
new file mode 100644
index 00000000..0cf4c70e
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/parameters.lua
@@ -0,0 +1,8 @@
+require "helper"
+name="Swap"
+eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-b42cff2335c2-net1.sock --vdev=net_memif1,socket=/usrspcni/memif-b42cff2335c2-net2.sock"
+mcore="14"
+swapone="20"
+swaptwo="21"
+bucket_size_exp="11"
+heartbeat="60"
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/prox.cfg b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/prox.cfg
new file mode 100644
index 00000000..db6a50ff
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/bidirectional/prox.cfg
@@ -0,0 +1,51 @@
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=p0
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=gen_tap
+lsc=no
+
+[port 1]
+name=p1
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=rec_tap
+lsc=no
+
+[variables]
+$mbs=8
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+heartbeat timeout=${heartbeat}
+
+[core $mcore]
+mode=master
+
+[core $swapone]
+name=swap1
+task=0
+mode=swap
+rx port=p0
+tx port=p1
+drop=no
+
+[core $swaptwo]
+name=swap2
+task=0
+mode=swap
+rx port=p1
+tx port=p0
+drop=no
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/parameters.lua b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/parameters.lua
new file mode 100644
index 00000000..cd247ec4
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/parameters.lua
@@ -0,0 +1,7 @@
+require "helper"
+name="Swap"
+eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-b42cff2335c2-net1.sock --vdev=net_memif1,socket=/usrspcni/memif-b42cff2335c2-net2.sock"
+mcore="14"
+swapone="17"
+bucket_size_exp="11"
+heartbeat="60"
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/prox.cfg b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/prox.cfg
new file mode 100644
index 00000000..97662f74
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/PROX/swap-pod_2-interfaces/unidirectional/prox.cfg
@@ -0,0 +1,43 @@
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=p0
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=gen_tap
+lsc=no
+
+[port 1]
+name=p1
+rx desc=2048
+tx desc=2048
+vlan=yes
+;vdev=rec_tap
+lsc=no
+
+[variables]
+$mbs=8
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+heartbeat timeout=${heartbeat}
+
+[core $mcore]
+mode=master
+
+[core $swapone]
+name=swap1
+task=0
+mode=swap
+rx port=p0
+tx port=p1
+drop=no
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.env b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.env
new file mode 100644
index 00000000..8c59560f
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.env
@@ -0,0 +1,36 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+[rapid]
+loglevel = DEBUG
+version = 19.6.30
+total_number_of_machines = 1
+
+[M1]
+name = rapid-pod-1
+admin_ip = 10.244.1.157
+dp_ip1 = 192.168.30.11
+dp_mac1 = de:ad:c3:52:79:9b
+dp_ip2 = 192.168.30.12
+dp_mac2 = 02:09:c0:fd:ba:1f
+
+
+[ssh]
+key=rapid_rsa_key
+user = root
+
+[Varia]
+vim = Openstack
+stack = rapid
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.tst b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.tst
new file mode 100644
index 00000000..cf42ef52
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example-bidirectional.tst
@@ -0,0 +1,43 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+[TestParameters]
+name = Rapid_ETSINFV_TST009
+number_of_tests = 1
+total_number_of_test_machines = 1
+lat_percentile = 99
+
+[TestM1]
+name = Generator
+prox_launch_exit = false
+config_file = configs/prox-bi.cfg
+dest_vm = 1
+mcore = [14]
+gencores = [15,16]
+latcores = [17,18]
+
+[test1]
+test=TST009test
+warmupflowsize=128
+warmupimix=[64]
+warmupspeed=1
+warmuptime=2
+imixs=[[64],[128],[256],[512],[1024],[1280],[1512]]
+flows=[1]
+drop_rate_threshold = 0
+MAXr = 3
+MAXz = 5000
+MAXFramesPerSecondAllIngress = 12000000
+StepSize = 10000
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.env b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.env
new file mode 100644
index 00000000..be06dc82
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.env
@@ -0,0 +1,33 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+[rapid]
+loglevel = DEBUG
+version = 19.6.30
+total_number_of_machines = 1
+
+[M1]
+name = rapid-pod-1
+admin_ip = 10.244.1.157
+dp_ip = 192.168.1.4
+dp_mac = de:ad:c3:52:79:9b
+
+[ssh]
+key=rapid_rsa_key
+user = root
+
+[Varia]
+vim = Openstack
+stack = rapid
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.tst b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.tst
new file mode 100644
index 00000000..57575bf6
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/Rapid/example.tst
@@ -0,0 +1,43 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+[TestParameters]
+name = Rapid_ETSINFV_TST009
+number_of_tests = 1
+total_number_of_test_machines = 1
+lat_percentile = 99
+
+[TestM1]
+name = Generator
+prox_launch_exit = false
+config_file = configs/prox.cfg
+dest_vm = 1
+mcore = [14]
+gencores = [15]
+latcores = [16]
+
+[test1]
+test=TST009test
+warmupflowsize=128
+warmupimix=[64]
+warmupspeed=1
+warmuptime=2
+imixs=[[64],[128],[256],[512],[1024],[1280],[1512]]
+flows=[1]
+drop_rate_threshold = 0
+MAXr = 3
+MAXz = 5000
+MAXFramesPerSecondAllIngress = 12000000
+StepSize = 10000
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Configurations/TRex/vsperf-trex.conf b/docs/testing/user/userguide/east-west-benchmarking/Configurations/TRex/vsperf-trex.conf
new file mode 100644
index 00000000..f69d5b89
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Configurations/TRex/vsperf-trex.conf
@@ -0,0 +1,36 @@
+# Copyright 2022 Anuket, Intel Corporation, and The Linux Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+VSWITCH_BRIDGE_NAME = 'vsperf-br0'
+WHITELIST_NICS = ['06:00.0', '06:00.1']
+TRAFFICGEN = 'Trex'
+TRAFFICGEN_TREX_HOST_IP_ADDR = '10.244.1.187'
+TRAFFICGEN_TREX_USER = 'root'
+TRAFFICGEN_TREX_BASE_DIR = '/root/v2.86/'
+TRAFFICGEN_TREX_LINE_SPEED_GBPS = '10'
+TRAFFICGEN_TREX_PORT1 = '0000:02:00.0'
+TRAFFICGEN_TREX_PORT2 = '0000:02:00.1'
+TRAFFICGEN_TREX_PROMISCUOUS = False
+TRAFFICGEN_DURATION=10
+TRAFFICGEN_LOSSRATE=0
+TRAFFICGEN_RFC2544_TESTS=10
+#TRAFFICGEN_PKT_SIZES=(64,128,256,512,1024,1280,1518)
+GUEST_TESTPMD_FWD_MODE = ['io']
+GUEST_IMAGE = ['/home/opnfv/old/vnfs/vloop-vnf-ubuntu-18.04_20180920.qcow2']
+TRAFFICGEN_TREX_LATENCY_PPS = 1000
+TRAFFICGEN_TREX_FORCE_PORT_SPEED = True
+TRAFFICGEN_TREX_PORT_SPEED = 10000 # 10 Gbps
+TRAFFICGEN_TREX_RFC2544_BINARY_SEARCH_LOSS_VERIFICATION = False
+TRAFFICGEN_TREX_RFC2544_MAX_REPEAT = 3 \ No newline at end of file
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Limitations.md b/docs/testing/user/userguide/east-west-benchmarking/Limitations.md
new file mode 100644
index 00000000..758654cd
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Limitations.md
@@ -0,0 +1,10 @@
+# Limitations
+
+There are some limitations due to the different tools used:
+- TRex
+ - Does not support virtio driver for vhost-user interfaces needed by OvS-DPDK.
+ - Does not support single interface configuration (dummy interfaces) with memif.
+- PROX
+ - In this envirorment it does not support multiple core assignement for a single task.
+- Memif
+ - Configuration can be changed only by modifying the source code of Userspace CNI. \ No newline at end of file
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Requirements.md b/docs/testing/user/userguide/east-west-benchmarking/Requirements.md
new file mode 100644
index 00000000..7450ec32
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Requirements.md
@@ -0,0 +1,116 @@
+# Requirements for the tests
+
+Some requirements are needed to run the test in the five topologies and these involve CPU, Memory, shared folders, etc...
+
+### CPU
+
+The CPUs assigned to a Pod can't be assigned to other Pods: the allocation is exclusive.
+
+### Shared Folders
+
+For TRex and PROX pods it's necessary to include some volumes in their pod definition file (examples of these files are under the [Kubernetes configuration](./Configurations/Kubernetes)) that provide:
+
+- Annotations and metadata: Pod's details (e.g. memif/vhost socket file name)
+
+ ```yaml
+ ...
+ spec:
+ containers:
+ ...
+ volumeMounts:
+ - mountPath: /etc/podnetinfo
+ name: podinfo
+ readOnly: false
+ ...
+ volumes:
+ - name: podinfo
+ downwardAPI:
+ items:
+ - path: "labels"
+ fieldRef:
+ fieldPath: metadata.labels
+ - path: "annotations"
+ fieldRef:
+ fieldPath: metadata.annotations
+ ...
+ ```
+
+- Socket files for memif and vhost interfaces: (directory with some socket files for memif/vhost interfaces). It's shared between pods.
+
+ ```yaml
+ ...
+ spec:
+ containers:
+ ...
+ volumeMounts:
+ ...
+ - mountPath: /usrspcni/
+ name: shared-dir
+ ...
+ volumes:
+ ...
+ - name: shared-dir
+ hostPath:
+ path: /var/lib/cni/usrspcni/data/
+ ...
+ ```
+
+
+
+- Hugepages:
+
+ ```yaml
+ ...
+ spec:
+ containers:
+ ...
+ volumeMounts:
+ ...
+ - mountPath: /dev/hugepages
+ name: hugepage
+ ...
+ volumes:
+ ...
+ - name: hugepage
+ emptyDir:
+ medium: HugePages
+ ...
+ ```
+
+
+
+And only for PROX:
+
+- directory with the PROX configuration files: Directory that contains `parameters.lua` and `prox.cfg` files. It's shared between pods.
+
+ ```yaml
+ ...
+ spec:
+ containers:
+ ...
+ volumeMounts:
+ ...
+ - mountPath: /opt/prox/
+ name: prox-dir
+ ...
+ volumes:
+ ...
+ - name: prox-dir
+ hostPath:
+ path: /opt/prox/
+ ...
+ ```
+
+ There are two variants of this directory: one for generator pod and the other for swap pods. The configuration files are more coherent with the role of the pod.
+
+ - Genreator pod: `/opt/proxgen`
+ - Swap pods: `/opt/proxswap`
+
+### CNIs
+
+The first CNI that is needed is Multus. This CNI allow to assign more than a single interface to the Pod.
+The choice of the CNIs that can be used for these additional interfaces is limited by the fact that the networking is in user space, so Userspace CNI should be used.
+
+### vSwitches
+
+As the Userspace CNI is used, the only virtual swithces that are supported are: OvS-DPDK and VPP. \ No newline at end of file
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Test with PROX and OVS.md b/docs/testing/user/userguide/east-west-benchmarking/Test with PROX and OVS.md
new file mode 100644
index 00000000..cdf7ca32
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Test with PROX and OVS.md
@@ -0,0 +1,372 @@
+# ETSI GS NFV-TST 009 Testing with PROX and OvS-DPDK in a Kubernetes Cluster
+
+This document shows an example of testing the dataplane in the third topology represented in the [topologies description](Topologies.md) with two pods equipped with two interfaces each that are bounded to OvS-DPDK, using PROX as traffic generator. The `userspace-rapid-pod-t3-p1.yaml` and the `userspace-rapid-pod-t3-p2.yaml` files can be created by modifying the [Rapid pod definition file](./Configuration/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-OvS-DPDK.yaml).
+
+### Prepare OvS-DPDK and deploy the kubernetes components
+
+- On Node 1:
+ - source vsperfenv/bin/activate
+ 2. cd vineperf.
+
+ 3. ./vsperf --conf-file ~/conf/vsperf-master.conf --mode trafficgen-off phy2phy_tput - Leave this window untouched.
+- On Node 2 **(After previous steps)**:
+ - Deploy network attachment `userspace-ovs-netAttach.yaml`
+ - Deploy pods applying `userspace-rapid-pod-t3-p1.yaml` and `userspace-rapid-pod-t3-p2.yaml`
+
+### Configure PROX inside the pods
+
+- Generator Pod:
+
+ - Enter the generator pod with `kubectl exec -it userspace-rapid-pod-t3-p1 -- /bin/bash`
+
+ - copy the prox folder (it is shared between pods) to make changes on configuration files: `cp -r /opt/prox /opt/proxgen`
+
+ - search for the two memif socketfile names running :
+
+ ```
+ [root@userspace-rapid-pod-t3-p1 /]# cat /etc/podnetinfo/annotations | grep socketfile
+ userspace/configuration-data="[{\n \"containerId\": \"87042916ab4dac68611ea9d2f02bcf26bc82b5d17716ffa9ebff1cf36af1fca3\",\n \"ifName\": \"net1\",\n \"name\": \"userspace-ovs-net-1\",\n \"config\": {\n \"engine\": \"ovs-dpdk\",\n \"iftype\": \"vhostuser\",\n \"netType\": \"interface\",\n \"memif\": {},\n \"vhost\": {\n \"mode\": \"client\",\n \"socketfile\": \"87042916ab4d-net1\"\n },\n \"bridge\": {}\n },\n \"ipResult\": {\n \"interfaces\": [\n {\n \"name\": \"net1\",\n \"sandbox\": \"/proc/2910/ns/net\"\n }\n ],\n \"dns\": {}\n }\n},{\n \"containerId\": \"87042916ab4dac68611ea9d2f02bcf26bc82b5d17716ffa9ebff1cf36af1fca3\",\n \"ifName\": \"net2\",\n \"name\": \"userspace-ovs-net-1\",\n \"config\": {\n \"engine\": \"ovs-dpdk\",\n \"iftype\": \"vhostuser\",\n \"netType\": \"interface\",\n \"memif\": {},\n \"vhost\": {\n \"mode\": \"client\",\n \"socketfile\": \"87042916ab4d-net2\"\n },\n \"bridge\": {}\n },\n \"ipResult\": {\n \"interfaces\": [\n {\n \"name\": \"net2\",\n \"sandbox\": \"/proc/2910/ns/net\"\n }\n ],\n \"dns\": {}\n }\n}]"
+ ```
+
+
+
+ - copy the names `*-net1` and `*-net2`
+
+ - edit the `parameters.lua` changing the socketfile name and set the CPUs number for the main core, generator cores and latency cores:
+
+ ```lua
+ ...
+ eal="--socket-mem=256,0 --vdev=virtio_user0,path=/usrspcni/87042916ab4d-net1 --vdev=virtio_user1,path=/usrspcni/87042916ab4d-net2"
+ mcore="14"
+ ...
+ gencores="15"
+ latcores="16"
+ ...
+
+ ```
+
+ - edit `prox.cfg` to configure the tasks properly for generating and receiving packets:
+
+ ```
+ [lua]
+ dofile("parameters.lua")
+
+ [eal options]
+ -n=4 ; force number of memory channels
+ no-output=no ; disable DPDK debug output
+ eal=--proc-type auto ${eal}
+
+ [port 0]
+ name=p0
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [port 1]
+ name=p1
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [variables]
+ $mbs=8
+
+ [defaults]
+ mempool size=8K
+
+ [global]
+ name=${name}
+ heartbeat timeout=${heartbeat}
+
+ [core $mcore]
+ mode=master
+
+ [core $gencores]
+ name=p0
+ task=0
+ mode=gen
+ tx port=p0
+ bps=1250000000
+ pkt inline=${dest_hex_mac1} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip1} ${local_hex_ip2} 0b b8 0b b9 00 1a 55 7b
+ pkt size=60
+ min bulk size=$mbs
+ max bulk size=16
+ drop=yes
+ lat pos=42
+ accuracy pos=46
+ packet id pos=50
+ signature=0x98765432
+ signature pos=56
+
+ [core $latcores]
+ name=lat
+ task=0
+ mode=lat
+ rx port=p1
+ lat pos=42
+ accuracy pos=46
+ packet id pos=50
+ signature=0x98765432
+ signature pos=56
+ accuracy limit nsec=1000000
+ latency bucket size=${bucket_size_exp}
+ ```
+
+ - Enter rapid folder and start PROX:
+
+ ```
+ [root@userspace-rapid-pod-t3-p1 /]# cd /opt/rapid/
+ [root@userspace-rapid-pod-t3-p1 rapid]# ./prox -f ../proxgen/prox.cfg -et
+ ```
+
+ ```
+ Usage: ./prox [-f CONFIG_FILE] [-a|-e] [-m|-s|-i] [-w DEF] [-u] [-t]
+ -f CONFIG_FILE : configuration file to load, ./prox.cfg by default
+ -e : don't autostart
+ -t : Listen on TCP port 8474
+ ```
+
+ ![prox-vpp-screen](./images/prox-vpp-screen.png)
+
+- Swap Pod:
+
+ - Enter the generator pod with `kubectl exec -it userspace-rapid-pod-t3-p2 -- /bin/bash`
+
+ - copy the prox folder (it is shared between pods) to make changes on configuration files: `cp -r /opt/prox /opt/proxswap`
+
+ - search for the two virtio socketfile names like for the Generator Pod and copy the names `*-net1` and `*-net2`
+
+ - edit the `parameters.lua` changing the socketfile name and set the CPUs number for the main core (same as Generator Pod) and the swap cores:
+
+ ```lua
+ ...
+ swapone="17"
+ ...
+
+ ```
+
+ - edit `prox.cfg` to configure the tasks properly for swapping:
+
+ ```
+ [lua]
+ dofile("parameters.lua")
+
+ [eal options]
+ -n=4 ; force number of memory channels
+ no-output=no ; disable DPDK debug output
+ eal=--proc-type auto ${eal}
+
+ [port 0]
+ name=p0
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [port 1]
+ name=p1
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [variables]
+ $mbs=8
+
+ [defaults]
+ mempool size=8K
+
+ [global]
+ name=${name}
+ heartbeat timeout=${heartbeat}
+
+ [core $mcore]
+ mode=master
+
+ [core $swapone]
+ name=swap1
+ task=0
+ mode=swap
+ rx port=p0
+ tx port=p1
+ drop=no
+ ```
+
+ - Enter rapid folder and start PROX:
+
+ ```
+ [root@userspace-rapid-pod-t3-p2 /]# cd /opt/rapid/
+ [root@userspace-rapid-pod-t3-p2 rapid]# ./prox -f ../proxgen/prox.cfg
+ ```
+
+ ![prox-vpp-screen-swap](./images/prox-vpp-screen-swap.png)
+
+### Configure OVS-DPDK
+
+The default configuration is under `vineperf/conf/02_vswitch.conf`. Then it's necessary to configure the connections between the interfaces
+
+- Go to the utilities folder `cd /home/opnfv/vineperf/src/ovs/ovs/utilities`
+
+- Run `sudo ovs-vsctl -- --columns=name,ofport list Interface` : Note down the port numbers (`ofport`) mapping to the vhost interfaces.
+
+ ```
+ [opnfv@worker utilities]$ sudo ovs-vsctl -- --columns=name,ofport list Interface
+ name : "dpdk1"
+ ofport : -1
+
+ name : "87042916ab4d-net1"
+ ofport : 1
+
+ name : "dpdk0"
+ ofport : -1
+
+ name : "vsperf-br0"
+ ofport : 65534
+
+ name : "2d63b16eb7ac-net2"
+ ofport : 4
+
+ name : "87042916ab4d-net2"
+ ofport : 2
+
+ name : "2d63b16eb7ac-net1"
+ ofport : 3
+ ```
+
+ In this case `ofport` for the first pod are 1 and 2 and for the second are 3 and 4.
+
+- Open `setup_flows.sh` file. Modify the `in_port=<>` and `action=output:<>` values to connect the interfaces:
+
+ ``` bash
+ sudo ovs-ofctl --timeout 10 -O OpenFlow13 del-flows vsperf-br0
+ sudo ovs-ofctl --timeout 10 -O Openflow13 add-flow vsperf-br0 in_port=1,idle_timeout=0,action=output:3
+ sudo ovs-ofctl --timeout 10 -O Openflow13 add-flow vsperf-br0 in_port=4,idle_timeout=0,action=output:2
+ ```
+
+
+
+- Run `sudo ./setup_flows.sh`
+
+- Verify that the flows are correct by running `sudo ovs-ofctl dump-flows vsperf-br0`:
+
+ ``` bash
+ [opnfv@worker utilities]$ sudo ovs-ofctl dump-flows vsperf-br0
+ cookie=0x0, duration=10.400s, table=0, n_packets=0, n_bytes=0, in_port=1 actions=output:3
+ cookie=0x0, duration=10.348s, table=0, n_packets=0, n_bytes=0, in_port=4 actions=output:2
+ ```
+
+
+
+### Configure rapid environment and files
+
+On Node 1 the environment and the file for running rapid should be set-up.
+
+Source the rapidenv and enter the rapid folder:
+
+```bash
+[opnfv@worker ~]$ source rapidenv/bin/activate
+(rapidenv) [opnfv@worker ~]$ cd rapid
+(rapidenv) [opnfv@worker rapid]$
+```
+
+Now we need `.env` , `.tst` and `machine.map` files to run the `runrapid.py` script that do the tests.
+
+Before creating theese files the IP of the generator pod is needed. On Node 1 run this command:
+
+``` bash
+[opnfv@master ~]$ kubectl get pods -o wide
+NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
+userspace-rapid-pod-t3-p1 1/1 Running 0 69m 10.244.1.157 worker <none> <none>
+userspace-rapid-pod-t3-p2 1/1 Running 0 69m 10.244.1.158 worker <none> <none>
+```
+
+For the `topology-3.env`:
+
+```
+[rapid]
+loglevel = DEBUG
+version = 19.6.30
+total_number_of_machines = 1
+
+[M1]
+name = rapid-pod-1
+admin_ip = 10.244.1.157
+dp_ip = 192.168.1.4
+dp_mac = de:ad:c3:52:79:9b
+
+
+[ssh]
+key=rapid_rsa_key
+user = root
+
+[Varia]
+vim = Openstack
+stack = rapid
+```
+
+Before the `.tst` file, the `prox.cfg` file should be copied under a folder in the same Node, in this case under `~/configs`.
+
+The `topology-3.tst`:
+
+```
+[TestParameters]
+name = Rapid_ETSINFV_TST009
+number_of_tests = 1
+total_number_of_test_machines = 1
+lat_percentile = 99
+
+[TestM1]
+name = Generator
+prox_launch_exit = false
+config_file = configs/prox.cfg
+dest_vm = 1
+mcore = [14]
+gencores = [15]
+latcores = [16]
+
+[test1]
+test=TST009test
+warmupflowsize=128
+warmupimix=[64]
+warmupspeed=1
+warmuptime=2
+imixs=[[64],[128],[256],[512],[1024],[1280],[1512]]
+flows=[1]
+drop_rate_threshold = 0
+MAXr = 3
+MAXz = 5000
+MAXFramesPerSecondAllIngress = 12000000
+StepSize = 10000
+```
+
+For `machine.map`:
+
+```
+[DEFAULT]
+machine_index=0
+
+[TestM1]
+machine_index=1
+
+[TestM2]
+machine_index=2
+
+[TestM3]
+machine_index=3
+
+[TestM4]
+machine_index=4
+```
+
+
+
+### Running the tests
+
+Now that it's all configured, the test can be started form the rapid folder with the `runrapid.py` script, passing the two files as arguments:
+
+``` bash
+(rapidenv) [opnfv@worker rapid]$ python runrapid.py --env topology-3.env --test topology-3.tst --map machine.map --runtime 10 --screenlog DEBUG
+```
+
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Test with PROX and VPP.md b/docs/testing/user/userguide/east-west-benchmarking/Test with PROX and VPP.md
new file mode 100644
index 00000000..21426ab2
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Test with PROX and VPP.md
@@ -0,0 +1,375 @@
+# ETSI GS NFV-TST 009 Testing with PROX and VPP in a Kubernetes Cluster
+
+This document shows an example of testing the dataplane in the third topology represented in the [topologies description](Topologies.md) with two pods equipped with two interfaces each that are bounded to VPP, using PROX as traffic generator. The `userspace-rapid-pod-t3-p1.yaml` and the `userspace-rapid-pod-t3-p2.yaml` files can be created by modifying the [Rapid pod definition file](./Configuration/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-VPP.yaml).
+
+### Prepare VPP and deploy the kubernetes components
+
+- On Node 1:
+ - Start `vpp.service` with `startup.conf` file under `/etc/vpp`
+- On Node 2:
+ - Deploy network attachment `userspace-vpp-netAttach-memif.yaml`
+ - Deploy pods applying `userspace-rapid-pod-t3-p1.yaml` and `userspace-rapid-pod-t3-p2.yaml`
+
+### Configure PROX inside the pods
+
+- Generator Pod:
+
+ - Enter the generator pod with `kubectl exec -it userspace-rapid-pod-t3-p1 -- /bin/bash`
+
+ - copy the prox folder (it is shared between pods) to make changes on configuration files: `cp -r /opt/prox /opt/proxgen`
+
+ - search for the two memif socketfile names running :
+
+ ```
+ [root@userspace-rapid-pod-t3-p1 /]# cat /etc/podnetinfo/annotations | grep socketfile
+ userspace/configuration-data="[{\n \"containerId\": \"d3810ce7d4dee8f4cbcbfb7f3a53b86fd33481db282446b07dcb1bf4f1d7fa49\",\n \
+
+ "ifName\": \"net1\",\n \"name\": \"userspace-vpp-net\",\n \"config\": {\n \"engine\": \"vpp\",\n \"iftype\": \"
+
+ memif\",\n \"netType\": \"interface\",\n \"memif\": {\n \"role\": \"slave\",\n \"mode\": \"ethe
+
+ rnet\",\n \"**socketfile**\": \"memif-d3810ce7d4de-net1.sock\"\n },\n \"vhost\": {},\n \"bridge\": {}\n
+
+ ​ },\n \"ipResult\": {\n \"interfaces\": [\n {\n \"name\": \"net1\",\n \"sandb
+
+ ox\": \"/proc/17603/ns/net\"\n }\n ],\n \"dns\": {}\n }\n},{\n \"containerId\": \"d3810ce7d4dee8f4cb
+
+ cbfb7f3a53b86fd33481db282446b07dcb1bf4f1d7fa49\",\n \"ifName\": \"net2\",\n \"name\": \"userspace-vpp-net\",\n \"config\":
+
+ {\n \"engine\": \"vpp\",\n \"iftype\": \"memif\",\n \"netType\": \"interface\",\n \"memif\": {\n
+
+ ​ \"role\": \"slave\",\n \"mode\": \"ethernet\",\n \"**socketfile**\": \"memif-d3810ce7d4de-net2.sock\"\n
+
+ ​ },\n \"vhost\": {},\n \"bridge\": {}\n },\n \"ipResult\": {\n \"interfaces\": [\n {\n
+
+ ​ \"name\": \"net2\",\n \"sandbox\": \"/proc/17603/ns/net\"\n }\n ],\n \"dns\": {
+
+ }\n }\n}]"
+ ```
+
+
+
+ - copy the names `memif-*-net1.sock` and `memif-*-net2.sock`
+
+ - edit the `parameters.lua` changing the socketfile name and set the CPUs number for the main core, generator cores and latency cores:
+
+ ```lua
+ ...
+ eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-d3810ce7d4de-net1.sock --vdev=net_memif1,socket=/usrspcni/memif-d3810ce7d4de-net2.sock"
+ mcore="14"
+ ...
+ gencores="15"
+ latcores="16"
+ ...
+
+ ```
+
+ - edit `prox.cfg` to configure the tasks properly for generating and receiving packets:
+
+ ```
+ [lua]
+ dofile("parameters.lua")
+
+ [eal options]
+ -n=4 ; force number of memory channels
+ no-output=no ; disable DPDK debug output
+ eal=--proc-type auto ${eal}
+
+ [port 0]
+ name=p0
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [port 1]
+ name=p1
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [variables]
+ $mbs=8
+
+ [defaults]
+ mempool size=8K
+
+ [global]
+ name=${name}
+ heartbeat timeout=${heartbeat}
+
+ [core $mcore]
+ mode=master
+
+ [core $gencores]
+ name=p0
+ task=0
+ mode=gen
+ tx port=p0
+ bps=1250000000
+ pkt inline=${dest_hex_mac1} 00 00 00 00 00 00 08 00 45 00 00 2e 00 01 00 00 40 11 f7 7d ${local_hex_ip1} ${local_hex_ip2} 0b b8 0b b9 00 1a 55 7b
+ pkt size=60
+ min bulk size=$mbs
+ max bulk size=16
+ drop=yes
+ lat pos=42
+ accuracy pos=46
+ packet id pos=50
+ signature=0x98765432
+ signature pos=56
+
+ [core $latcores]
+ name=lat
+ task=0
+ mode=lat
+ rx port=p1
+ lat pos=42
+ accuracy pos=46
+ packet id pos=50
+ signature=0x98765432
+ signature pos=56
+ accuracy limit nsec=1000000
+ latency bucket size=${bucket_size_exp}
+ ```
+
+ - Enter rapid folder and start PROX:
+
+ ```
+ [root@userspace-rapid-pod-t3-p1 /]# cd /opt/rapid/
+ [root@userspace-rapid-pod-t3-p1 rapid]# ./prox -f ../proxgen/prox.cfg -et
+ ```
+
+ ```
+ Usage: ./prox [-f CONFIG_FILE] [-a|-e] [-m|-s|-i] [-w DEF] [-u] [-t]
+ -f CONFIG_FILE : configuration file to load, ./prox.cfg by default
+ -e : don't autostart
+ -t : Listen on TCP port 8474
+ ```
+
+ ![prox-vpp-screen](./images/prox-vpp-screen.png)
+
+- Swap Pod:
+
+ - Enter the generator pod with `kubectl exec -it userspace-rapid-pod-t3-p2 -- /bin/bash`
+ - copy the prox folder (it is shared between pods) to make changes on configuration files: `cp -r /opt/prox /opt/proxswap`
+ - search for the two memif socketfile names like for the Generator Pod and copy the names `memif-*-net1.sock` and `memif-*-net2.sock`
+
+ - edit the `parameters.lua` changing the socketfile name and set the CPUs number for the main core (same as Generator Pod) and the swap cores:
+
+ ```lua
+ ...
+ swapone="17"
+ ...
+
+ ```
+
+ - edit `prox.cfg` to configure the tasks properly for swapping:
+
+ ```
+ [lua]
+ dofile("parameters.lua")
+
+ [eal options]
+ -n=4 ; force number of memory channels
+ no-output=no ; disable DPDK debug output
+ eal=--proc-type auto ${eal}
+
+ [port 0]
+ name=p0
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [port 1]
+ name=p1
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [variables]
+ $mbs=8
+
+ [defaults]
+ mempool size=8K
+
+ [global]
+ name=${name}
+ heartbeat timeout=${heartbeat}
+
+ [core $mcore]
+ mode=master
+
+ [core $swapone]
+ name=swap1
+ task=0
+ mode=swap
+ rx port=p0
+ tx port=p1
+ drop=no
+ ```
+
+ - Enter rapid folder and start PROX:
+
+ ```
+ [root@userspace-rapid-pod-t3-p2 /]# cd /opt/rapid/
+ [root@userspace-rapid-pod-t3-p2 rapid]# ./prox -f ../proxgen/prox.cfg
+ ```
+
+ ![prox-vpp-screen-swap](./images/prox-vpp-screen-swap.png)
+
+### Configure VPP
+
+On Node 1 VPP should be configured to send the traffic between memif interfaces with `l2patch`:
+
+```
+[opnfv@worker ~]$ sudo vppctl
+ _______ _ _ _____ ___
+ __/ __/ _ \ (_)__ | | / / _ \/ _ \
+ _/ _// // / / / _ \ | |/ / ___/ ___/
+ /_/ /____(_)_/\___/ |___/_/ /_/
+
+vpp# show interface
+ Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
+local0 0 down 0/0/0/0
+memif1/0 1 up 9000/0/0/0
+memif2/0 2 up 9000/0/0/0
+memif3/0 3 up 9000/0/0/0
+memif4/0 4 up 9000/0/0/0
+vpp# show l2patch
+no l2patch entries
+vpp# test l2patch rx memif1/0 tx memif3/0
+vpp# test l2patch rx memif4/0 tx memif2/0
+vpp# show l2patch
+ memif1/0 -> memif3/0
+ memif4/0 -> memif2/0
+```
+
+To check the socketfiles of the showed memif for the patch configuration run:
+
+```
+vpp# show memif
+sockets
+ id listener filename
+ 2 yes (1) /var/lib/cni/usrspcni/data/memif-d3810ce7d4de-net2.sock
+ 4 yes (1) /var/lib/cni/usrspcni/data/memif-ab82066a8020-net2.sock
+ 3 yes (1) /var/lib/cni/usrspcni/data/memif-ab82066a8020-net1.sock
+ 0 no /run/vpp/memif.sock
+ 1 yes (1) /var/lib/cni/usrspcni/data/memif-d3810ce7d4de-net1.sock
+
+...
+```
+
+### Configure rapid environment and files
+
+On Node 1 the environment and the file for running rapid should be set-up.
+
+Source the rapidenv and enter the rapid folder:
+
+```bash
+[opnfv@worker ~]$ source rapidenv/bin/activate
+(rapidenv) [opnfv@worker ~]$ cd rapid
+(rapidenv) [opnfv@worker rapid]$
+```
+
+Now we need `.env` , `.tst` and `machine.map` files to run the `runrapid.py` script that do the tests.
+
+Before creating theese files the IP of the generator pod is needed. On Node 1 run this command:
+
+```bash
+[opnfv@master ~]$ kubectl get pods -o wide
+NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
+userspace-rapid-pod-t3-p1 1/1 Running 0 69m 10.244.1.157 worker <none> <none>
+userspace-rapid-pod-t3-p2 1/1 Running 0 69m 10.244.1.158 worker <none> <none>
+```
+
+For the `topology-3.env`:
+
+```
+[rapid]
+loglevel = DEBUG
+version = 19.6.30
+total_number_of_machines = 1
+
+[M1]
+name = rapid-pod-1
+admin_ip = 10.244.1.157
+dp_ip = 192.168.1.4
+dp_mac = de:ad:c3:52:79:9b
+
+
+[ssh]
+key=rapid_rsa_key
+user = root
+
+[Varia]
+vim = Openstack
+stack = rapid
+```
+
+Before the `.tst` file, the `prox.cfg` file should be copied under a folder in the same Node, in this case under `~/configs`.
+
+The `topology-3.tst`:
+
+```
+[TestParameters]
+name = Rapid_ETSINFV_TST009
+number_of_tests = 1
+total_number_of_test_machines = 1
+lat_percentile = 99
+
+[TestM1]
+name = Generator
+prox_launch_exit = false
+config_file = configs/prox.cfg
+dest_vm = 1
+mcore = [14]
+gencores = [15]
+latcores = [16]
+
+[test1]
+test=TST009test
+warmupflowsize=128
+warmupimix=[64]
+warmupspeed=1
+warmuptime=2
+imixs=[[64],[128],[256],[512],[1024],[1280],[1512]]
+flows=[1]
+drop_rate_threshold = 0
+MAXr = 3
+MAXz = 5000
+MAXFramesPerSecondAllIngress = 12000000
+StepSize = 10000
+```
+
+For `machine.map`:
+
+```
+[DEFAULT]
+machine_index=0
+
+[TestM1]
+machine_index=1
+
+[TestM2]
+machine_index=2
+
+[TestM3]
+machine_index=3
+
+[TestM4]
+machine_index=4
+```
+
+
+
+### Running the tests
+
+Now that it's all configured, the test can be started form the rapid folder with the `runrapid.py` script, passing the two files as arguments:
+
+``` bash
+(rapidenv) [opnfv@worker rapid]$ python runrapid.py --env topology-3.env --test topology-3.tst --map machine.map --runtime 10 --screenlog DEBUG
+```
+
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Test with TRex and VPP.md b/docs/testing/user/userguide/east-west-benchmarking/Test with TRex and VPP.md
new file mode 100644
index 00000000..b1878b39
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Test with TRex and VPP.md
@@ -0,0 +1,228 @@
+# ETSI GS NFV-TST 009 Testing with TRex and VPP in a Kubernetes Cluster
+
+This document shows an example of testing the dataplane in the third topology represented in the [topologies description](Topologies.md) with two pods equipped with two interfaces each that are bounded to VPP, using TRex as traffic generator. The `userspace-trex-pod-t3-p1.yaml` file can be created by modifying the [TRex pod definition file](./Configuration/Kubernetes/TRex-pod/userspace-trex-pod-2-interfaces-VPP.yaml) and for `userspace-rapid-pod-t3-p2.yaml` file use the [Rapid pod definition file](./Configuration/Kubernetes/Rapid-pod/userspace-rapid-pod-2-interfaces-VPP.yaml).
+
+### Prepare VPP and deploy the Kubernetes components
+
+- On Node 1:
+ - Start `vpp.service` with `startup.conf` file under `/etc/vpp`
+- On Node 2:
+ - Deploy network attachment `userspace-vpp-netAttach-memif.yaml`
+ - Deploy pods applying `userspace-trex-pod-t3-p1.yaml` and `userspace-rapid-pod-t3-p2.yaml`
+
+### Configure TRex inside the pods
+
+- Generator Pod:
+
+ - Enter the generator pod with `kubectl exec -it userspace-trex-pod-t3-p1 -- /bin/bash`
+
+ - Run the script `vppconf.py` that generates the TRex configuration file:
+
+ ```
+ [root@userspace-trex-pod-t3-p1 ~]# python3 vppconf.py
+ Type=Memif Role=slave Mode=ethernet Path=/usrspcni/memif-e80434cd91fc-net1.sock
+ Type=Memif Role=slave Mode=ethernet Path=/usrspcni/memif-e80434cd91fc-net2.sock
+ ```
+
+ - Edit the configuration file `/etc/trex_cfg.yaml` to set the slave mode for the memif interface :
+
+ ```
+ ...
+ interfaces : ["--vdev=net_memif0,socket=/usrspcni/memif-e80434cd91fc-net1.sock,role=slave", "--vdev=net_memif1,socket=/usrspcni/memif-e80434cd91fc-net2.sock,role=slave"] # list of the interfaces
+ ...
+ ```
+
+ - Go in the TRex folder and start it:
+
+ ```
+ [root@userspace-trex-pod-t3-p1 ~]# cd v2.86/
+ [root@userspace-trex-pod-t3-p1 v2.86]# ./t-rex-64 -i --no-scapy-server --nc --no-watchdog
+ ```
+
+ The TRex screen comes up:
+
+ ![trex-screen](./images/trex-screen.png)
+
+
+
+- Swap Pod:
+
+ - Enter the generator pod with `kubectl exec -it userspace-rapid-pod-t3-p2 -- /bin/bash`
+
+ - copy the prox folder (it is shared between pods) to make changes on configuration files: `cp -r /opt/prox /opt/proxswap`
+
+ - search for the two memif socketfile names running :
+
+ ```bash
+ [root@userspace-rapid-pod-t3-p2 /]# cat /etc/podnetinfo/annotations | grep socketfile
+ userspace/configuration-data="[{\n \"containerId\": \"fbbc9e8e1c5bfb280eeb061c7c1fc6fade8cb2e0e8cda7dd0c3974ce61442246\",\n \"ifName\": \"net1\",\n \"name\": \"userspace-vpp-net\",\n \"config\": {\n \"engine\": \"vpp\",\n \"iftype\": \"memif\",\n \"netType\": \"interface\",\n \"memif\": {\n \"role\": \"slave\",\n \"mode\": \"ethernet\",\n \"socketfile\": \"memif-fbbc9e8e1c5b-net1.sock\"\n },\n \"vhost\": {},\n \"bridge\": {}\n },\n \"ipResult\": {\n \"interfaces\": [\n {\n \"name\": \"net1\",\n \"sandbox\": \"/proc/24281/ns/net\"\n }\n ],\n \"dns\": {}\n }\n},{\n \"containerId\": \"fbbc9e8e1c5bfb280eeb061c7c1fc6fade8cb2e0e8cda7dd0c3974ce61442246\",\n \"ifName\": \"net2\",\n \"name\": \"userspace-vpp-net\",\n \"config\": {\n \"engine\": \"vpp\",\n \"iftype\": \"memif\",\n \"netType\": \"interface\",\n \"memif\": {\n \"role\": \"slave\",\n \"mode\": \"ethernet\",\n \"socketfile\": \"memif-fbbc9e8e1c5b-net2.sock\"\n },\n \"vhost\": {},\n \"bridge\": {}\n },\n \"ipResult\": {\n \"interfaces\": [\n {\n \"name\": \"net2\",\n \"sandbox\": \"/proc/24281/ns/net\"\n }\n ],\n \"dns\": {}\n }\n}]"
+ ```
+
+
+
+ - copy the names `memif-*-net1.sock` and `memif-*-net2.sock`
+
+ - edit the `parameters.lua` changing the socketfile name and set the CPUs number for the main core, generator cores and latency cores:
+
+ ```lua
+ ...
+ eal="--socket-mem=256,0 --vdev=net_memif0,socket=/usrspcni/memif-fbbc9e8e1c5b-net1.sock --vdev=net_memif1,socket=/usrspcni/memif-fbbc9e8e1c5b-net2.sock"
+ mcore="14"
+ ...
+ swapone="17"
+ ...
+ ```
+
+ - edit `prox.cfg` to configure the tasks properly for swapping:
+
+ ```
+ [lua]
+ dofile("parameters.lua")
+
+ [eal options]
+ -n=4 ; force number of memory channels
+ no-output=no ; disable DPDK debug output
+ eal=--proc-type auto ${eal}
+
+ [port 0]
+ name=p0
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [port 1]
+ name=p1
+ rx desc=2048
+ tx desc=2048
+ vlan=yes
+ lsc=no
+
+ [variables]
+ $mbs=8
+
+ [defaults]
+ mempool size=8K
+
+ [global]
+ name=${name}
+ heartbeat timeout=${heartbeat}
+
+ [core $mcore]
+ mode=master
+
+ [core $swapone]
+ name=swap1
+ task=0
+ mode=swap
+ rx port=p0
+ tx port=p1
+ drop=no
+ ```
+
+ - Enter rapid folder and start PROX:
+
+ ```bash
+ [root@userspace-rapid-pod-t3-p2 /]# cd /opt/rapid/
+ [root@userspace-rapid-pod-t3-p2 rapid]# ./prox -f ../proxgen/prox.cfg
+ ```
+
+ ![prox-vpp-screen-swap](./images/prox-vpp-screen-swap.png)
+
+### Configure VPP
+
+On Node 1 VPP should be configured to send the traffic between memif interfaces with `l2patch`:
+
+```
+[opnfv@worker ~]$ sudo vppctl
+ _______ _ _ _____ ___
+ __/ __/ _ \ (_)__ | | / / _ \/ _ \
+ _/ _// // / / / _ \ | |/ / ___/ ___/
+ /_/ /____(_)_/\___/ |___/_/ /_/
+
+vpp# show interface
+ Name Idx State MTU (L3/IP4/IP6/MPLS) Counter Count
+local0 0 down 0/0/0/0
+memif1/0 1 up 9000/0/0/0
+memif2/0 2 up 9000/0/0/0
+memif3/0 3 up 9000/0/0/0
+memif4/0 4 up 9000/0/0/0
+vpp# show l2patch
+no l2patch entries
+vpp# test l2patch rx memif1/0 tx memif3/0
+vpp# test l2patch rx memif4/0 tx memif2/0
+vpp# show l2patch
+ memif1/0 -> memif3/0
+ memif4/0 -> memif2/0
+```
+
+To check the socketfiles of the memif shown for the patch configuration run:
+
+```
+vpp# show memif
+sockets
+ id listener filename
+ 2 yes (1) /var/lib/cni/usrspcni/data/memif-e80434cd91fc-net2.sock
+ 4 yes (1) /var/lib/cni/usrspcni/data/memif-fbbc9e8e1c5b-net2.sock
+ 3 yes (1) /var/lib/cni/usrspcni/data/memif-fbbc9e8e1c5b-net1.sock
+ 0 no /run/vpp/memif.sock
+ 1 yes (1) /var/lib/cni/usrspcni/data/memif-e80434cd91fc-net1.sock
+
+...
+```
+
+### Configure vsperf environment and files
+
+On Node 1 the environment and the file for running rapid should be set-up.
+
+Source the rapidenv and enter the rapid folder:
+
+```bash
+[opnfv@worker ~]$ source vsperfenv/bin/activate
+(rapidenv) [opnfv@worker ~]$ cd rapid
+(rapidenv) [opnfv@worker rapid]$
+```
+
+Now edit the vsperf configuration file to use TRex with the test variables set-up and write the generator pod's IP for the connection. Find the IP with `kubectl get pods -o wide`:
+
+```
+[opnfv@master ~]$ kubectl get pods -o wide
+NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
+userspace-rapid-pod-t3-p2 1/1 Running 0 22m 10.244.1.203 worker <none> <none>
+userspace-trex-pod-t3-p1 1/1 Running 0 22m 10.244.1.202 worker <none> <none>
+```
+
+Copy the IP of the `userspace-trex-pod-t3-p1` pod and then edit the configuration file `~/conf/vsperf-trex.conf`:
+
+```
+VSWITCH_BRIDGE_NAME = 'vsperf-br0'
+WHITELIST_NICS = ['06:00.0', '06:00.1']
+TRAFFICGEN = 'Trex'
+TRAFFICGEN_TREX_HOST_IP_ADDR = '10.244.1.202'
+TRAFFICGEN_TREX_USER = 'root'
+TRAFFICGEN_TREX_BASE_DIR = '/root/v2.86/'
+TRAFFICGEN_TREX_LINE_SPEED_GBPS = '10'
+TRAFFICGEN_TREX_PORT1 = '0000:02:00.0'
+TRAFFICGEN_TREX_PORT2 = '0000:02:00.1'
+TRAFFICGEN_TREX_PROMISCUOUS = False
+TRAFFICGEN_DURATION=10
+TRAFFICGEN_LOSSRATE=0
+TRAFFICGEN_RFC2544_TESTS=10
+TRAFFICGEN_PKT_SIZES=(64,128,256,512,1024,1280,1518)
+GUEST_TESTPMD_FWD_MODE = ['io']
+GUEST_IMAGE = ['/home/opnfv/old/vnfs/vloop-vnf-ubuntu-18.04_20180920.qcow2']
+TRAFFICGEN_TREX_LATENCY_PPS = 1000
+TRAFFICGEN_TREX_FORCE_PORT_SPEED = True
+TRAFFICGEN_TREX_PORT_SPEED = 10000 # 10 Gbps
+TRAFFICGEN_TREX_RFC2544_BINARY_SEARCH_LOSS_VERIFICATION = True
+TRAFFICGEN_TREX_RFC2544_MAX_REPEAT = 3
+```
+
+### Running the tests
+
+Now that it's all configured, the test can be started form the vineperf folder with the `vsperf` script, passing the configuration file as argument:
+
+``` bash
+(vsperfenv) [opnfv@worker vineperf]$ ./vsperf --conf-file ~/conf/vsperf-trex.conf --mode trafficgen phy2phy_tput
+```
+
diff --git a/docs/testing/user/userguide/east-west-benchmarking/Topologies-EastWest.md b/docs/testing/user/userguide/east-west-benchmarking/Topologies-EastWest.md
new file mode 100644
index 00000000..84dd8725
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/Topologies-EastWest.md
@@ -0,0 +1,34 @@
+# Topologies used for East-Weast traffic benchmarking
+
+For the East-Weast traffic benchmarking, five topologies has been tested. These topologies are composed by Pods running in the same node, and each one differs in terms of number of Pods and numbers of interfaces.
+
+
+
+### Topologies
+
+<img src="./images/topologies.png" alt="topologies" style="zoom: 50%;" />
+
+
+
+### Single and Multi Nodes
+
+A System Under Test (SUT) can be composed by one or more nodes. In a single node configuration all the Pods run on the same worker node, while, in a multi node configuration there are Pods that run on different workers and the traffic flows also in the Kubernetes main network.
+
+### Traffic Generators as PODs
+
+##### Different Traffic generators
+
+The traffic generators available as Pods are TRex and PROX.
+
+##### Swaps and Routers as test-pods.
+
+PROX's Swap and Router modes are useful for creating complex network topologies (such as the 5 shown at the beginning of this file).
+
+- Swap: takes whatever arrives on a specified rx port and send to a specified tx port. The source/destination MAC and ports are swapped.
+- Router: PROX defines a routing table to foward traffic on the Pod's interfaces. It finds MAC address by running the ARP protocol and than updates the table.
+
+##### CNIs Used
+
+The additional interfaces has been configured by the Userspace CNI. With that CNI the Pods can use memif or vhost-user interfaces to communicate respectively with VPP or OvS-DPDK.
+
+SRIOV was excluded due to lack of access to switching infrastructure. \ No newline at end of file
diff --git a/docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen-swap.png b/docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen-swap.png
new file mode 100644
index 00000000..a0dca08a
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen-swap.png
Binary files differ
diff --git a/docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen.png b/docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen.png
new file mode 100644
index 00000000..09d3b8e6
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/images/prox-vpp-screen.png
Binary files differ
diff --git a/docs/testing/user/userguide/east-west-benchmarking/images/topologies.png b/docs/testing/user/userguide/east-west-benchmarking/images/topologies.png
new file mode 100644
index 00000000..cc74b786
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/images/topologies.png
Binary files differ
diff --git a/docs/testing/user/userguide/east-west-benchmarking/images/topology1.png b/docs/testing/user/userguide/east-west-benchmarking/images/topology1.png
new file mode 100644
index 00000000..7393301c
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/images/topology1.png
Binary files differ
diff --git a/docs/testing/user/userguide/east-west-benchmarking/images/trex-screen.png b/docs/testing/user/userguide/east-west-benchmarking/images/trex-screen.png
new file mode 100644
index 00000000..7864146d
--- /dev/null
+++ b/docs/testing/user/userguide/east-west-benchmarking/images/trex-screen.png
Binary files differ