[ovs-dev,5/8] system-traffic.at: Add erspan v1 tunnel test that doesn't depend on upstream gre module

Message ID 1533753171-11730-5-git-send-email-pkusunyifeng@gmail.com
State Superseded
Headers show
Series
  • [ovs-dev,1/8] ip6_gre: Fix a bug that clears address bits
Related show

Commit Message

Yifeng Sun Aug. 8, 2018, 6:32 p.m.
Introduce a new test that doesn't setup native erspan v1 tunnels but sends
simulated raw packets.
This test is supposed to only run for kernel version from 4.4.x to 4.15.x.

Signed-off-by: Yifeng Sun <pkusunyifeng@gmail.com>
---
 tests/system-traffic.at | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

Comments

William Tu Aug. 9, 2018, 9:51 p.m. | #1
On Wed, Aug 8, 2018 at 11:32 AM, Yifeng Sun <pkusunyifeng@gmail.com> wrote:

> Introduce a new test that doesn't setup native erspan v1 tunnels but sends
> simulated raw packets.
> This test is supposed to only run for kernel version from 4.4.x to 4.15.x.
>
> Signed-off-by: Yifeng Sun <pkusunyifeng@gmail.com>
> ---
>

Acked-by: William Tu <u9012063@gmail.com>

Patch

diff --git a/tests/system-traffic.at b/tests/system-traffic.at
index dca2bc8..44669f8 100644
--- a/tests/system-traffic.at
+++ b/tests/system-traffic.at
@@ -622,6 +622,54 @@  AT_CHECK([tcpdump -xx -r p0.pcap 2>&1 | egrep "IP 172.31.1.100 > 172.31.1.1: GRE
 OVS_TRAFFIC_VSWITCHD_STOP
 AT_CLEANUP
 
+AT_SETUP([datapath - ping over erspan v1 tunnel by simulated packets])
+OVS_CHECK_KERNEL(4, 4, 15)
+
+OVS_TRAFFIC_VSWITCHD_START()
+AT_CHECK([ovs-vsctl -- set bridge br0 other-config:hwaddr=\"f2:ff:00:00:00:01\"])
+ADD_BR([br-underlay], [set bridge br-underlay other-config:hwaddr=\"f2:ff:00:00:00:02\"])
+
+AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
+AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
+
+ADD_NAMESPACES(at_ns0)
+
+dnl Set up underlay link from host into the namespace using veth pair.
+ADD_VETH(p0, at_ns0, br-underlay, "172.31.1.1/24", f2:ff:00:00:00:03)
+AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
+AT_CHECK([ip link set dev br-underlay up])
+
+dnl Set up tunnel endpoints on OVS outside the namespace and emulate a native
+dnl linux device inside the namespace.
+ADD_OVS_TUNNEL([erspan], [br0], [at_erspan0], [172.31.1.1], [10.1.1.100/24], [options:key=1 options:erspan_ver=1 options:erspan_idx=7])
+
+ip netns exec at_ns0 tcpdump -U -i p0 -w p0.pcap &
+sleep 1
+
+dnl First, check the underlay
+NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+dnl Okay, now send out an arp request from 10.1.1.1 for 10.1.1.100 in erspan.
+ovs-ofctl -O OpenFlow13 packet-out br-underlay "in_port=1 packet=f2ff00000002f2ff0000000308004500004e151d4000402fcac0ac1f0101ac1f0164100088be000000061000000100000007fffffffffffff2ff0000000408060001080006040001f2ff000000040a0101010000000000000a010164 actions=normal"
+
+sleep 1
+dnl 0002 is arp reply, followed by mac address of 10.1.1.100.
+AT_CHECK([tcpdump -xx -r p0.pcap 2>&1 | egrep "f2ff 0000 0001 0806" 2>&1 1>/dev/null])
+AT_CHECK([tcpdump -xx -r p0.pcap 2>&1 | egrep "0800 0604 0002 f2ff 0000 0001 0a01" 2>&1 1>/dev/null])
+
+dnl Okay, now check the overlay with raw icmp packets.
+AT_FAIL_IF([tcpdump -xx -r p0.pcap 2>&1 | egrep "IP 172.31.1.100 > 172.31.1.1: GREv0, .* length 1258" 2>&1 1>/dev/null])
+
+ovs-ofctl -O OpenFlow13 packet-out br-underlay "in_port=1 packet=f2ff00000002f2ff0000000308004500008e70cb4000402f6ed2ac1f0101ac1f0164100088be000000051000000100000007f2ff00000001f2ff0000000408004500005c4a3340004001da070a0101010a010164080084f238fb0001f36a6b5b0000000021870e0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f actions=normal"
+
+sleep 1
+AT_CHECK([tcpdump -xx -r p0.pcap 2>&1 | egrep "IP 172.31.1.100 > 172.31.1.1: GREv0, .* length 122" 2>&1 1>/dev/null])
+
+OVS_TRAFFIC_VSWITCHD_STOP
+AT_CLEANUP
+
 AT_SETUP([datapath - clone action])
 OVS_TRAFFIC_VSWITCHD_START()