]> git.proxmox.com Git - mirror_ovs.git/blob - tests/system-layer3-tunnels.at
oss-fuzz: Fix miniflow_target.c.
[mirror_ovs.git] / tests / system-layer3-tunnels.at
1 AT_BANNER([layer3-tunnels])
2
3 AT_SETUP([layer3 - ping over VXLAN-GPE])
4 OVS_TRAFFIC_VSWITCHD_START([set Bridge br0 other-config:hwaddr="00:12:34:56:78:bb"])
5 OVS_CHECK_VXLAN_GPE()
6 OVS_CHECK_IPROUTE_ENCAP()
7
8 ADD_BR([br-underlay])
9
10 ADD_NAMESPACES(at_ns0)
11
12 dnl Set up underlay link from host into the namespace using veth pair.
13 ADD_VETH(p0, at_ns0, br-underlay, "172.31.1.1/24")
14 AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
15 AT_CHECK([ip link set dev br-underlay up])
16
17 dnl Set up tunnel endpoints on OVS outside the namespace and with a native
18 dnl linux device inside the namespace.
19 ADD_OVS_TUNNEL([vxlan], [br0], [at_vxlan0], [172.31.1.1], [10.1.1.2/24],
20 [options:packet_type=legacy_l3 options:exts=gpe])
21 AT_CHECK([ip neigh add 10.1.1.1 lladdr 00:12:34:56:78:aa dev br0])
22 NS_CHECK_EXEC([at_ns0], [ip link add dev at_vxlan1 type vxlan dstport 4789 external gpe])
23 NS_CHECK_EXEC([at_ns0], [ip addr add dev at_vxlan1 10.1.1.1/24])
24 NS_CHECK_EXEC([at_ns0], [ip link set dev at_vxlan1 mtu 1450 up])
25 NS_CHECK_EXEC([at_ns0], [ip route add 10.1.1.2/32 encap ip id 0 dst 172.31.1.100 dev at_vxlan1])
26
27 AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
28
29 dnl Now add rules for OVS to forward to the tunnel and local port
30 AT_CHECK([ovs-ofctl add-flow br0 "priority=1 action=drop"])
31 AT_CHECK([ovs-ofctl add-flow br0 "priority=100 ip,nw_dst=10.1.1.1 action=output:at_vxlan0"])
32 AT_CHECK([ovs-ofctl add-flow br0 "priority=100 ip,nw_dst=10.1.1.2 action=mod_dl_src:00:12:34:56:78:aa,mod_dl_dst:00:12:34:56:78:bb,local"])
33
34 OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.2])
35
36 dnl First, check the underlay
37 NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
38 3 packets transmitted, 3 received, 0% packet loss, time 0ms
39 ])
40
41 dnl Okay, now check the overlay with different packet sizes
42 NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
43 3 packets transmitted, 3 received, 0% packet loss, time 0ms
44 ])
45 NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
46 3 packets transmitted, 3 received, 0% packet loss, time 0ms
47 ])
48
49 OVS_TRAFFIC_VSWITCHD_STOP
50 AT_CLEANUP
51
52 AT_SETUP([layer3 - ping over GRE])
53 OVS_TRAFFIC_VSWITCHD_START([set Bridge br0 other-config:hwaddr="00:12:34:56:78:bb"])
54 OVS_CHECK_GRE_L3()
55 OVS_CHECK_IPROUTE_ENCAP()
56
57 ADD_BR([br-underlay])
58
59 ADD_NAMESPACES(at_ns0)
60
61 dnl Set up underlay link from host into the namespace using veth pair.
62 ADD_VETH(p0, at_ns0, br-underlay, "172.31.1.1/24")
63 AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
64 AT_CHECK([ip link set dev br-underlay up])
65
66 dnl Set up tunnel endpoints on OVS outside the namespace and with a native
67 dnl linux device inside the namespace.
68 ADD_OVS_TUNNEL([gre], [br0], [at_gre0], [172.31.1.1], [10.1.1.2/24],
69 [options:packet_type=legacy_l3])
70 AT_CHECK([ip neigh add 10.1.1.1 lladdr 00:12:34:56:78:aa dev br0])
71 NS_CHECK_EXEC([at_ns0], [ip link add dev at_gre1 type gre remote 172.31.1.100])
72 NS_CHECK_EXEC([at_ns0], [ip addr add dev at_gre1 10.1.1.1/24])
73 NS_CHECK_EXEC([at_ns0], [ip link set dev at_gre1 mtu 1450 up])
74 NS_CHECK_EXEC([at_ns0], [ip route add 10.1.1.2/32 encap ip id 0 dst 172.31.1.100 dev at_gre1])
75
76 AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
77
78 dnl Now add rules for OVS to forward to the tunnel and local port
79 AT_CHECK([ovs-ofctl add-flow br0 "priority=1 action=drop"])
80 AT_CHECK([ovs-ofctl add-flow br0 "priority=100 ip,nw_dst=10.1.1.1 action=output:at_gre0"])
81 AT_CHECK([ovs-ofctl add-flow br0 "priority=100 ip,nw_dst=10.1.1.2 action=mod_dl_src:00:12:34:56:78:aa,mod_dl_dst:00:12:34:56:78:bb,local"])
82
83 OVS_WAIT_UNTIL([ip netns exec at_ns0 ping -c 1 10.1.1.2])
84
85 dnl First, check the underlay
86 NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | FORMAT_PING], [0], [dnl
87 3 packets transmitted, 3 received, 0% packet loss, time 0ms
88 ])
89
90 dnl Okay, now check the overlay with different packet sizes
91 NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
92 3 packets transmitted, 3 received, 0% packet loss, time 0ms
93 ])
94 NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 -w 2 10.1.1.2 | FORMAT_PING], [0], [dnl
95 3 packets transmitted, 3 received, 0% packet loss, time 0ms
96 ])
97
98 OVS_TRAFFIC_VSWITCHD_STOP
99 AT_CLEANUP
100
101 AT_SETUP([layer3 - use non-local port as tunnel endpoint])
102
103 OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1])
104 AT_CHECK([ovs-vsctl add-port br0 vtep0 -- set int vtep0 type=dummy], [0])
105 AT_CHECK([ovs-vsctl add-br int-br -- set bridge int-br datapath_type=dummy], [0])
106 AT_CHECK([ovs-vsctl add-port int-br t1 -- set Interface t1 type=gre \
107 options:remote_ip=1.1.2.92 ofport_request=3], [0])
108
109 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
110 dummy@ovs-dummy: hit:0 missed:0
111 br0:
112 br0 65534/100: (dummy-internal)
113 p0 1/1: (dummy)
114 vtep0 2/2: (dummy)
115 int-br:
116 int-br 65534/3: (dummy-internal)
117 t1 3/4: (gre: remote_ip=1.1.2.92)
118 ])
119
120 AT_CHECK([ovs-appctl netdev-dummy/ip4addr vtep0 1.1.2.88/24], [0], [OK
121 ])
122 AT_CHECK([ovs-appctl ovs/route/add 1.1.2.92/24 vtep0], [0], [OK
123 ])
124 AT_CHECK([ovs-ofctl add-flow br0 action=normal])
125 AT_CHECK([ovs-ofctl add-flow int-br action=normal])
126
127 dnl Use arp request and reply to achieve tunnel next hop mac binding
128 dnl By default, vtep0's MAC address is aa:55:aa:55:00:03
129 AT_CHECK([ovs-appctl netdev-dummy/receive vtep0 'recirc_id(0),in_port(2),eth(dst=ff:ff:ff:ff:ff:ff,src=aa:55:aa:55:00:03),eth_type(0x0806),arp(tip=1.1.2.92,sip=1.1.2.88,op=1,sha=aa:55:aa:55:00:03,tha=00:00:00:00:00:00)'])
130 AT_CHECK([ovs-appctl netdev-dummy/receive p0 'recirc_id(0),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:03),eth_type(0x0806),arp(sip=1.1.2.92,tip=1.1.2.88,op=2,sha=f8:bc:12:44:34:b6,tha=aa:55:aa:55:00:03)'])
131
132 AT_CHECK([ovs-appctl tnl/neigh/show | tail -n+3 | sort], [0], [dnl
133 1.1.2.92 f8:bc:12:44:34:b6 br0
134 ])
135
136 AT_CHECK([ovs-appctl ovs/route/show | tail -n+2 | sort], [0], [dnl
137 User: 1.1.2.0/24 dev vtep0 SRC 1.1.2.88
138 ])
139
140 dnl Check GRE tunnel pop
141 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:03),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout])
142
143 AT_CHECK([tail -1 stdout], [0],
144 [Datapath actions: tnl_pop(4)
145 ])
146
147 dnl Check GRE tunnel push
148 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(dst=f9:bc:12:44:34:b6,src=af:55:aa:55:00:03),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.92,proto=1,tos=0,ttl=64,frag=no)'], [0], [stdout])
149 AT_CHECK([tail -1 stdout], [0],
150 [Datapath actions: clone(tnl_push(tnl_port(4),header(size=38,type=3,eth(dst=f8:bc:12:44:34:b6,src=aa:55:aa:55:00:03,dl_type=0x0800),ipv4(src=1.1.2.88,dst=1.1.2.92,proto=47,tos=0,ttl=64,frag=0x4000),gre((flags=0x0,proto=0x6558))),out_port(2)),1)
151 ])
152
153 OVS_VSWITCHD_STOP
154 AT_CLEANUP