datapath: remove net namespace
[cascardo/ovs.git] / tests / mpls-xlate.at
1 AT_BANNER([mpls-xlate])
2
3 AT_SETUP([MPLS xlate action])
4
5 OVS_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])
15
16 AT_CHECK([ovs-appctl dpif/show], [0], [dnl
17 dummy@ovs-dummy: hit:0 missed:0
18         br0:
19                 br0 65534/100: (dummy)
20                 p0 1/1: (dummy)
21                 p1 2/none: (patch: peer=p2)
22         br1:
23                 br1 65534/101: (dummy)
24                 p2 1/none: (patch: peer=p1)
25 ])
26
27 dnl Setup single MPLS tags.
28 AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 group_id=1232,type=select,bucket=output:LOCAL])
29 AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 group_id=1233,type=all,bucket=output:LOCAL])
30 AT_CHECK([ovs-ofctl -O OpenFlow13 add-group br0 group_id=1234,type=all,bucket=dec_ttl,output:LOCAL])
31 AT_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])
32 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=20,action=pop_mpls:0x0800,output:LOCAL])
33 AT_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])
34 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=22,action=pop_mpls:0x0800,group:1232])
35 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=23,action=pop_mpls:0x0800,group:1233])
36 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=24,action=pop_mpls:0x0800,group:1234])
37 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 dl_type=0x8847,in_port=1,mpls_label=25,action=pop_mpls:0x0800,output:2])
38
39 AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br1 in_port=1,action=output:LOCAL])
40
41
42
43 dnl Test MPLS push
44 AT_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])
45 AT_CHECK([tail -1 stdout], [0],
46   [Datapath actions: push_mpls(label=10,tc=0,ttl=64,bos=1,eth_type=0x8847),1
47 ])
48
49 dnl Test MPLS pop then output (actions do not trigger reciculation)
50 AT_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])
51 AT_CHECK([tail -1 stdout], [0],
52   [Datapath actions: pop_mpls(eth_type=0x800),100
53 ])
54
55 dnl Test MPLS pop, dec_ttl, output (actions trigger recirculation)
56 AT_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])
57 AT_CHECK([tail -1 stdout], [0],
58   [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x1)
59 ])
60
61 AT_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])
62 AT_CHECK([tail -1 stdout], [0],
63   [Datapath actions: set(ipv4(ttl=63)),100
64 ])
65
66 dnl Test MPLS pop then select group output (group type triggers recirculation)
67 AT_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])
68 AT_CHECK([tail -1 stdout], [0],
69   [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x2)
70 ])
71
72 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'recirc_id(2),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])
73 AT_CHECK([tail -1 stdout], [0],
74   [Datapath actions: 100
75 ])
76
77 dnl Test MPLS pop then all group output (bucket actions do not trigger recirculation)
78 AT_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])
79 AT_CHECK([tail -1 stdout], [0],
80   [Datapath actions: pop_mpls(eth_type=0x800),100
81 ])
82
83 dnl Test MPLS pop then all group output (bucket actions trigger recirculation)
84 AT_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])
85 AT_CHECK([tail -1 stdout], [0],
86   [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x3)
87 ])
88
89 AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'recirc_id(3),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])
90 AT_CHECK([tail -1 stdout], [0],
91   [Datapath actions: set(ipv4(ttl=63)),100
92 ])
93
94 dnl Test MPLS pop then all output to patch port
95 AT_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])
96 AT_CHECK([tail -1 stdout], [0],
97   [Datapath actions: pop_mpls(eth_type=0x800),recirc(0x4)
98 ])
99
100 AT_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])
101 AT_CHECK([tail -1 stdout], [0],
102   [Datapath actions: 101
103 ])
104
105 dnl Setup multiple MPLS tags.
106 AT_CHECK([ovs-ofctl del-flows br0])
107
108 AT_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])
109 # The resubmits will be executed after recirculation, which preserves the
110 # register values.
111 AT_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])
112 # The pop_mpls below recirculates from within a resubmit
113 # After recirculation the (restored) register value is moved to IP ttl.
114 AT_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])
115
116 dnl Double MPLS push
117 AT_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])
118 AT_CHECK([tail -1 stdout], [0],
119   [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
120 ])
121
122 dnl Double MPLS pop
123 AT_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])
124 AT_CHECK([tail -1 stdout], [0],
125   [Datapath actions: pop_mpls(eth_type=0x8847),pop_mpls(eth_type=0x800),recirc(0x5)
126 ])
127
128 AT_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])
129 AT_CHECK([tail -1 stdout], [0],
130   [Datapath actions: set(ipv4(ttl=10)),100
131 ])
132
133 OVS_VSWITCHD_STOP
134 AT_CLEANUP