]> git.proxmox.com Git - ovs.git/blame - tests/mpls-xlate.at
raft: Fix the problem of stuck in candidate role forever.
[ovs.git] / tests / mpls-xlate.at
CommitLineData
3fd12197 1AT_BANNER([mpls-xlate])
5af43325
PS
2
3AT_SETUP([MPLS xlate action])
4
e12ec36b
SH
5OVS_VSWITCHD_START(
6 [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 -- \
7 add-port br0 p1 -- set Interface p1 type=patch \
8 options:peer=p2 ofport_request=2 -- \
9 add-br br1 -- \
10 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
11 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
12 fail-mode=secure -- \
13 add-port br1 p2 -- set Interface p2 type=patch \
14 options:peer=p1])
5af43325
PS
15
16AT_CHECK([ovs-appctl dpif/show], [0], [dnl
17dummy@ovs-dummy: hit:0 missed:0
7be29a47
BP
18 br0:
19 br0 65534/100: (dummy-internal)
20 p0 1/1: (dummy)
21 p1 2/none: (patch: peer=p2)
22 br1:
23 br1 65534/101: (dummy-internal)
24 p2 1/none: (patch: peer=p1)
5af43325
PS
25])
26
27dnl Setup single MPLS tags.
06db81cc 28AT_CHECK([ovs-ofctl -O OpenFlow15 add-group br0 group_id=1232,type=select,selection_method=hash,bucket=output:LOCAL])
e12ec36b
SH
29AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 group_id=1233,type=all,bucket=output:LOCAL])
30AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 group_id=1234,type=all,bucket=dec_ttl,output:LOCAL])
5af43325
PS
31AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 in_port=local,dl_type=0x0800,action=push_mpls:0x8847,set_field:10-\>mpls_label,output:1])
32AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=20,action=pop_mpls:0x0800,output:LOCAL])
e12ec36b
SH
33AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=21,action=pop_mpls:0x0800,dec_ttl,output:LOCAL])
34AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=22,action=pop_mpls:0x0800,group:1232])
35AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=23,action=pop_mpls:0x0800,group:1233])
36AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=24,action=pop_mpls:0x0800,group:1234])
37AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=25,action=pop_mpls:0x0800,output:2])
38
39AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br1 in_port=1,action=output:LOCAL])
40
6d43b84c
AS
41dnl The following is needed on slow systems, because the flows in the datapath
42dnl will be evicted before the packet can match the recirculation context
43ovs-appctl time/stop
5af43325
PS
44
45dnl Test MPLS push
efa6665e 46AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=17,tos=0,ttl=64,frag=no),udp(src=7777,dst=80)'], [0], [stdout])
5af43325
PS
47AT_CHECK([tail -1 stdout], [0],
48 [Datapath actions: push_mpls(label=10,tc=0,ttl=64,bos=1,eth_type=0x8847),1
49])
50
e12ec36b 51dnl Test MPLS pop then output (actions do not trigger reciculation)
5af43325 52AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=20,tc=0,ttl=64,bos=1)'], [0], [stdout])
e12ec36b
SH
53AT_CHECK([tail -1 stdout], [0],
54 [Datapath actions: pop_mpls(eth_type=0x800),100
55])
56
57dnl Test MPLS pop, dec_ttl, output (actions trigger recirculation)
58AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=21,tc=0,ttl=64,bos=1)'], [0], [stdout])
5af43325 59AT_CHECK([tail -1 stdout], [0],
8bf009bf
JR
60 [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x1)
61])
62
63AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'recirc_id(1),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout])
e12ec36b
SH
64AT_CHECK([tail -1 stdout], [0],
65 [Datapath actions: set(ipv4(ttl=63)),100
66])
67
68dnl Test MPLS pop then select group output (group type triggers recirculation)
69AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=22,tc=0,ttl=64,bos=1)'], [0], [stdout])
70AT_CHECK([tail -1 stdout], [0],
71 [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x2)
72])
73
06db81cc
JS
74for d in 0 1 2 3; do
75 pkt="in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=22,tc=0,ttl=64,bos=1)"
76 AT_CHECK([ovs-appctl netdev-dummy/receive p0 $pkt])
77done
78
79AT_CHECK([ovs-appctl dpctl/dump-flows | sed 's/packets.*actions:1/actions:1/' | strip_used | strip_ufid | sort], [0], [dnl
138d30a9 80flow-dump from the main thread:
991f1f63
AT
81recirc_id(0),in_port(1),packet_type(ns=0,id=0),eth_type(0x8847),mpls(label=22/0xfffff,tc=0/0,ttl=64/0x0,bos=1/1), packets:3, bytes:54, used:0.0s, actions:pop_mpls(eth_type=0x800),recirc(0x3)
82recirc_id(0x3),in_port(1),packet_type(ns=0,id=0),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=0.0.0.0,dst=0.0.0.0,proto=0,frag=no), actions:100
5af43325
PS
83])
84
e12ec36b
SH
85dnl Test MPLS pop then all group output (bucket actions do not trigger recirculation)
86AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=23,tc=0,ttl=64,bos=1)'], [0], [stdout])
87AT_CHECK([tail -1 stdout], [0],
88 [Datapath actions: pop_mpls(eth_type=0x800),100
89])
90
91dnl Test MPLS pop then all group output (bucket actions trigger recirculation)
92AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=24,tc=0,ttl=64,bos=1)'], [0], [stdout])
93AT_CHECK([tail -1 stdout], [0],
06db81cc 94 [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x4)
e12ec36b
SH
95])
96
06db81cc 97AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'recirc_id(4),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout])
e12ec36b
SH
98AT_CHECK([tail -1 stdout], [0],
99 [Datapath actions: set(ipv4(ttl=63)),100
100])
101
102dnl Test MPLS pop then all output to patch port
103AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=25,tc=0,ttl=64,bos=1)'], [0], [stdout])
104AT_CHECK([tail -1 stdout], [0],
06db81cc 105 [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x5)
e12ec36b
SH
106])
107
06db81cc 108AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'recirc_id(5),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout])
e12ec36b
SH
109AT_CHECK([tail -1 stdout], [0],
110 [Datapath actions: 101
111])
112
5af43325
PS
113dnl Setup multiple MPLS tags.
114AT_CHECK([ovs-ofctl del-flows br0])
115
116AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 in_port=local,dl_type=0x0800,action=push_mpls:0x8847,set_field:10-\>mpls_label,push_mpls:0x8847,set_field:20-\>mpls_label,output:1])
e672ff9b
JR
117# The resubmits will be executed after recirculation, which preserves the
118# register values.
119AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 cookie=0xa,table=0,dl_type=0x8847,in_port=1,mpls_label=60,action=set_field:10-\>reg0,pop_mpls:0x8847,goto_table:1])
120# The pop_mpls below recirculates from within a resubmit
121# After recirculation the (restored) register value is moved to IP ttl.
122AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 cookie=0xb,table=1,dl_type=0x8847,in_port=1,mpls_label=50,action=push:NXM_NX_REG0[[0..7]],pop_mpls:0x0800,set_field:0-\>nw_ttl,pop:NXM_NX_REG1[[0..7]],move:NXM_NX_REG1[[0..7]]-\>NXM_NX_IP_TTL[[]],output:LOCAL])
5af43325
PS
123
124dnl Double MPLS push
125AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)'], [0], [stdout])
126AT_CHECK([tail -1 stdout], [0],
127 [Datapath actions: push_mpls(label=10,tc=0,ttl=64,bos=1,eth_type=0x8847),push_mpls(label=20,tc=0,ttl=64,bos=0,eth_type=0x8847),1
128])
129
130dnl Double MPLS pop
8f79bb4d 131AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=60,tc=0,ttl=64,bos=0,label=50,tc=0,ttl=64,bos=1)'], [0], [stdout])
f0b8971a
BP
132AT_CHECK([tail -1 stdout | sed 's/recirc(0x[[0-9a-f]]*)/recirc(?)/'], [0],
133 [Datapath actions: pop_mpls(eth_type=0x8847),pop_mpls(eth_type=0x800),recirc(?)
e672ff9b
JR
134])
135
f0b8971a
BP
136recirc_id=$(tail -1 stdout | sed 's/.*recirc(0x\([[0-9a-f]]*\)).*/\1/')
137echo "recirc_id $recirc_id"
138
139AT_CHECK([ovs-appctl ofproto/trace ovs-dummy "recirc_id($recirc_id),in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)"], [0], [stdout])
e672ff9b
JR
140AT_CHECK([tail -1 stdout], [0],
141 [Datapath actions: set(ipv4(ttl=10)),100
5af43325
PS
142])
143
144OVS_VSWITCHD_STOP
145AT_CLEANUP
742c0ac3
JR
146
147AT_SETUP([MPLS xlate action - patch-port])
148
149OVS_VSWITCHD_START(
150 [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 -- \
151 add-port br0 p1 -- set Interface p1 type=patch \
152 options:peer=p2 ofport_request=2 -- \
153 add-br br1 -- \
154 set bridge br1 other-config:hwaddr=aa:66:aa:66:00:00 -- \
155 set bridge br1 datapath-type=dummy other-config:datapath-id=1234 \
156 fail-mode=secure -- \
157 add-port br1 p2 -- set Interface p2 type=patch \
158 options:peer=p1 -- \
159 add-port br1 p3 -- set Interface p3 type=dummy ofport_request=3])
160
161AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg ofproto_dpif_upcall:dbg])
162
163AT_CHECK([ovs-appctl dpif/show], [0], [dnl
164dummy@ovs-dummy: hit:0 missed:0
7be29a47
BP
165 br0:
166 br0 65534/100: (dummy-internal)
167 p0 1/1: (dummy)
168 p1 2/none: (patch: peer=p2)
169 br1:
170 br1 65534/101: (dummy-internal)
171 p2 1/none: (patch: peer=p1)
172 p3 3/3: (dummy)
742c0ac3
JR
173])
174
175dnl MPLS PUSH + POP.
176AT_CHECK([ovs-ofctl del-flows br0])
177
178AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 in_port=local,ip,actions=2,1,1])
179
180AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br1 in_port=1,ip,actions=dec_ttl,push_mpls:0x8847,3])
181
182dnl MPLS push+pop
183AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=10.1.1.22,dst=10.0.0.3,proto=6,tos=0,ttl=64,frag=no),tcp(src=53295,dst=8080)'], [0], [stdout])
184AT_CHECK([tail -1 stdout], [0],
dbf4a928 185 [Datapath actions: set(ipv4(ttl=63)),push_mpls(label=0,tc=0,ttl=63,bos=1,eth_type=0x8847),3,pop_mpls(eth_type=0x800),set(ipv4(ttl=64)),1,1
742c0ac3
JR
186])
187
188OVS_VSWITCHD_STOP
189AT_CLEANUP
190
191AT_SETUP([MPLS xlate action - group bucket])
192
193OVS_VSWITCHD_START
194add_of_ports br0 1
195
196AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg ofproto_dpif_upcall:dbg])
197
198AT_CHECK([ovs-ofctl del-flows br0])
199AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 'group_id=1234,type=all,bucket=push_mpls:0x8847,output:1'])
200AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 in_port=local,ip,actions=group:1234,output:1,output:1])
201
202dnl MPLS push in a bucket
203AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(100),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=10.1.1.22,dst=10.0.0.3,proto=6,tos=0,ttl=64,frag=no),tcp(src=53295,dst=8080)'], [0], [stdout])
204AT_CHECK([tail -1 stdout], [0],
205 [Datapath actions: push_mpls(label=0,tc=0,ttl=64,bos=1,eth_type=0x8847),1,pop_mpls(eth_type=0x800),1,1
206])
207
208OVS_VSWITCHD_STOP
209AT_CLEANUP