ofp-util: OpenFlow 1.0 can match IPv6 Ethertype even though not L3 or L4.
[sliver-openvswitch.git] / tests / ovs-ofctl.at
1 AT_BANNER([ovs-ofctl])
2
3 AT_SETUP([ovs-ofctl parse-flows choice of protocol])
4 # This doesn't cover some potential vlan_tci test cases.
5 for test_case in \
6     'tun_id=0                                    NXM,OXM' \
7     'tun_src=1.2.3.4                             NXM,OXM' \
8     'tun_dst=1.2.3.4                             NXM,OXM' \
9     'tun_flags=0                                 none' \
10     'tun_tos=0                                   none' \
11     'tun_ttl=0                                   none' \
12     'metadata=0                                  NXM,OXM' \
13     'in_port=1                                   any' \
14     'skb_priority=0                              none' \
15     'skb_mark=1                                  none' \
16     'reg0=0                                      NXM,OXM' \
17     'reg1=1                                      NXM,OXM' \
18     'reg2=2                                      NXM,OXM' \
19     'reg3=3                                      NXM,OXM' \
20     'reg4=4                                      NXM,OXM' \
21     'reg5=5                                      NXM,OXM' \
22     'reg6=6                                      NXM,OXM' \
23     'reg7=7                                      NXM,OXM' \
24     'dl_src=00:11:22:33:44:55                    any' \
25     'dl_src=00:11:22:33:44:55/00:ff:ff:ff:ff:ff  NXM,OXM' \
26     'dl_dst=00:11:22:33:44:55                    any' \
27     'dl_dst=00:11:22:33:44:55/00:ff:ff:ff:ff:ff  NXM,OXM' \
28     'dl_type=0x1234                              any' \
29     'dl_type=0x0800                              any' \
30     'dl_type=0x0806                              any' \
31     'dl_type=0x86dd                              any' \
32     'vlan_tci=0                                  any' \
33     'vlan_tci=0x1009                             any' \
34     'dl_vlan=9                                   any' \
35     'vlan_vid=11                                 any' \
36     'dl_vlan_pcp=6                               any' \
37     'vlan_pcp=5                                  any' \
38     'mpls,mpls_label=5                           NXM,OXM' \
39     'mpls,mpls_tc=1                              NXM,OXM' \
40     'mpls,mpls_bos=0                             NXM,OXM' \
41     'ip,ip_src=1.2.3.4                           any' \
42     'ip,ip_src=192.168.0.0/24                    any' \
43     'ip,ip_src=192.0.168.0/255.0.255.0           NXM,OXM' \
44     'ip,ip_dst=1.2.3.4                           any' \
45     'ip,ip_dst=192.168.0.0/24                    any' \
46     'ip,ip_dst=192.0.168.0/255.0.255.0           NXM,OXM' \
47     'ipv6,ipv6_src=::1                           NXM,OXM' \
48     'ipv6,ipv6_dst=::1                           NXM,OXM' \
49     'ipv6,ipv6_label=5                           NXM,OXM' \
50     'ip,nw_proto=1                               any' \
51     'ipv6,nw_proto=1                             NXM,OXM' \
52     'ip,nw_tos=0xf0                              any' \
53     'ipv6,nw_tos=0xf0                            NXM,OXM' \
54     'ip,nw_tos_shifted=0x3c                      any' \
55     'ipv6,nw_tos_shifted=0x3c                    NXM,OXM' \
56     'ip,nw_ecn=1                                 NXM,OXM' \
57     'ipv6,nw_ecn=1                               NXM,OXM' \
58     'ip,nw_ttl=5                                 NXM,OXM' \
59     'ipv6,nw_ttl=5                               NXM,OXM' \
60     'ip,ip_frag=no                               NXM,OXM' \
61     'ipv6,ip_frag=no                             NXM,OXM' \
62     'arp,arp_op=0                                any' \
63     'arp,arp_spa=1.2.3.4                         any' \
64     'arp,arp_tpa=1.2.3.4                         any' \
65     'arp,arp_sha=00:11:22:33:44:55               NXM,OXM' \
66     'arp,arp_tha=00:11:22:33:44:55               NXM,OXM' \
67     'tcp,tcp_src=80                              any' \
68     'tcp,tcp_src=0x1000/0x1000                   NXM,OXM' \
69     'tcp6,tcp_src=80                             NXM,OXM' \
70     'tcp6,tcp_src=0x1000/0x1000                  NXM,OXM' \
71     'tcp,tcp_dst=80                              any' \
72     'tcp,tcp_dst=0x1000/0x1000                   NXM,OXM' \
73     'tcp6,tcp_dst=80                             NXM,OXM' \
74     'tcp6,tcp_dst=0x1000/0x1000                  NXM,OXM' \
75     'udp,udp_src=80                              any' \
76     'udp,udp_src=0x1000/0x1000                   NXM,OXM' \
77     'udp6,udp_src=80                             NXM,OXM' \
78     'udp6,udp_src=0x1000/0x1000                  NXM,OXM' \
79     'udp,udp_dst=80                              any' \
80     'udp,udp_dst=0x1000/0x1000                   NXM,OXM' \
81     'udp6,udp_dst=80                             NXM,OXM' \
82     'udp6,udp_dst=0x1000/0x1000                  NXM,OXM' \
83     'icmp,icmp_type=1                            any' \
84     'icmp,icmp_type=1                            any' \
85     'icmp6,icmpv6_type=1                         NXM,OXM' \
86     'icmp6,icmpv6_code=2                         NXM,OXM'
87 do
88     set $test_case
89     echo
90     echo "### test case: '$1' should have usable protocols '$2'"
91     if test "$2" = none; then
92       AT_CHECK([ovs-ofctl parse-flow "$1,actions=drop"], [1],
93                [usable protocols: none
94 ],
95                [ovs-ofctl: no usable protocol
96 ])
97     else
98       AT_CHECK_UNQUOTED([ovs-ofctl parse-flow "$1,actions=drop" | sed 1q], [0],
99                         [usable protocols: $2
100 ])
101     fi
102 done
103 AT_CLEANUP
104
105 AT_SETUP([ovs-ofctl parse-flows (OpenFlow 1.0)])
106 AT_DATA([flows.txt], [[
107 # comment
108 tcp,tp_src=123,out_port=5,actions=flood
109 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
110 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
111 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
112 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
113 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
114 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
115 ip,actions=set_field:10.4.3.77->ip_src
116 in_port=0 actions=resubmit:0
117 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
118 ]])
119
120 AT_CHECK([ovs-ofctl parse-flows flows.txt
121 ], [0], [stdout])
122 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
123 [[usable protocols: any
124 chosen protocol: OpenFlow10-table_id
125 OFPT_FLOW_MOD: ADD tcp,tp_src=123 out_port:5 actions=FLOOD
126 OFPT_FLOW_MOD: ADD in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
127 OFPT_FLOW_MOD: ADD udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
128 OFPT_FLOW_MOD: ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
129 OFPT_FLOW_MOD: ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
130 OFPT_FLOW_MOD: ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
131 OFPT_FLOW_MOD: ADD actions=note:41.42.43.00.00.00,note:00.01.02.03.04.05.06.07.00.00.00.00.00.00,note:00.00.00.00.00.00
132 OFPT_FLOW_MOD: ADD ip actions=load:0xa04034d->NXM_OF_IP_SRC[]
133 OFPT_FLOW_MOD: ADD in_port=0 actions=resubmit:0
134 OFPT_FLOW_MOD: ADD actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
135 ]])
136 AT_CLEANUP
137
138 AT_SETUP([ovs-ofctl parse-flows (OpenFlow 1.2)])
139 AT_DATA([flows.txt], [[
140 # comment
141 tcp,tp_src=123,actions=flood
142 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
143 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
144 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
145 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
146 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
147 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
148 ipv6,actions=set_field:fe80:0123:4567:890a:a6ba:dbff:fefe:59fa->ipv6_src
149 in_port=0 actions=resubmit:0
150 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
151 ]])
152
153 AT_CHECK([ovs-ofctl --protocols OpenFlow12 parse-flows flows.txt
154 ], [0], [stdout])
155 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
156 [[usable protocols: any
157 chosen protocol: OXM-OpenFlow12
158 OFPT_FLOW_MOD (OF1.2): ADD table:255 tcp,tp_src=123 actions=FLOOD
159 OFPT_FLOW_MOD (OF1.2): ADD table:255 in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
160 OFPT_FLOW_MOD (OF1.2): ADD table:255 udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
161 OFPT_FLOW_MOD (OF1.2): ADD table:255 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
162 OFPT_FLOW_MOD (OF1.2): ADD table:255 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
163 OFPT_FLOW_MOD (OF1.2): ADD table:255 priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
164 OFPT_FLOW_MOD (OF1.2): ADD table:255 actions=note:41.42.43.00.00.00,note:00.01.02.03.04.05.06.07.00.00.00.00.00.00,note:00.00.00.00.00.00
165 OFPT_FLOW_MOD (OF1.2): ADD table:255 ipv6 actions=set_field:fe80:123:4567:890a:a6ba:dbff:fefe:59fa->ipv6_src
166 OFPT_FLOW_MOD (OF1.2): ADD table:255 in_port=0 actions=resubmit:0
167 OFPT_FLOW_MOD (OF1.2): ADD table:255 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
168 ]])
169 AT_CLEANUP
170
171 AT_SETUP([ovs-ofctl parse-flows (With Tunnel-Parameters)])
172 AT_DATA([flows.txt], [[
173 tun_id=0x1234000056780000/0xffff0000ffff0000,tun_src=1.1.1.1,tun_dst=2.2.2.2,tun_tos=0x3,tun_ttl=20,tun_flags=key|csum actions=drop
174 ]])
175
176 AT_CHECK([ovs-ofctl parse-flows flows.txt
177 ], [1], [usable protocols: none
178 ], [stderr])
179
180 AT_CLEANUP
181
182
183 AT_SETUP([ovs-ofctl parse-flows (skb_mark and skb_priority)])
184 AT_DATA([flows.txt], [[
185 skb_mark=0x12345678,skb_priority=0x12341234,tcp,tp_src=123,actions=flood
186 ]])
187
188 AT_CHECK([ovs-ofctl parse-flows flows.txt
189 ], [1], [usable protocols: none
190 ], [stderr])
191
192 AT_CLEANUP
193
194
195 AT_SETUP([ovs-ofctl parse-flows (NXM)])
196 AT_DATA([flows.txt], [[
197 # comment
198 tcp,tp_src=123,actions=flood
199 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
200 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
201 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
202 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
203 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
204 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
205 tcp,tp_src=0x1230/0xfff0,tun_id=0x1234,cookie=0x5678,actions=flood
206 actions=set_tunnel:0x1234,set_tunnel64:0x9876,set_tunnel:0x123456789
207 actions=multipath(eth_src, 50, hrw, 12, 0, NXM_NX_REG0[0..3]),multipath(symmetric_l4, 1024, iter_hash, 5000, 5050, NXM_NX_REG0[0..12])
208 table=1,actions=drop
209 tun_id=0x1234000056780000/0xffff0000ffff0000,actions=drop
210 metadata=0x1234ffff5678ffff/0xffff0000ffff0000,actions=drop
211 actions=bundle(eth_src,50,active_backup,ofport,slaves:1)
212 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:2,3)
213 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:)
214 actions=output:1,bundle(eth_src,0,hrw,ofport,slaves:1),output:2
215 actions=bundle_load(eth_src,50,active_backup,ofport,NXM_NX_REG0[],slaves:1)
216 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
217 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:[2,3])
218 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..30],slaves:)
219 actions=output:1,bundle_load(eth_src,0,hrw,ofport,NXM_NX_REG0[16..31],slaves:1),output:2
220 actions=resubmit:1,resubmit(2),resubmit(,3),resubmit(2,3)
221 send_flow_rem,actions=output:1,output:NXM_NX_REG0[],output:2,output:NXM_NX_REG1[16..31],output:3
222 check_overlap,actions=output:1,exit,output:2
223 actions=fin_timeout(idle_timeout=5,hard_timeout=15)
224 actions=controller(max_len=123,reason=invalid_ttl,id=555)
225 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
226 ]])
227
228 AT_CHECK([ovs-ofctl parse-flows flows.txt
229 ], [0], [stdout])
230 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
231 [[usable protocols: OXM,NXM+table_id
232 chosen protocol: NXM+table_id
233 NXT_FLOW_MOD: ADD table:255 tcp,tp_src=123 actions=FLOOD
234 NXT_FLOW_MOD: ADD table:255 in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
235 NXT_FLOW_MOD: ADD table:255 udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
236 NXT_FLOW_MOD: ADD table:255 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
237 NXT_FLOW_MOD: ADD table:255 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
238 NXT_FLOW_MOD: ADD table:255 priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
239 NXT_FLOW_MOD: ADD table:255 actions=note:41.42.43.00.00.00,note:00.01.02.03.04.05.06.07.00.00.00.00.00.00,note:00.00.00.00.00.00
240 NXT_FLOW_MOD: ADD table:255 tcp,tun_id=0x1234,tp_src=0x1230/0xfff0 cookie:0x5678 actions=FLOOD
241 NXT_FLOW_MOD: ADD table:255 actions=set_tunnel:0x1234,set_tunnel64:0x9876,set_tunnel64:0x123456789
242 NXT_FLOW_MOD: ADD table:255 actions=multipath(eth_src,50,hrw,12,0,NXM_NX_REG0[0..3]),multipath(symmetric_l4,1024,iter_hash,5000,5050,NXM_NX_REG0[0..12])
243 NXT_FLOW_MOD: ADD table:1 actions=drop
244 NXT_FLOW_MOD: ADD table:255 tun_id=0x1234000056780000/0xffff0000ffff0000 actions=drop
245 NXT_FLOW_MOD: ADD table:255 metadata=0x1234000056780000/0xffff0000ffff0000 actions=drop
246 NXT_FLOW_MOD: ADD table:255 actions=bundle(eth_src,50,active_backup,ofport,slaves:1)
247 NXT_FLOW_MOD: ADD table:255 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:2,3)
248 NXT_FLOW_MOD: ADD table:255 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:)
249 NXT_FLOW_MOD: ADD table:255 actions=output:1,bundle(eth_src,0,hrw,ofport,slaves:1),output:2
250 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(eth_src,50,active_backup,ofport,NXM_NX_REG0[],slaves:1)
251 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
252 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
253 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..30],slaves:)
254 NXT_FLOW_MOD: ADD table:255 actions=output:1,bundle_load(eth_src,0,hrw,ofport,NXM_NX_REG0[16..31],slaves:1),output:2
255 NXT_FLOW_MOD: ADD table:255 actions=resubmit:1,resubmit:2,resubmit(,3),resubmit(2,3)
256 NXT_FLOW_MOD: ADD table:255 send_flow_rem actions=output:1,output:NXM_NX_REG0[],output:2,output:NXM_NX_REG1[16..31],output:3
257 NXT_FLOW_MOD: ADD table:255 check_overlap actions=output:1,exit,output:2
258 NXT_FLOW_MOD: ADD table:255 actions=fin_timeout(idle_timeout=5,hard_timeout=15)
259 NXT_FLOW_MOD: ADD table:255 actions=controller(reason=invalid_ttl,max_len=123,id=555)
260 NXT_FLOW_MOD: ADD table:255 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
261 ]])
262 AT_CLEANUP
263
264 AT_SETUP([ovs-ofctl -F nxm parse-flows])
265 AT_DATA([flows.txt], [
266 # comment
267 tcp,tp_src=123,actions=flood
268 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
269 arp,dl_src=00:0A:E4:25:6B:B0,arp_sha=00:0A:E4:25:6B:B0 actions=drop
270 ipv6,ipv6_label=0x12345 actions=2
271 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=3
272 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5/64 actions=4
273 ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:5/127 actions=5
274 tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop 
275 udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop 
276 in_port=3 icmp6,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
277 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
278 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
279 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
280 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571 actions=drop
281 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4F:0571/112 actions=drop
282 icmp6,icmp_type=135,nd_sll=00:0A:E4:25:6B:B0 actions=drop
283 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571,nd_tll=00:0A:E4:25:6B:B1 actions=drop
284 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE00:0000/96,nd_tll=00:0A:E4:25:6B:B1 actions=drop
285 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
286 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
287 tun_id=0x1234,cookie=0x5678,actions=flood
288 actions=drop
289 tun_id=0x1234000056780000/0xffff0000ffff0000,actions=drop
290 dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,actions=drop
291 dl_dst=00:00:00:00:00:00/01:00:00:00:00:00,actions=drop
292 dl_dst=aa:bb:cc:dd:ee:ff/fe:ff:ff:ff:ff:ff,actions=drop
293 dl_dst=aa:bb:cc:dd:ee:ff/00:00:00:00:00:00,actions=drop
294 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
295 ])
296 AT_CHECK([ovs-ofctl -F nxm parse-flows flows.txt], [0], [stdout])
297 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0], [dnl
298 usable protocols: NXM,OXM
299 chosen protocol: NXM-table_id
300 NXT_FLOW_MOD: ADD tcp,tp_src=123 actions=FLOOD
301 NXT_FLOW_MOD: ADD in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
302 NXT_FLOW_MOD: ADD arp,dl_src=00:0a:e4:25:6b:b0,arp_sha=00:0a:e4:25:6b:b0 actions=drop
303 NXT_FLOW_MOD: ADD ipv6,ipv6_label=0x12345 actions=output:2
304 NXT_FLOW_MOD: ADD ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output:3
305 NXT_FLOW_MOD: ADD ipv6,ipv6_src=2001:db8:3c4d:1::/64 actions=output:4
306 NXT_FLOW_MOD: ADD ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:4/127 actions=output:5
307 NXT_FLOW_MOD: ADD tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop
308 NXT_FLOW_MOD: ADD udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop
309 NXT_FLOW_MOD: ADD icmp6,in_port=3,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
310 NXT_FLOW_MOD: ADD udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
311 NXT_FLOW_MOD: ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
312 NXT_FLOW_MOD: ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
313 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_target=fec0:0:1234:f045:8fff:1111:fe4e:571 actions=drop
314 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_target=fec0:0:1234:f045:8fff:1111:fe4f:0/112 actions=drop
315 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_sll=00:0a:e4:25:6b:b0 actions=drop
316 NXT_FLOW_MOD: ADD icmp6,icmp_type=136,nd_target=fec0:0:1234:f045:8fff:1111:fe4e:571,nd_tll=00:0a:e4:25:6b:b1 actions=drop
317 NXT_FLOW_MOD: ADD icmp6,icmp_type=136,nd_target=fec0:0:1234:f045:8fff:1111::/96,nd_tll=00:0a:e4:25:6b:b1 actions=drop
318 NXT_FLOW_MOD: ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
319 NXT_FLOW_MOD: ADD actions=note:41.42.43.00.00.00,note:00.01.02.03.04.05.06.07.00.00.00.00.00.00,note:00.00.00.00.00.00
320 NXT_FLOW_MOD: ADD tun_id=0x1234 cookie:0x5678 actions=FLOOD
321 NXT_FLOW_MOD: ADD actions=drop
322 NXT_FLOW_MOD: ADD tun_id=0x1234000056780000/0xffff0000ffff0000 actions=drop
323 NXT_FLOW_MOD: ADD dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=drop
324 NXT_FLOW_MOD: ADD dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=drop
325 NXT_FLOW_MOD: ADD dl_dst=aa:bb:cc:dd:ee:ff/fe:ff:ff:ff:ff:ff actions=drop
326 NXT_FLOW_MOD: ADD actions=drop
327 NXT_FLOW_MOD: ADD actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
328 ])
329 AT_CLEANUP
330
331 AT_SETUP([ovs-ofctl -F nxm -mmm parse-flows])
332 AT_DATA([flows.txt], [[
333 # comment
334 tcp,tp_src=123,actions=flood
335 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
336 arp,dl_src=00:0A:E4:25:6B:B0,arp_sha=00:0A:E4:25:6B:B0 actions=drop
337 ipv6,ipv6_label=0x12345 actions=2
338 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=3
339 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5/64 actions=4
340 ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:5/127 actions=5
341 tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop 
342 udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop 
343 in_port=3 icmp6,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
344 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
345 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
346 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
347 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571 actions=drop
348 icmp6,icmp_type=135,nd_sll=00:0A:E4:25:6B:B0 actions=drop
349 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571,nd_tll=00:0A:E4:25:6B:B1 actions=drop
350 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
351 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
352 tun_id=0x1234,cookie=0x5678,actions=flood
353 actions=drop
354 reg0=123,actions=move:NXM_NX_REG0[0..5]->NXM_NX_REG1[26..31],load:55->NXM_NX_REG2[0..31],move:NXM_NX_REG0[0..31]->NXM_NX_TUN_ID[0..31],move:NXM_NX_REG0[0..15]->NXM_OF_VLAN_TCI[]
355 actions=move:OXM_OF_ETH_DST[]->OXM_OF_ETH_SRC[]
356 actions=push:NXM_NX_REG0[0..31],pop:NXM_NX_REG0[]
357 vlan_tci=0x1123/0x1fff,actions=drop
358 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
359 ]])
360 AT_CHECK([ovs-ofctl -F nxm -mmm parse-flows flows.txt], [0], [stdout], [stderr])
361 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
362 [[usable protocols: NXM,OXM
363 chosen protocol: NXM-table_id
364 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(007b) actions=FLOOD
365 NXT_FLOW_MOD: ADD NXM_OF_IN_PORT(fffe), NXM_OF_ETH_SRC(000ae4256bb0), NXM_OF_VLAN_TCI_W(1009/1fff) actions=drop
366 NXT_FLOW_MOD: ADD NXM_OF_ETH_SRC(000ae4256bb0), NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_SHA(000ae4256bb0) actions=drop
367 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_LABEL(00012345) actions=output:2
368 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005) actions=output:3
369 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000) actions=output:4
370 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST_W(20010db83c4d00010002000300040004/fffffffffffffffffffffffffffffffe) actions=output:5
371 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010000000000000001), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(0050) actions=drop
372 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010000000000000003), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(0035) actions=drop
373 NXT_FLOW_MOD: ADD NXM_OF_IN_PORT(0003), NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010000000000000001), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(86) actions=drop
374 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(0800), NXM_OF_VLAN_TCI_W(f000/f000), NXM_OF_IP_PROTO(11) idle:5 actions=strip_vlan,output:0
375 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(c0a80003), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(0050) actions=set_queue:37,output:1
376 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(c0a80003), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(0035) actions=pop_queue,output:1
377 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(fec000001234f0458fff1111fe4e0571) actions=drop
378 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_SLL(000ae4256bb0) actions=drop
379 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(88), NXM_NX_ND_TARGET(fec000001234f0458fff1111fe4e0571), NXM_NX_ND_TLL(000ae4256bb1) actions=drop
380 NXT_FLOW_MOD: ADD <any> cookie:0x123456789abcdef hard:10 pri:60000 actions=CONTROLLER:65535
381 NXT_FLOW_MOD: ADD <any> actions=note:41.42.43.00.00.00,note:00.01.02.03.04.05.06.07.00.00.00.00.00.00,note:00.00.00.00.00.00
382 NXT_FLOW_MOD: ADD NXM_NX_TUN_ID(0000000000001234) cookie:0x5678 actions=FLOOD
383 NXT_FLOW_MOD: ADD <any> actions=drop
384 NXT_FLOW_MOD: ADD NXM_NX_REG0(0000007b) actions=move:NXM_NX_REG0[0..5]->NXM_NX_REG1[26..31],load:0x37->NXM_NX_REG2[],move:NXM_NX_REG0[]->NXM_NX_TUN_ID[0..31],move:NXM_NX_REG0[0..15]->NXM_OF_VLAN_TCI[]
385 NXT_FLOW_MOD: ADD <any> actions=move:NXM_OF_ETH_DST[]->NXM_OF_ETH_SRC[]
386 NXT_FLOW_MOD: ADD <any> actions=push:NXM_NX_REG0[],pop:NXM_NX_REG0[]
387 NXT_FLOW_MOD: ADD NXM_OF_VLAN_TCI_W(1123/1fff) actions=drop
388 NXT_FLOW_MOD: ADD <any> actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
389 ]])
390 AT_CLEANUP
391
392 AT_SETUP([ovs-ofctl parse-nx-match])
393 AT_KEYWORDS([nx-match])
394 AT_DATA([nx-match.txt], [dnl
395 <any>
396
397 # in port
398 NXM_OF_IN_PORT(0000)
399 NXM_OF_IN_PORT(fffe)
400
401 # eth dst
402 NXM_OF_ETH_DST(0002e30f80a4)
403 NXM_OF_ETH_DST_W(010000000000/010000000000)
404 NXM_OF_ETH_DST_W(000000000000/010000000000)
405 NXM_OF_ETH_DST_W(ffffffffffff/010000000000)
406 NXM_OF_ETH_DST_W(0002e30f80a4/ffffffffffff)
407 NXM_OF_ETH_DST_W(60175619848f/000000000000)
408 NXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
409 NXM_OF_ETH_DST_W(60175619848f/5a5a5a5a5a5a)
410
411 # eth src
412 NXM_OF_ETH_SRC(020898456ddb)
413 NXM_OF_ETH_SRC_W(012345abcdef/ffffff555555)
414 NXM_OF_ETH_SRC_W(020898456ddb/ffffffffffff)
415 NXM_OF_ETH_SRC_W(020898456ddb/000000000000)
416
417 # eth type
418 NXM_OF_ETH_TYPE(0800)
419 NXM_OF_ETH_TYPE(0800) NXM_OF_IN_PORT(0012)
420
421 # vlan tci
422 NXM_OF_VLAN_TCI(f009)
423 NXM_OF_VLAN_TCI(f009) NXM_OF_VLAN_TCI(f009)
424 NXM_OF_VLAN_TCI(0000)           # Packets without 802.1Q header.
425 NXM_OF_VLAN_TCI(3123)           # Packets with VID=123, PCP=1.
426 NXM_OF_VLAN_TCI(0123)           # Does not make sense (but supported anyway)
427 NXM_OF_VLAN_TCI_W(1123/1fff)    # Packets with VID=123, any PCP.
428 NXM_OF_VLAN_TCI_W(1123/ffff)    # Packets with VID=123, PCP=0
429 NXM_OF_VLAN_TCI_W(1123/0000)    # Packets with or without 802.1Q header
430 NXM_OF_VLAN_TCI_W(f000/f000)    # Packets with any VID, PCP=7.
431 NXM_OF_VLAN_TCI_W(0000/e000)    # No 802.1Q or with VID=0
432
433 # IP TOS
434 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_TOS(f0)
435 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_TOS(41)
436 NXM_OF_IP_TOS(f0)
437
438 # IP ECN
439 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_ECN(03)
440 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_ECN(06)
441 NXM_NX_IP_ECN(03)
442
443 # IP protocol
444 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01)
445 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(05)
446 NXM_OF_IP_PROTO(05)
447
448 # IP TTL
449 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_TTL(80)
450 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_TTL(ff)
451 NXM_NX_IP_TTL(80)
452
453 # IP source
454 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC(ac100014)
455 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/FFFF0000)
456 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/5a5a5a5a)
457 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/ffffffff)
458 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/00000000)
459 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_SRC(ac100014)
460 NXM_OF_IP_SRC_W(C0D80000/FFFF0000)
461
462 # IP destination
463 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST(ac100014)
464 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a88012/FFFF0000)
465 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a80000/5a5a5a5a)
466 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a80000/ffffffff)
467 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a80000/00000000)
468 NXM_OF_IP_DST(ac100014)
469 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_DST_W(C0D80000/FFFF0000)
470
471 # TCP source port
472 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC(4231)
473 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/F0F0)
474 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/ffff)
475 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/0000)
476 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_SRC(4231)
477
478 # TCP destination port
479 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST(4231)
480 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/FFF0)
481 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/ffff)
482 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/0000)
483 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_DST(4231)
484
485 # UDP source port
486 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC(8732)
487 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/01FF)
488 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/ffff)
489 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/0000)
490 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_UDP_SRC(7823)
491
492 # UDP destination port
493 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST(1782)
494 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/F00F)
495 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/FFFF)
496 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/0000)
497 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(02) NXM_OF_UDP_DST(1293)
498
499 # ICMP type
500 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_TYPE(12)
501 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_TYPE(10)
502
503 # ICMP code
504 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_CODE(12)
505 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_CODE(10)
506 NXM_OF_ETH_TYPE(0800) NXM_OF_ICMP_CODE(10)
507 NXM_OF_ICMP_CODE(00)
508
509 # ARP opcode
510 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001)
511 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(1111)
512 NXM_OF_ETH_TYPE(0000) NXM_OF_ARP_OP(0001)
513 NXM_OF_ARP_OP(0001)
514 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001) NXM_OF_ARP_OP(0001)
515
516 # ARP source protocol address
517 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA(ac100014)
518 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
519 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/aaaaaa00)
520 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/ffffffff)
521 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/00000000)
522 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
523 NXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
524
525 # ARP destination protocol address
526 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA(ac100014)
527 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
528 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/77777777)
529 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/ffffffff)
530 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/00000000)
531 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
532 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
533
534 # ARP source hardware address
535 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_SHA(0002e30f80a4)
536 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_SHA(0002e30f80a4)
537 NXM_NX_ARP_SHA(0002e30f80a4)
538
539 # ARP destination hardware address
540 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_THA(0002e30f80a4)
541 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_THA(0002e30f80a4)
542 NXM_NX_ARP_THA(0002e30f80a4)
543
544 # RARP opcode
545 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(0003)
546 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(1111)
547 NXM_OF_ETH_TYPE(0000) NXM_OF_ARP_OP(0003)
548 NXM_OF_ARP_OP(0003)
549 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(0003) NXM_OF_ARP_OP(0003)
550
551 # RARP source protocol address
552 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA(ac100014)
553 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
554 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/aaaaaa00)
555 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/ffffffff)
556 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/00000000)
557 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
558 NXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
559
560 # RARP destination protocol address
561 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA(ac100014)
562 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
563 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/77777777)
564 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/ffffffff)
565 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/00000000)
566 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
567 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
568
569 # RARP source hardware address
570 NXM_OF_ETH_TYPE(8035) NXM_NX_ARP_SHA(0002e30f80a4)
571 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_SHA(0002e30f80a4)
572 NXM_NX_ARP_SHA(0002e30f80a4)
573
574 # RARP destination hardware address
575 NXM_OF_ETH_TYPE(8035) NXM_NX_ARP_THA(0002e30f80a4)
576 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_THA(0002e30f80a4)
577 NXM_NX_ARP_THA(0002e30f80a4)
578
579 # IPv6 source
580 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
581 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
582 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
583 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/5a5a5a5a5a5a5a5a0000000000000000)
584 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
585 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
586 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
587
588 # IPv6 destination
589 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
590 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
591 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/77777777777777777777777777777777)
592 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
593 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
594 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
595
596 # IPv6 Flow Label
597 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_LABEL(1000000f)
598 NXM_NX_IPV6_LABEL(0000000f)
599 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_LABEL(0000000f)
600
601 # ND target address
602 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
603 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
604 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/0123456789abcdeffedcba9876543210)
605 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/ffffffffffffffffffffffffffffffff)
606 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/00000000000000000000000000000000)
607 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/fedcba98765432100123456789abcdef)
608
609 # ND source hardware address
610 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_SLL(0002e30f80a4)
611 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_SLL(0002e30f80a4)
612 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3b) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_SLL(0002e30f80a4)
613 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_SLL(0002e30f80a4)
614
615 # ND destination hardware address
616 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_TLL(0002e30f80a4)
617 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_TLL(0002e30f80a4)
618 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3b) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_TLL(0002e30f80a4)
619 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005) NXM_NX_ND_TLL(0002e30f80a4)
620
621 # IPv4 fragments.
622 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(00)
623 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(01)
624 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(02)
625 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(03)
626 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/03)
627 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/fd)
628 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/02)
629 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(01/01)
630 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(02/02)
631 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/03)
632 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/ff)
633 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/00)
634 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(f3)
635
636 # IPv6 fragments.
637 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(00)
638 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(01)
639 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(02)
640 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(03)
641 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/03)
642 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/01)
643 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/02)
644 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(01/01)
645 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(02/02)
646 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/03)
647 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/00)
648 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/ff)
649 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(f3)
650
651 # Flow cookie.
652 NXM_NX_COOKIE(00000000abcdef01)
653 NXM_NX_COOKIE_W(84200000abcdef01/84200000FFFFFFFF)
654 NXM_NX_COOKIE_W(84200000abcdef01/ffffffffffffffff)
655 NXM_NX_COOKIE_W(84200000abcdef01/0000000000000000)
656
657 # Tunnel ID.
658 NXM_NX_TUN_ID(00000000abcdef01)
659 NXM_NX_TUN_ID_W(84200000abcdef01/84200000FFFFFFFF)
660 NXM_NX_TUN_ID_W(84200000abcdef01/FFFFFFFFFFFFFFFF)
661 NXM_NX_TUN_ID_W(84200000abcdef01/0000000000000000)
662
663 # Register 0.
664 NXM_NX_REG0(acebdf56)
665 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
666 NXM_NX_REG0_W(a0e0d050/ffffffff)
667 NXM_NX_REG0_W(a0e0d050/00000000)
668
669 # Invalid field number.
670 01020304(1111/2222)
671
672 # Unimplemented registers.
673 #
674 # This test assumes that at least two registers, but fewer than 16,
675 # registers are implemented.
676 00010004(12345678)
677 00010108(12345678/12345678)
678 00011e04(12345678)
679 00011f08(12345678/12345678)
680 ])
681 AT_CHECK([ovs-ofctl -vPATTERN:'console:%c|%p|%m' --strict parse-nx-match < nx-match.txt], [0], [dnl
682 <any>
683
684 # in port
685 NXM_OF_IN_PORT(0000)
686 NXM_OF_IN_PORT(fffe)
687
688 # eth dst
689 NXM_OF_ETH_DST(0002e30f80a4)
690 NXM_OF_ETH_DST_W(010000000000/010000000000)
691 NXM_OF_ETH_DST_W(000000000000/010000000000)
692 NXM_OF_ETH_DST_W(010000000000/010000000000)
693 NXM_OF_ETH_DST(0002e30f80a4)
694 <any>
695 NXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
696 NXM_OF_ETH_DST_W(40125218000a/5a5a5a5a5a5a)
697
698 # eth src
699 NXM_OF_ETH_SRC(020898456ddb)
700 NXM_OF_ETH_SRC_W(012345014545/ffffff555555)
701 NXM_OF_ETH_SRC(020898456ddb)
702 <any>
703
704 # eth type
705 NXM_OF_ETH_TYPE(0800)
706 NXM_OF_IN_PORT(0012), NXM_OF_ETH_TYPE(0800) 
707
708 # vlan tci
709 NXM_OF_VLAN_TCI(f009)
710 nx_pull_match() returned error OFPBMC_DUP_FIELD
711 NXM_OF_VLAN_TCI(0000)
712 NXM_OF_VLAN_TCI(3123)
713 NXM_OF_VLAN_TCI(0123)
714 NXM_OF_VLAN_TCI_W(1123/1fff)
715 NXM_OF_VLAN_TCI(1123)
716 <any>
717 NXM_OF_VLAN_TCI_W(f000/f000)
718 NXM_OF_VLAN_TCI_W(0000/e000)
719
720 # IP TOS
721 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_TOS(f0)
722 nx_pull_match() returned error OFPBMC_BAD_VALUE
723 nx_pull_match() returned error OFPBMC_BAD_PREREQ
724
725 # IP ECN
726 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_ECN(03)
727 nx_pull_match() returned error OFPBMC_BAD_VALUE
728 nx_pull_match() returned error OFPBMC_BAD_PREREQ
729
730 # IP protocol
731 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01)
732 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(05)
733 nx_pull_match() returned error OFPBMC_BAD_PREREQ
734
735 # IP TTL
736 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_TTL(80)
737 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_TTL(ff)
738 nx_pull_match() returned error OFPBMC_BAD_PREREQ
739
740 # IP source
741 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(ac100014)
742 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(c0a80000/ffff0000)
743 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(40080000/5a5a5a5a)
744 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(c0a80000)
745 NXM_OF_ETH_TYPE(0800)
746 nx_pull_match() returned error OFPBMC_BAD_PREREQ
747 nx_pull_match() returned error OFPBMC_BAD_PREREQ
748
749 # IP destination
750 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(ac100014)
751 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST_W(c0a80000/ffff0000)
752 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST_W(40080000/5a5a5a5a)
753 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(c0a80000)
754 NXM_OF_ETH_TYPE(0800)
755 nx_pull_match() returned error OFPBMC_BAD_PREREQ
756 nx_pull_match() returned error OFPBMC_BAD_PREREQ
757
758 # TCP source port
759 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(4231)
760 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC_W(5050/f0f0)
761 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(5050)
762 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06)
763 nx_pull_match() returned error OFPBMC_BAD_PREREQ
764
765 # TCP destination port
766 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(4231)
767 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST_W(fde0/fff0)
768 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(fde0)
769 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06)
770 nx_pull_match() returned error OFPBMC_BAD_PREREQ
771
772 # UDP source port
773 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(8732)
774 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC_W(0132/01ff)
775 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(0132)
776 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11)
777 nx_pull_match() returned error OFPBMC_BAD_PREREQ
778
779 # UDP destination port
780 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(1782)
781 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST_W(5005/f00f)
782 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(5005)
783 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11)
784 nx_pull_match() returned error OFPBMC_BAD_PREREQ
785
786 # ICMP type
787 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_TYPE(12)
788 nx_pull_match() returned error OFPBMC_BAD_PREREQ
789
790 # ICMP code
791 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_CODE(12)
792 nx_pull_match() returned error OFPBMC_BAD_PREREQ
793 nx_pull_match() returned error OFPBMC_BAD_PREREQ
794 nx_pull_match() returned error OFPBMC_BAD_PREREQ
795
796 # ARP opcode
797 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_OP(0001)
798 nx_pull_match() returned error OFPBMC_BAD_VALUE
799 nx_pull_match() returned error OFPBMC_BAD_PREREQ
800 nx_pull_match() returned error OFPBMC_BAD_PREREQ
801 nx_pull_match() returned error OFPBMC_DUP_FIELD
802
803 # ARP source protocol address
804 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(ac100014)
805 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA_W(c0a81200/ffffff00)
806 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA_W(80a80200/aaaaaa00)
807 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(c0a81234)
808 NXM_OF_ETH_TYPE(0806)
809 nx_pull_match() returned error OFPBMC_BAD_PREREQ
810 nx_pull_match() returned error OFPBMC_BAD_PREREQ
811
812 # ARP destination protocol address
813 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(ac100014)
814 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA_W(c0a81200/ffffff00)
815 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA_W(40201234/77777777)
816 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(c0a81234)
817 NXM_OF_ETH_TYPE(0806)
818 nx_pull_match() returned error OFPBMC_BAD_PREREQ
819 nx_pull_match() returned error OFPBMC_BAD_PREREQ
820
821 # ARP source hardware address
822 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_SHA(0002e30f80a4)
823 nx_pull_match() returned error OFPBMC_BAD_PREREQ
824 nx_pull_match() returned error OFPBMC_BAD_PREREQ
825
826 # ARP destination hardware address
827 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_THA(0002e30f80a4)
828 nx_pull_match() returned error OFPBMC_BAD_PREREQ
829 nx_pull_match() returned error OFPBMC_BAD_PREREQ
830
831 # RARP opcode
832 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_OP(0003)
833 nx_pull_match() returned error OFPBMC_BAD_VALUE
834 nx_pull_match() returned error OFPBMC_BAD_PREREQ
835 nx_pull_match() returned error OFPBMC_BAD_PREREQ
836 nx_pull_match() returned error OFPBMC_DUP_FIELD
837
838 # RARP source protocol address
839 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA(ac100014)
840 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA_W(c0a81200/ffffff00)
841 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA_W(80a80200/aaaaaa00)
842 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA(c0a81234)
843 NXM_OF_ETH_TYPE(8035)
844 nx_pull_match() returned error OFPBMC_BAD_PREREQ
845 nx_pull_match() returned error OFPBMC_BAD_PREREQ
846
847 # RARP destination protocol address
848 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA(ac100014)
849 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA_W(c0a81200/ffffff00)
850 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA_W(40201234/77777777)
851 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA(c0a81234)
852 NXM_OF_ETH_TYPE(8035)
853 nx_pull_match() returned error OFPBMC_BAD_PREREQ
854 nx_pull_match() returned error OFPBMC_BAD_PREREQ
855
856 # RARP source hardware address
857 NXM_OF_ETH_TYPE(8035), NXM_NX_ARP_SHA(0002e30f80a4)
858 nx_pull_match() returned error OFPBMC_BAD_PREREQ
859 nx_pull_match() returned error OFPBMC_BAD_PREREQ
860
861 # RARP destination hardware address
862 NXM_OF_ETH_TYPE(8035), NXM_NX_ARP_THA(0002e30f80a4)
863 nx_pull_match() returned error OFPBMC_BAD_PREREQ
864 nx_pull_match() returned error OFPBMC_BAD_PREREQ
865
866 # IPv6 source
867 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
868 nx_pull_match() returned error OFPBMC_BAD_PREREQ
869 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
870 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(00000818184800000000000000000000/5a5a5a5a5a5a5a5a0000000000000000)
871 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010000000000000000)
872 NXM_OF_ETH_TYPE(86dd)
873 nx_pull_match() returned error OFPBMC_BAD_PREREQ
874
875 # IPv6 destination
876 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
877 nx_pull_match() returned error OFPBMC_BAD_PREREQ
878 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST_W(20010530344500010000000000000000/77777777777777777777777777777777)
879 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST(20010db83c4d00010000000000000000)
880 NXM_OF_ETH_TYPE(86dd)
881 nx_pull_match() returned error OFPBMC_BAD_PREREQ
882
883 # IPv6 Flow Label
884 nx_pull_match() returned error OFPBMC_BAD_VALUE
885 nx_pull_match() returned error OFPBMC_BAD_PREREQ
886 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_LABEL(0000000f)
887
888 # ND target address
889 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
890 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(88), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
891 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET_W(00010520080900010000000000040000/0123456789abcdeffedcba9876543210)
892 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
893 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87)
894 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(88), NXM_NX_ND_TARGET_W(20000898344400000002000300000005/fedcba98765432100123456789abcdef)
895
896 # ND source hardware address
897 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005), NXM_NX_ND_SLL(0002e30f80a4)
898 nx_pull_match() returned error OFPBMC_BAD_PREREQ
899 nx_pull_match() returned error OFPBMC_BAD_PREREQ
900 nx_pull_match() returned error OFPBMC_BAD_PREREQ
901
902 # ND destination hardware address
903 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(88), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005), NXM_NX_ND_TLL(0002e30f80a4)
904 nx_pull_match() returned error OFPBMC_BAD_PREREQ
905 nx_pull_match() returned error OFPBMC_BAD_PREREQ
906 nx_pull_match() returned error OFPBMC_BAD_PREREQ
907
908 # IPv4 fragments.
909 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
910 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(01)
911 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(02)
912 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
913 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
914 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/01)
915 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/02)
916 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(01/01)
917 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(02/02)
918 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
919 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
920 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
921 nx_pull_match() returned error OFPBMC_BAD_VALUE
922
923 # IPv6 fragments.
924 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
925 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(01)
926 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(02)
927 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
928 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
929 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/01)
930 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/02)
931 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(01/01)
932 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(02/02)
933 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
934 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
935 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
936 nx_pull_match() returned error OFPBMC_BAD_VALUE
937
938 # Flow cookie.
939 NXM_NX_COOKIE(00000000abcdef01)
940 NXM_NX_COOKIE_W(84200000abcdef01/84200000ffffffff)
941 NXM_NX_COOKIE(84200000abcdef01)
942 <any>
943
944 # Tunnel ID.
945 NXM_NX_TUN_ID(00000000abcdef01)
946 NXM_NX_TUN_ID_W(84200000abcdef01/84200000ffffffff)
947 NXM_NX_TUN_ID(84200000abcdef01)
948 <any>
949
950 # Register 0.
951 NXM_NX_REG0(acebdf56)
952 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
953 NXM_NX_REG0(a0e0d050)
954 <any>
955
956 # Invalid field number.
957 nx_pull_match() returned error OFPBMC_BAD_FIELD
958
959 # Unimplemented registers.
960 #
961 # This test assumes that at least two registers, but fewer than 16,
962 # registers are implemented.
963 NXM_NX_REG0(12345678)
964 NXM_NX_REG0_W(12345678/12345678)
965 nx_pull_match() returned error OFPBMC_BAD_FIELD
966 nx_pull_match() returned error OFPBMC_BAD_FIELD
967 ], [stderr])
968
969 # Check that at least the first warning made it.  (It's rate-limited
970 # so a variable number could show up, especially under valgrind etc.)
971 AT_CHECK([grep 'has 1-bits in value' stderr | sed 1q], [0], [dnl
972 nx_match|WARN|NXM/OXM entry NXM_OF_ETH_DST_W(ffffffffffff/010000000000) has 1-bits in value for bits wildcarded by the mask.  (Future versions of OVS may report this as an OpenFlow error.)
973 ])
974
975 # Check that there wasn't any other stderr output.
976 AT_CHECK([grep -v 'has 1-bits in value' stderr], [1])
977 AT_CLEANUP
978
979 AT_SETUP([ovs-ofctl parse-ofp10-match])
980 AT_KEYWORDS([OF1.0])
981 AT_DATA([test-data], [dnl
982 # in_port=LOCAL
983 003820fe fffe xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx xxxx xx xx xxxx dnl
984 xxxxxxxx xxxxxxxx xxxx xxxx
985
986 # dl_src=00:01:02:03:04:05
987 003820fb xxxx 000102030405 xxxxxxxxxxxx xxxx xx xx xxxx xx xx xxxx dnl
988 xxxxxxxx xxxxxxxx xxxx xxxx
989
990 # dl_dst=10:20:30:40:50:60
991 003820f7 xxxx xxxxxxxxxxxx 102030405060 xxxx xx xx xxxx xx xx xxxx dnl
992 xxxxxxxx xxxxxxxx xxxx xxxx
993
994 # dl_vlan=291
995 003820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx 0123 xx xx xxxx xx xx xxxx dnl
996 xxxxxxxx xxxxxxxx xxxx xxxx
997
998 # dl_vlan_pcp=5
999 002820ff xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx 05 xx xxxx xx xx xxxx dnl
1000 xxxxxxxx xxxxxxxx xxxx xxxx
1001
1002 # dl_vlan=291,dl_vlan_pcp=4
1003 002820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx 0123 04 xx xxxx xx xx xxxx dnl
1004 xxxxxxxx xxxxxxxx xxxx xxxx
1005
1006 # vlan_tci=0x0000
1007 003820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx ffff xx xx xxxx xx xx xxxx dnl
1008 xxxxxxxx xxxxxxxx xxxx xxxx
1009
1010 dnl dl_vlan_pcp doesn't make sense when dl_vlan is "none", so
1011 dnl OVS ignores it and drops it on output.
1012 # vlan_tci=0x0000
1013 #  1: 28 -> 38
1014 # 20: 05 -> 00
1015 002820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx ffff 05 xx xxxx xx xx xxxx dnl
1016 xxxxxxxx xxxxxxxx xxxx xxxx
1017
1018 dnl Invalid VID and PCP discards out-of-range bits:
1019 # dl_vlan=256,dl_vlan_pcp=7
1020 # 18: f1 -> 01
1021 # 20: ff -> 07
1022 002820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx f100 ff xx xxxx xx xx xxxx dnl
1023 xxxxxxxx xxxxxxxx xxxx xxxx
1024
1025 # dl_type=0x1234
1026 003820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx xx xxxx dnl
1027 xxxxxxxx xxxxxxxx xxxx xxxx
1028
1029 # ip,nw_proto=5
1030 003820cf xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 05 xxxx dnl
1031 xxxxxxxx xxxxxxxx xxxx xxxx
1032
1033 dnl Ignore nw_proto if not IP or ARP:
1034 # dl_type=0x1234,nw_proto=5
1035 # normal:  3: cf -> ef
1036 # normal: 25: 05 -> 00
1037 & ofp_util|INFO|normalization changed ofp_match, details:
1038 & ofp_util|INFO| pre: dl_type=0x1234,nw_proto=5
1039 & ofp_util|INFO|post: dl_type=0x1234
1040 003820cf xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx 05 xxxx dnl
1041 xxxxxxxx xxxxxxxx xxxx xxxx
1042
1043 # ip,nw_tos=252
1044 001820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 fc xx xxxx dnl
1045 xxxxxxxx xxxxxxxx xxxx xxxx
1046
1047 dnl Ignore nw_tos if not IP:
1048 # arp,nw_tos=4
1049 # 24: 05 -> 04
1050 # normal:  1: 18 -> 38
1051 # normal: 24: 04 -> 00
1052 & ofp_util|INFO|normalization changed ofp_match, details:
1053 & ofp_util|INFO| pre: arp,nw_tos=4
1054 & ofp_util|INFO|post: arp
1055 001820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 05 xx xxxx dnl
1056 xxxxxxxx xxxxxxxx xxxx xxxx
1057
1058 dnl Low 2 bits of invalid TOS are forced to 0:
1059 # ip,nw_tos=48
1060 # 24: 31 -> 30
1061 001820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 31 xx xxxx dnl
1062 xxxxxxxx xxxxxxxx xxxx xxxx
1063
1064 # arp,arp_op=2
1065 003820cf xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx 02 xxxx dnl
1066 xxxxxxxx xxxxxxxx xxxx xxxx
1067
1068 # ip,nw_src=192.168.128.85
1069 003800ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1070 c0a88055 xxxxxxxx xxxx xxxx
1071
1072 # ip,nw_src=192.168.128.0/24
1073 # 31: 55 -> 00
1074 003808ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1075 c0a88055 xxxxxxxx xxxx xxxx
1076
1077 # ip,nw_dst=192.168.128.85
1078 003020ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1079 xxxxxxxx c0a88055 xxxx xxxx
1080
1081 # ip,nw_dst=192.168.128.0/24
1082 # 35: 55 -> 00
1083 003220ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1084 xxxxxxxx c0a88055 xxxx xxxx
1085
1086 # arp,arp_spa=192.168.128.85
1087 003800ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1088 c0a88055 xxxxxxxx xxxx xxxx
1089
1090 # arp,arp_spa=192.168.128.0/24
1091 # 31: 55 -> 00
1092 003808ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1093 c0a88055 xxxxxxxx xxxx xxxx
1094
1095 # arp,arp_tpa=192.168.128.85
1096 003020ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1097 xxxxxxxx c0a88055 xxxx xxxx
1098
1099 # arp,arp_tpa=192.168.128.0/24
1100 # 35: 55 -> 00
1101 003220ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1102 xxxxxxxx c0a88055 xxxx xxxx
1103
1104 dnl Ignore nw_src if not IP or ARP:
1105 # dl_type=0x1234,nw_src=192.168.128.0/24
1106 # 31: 55 -> 00
1107 # normal:  2: 08 -> 20
1108 # normal: 28: c0 -> 00
1109 # normal: 29: a8 -> 00
1110 # normal: 30: 80 -> 00
1111 & ofp_util|INFO|normalization changed ofp_match, details:
1112 & ofp_util|INFO| pre: dl_type=0x1234,nw_src=192.168.128.0/24
1113 & ofp_util|INFO|post: dl_type=0x1234
1114 003808ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx xx xxxx dnl
1115 c0a88055 xxxxxxxx xxxx xxxx
1116
1117 dnl Ignore nw_dst if not IP or ARP:
1118 # dl_type=0x1234,nw_dst=192.168.128.0/24
1119 # 35: 55 -> 00
1120 # normal:  1: 32 -> 38
1121 # normal: 32: c0 -> 00
1122 # normal: 33: a8 -> 00
1123 # normal: 34: 80 -> 00
1124 & ofp_util|INFO|normalization changed ofp_match, details:
1125 & ofp_util|INFO| pre: dl_type=0x1234,nw_dst=192.168.128.0/24
1126 & ofp_util|INFO|post: dl_type=0x1234
1127 003220ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx xx xxxx dnl
1128 xxxxxxxx c0a88055 xxxx xxxx
1129
1130 # tcp,tp_src=443
1131 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 06 xxxx dnl
1132 xxxxxxxx xxxxxxxx 01bb xxxx
1133
1134 # tcp,tp_dst=443
1135 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 06 xxxx dnl
1136 xxxxxxxx xxxxxxxx xxxx 01bb
1137
1138 # udp,tp_src=443
1139 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 11 xxxx dnl
1140 xxxxxxxx xxxxxxxx 01bb xxxx
1141
1142 # udp,tp_dst=443
1143 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 11 xxxx dnl
1144 xxxxxxxx xxxxxxxx xxxx 01bb
1145
1146 # icmp,icmp_type=5
1147 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 01 xxxx dnl
1148 xxxxxxxx xxxxxxxx 0005 xxxx
1149
1150 # icmp,icmp_code=8
1151 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 01 xxxx dnl
1152 xxxxxxxx xxxxxxxx xxxx 0008
1153
1154 dnl Ignore tp_src if not TCP or UDP:
1155 # ip,nw_proto=21,tp_src=443
1156 # normal:  3: 8f -> cf
1157 # normal: 36: 01 -> 00
1158 # normal: 37: bb -> 00
1159 & ofp_util|INFO|normalization changed ofp_match, details:
1160 & ofp_util|INFO| pre: ip,nw_proto=21,tp_src=443
1161 & ofp_util|INFO|post: ip,nw_proto=21
1162 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 15 xxxx dnl
1163 xxxxxxxx xxxxxxxx 01bb xxxx
1164
1165 dnl Ignore tp_dst if not TCP or UDP:
1166 # ip,nw_proto=21,tp_dst=443
1167 # normal:  3: 4f -> cf
1168 # normal: 38: 01 -> 00
1169 # normal: 39: bb -> 00
1170 dnl The normalization details are suppressed here due to rate-limiting.
1171 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 15 xxxx dnl
1172 xxxxxxxx xxxxxxxx xxxx 01bb
1173
1174 ])
1175 sed '/^[[#&]]/d' < test-data > input.txt
1176 sed -n 's/^# //p; /^$/p' < test-data > expout
1177 sed -n 's/^& //p' < test-data > experr
1178 AT_CAPTURE_FILE([input.txt])
1179 AT_CAPTURE_FILE([expout])
1180 AT_CAPTURE_FILE([experr])
1181 AT_CHECK(
1182   [ovs-ofctl '-vPATTERN:console:%c|%p|%m' parse-ofp10-match < input.txt],
1183   [0], [expout], [experr])
1184 AT_CLEANUP
1185
1186 AT_SETUP([ovs-ofctl parse-ofp11-match])
1187 AT_KEYWORDS([OF1.1])
1188 AT_DATA([test-data], [dnl
1189 # in_port=LOCAL
1190 0000 0058 fffffffe 000003fe dnl
1191 000000000000ffffffffffff 000000000000ffffffffffff dnl
1192 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1193 00000000 00 000000 0000000000000000ffffffffffffffff
1194
1195 # bad ofp11_match: OFPBMC_BAD_VALUE
1196 & ofp_util|WARN|port 305419896 is outside the supported range 0 through 65279 or 0xffffff00 through 0xffffffff
1197 0000 0058 12345678 000003fe dnl
1198 000000000000ffffffffffff 000000000000ffffffffffff dnl
1199 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1200 00000000 00 000000 0000000000000000ffffffffffffffff
1201
1202 # dl_src=00:01:02:03:04:05
1203 0000 0058 00000000 000003ff dnl
1204 000102030405000000000000 000000000000ffffffffffff dnl
1205 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1206 00000000 00 000000 0000000000000000ffffffffffffffff
1207
1208 # dl_src=55:55:55:55:55:55/55:55:55:55:55:55
1209 0000 0058 00000000 000003ff dnl
1210 555555555555aaaaaaaaaaaa 000000000000ffffffffffff dnl
1211 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1212 00000000 00 000000 0000000000000000ffffffffffffffff
1213
1214 # dl_dst=00:01:02:03:04:05
1215 0000 0058 00000000 000003ff dnl
1216 000000000000ffffffffffff 000102030405000000000000 dnl
1217 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1218 00000000 00 000000 0000000000000000ffffffffffffffff
1219
1220 # dl_dst=01:00:00:00:00:00/01:00:00:00:00:00
1221 0000 0058 00000000 000003ff dnl
1222 000000000000ffffffffffff 010000000000feffffffffff dnl
1223 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1224 00000000 00 000000 0000000000000000ffffffffffffffff
1225
1226 # dl_dst=00:01:02:03:04:05/fe:ff:ff:ff:ff:ff
1227 0000 0058 00000000 000003ff dnl
1228 000000000000ffffffffffff 000102030405010000000000 dnl
1229 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1230 00000000 00 000000 0000000000000000ffffffffffffffff
1231
1232 # dl_dst=55:55:55:55:55:55/55:55:55:55:55:55
1233 0000 0058 00000000 000003ff dnl
1234 000000000000ffffffffffff 555555555555aaaaaaaaaaaa dnl
1235 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1236 00000000 00 000000 0000000000000000ffffffffffffffff
1237
1238 dnl dl_vlan_pcp is ignored if dl_vlan is wildcarded, which causes the
1239 dnl the wildcard bit and the dl_vlan_pcp to be dropped for output:
1240 # in_port=1
1241 # 11: fa -> fe
1242 # 38: 03 -> 00
1243 0000 0058 00000001 000003fa dnl
1244 000000000000ffffffffffff 000000000000ffffffffffff dnl
1245 0000 03 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1246 00000000 00 000000 0000000000000000ffffffffffffffff
1247
1248 # dl_vlan=291
1249 0000 0058 00000000 000003fd dnl
1250 000000000000ffffffffffff 000000000000ffffffffffff dnl
1251 0123 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1252 00000000 00 000000 0000000000000000ffffffffffffffff
1253
1254 dnl OFPVID_NONE:
1255 # vlan_tci=0x0000
1256 0000 0058 00000000 000003fd dnl
1257 000000000000ffffffffffff 000000000000ffffffffffff dnl
1258 ffff 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1259 00000000 00 000000 0000000000000000ffffffffffffffff
1260
1261 dnl OFPVID_NONE ignores dl_vlan_pcp even if not wildcarded, which causes
1262 dnl the wildcard bit and the dl_vlan_pcp to be dropped for output:
1263 # vlan_tci=0x0000
1264 # 11: f9 -> fd
1265 # 38: 05 -> 00
1266 0000 0058 00000000 000003f9 dnl
1267 000000000000ffffffffffff 000000000000ffffffffffff dnl
1268 ffff 05 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1269 00000000 00 000000 0000000000000000ffffffffffffffff
1270
1271 # vlan_tci=0x1000/0x1000
1272 0000 0058 00000000 000003fd dnl
1273 000000000000ffffffffffff 000000000000ffffffffffff dnl
1274 fffe 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1275 00000000 00 000000 0000000000000000ffffffffffffffff
1276
1277 dnl Try invalid VID:
1278 # bad ofp11_match: OFPBMC_BAD_VALUE
1279 0000 0058 00000000 000003fd dnl
1280 000000000000ffffffffffff 000000000000ffffffffffff dnl
1281 1234 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1282 00000000 00 000000 0000000000000000ffffffffffffffff
1283
1284 # dl_vlan_pcp=4
1285 0000 0058 00000000 000003f9 dnl
1286 000000000000ffffffffffff 000000000000ffffffffffff dnl
1287 fffe 04 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1288 00000000 00 000000 0000000000000000ffffffffffffffff
1289
1290 # dl_vlan=10,dl_vlan_pcp=6
1291 0000 0058 00000000 000003f9 dnl
1292 000000000000ffffffffffff 000000000000ffffffffffff dnl
1293 000a 06 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1294 00000000 00 000000 0000000000000000ffffffffffffffff
1295
1296 # dl_type=0x1234
1297 0000 0058 00000000 000003f7 dnl
1298 000000000000ffffffffffff 000000000000ffffffffffff dnl
1299 0000 00 00 1234 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1300 00000000 00 000000 0000000000000000ffffffffffffffff
1301
1302 # ip,nw_tos=252
1303 0000 0058 00000000 000003e7 dnl
1304 000000000000ffffffffffff 000000000000ffffffffffff dnl
1305 0000 00 00 0800 fc 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1306 00000000 00 000000 0000000000000000ffffffffffffffff
1307
1308 dnl Try invalid TOS:
1309 # bad ofp11_match: OFPBMC_BAD_VALUE
1310 0000 0058 00000000 000003e7 dnl
1311 000000000000ffffffffffff 000000000000ffffffffffff dnl
1312 0000 00 00 0800 01 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1313 00000000 00 000000 0000000000000000ffffffffffffffff
1314
1315 # ip,nw_proto=5
1316 0000 0058 00000000 000003d7 dnl
1317 000000000000ffffffffffff 000000000000ffffffffffff dnl
1318 0000 00 00 0800 00 05 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1319 00000000 00 000000 0000000000000000ffffffffffffffff
1320
1321 # arp,arp_op=2
1322 0000 0058 00000000 000003d7 dnl
1323 000000000000ffffffffffff 000000000000ffffffffffff dnl
1324 0000 00 00 0806 00 02 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1325 00000000 00 000000 0000000000000000ffffffffffffffff
1326
1327 # ip,nw_src=192.168.128.0/24
1328 0000 0058 00000000 000003f7 dnl
1329 000000000000ffffffffffff 000000000000ffffffffffff dnl
1330 0000 00 00 0800 00 00 c0a88000000000ff 00000000ffffffff 0000 0000 dnl
1331 00000000 00 000000 0000000000000000ffffffffffffffff
1332
1333 # ip,nw_src=128.160.128.0/165.165.165.165
1334 # 44: c0 -> 80
1335 # 45: a8 -> a0
1336 0000 0058 00000000 000003f7 dnl
1337 000000000000ffffffffffff 000000000000ffffffffffff dnl
1338 0000 00 00 0800 00 00 c0a880005a5a5a5a 00000000ffffffff 0000 0000 dnl
1339 00000000 00 000000 0000000000000000ffffffffffffffff
1340
1341 # ip,nw_dst=192.168.128.0/24
1342 0000 0058 00000000 000003f7 dnl
1343 000000000000ffffffffffff 000000000000ffffffffffff dnl
1344 0000 00 00 0800 00 00 00000000ffffffff c0a88000000000ff 0000 0000 dnl
1345 00000000 00 000000 0000000000000000ffffffffffffffff
1346
1347 # ip,nw_dst=128.160.128.0/165.165.165.165
1348 # 52: c0 -> 80
1349 # 53: a8 -> a0
1350 0000 0058 00000000 000003f7 dnl
1351 000000000000ffffffffffff 000000000000ffffffffffff dnl
1352 0000 00 00 0800 00 00 00000000ffffffff c0a880005a5a5a5a 0000 0000 dnl
1353 00000000 00 000000 0000000000000000ffffffffffffffff
1354
1355 # arp,arp_spa=192.168.128.0/24
1356 0000 0058 00000000 000003f7 dnl
1357 000000000000ffffffffffff 000000000000ffffffffffff dnl
1358 0000 00 00 0806 00 00 c0a88000000000ff 00000000ffffffff 0000 0000 dnl
1359 00000000 00 000000 0000000000000000ffffffffffffffff
1360
1361 # arp,arp_tpa=192.168.128.0/24
1362 0000 0058 00000000 000003f7 dnl
1363 000000000000ffffffffffff 000000000000ffffffffffff dnl
1364 0000 00 00 0806 00 00 00000000ffffffff c0a88000000000ff 0000 0000 dnl
1365 00000000 00 000000 0000000000000000ffffffffffffffff
1366
1367 # tcp,tp_src=443
1368 0000 0058 00000000 00000397 dnl
1369 000000000000ffffffffffff 000000000000ffffffffffff dnl
1370 0000 00 00 0800 00 06 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1371 00000000 00 000000 0000000000000000ffffffffffffffff
1372
1373 # tcp,tp_dst=443
1374 0000 0058 00000000 00000357 dnl
1375 000000000000ffffffffffff 000000000000ffffffffffff dnl
1376 0000 00 00 0800 00 06 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1377 00000000 00 000000 0000000000000000ffffffffffffffff
1378
1379 # udp,tp_src=443
1380 0000 0058 00000000 00000397 dnl
1381 000000000000ffffffffffff 000000000000ffffffffffff dnl
1382 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1383 00000000 00 000000 0000000000000000ffffffffffffffff
1384
1385 # icmp,icmp_type=5
1386 0000 0058 00000000 00000397 dnl
1387 000000000000ffffffffffff 000000000000ffffffffffff dnl
1388 0000 00 00 0800 00 01 00000000ffffffff 00000000ffffffff 0005 0000 dnl
1389 00000000 00 000000 0000000000000000ffffffffffffffff
1390
1391 # icmp,icmp_code=8
1392 0000 0058 00000000 00000357 dnl
1393 000000000000ffffffffffff 000000000000ffffffffffff dnl
1394 0000 00 00 0800 00 01 00000000ffffffff 00000000ffffffff 0000 0008 dnl
1395 00000000 00 000000 0000000000000000ffffffffffffffff
1396
1397 # udp,tp_src=443
1398 0000 0058 00000000 00000397 dnl
1399 000000000000ffffffffffff 000000000000ffffffffffff dnl
1400 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1401 00000000 00 000000 0000000000000000ffffffffffffffff
1402
1403 # udp,tp_dst=443
1404 0000 0058 00000000 00000357 dnl
1405 000000000000ffffffffffff 000000000000ffffffffffff dnl
1406 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1407 00000000 00 000000 0000000000000000ffffffffffffffff
1408
1409 dnl SCTP, no ports.
1410 # ip,nw_proto=132
1411 0000 0058 00000000 000003d7 dnl
1412 000000000000ffffffffffff 000000000000ffffffffffff dnl
1413 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1414 00000000 00 000000 0000000000000000ffffffffffffffff
1415
1416 dnl SCTP tp_src matching not supported:
1417 # bad ofp11_match: OFPBMC_BAD_FIELD
1418 0000 0058 00000000 00000397 dnl
1419 000000000000ffffffffffff 000000000000ffffffffffff dnl
1420 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1421 00000000 00 000000 0000000000000000ffffffffffffffff
1422
1423 dnl SCTP tp_dst matching not supported:
1424 # bad ofp11_match: OFPBMC_BAD_FIELD
1425 0000 0058 00000000 00000357 dnl
1426 000000000000ffffffffffff 000000000000ffffffffffff dnl
1427 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1428 00000000 00 000000 0000000000000000ffffffffffffffff
1429
1430 dnl Ignore tp_src if not TCP or UDP or SCTP:
1431 # ip,nw_proto=21
1432 # 11: 97 -> d7
1433 # 60: 01 -> 00
1434 # 61: bb -> 00
1435 0000 0058 00000000 00000397 dnl
1436 000000000000ffffffffffff 000000000000ffffffffffff dnl
1437 0000 00 00 0800 00 15 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1438 00000000 00 000000 0000000000000000ffffffffffffffff
1439
1440 dnl Ignore tp_dst if not TCP or UDP or SCTP:
1441 # ip,nw_proto=22
1442 # 11: 57 -> d7
1443 # 62: 01 -> 00
1444 # 63: bb -> 00
1445 0000 0058 00000000 00000357 dnl
1446 000000000000ffffffffffff 000000000000ffffffffffff dnl
1447 0000 00 00 0800 00 16 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1448 00000000 00 000000 0000000000000000ffffffffffffffff
1449
1450 dnl mpls_label not yet supported:
1451 # bad ofp11_match: OFPBMC_BAD_TAG
1452 0000 0058 00000000 000002f7 dnl
1453 000000000000ffffffffffff 000000000000ffffffffffff dnl
1454 0000 00 00 8847 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1455 12345678 00 000000 0000000000000000ffffffffffffffff
1456
1457 dnl mpls_tc not yet supported:
1458 # bad ofp11_match: OFPBMC_BAD_TAG
1459 0000 0058 00000000 000001f7 dnl
1460 000000000000ffffffffffff 000000000000ffffffffffff dnl
1461 0000 00 00 8848 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1462 00000000 5a 000000 0000000000000000ffffffffffffffff
1463
1464 dnl mpls_label and mpls_tc must be ignored if dl_type is not MPLS:
1465 # dl_type=0x1234
1466 # 10: 00 -> 03
1467 # 64: 12 -> 00
1468 # 65: 34 -> 00
1469 # 66: 56 -> 00
1470 # 67: 78 -> 00
1471 # 68: 5a -> 00
1472 0000 0058 00000000 000000f7 dnl
1473 000000000000ffffffffffff 000000000000ffffffffffff dnl
1474 0000 00 00 1234 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1475 12345678 5a 000000 0000000000000000ffffffffffffffff
1476
1477 dnl metadata match:
1478 # metadata=0x1234567890abcdef
1479 0000 0058 00000000 000003ff dnl
1480 000000000000ffffffffffff 000000000000ffffffffffff dnl
1481 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1482 00000000 00 000000 1234567890abcdef0000000000000000
1483
1484 dnl metadata match:
1485 # metadata=0x5555555555555555/0x5555555555555555
1486 0000 0058 00000000 000003ff dnl
1487 000000000000ffffffffffff 000000000000ffffffffffff dnl
1488 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1489 00000000 00 000000 5555555555555555aaaaaaaaaaaaaaaa
1490
1491 dnl metadata match:
1492 # metadata=0x1234000090ab0000/0xffff0000ffff0000
1493 # 74: 56 -> 00
1494 # 75: 78 -> 00
1495 # 78: cd -> 00
1496 # 79: ef -> 00
1497 0000 0058 00000000 000003ff dnl
1498 000000000000ffffffffffff 000000000000ffffffffffff dnl
1499 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1500 00000000 00 000000 1234567890abcdef0000ffff0000ffff
1501
1502 ])
1503 sed '/^[[#&]]/d' < test-data > input.txt
1504 sed -n 's/^# //p; /^$/p' < test-data > expout
1505 sed -n 's/^& //p' < test-data > experr
1506 AT_CAPTURE_FILE([input.txt])
1507 AT_CAPTURE_FILE([expout])
1508 AT_CAPTURE_FILE([experr])
1509 AT_CHECK(
1510   [ovs-ofctl '-vPATTERN:console:%c|%p|%m' parse-ofp11-match < input.txt],
1511   [0], [expout], [experr])
1512 AT_CLEANUP
1513
1514 AT_SETUP([ovs-ofctl parse-nx-match loose])
1515 AT_KEYWORDS([nx-match])
1516 AT_DATA([nx-match.txt], [dnl
1517 NXM_OF_IN_PORT(0001), 01020304(1111/2222), NXM_OF_ETH_TYPE(0800)
1518 ])
1519
1520 AT_CHECK([ovs-ofctl --strict parse-nx-match < nx-match.txt], [0], [dnl
1521 nx_pull_match() returned error OFPBMC_BAD_FIELD
1522 ])
1523
1524 AT_CHECK([ovs-ofctl parse-nx-match < nx-match.txt], [0], [dnl
1525 NXM_OF_IN_PORT(0001), NXM_OF_ETH_TYPE(0800)
1526 ])
1527 AT_CLEANUP
1528
1529 AT_SETUP([ovs-ofctl parse-oxm])
1530 AT_KEYWORDS([oxm])
1531 AT_DATA([oxm.txt], [dnl
1532 <any>
1533
1534 # in port
1535 OXM_OF_IN_PORT(00000000)
1536 OXM_OF_IN_PORT(fffffffe)
1537
1538 # metadata
1539 OXM_OF_METADATA(5a5a5a5a5a5a5a5a)
1540 OXM_OF_METADATA_W(0000000000000000/00000000ffffffff)
1541 OXM_OF_METADATA_W(1234567890abcdef/ffff0000ffff0000)
1542 OXM_OF_METADATA_W(1234567890abcdef/ffffffffffffffff)
1543 OXM_OF_METADATA_W(1234567890abcdef/0000000000000000)
1544
1545 # eth dst
1546 OXM_OF_ETH_DST(0002e30f80a4)
1547 OXM_OF_ETH_DST_W(010000000000/010000000000)
1548 OXM_OF_ETH_DST_W(000000000000/010000000000)
1549 OXM_OF_ETH_DST_W(ffffffffffff/010000000000)
1550 OXM_OF_ETH_DST_W(0002e30f80a4/ffffffffffff)
1551 OXM_OF_ETH_DST_W(0002e30f80a4/000000000000)
1552 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
1553
1554 # eth src
1555 OXM_OF_ETH_SRC(020898456ddb)
1556
1557 # eth type
1558 OXM_OF_ETH_TYPE(0800)
1559 OXM_OF_ETH_TYPE(0800) OXM_OF_IN_PORT(00000012)
1560
1561 # vlan
1562 OXM_OF_VLAN_VID(1009) OXM_OF_VLAN_VID(1009) # Duplicate Field
1563 OXM_OF_VLAN_VID(f009)           # Bad Value
1564 OXM_OF_VLAN_PCP(00)             # Bad Pre-Requisite
1565 OXM_OF_VLAN_VID(0000)           # Packets without 802.1Q header or with VID=0
1566 OXM_OF_VLAN_VID(1123)           # Packets with VID=123, any PCP
1567 OXM_OF_VLAN_VID(1123) OXM_OF_VLAN_PCP(01) # Packets with VID=123, PCP=1.
1568 OXM_OF_VLAN_VID(0123)           # Does not make sense (but supported anyway)
1569 OXM_OF_VLAN_VID_W(0123/0123)      # Does not make sense (but supported anyway)
1570 OXM_OF_VLAN_VID_W(1123/0123)      # Does not make sense (but supported anyway)
1571 OXM_OF_VLAN_VID_W(0123/1123)      # Does not make sense (but supported anyway)
1572 OXM_OF_VLAN_VID(0123) OXM_OF_VLAN_PCP(01)  #Bad Pre-Requisite
1573 OXM_OF_VLAN_VID_W(1123/1fff)    # Packets with VID=123, any PCP.
1574 OXM_OF_VLAN_VID_W(1123/ffff)    # Packets with VID=123, any PCP.
1575 OXM_OF_VLAN_VID_W(1123/0000)    # Packets with or without 802.1Q header
1576 OXM_OF_VLAN_VID_W(1123/1f0f),   # Packets with # VID=123 (masked)
1577 OXM_OF_VLAN_VID_W(1123/1f0f), OXM_OF_VLAN_PCP(01)  # Packets with VID=123 (masked), any PCP.
1578 OXM_OF_VLAN_VID_W(1000/1000)    # Packets with any VID, any PCP
1579 OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01)  # Packets with any VID, PCP=1.
1580
1581 # IP TOS
1582 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(f0)
1583 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(41)
1584 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(3f)
1585 OXM_OF_IP_DSCP(f0)
1586
1587 # IP ECN
1588 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(03)
1589 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(06)
1590 OXM_OF_IP_ECN(03)
1591
1592 # IP protocol
1593 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01)
1594 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(05)
1595 OXM_OF_IP_PROTO(05)
1596
1597 # IP source
1598 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC(ac100014)
1599 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/FFFF0000)
1600 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/FFFFFFFF)
1601 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/00000000)
1602 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_SRC(ac100014)
1603 OXM_OF_IPV4_SRC_W(C0D80000/FFFF0000)
1604
1605 # IP destination
1606 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST(ac100014)
1607 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/FFFF0000)
1608 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/FFFFFFFF)
1609 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/00000000)
1610 OXM_OF_IPV4_DST(ac100014)
1611 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_DST_W(C0D80000/FFFF0000)
1612
1613 # TCP source port
1614 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC(4231)
1615 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/F0F0)
1616 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/FFFF)
1617 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/0000)
1618 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_SRC(4231)
1619
1620 # TCP destination port
1621 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST(4231)
1622 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFF0)
1623 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFFF)
1624 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/0000)
1625 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_DST(4231)
1626
1627 # UDP source port
1628 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC(8732)
1629 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/01FF)
1630 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/FFFF)
1631 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/0000)
1632 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_UDP_SRC(7823)
1633
1634 # UDP destination port
1635 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST(1782)
1636 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/F00F)
1637 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/FFFF)
1638 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/0000)
1639 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_UDP_DST(1293)
1640
1641 # ICMP type
1642 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_TYPE(12)
1643 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_TYPE(10)
1644
1645 # ICMP code
1646 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_CODE(12)
1647 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_CODE(10)
1648 OXM_OF_ETH_TYPE(0800) OXM_OF_ICMPV4_CODE(10)
1649 OXM_OF_ICMPV4_CODE(00)
1650
1651 # ARP opcode
1652 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001)
1653 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(1111)
1654 OXM_OF_ETH_TYPE(0000) OXM_OF_ARP_OP(0001)
1655 OXM_OF_ARP_OP(0001)
1656 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001) OXM_OF_ARP_OP(0001)
1657
1658 # ARP source protocol address
1659 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA(ac100014)
1660 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
1661 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/FFFFFFFF)
1662 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/00000000)
1663 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SPA(ac100014)
1664 OXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
1665
1666 # ARP destination protocol address
1667 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA(ac100014)
1668 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
1669 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/FFFFFFFF)
1670 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/00000000)
1671 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_TPA(ac100014)
1672 OXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
1673
1674 # ARP source hardware address
1675 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA(0002e30f80a4)
1676 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SHA(0002e30f80a4)
1677 OXM_OF_ARP_SHA(0002e30f80a4)
1678 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(0002e30f80a4/ffffffffffff)
1679 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(0002e30f80a4/000000000000)
1680 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(0002e30f80a4/00000000000f)
1681
1682 # ARP destination hardware address
1683 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA(0002e30f80a4)
1684 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_THA(0002e30f80a4)
1685 OXM_OF_ARP_THA(0002e30f80a4)
1686 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(0002e30f80a4/ffffffffffff)
1687 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(0002e30f80a4/000000000000)
1688 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(0002e30f80a4/00000000000f)
1689
1690 # IPv6 source
1691 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1692 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1693 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1694 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
1695 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
1696 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1697
1698 # IPv6 destination
1699 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1700 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1701 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1702 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
1703 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
1704 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1705
1706 # IPv6 Flow Label
1707 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL(1000000f)
1708 OXM_OF_IPV6_FLABEL(0000000f)
1709 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL(0000000f)
1710 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/0000000f)
1711 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/000fffff)
1712 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/000ffff0)
1713 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/100fffff)
1714 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/ffffffff)
1715 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/00000000)
1716
1717 # ND source hardware address
1718 OXM_OF_ETH_TYPE(86dd) OXM_OF_IP_PROTO(3a) OXM_OF_ICMPV6_TYPE(87) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_SLL(0002e30f80a4)
1719 OXM_OF_ETH_TYPE(86dd) OXM_OF_IP_PROTO(3a) OXM_OF_ICMPV6_TYPE(88) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_SLL(0002e30f80a4)
1720 OXM_OF_ETH_TYPE(86dd) OXM_OF_IP_PROTO(3b) OXM_OF_ICMPV6_TYPE(87) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_SLL(0002e30f80a4)
1721 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(3a) OXM_OF_ICMPV6_TYPE(87) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_SLL(0002e30f80a4)
1722
1723 # ND destination hardware address
1724 OXM_OF_ETH_TYPE(86dd) OXM_OF_IP_PROTO(3a) OXM_OF_ICMPV6_TYPE(88) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_TLL(0002e30f80a4)
1725 OXM_OF_ETH_TYPE(86dd) OXM_OF_IP_PROTO(3a) OXM_OF_ICMPV6_TYPE(87) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_TLL(0002e30f80a4)
1726 OXM_OF_ETH_TYPE(86dd) OXM_OF_IP_PROTO(3b) OXM_OF_ICMPV6_TYPE(87) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_TLL(0002e30f80a4)
1727 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(3a) OXM_OF_ICMPV6_TYPE(88) OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005) OXM_OF_IPV6_ND_TLL(0002e30f80a4)
1728
1729 # Invalid field number.
1730 01020304(1111/2222)
1731 ])
1732 AT_CHECK([ovs-ofctl '-vPATTERN:console:%c|%p|%m' --strict parse-oxm < oxm.txt],
1733   [0], [dnl
1734 <any>
1735
1736 # in port
1737 OXM_OF_IN_PORT(00000000)
1738 OXM_OF_IN_PORT(fffffffe)
1739
1740 # metadata
1741 OXM_OF_METADATA(5a5a5a5a5a5a5a5a)
1742 OXM_OF_METADATA_W(0000000000000000/00000000ffffffff)
1743 OXM_OF_METADATA_W(1234000090ab0000/ffff0000ffff0000)
1744 OXM_OF_METADATA(1234567890abcdef)
1745 <any>
1746
1747 # eth dst
1748 OXM_OF_ETH_DST(0002e30f80a4)
1749 OXM_OF_ETH_DST_W(010000000000/010000000000)
1750 OXM_OF_ETH_DST_W(000000000000/010000000000)
1751 OXM_OF_ETH_DST_W(010000000000/010000000000)
1752 OXM_OF_ETH_DST(0002e30f80a4)
1753 <any>
1754 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
1755
1756 # eth src
1757 OXM_OF_ETH_SRC(020898456ddb)
1758
1759 # eth type
1760 OXM_OF_ETH_TYPE(0800)
1761 OXM_OF_IN_PORT(00000012), OXM_OF_ETH_TYPE(0800)
1762
1763 # vlan
1764 nx_pull_match() returned error OFPBMC_DUP_FIELD
1765 nx_pull_match() returned error OFPBMC_BAD_VALUE
1766 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1767 OXM_OF_VLAN_VID(0000)
1768 OXM_OF_VLAN_VID(1123)
1769 OXM_OF_VLAN_VID(1123), OXM_OF_VLAN_PCP(01)
1770 OXM_OF_VLAN_VID(0123)
1771 OXM_OF_VLAN_VID_W(0123/0123)
1772 OXM_OF_VLAN_VID_W(0123/0123)
1773 OXM_OF_VLAN_VID_W(0123/1123)
1774 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1775 OXM_OF_VLAN_VID(1123)
1776 OXM_OF_VLAN_VID(1123)
1777 <any>
1778 OXM_OF_VLAN_VID_W(1103/1f0f)
1779 OXM_OF_VLAN_VID_W(1103/1f0f), OXM_OF_VLAN_PCP(01)
1780 OXM_OF_VLAN_VID_W(1000/1000)
1781 OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01)
1782
1783 # IP TOS
1784 nx_pull_match() returned error OFPBMC_BAD_VALUE
1785 nx_pull_match() returned error OFPBMC_BAD_VALUE
1786 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_DSCP(3f)
1787 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1788
1789 # IP ECN
1790 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_ECN(03)
1791 nx_pull_match() returned error OFPBMC_BAD_VALUE
1792 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1793
1794 # IP protocol
1795 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01)
1796 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(05)
1797 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1798
1799 # IP source
1800 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC(ac100014)
1801 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC_W(c0a80000/ffff0000)
1802 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC(c0a80000)
1803 OXM_OF_ETH_TYPE(0800)
1804 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1805 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1806
1807 # IP destination
1808 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST(ac100014)
1809 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST_W(c0a80000/ffff0000)
1810 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST(c0a88012)
1811 OXM_OF_ETH_TYPE(0800)
1812 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1813 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1814
1815 # TCP source port
1816 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC(4231)
1817 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC_W(5050/f0f0)
1818 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC(5050)
1819 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06)
1820 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1821
1822 # TCP destination port
1823 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST(4231)
1824 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST_W(fde0/fff0)
1825 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST(fde0)
1826 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06)
1827 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1828
1829 # UDP source port
1830 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC(8732)
1831 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC_W(0132/01ff)
1832 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC(0132)
1833 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11)
1834 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1835
1836 # UDP destination port
1837 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST(1782)
1838 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST_W(5005/f00f)
1839 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST(5005)
1840 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11)
1841 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1842
1843 # ICMP type
1844 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_TYPE(12)
1845 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1846
1847 # ICMP code
1848 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_CODE(12)
1849 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1850 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1851 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1852
1853 # ARP opcode
1854 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_OP(0001)
1855 nx_pull_match() returned error OFPBMC_BAD_VALUE
1856 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1857 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1858 nx_pull_match() returned error OFPBMC_DUP_FIELD
1859
1860 # ARP source protocol address
1861 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA(ac100014)
1862 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA_W(c0a81200/ffffff00)
1863 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA(c0a81234)
1864 OXM_OF_ETH_TYPE(0806)
1865 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1866 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1867
1868 # ARP destination protocol address
1869 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA(ac100014)
1870 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA_W(c0a81200/ffffff00)
1871 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA(c0a812fe)
1872 OXM_OF_ETH_TYPE(0806)
1873 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1874 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1875
1876 # ARP source hardware address
1877 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA(0002e30f80a4)
1878 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1879 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1880 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA(0002e30f80a4)
1881 OXM_OF_ETH_TYPE(0806)
1882 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA_W(000000000004/00000000000f)
1883
1884 # ARP destination hardware address
1885 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA(0002e30f80a4)
1886 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1887 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1888 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA(0002e30f80a4)
1889 OXM_OF_ETH_TYPE(0806)
1890 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA_W(000000000004/00000000000f)
1891
1892 # IPv6 source
1893 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1894 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1895 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1896 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC(20010db83c4d00010000000000000000)
1897 OXM_OF_ETH_TYPE(86dd)
1898 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1899
1900 # IPv6 destination
1901 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1902 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1903 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1904 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST(20010db83c4d00010000000000000000)
1905 OXM_OF_ETH_TYPE(86dd)
1906 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1907
1908 # IPv6 Flow Label
1909 nx_pull_match() returned error OFPBMC_BAD_VALUE
1910 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1911 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
1912 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL_W(0000000f/0000000f)
1913 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
1914 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL_W(00000000/000ffff0)
1915 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
1916 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
1917 OXM_OF_ETH_TYPE(86dd)
1918
1919 # ND source hardware address
1920 OXM_OF_ETH_TYPE(86dd), OXM_OF_IP_PROTO(3a), OXM_OF_ICMPV6_TYPE(87), OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005), OXM_OF_IPV6_ND_SLL(0002e30f80a4)
1921 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1922 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1923 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1924
1925 # ND destination hardware address
1926 OXM_OF_ETH_TYPE(86dd), OXM_OF_IP_PROTO(3a), OXM_OF_ICMPV6_TYPE(88), OXM_OF_IPV6_ND_TARGET(20010db83c4d00010002000300040005), OXM_OF_IPV6_ND_TLL(0002e30f80a4)
1927 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1928 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1929 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1930
1931 # Invalid field number.
1932 nx_pull_match() returned error OFPBMC_BAD_FIELD
1933 ], [stderr])
1934
1935 # Check that at least the first warning made it.  (It's rate-limited
1936 # so a variable number could show up, especially under valgrind etc.)
1937 AT_CHECK([grep 'has 1-bits in value' stderr | sed 1q], [0], [dnl
1938 nx_match|WARN|NXM/OXM entry OXM_OF_METADATA_W(1234567890abcdef/ffff0000ffff0000) has 1-bits in value for bits wildcarded by the mask.  (Future versions of OVS may report this as an OpenFlow error.)
1939 ])
1940
1941 # Check that there wasn't any other stderr output.
1942 AT_CHECK([grep -v 'has 1-bits in value' stderr], [1])
1943 AT_CLEANUP
1944
1945 AT_SETUP([ovs-ofctl parse-oxm loose])
1946 AT_KEYWORDS([oxm])
1947 AT_DATA([oxm.txt], [dnl
1948 OXM_OF_IN_PORT(00000001), 01020304(1111/2222), OXM_OF_ETH_TYPE(0800)
1949 ])
1950
1951 AT_CHECK([ovs-ofctl --strict parse-oxm < oxm.txt], [0], [dnl
1952 nx_pull_match() returned error OFPBMC_BAD_FIELD
1953 ])
1954
1955 AT_CHECK([ovs-ofctl parse-oxm < oxm.txt], [0], [dnl
1956 OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
1957 ])
1958 AT_CLEANUP
1959
1960 dnl Check all of the patterns mentioned in the "VLAN Matching" section
1961 dnl in the DESIGN file at top level.
1962 AT_SETUP([ovs-ofctl check-vlan])
1963 AT_KEYWORDS([VLAN])
1964
1965 dnl [1]
1966 AT_CHECK([ovs-ofctl check-vlan 0000 0000], [0], [dnl
1967  -> 0000/0000
1968 NXM: <any> -> 0000/0000
1969 OXM: <any> -> 0000/0000,--
1970 OF1.0: 0000/1,00/1 -> 0000/0000
1971 OF1.1: 0000/1,00/1 -> 0000/0000
1972 ])
1973
1974 dnl [2]
1975 AT_CHECK([ovs-ofctl check-vlan 0000 ffff], [0], [dnl
1976 vlan_tci=0x0000 -> 0000/ffff
1977 NXM: NXM_OF_VLAN_TCI(0000) -> 0000/ffff
1978 OXM: OXM_OF_VLAN_VID(0000) -> 0000/1fff,--
1979 OF1.0: ffff/0,00/1 -> 0000/ffff
1980 OF1.1: ffff/0,00/1 -> 0000/ffff
1981 ])
1982
1983 dnl [3]
1984 AT_CHECK([ovs-ofctl check-vlan 1abc 1fff], [0], [dnl
1985 dl_vlan=2748 -> 1abc/1fff
1986 NXM: NXM_OF_VLAN_TCI_W(1abc/1fff) -> 1abc/1fff
1987 OXM: OXM_OF_VLAN_VID(1abc) -> 1abc/1fff,--
1988 OF1.0: 0abc/0,00/1 -> 1abc/1fff
1989 OF1.1: 0abc/0,00/1 -> 1abc/1fff
1990 ])
1991
1992 dnl [4]
1993 AT_CHECK([ovs-ofctl check-vlan b000 f000], [0], [dnl
1994 dl_vlan_pcp=5 -> b000/f000
1995 NXM: NXM_OF_VLAN_TCI_W(b000/f000) -> b000/f000
1996 OXM: OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(05) -> 1000/1000,05
1997 OF1.0: 0000/1,05/0 -> b000/f000
1998 OF1.1: fffe/0,05/0 -> b000/f000
1999 ])
2000
2001 dnl [5]
2002 AT_CHECK([ovs-ofctl check-vlan babc ffff], [0], [dnl
2003 dl_vlan=2748,dl_vlan_pcp=5 -> babc/ffff
2004 NXM: NXM_OF_VLAN_TCI(babc) -> babc/ffff
2005 OXM: OXM_OF_VLAN_VID(1abc), OXM_OF_VLAN_PCP(05) -> 1abc/1fff,05
2006 OF1.0: 0abc/0,05/0 -> babc/ffff
2007 OF1.1: 0abc/0,05/0 -> babc/ffff
2008 ])
2009
2010 dnl [6]
2011 AT_CHECK([ovs-ofctl check-vlan 0000 0fff], [0], [dnl
2012 vlan_tci=0x0000/0x0fff -> 0000/0fff
2013 NXM: NXM_OF_VLAN_TCI_W(0000/0fff) -> 0000/0fff
2014 OXM: OXM_OF_VLAN_VID_W(0000/0fff) -> 0000/0fff,--
2015 OF1.0: 0000/0,00/1 -> 1000/1fff
2016 OF1.1: 0000/0,00/1 -> 1000/1fff
2017 ])
2018
2019 dnl [7]
2020 AT_CHECK([ovs-ofctl check-vlan 0000 f000], [0], [dnl
2021 vlan_tci=0x0000/0xf000 -> 0000/f000
2022 NXM: NXM_OF_VLAN_TCI_W(0000/f000) -> 0000/f000
2023 OXM: OXM_OF_VLAN_VID_W(0000/1000) -> 0000/1000,--
2024 OF1.0: ffff/0,00/1 -> 0000/ffff
2025 OF1.1: ffff/0,00/1 -> 0000/ffff
2026 ])
2027
2028 dnl [8]
2029 AT_CHECK([ovs-ofctl check-vlan 0000 efff], [0], [dnl
2030 vlan_tci=0x0000/0xefff -> 0000/efff
2031 NXM: NXM_OF_VLAN_TCI_W(0000/efff) -> 0000/efff
2032 OXM: OXM_OF_VLAN_VID_W(0000/0fff) -> 0000/0fff,--
2033 OF1.0: 0000/0,00/0 -> 1000/ffff
2034 OF1.1: 0000/0,00/0 -> 1000/ffff
2035 ])
2036
2037 dnl [9]
2038 AT_CHECK([ovs-ofctl check-vlan 1001 1001], [0], [dnl
2039 vlan_tci=0x1001/0x1001 -> 1001/1001
2040 NXM: NXM_OF_VLAN_TCI_W(1001/1001) -> 1001/1001
2041 OXM: OXM_OF_VLAN_VID_W(1001/1001) -> 1001/1001,--
2042 OF1.0: 0001/0,00/1 -> 1001/1fff
2043 OF1.1: 0001/0,00/1 -> 1001/1fff
2044 ])
2045
2046 dnl [10]
2047 AT_CHECK([ovs-ofctl check-vlan 3000 3000], [0], [dnl
2048 vlan_tci=0x3000/0x3000 -> 3000/3000
2049 NXM: NXM_OF_VLAN_TCI_W(3000/3000) -> 3000/3000
2050 OXM: OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01) -> 1000/1000,01
2051 OF1.0: 0000/1,01/0 -> 3000/f000
2052 OF1.1: fffe/0,01/0 -> 3000/f000
2053 ])
2054 AT_CHECK
2055 AT_CLEANUP
2056
2057 dnl Check that "-F openflow10" rejects a flow_mod with unsupported features,
2058 dnl such as tunnels and metadata.
2059 AT_SETUP([ovs-ofctl -F option and NXM features])
2060 AT_CHECK([ovs-ofctl -F openflow10 add-flow dummy tun_id=123,actions=drop],
2061   [1], [], [ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the allowed flow formats (OpenFlow10)
2062 ])
2063 AT_CHECK([ovs-ofctl -F openflow10 add-flow dummy metadata=123,actions=drop],
2064   [1], [], [ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the allowed flow formats (OpenFlow10)
2065 ])
2066 AT_CLEANUP
2067
2068 dnl Check that "-F nxm" really forces add-flow to use the NXM flow format.
2069 dnl (If it doesn't, then either the tun_id won't show up at all, or it will
2070 dnl additionally show up as the top 32 bits of the cookie.)  This checks
2071 dnl for regression against bug #4566.
2072 AT_SETUP([ovs-ofctl -F option with flow_mods])
2073 OVS_VSWITCHD_START
2074 AT_CHECK([ovs-ofctl -F nxm add-flow br0 tun_id=0x12345678,actions=drop])
2075 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0], [dnl
2076 NXST_FLOW reply:
2077  tun_id=0x12345678 actions=drop
2078 ])
2079 OVS_VSWITCHD_STOP
2080 AT_CLEANUP
2081
2082 dnl Check that "-F openflow10" is really honored on dump-flows.
2083 dnl (If it isn't, then dump-flows will show the register match.)
2084 AT_SETUP([ovs-ofctl dump-flows honors -F option])
2085 OVS_VSWITCHD_START
2086 AT_CHECK([ovs-ofctl add-flow br0 reg0=0x12345,actions=drop])
2087 AT_CHECK([ovs-ofctl -F openflow10 dump-flows br0 | ofctl_strip], [0], [dnl
2088 OFPST_FLOW reply:
2089  actions=drop
2090 ])
2091 OVS_VSWITCHD_STOP
2092 AT_CLEANUP
2093
2094 dnl Check that "-F openflow10" fails on dump-flows if the requested match
2095 dnl can't be represented in OpenFlow 1.0.
2096 AT_SETUP([ovs-ofctl dump-flows rejects bad -F option])
2097 OVS_VSWITCHD_START
2098 AT_CHECK([ovs-ofctl -F openflow10 dump-flows unix:br0.mgmt reg0=0xabcdef], [1], [],
2099   [ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the allowed flow formats (OpenFlow10)
2100 ])
2101 OVS_VSWITCHD_STOP
2102 AT_CLEANUP
2103
2104 dnl Check that add-flow reports non-normalized flows (feature #5029).
2105 AT_SETUP([ovs-ofctl add-flow reports non-normalized flows])
2106 OVS_VSWITCHD_START
2107 AT_CHECK([ovs-ofctl TESTABLE_LOG add-flow br0 nw_src=1.2.3.4,actions=5],
2108   [0], [], [dnl
2109 ofp_util|INFO|normalization changed ofp_match, details:
2110 ofp_util|INFO| pre: nw_src=1.2.3.4
2111 ofp_util|INFO|post: @&t@
2112 ])
2113 OVS_VSWITCHD_STOP
2114 AT_CLEANUP
2115
2116 dnl Check that --sort and --rsort works with dump-flows
2117 dnl Default field is 'priority'. Flow entries are displayed based
2118 dnl on field to sort.
2119 AT_SETUP([ovs-ofctl dump-flows with sorting])
2120 OVS_VSWITCHD_START
2121 AT_KEYWORDS([sort])
2122 AT_DATA([allflows.txt], [[
2123 priority=4,in_port=23213 actions=output:42
2124 priority=5,in_port=1029 actions=output:43
2125 priority=7,in_port=1029 actions=output:43
2126 priority=3,in_port=1028 actions=output:44
2127 priority=1,in_port=1026 actions=output:45
2128 priority=6,in_port=1027 actions=output:64
2129 priority=2,in_port=1025 actions=output:47
2130 priority=8,tcp,tp_src=5 actions=drop
2131 priority=9,tcp,tp_src=6 actions=drop
2132 ]])
2133
2134 AT_CHECK([ovs-ofctl add-flows br0 allflows.txt
2135 ], [0], [ignore])
2136 AT_CHECK([ovs-ofctl --sort dump-flows br0 | ofctl_strip], [0], [dnl
2137  priority=1,in_port=1026 actions=output:45
2138  priority=2,in_port=1025 actions=output:47
2139  priority=3,in_port=1028 actions=output:44
2140  priority=4,in_port=23213 actions=output:42
2141  priority=5,in_port=1029 actions=output:43
2142  priority=6,in_port=1027 actions=output:64
2143  priority=7,in_port=1029 actions=output:43
2144  priority=8,tcp,tp_src=5 actions=drop
2145  priority=9,tcp,tp_src=6 actions=drop
2146 ])
2147 AT_CHECK([ovs-ofctl --rsort dump-flows br0 | ofctl_strip], [0], [dnl
2148  priority=9,tcp,tp_src=6 actions=drop
2149  priority=8,tcp,tp_src=5 actions=drop
2150  priority=7,in_port=1029 actions=output:43
2151  priority=6,in_port=1027 actions=output:64
2152  priority=5,in_port=1029 actions=output:43
2153  priority=4,in_port=23213 actions=output:42
2154  priority=3,in_port=1028 actions=output:44
2155  priority=2,in_port=1025 actions=output:47
2156  priority=1,in_port=1026 actions=output:45
2157 ])
2158 AT_CHECK([ovs-ofctl --sort=in_port dump-flows br0 | ofctl_strip], [0], [dnl
2159  priority=2,in_port=1025 actions=output:47
2160  priority=1,in_port=1026 actions=output:45
2161  priority=6,in_port=1027 actions=output:64
2162  priority=3,in_port=1028 actions=output:44
2163  priority=7,in_port=1029 actions=output:43
2164  priority=5,in_port=1029 actions=output:43
2165  priority=4,in_port=23213 actions=output:42
2166  priority=9,tcp,tp_src=6 actions=drop
2167  priority=8,tcp,tp_src=5 actions=drop
2168 ])
2169 AT_CHECK([ovs-ofctl --rsort=in_port dump-flows br0 | ofctl_strip], [0], [dnl
2170  priority=4,in_port=23213 actions=output:42
2171  priority=7,in_port=1029 actions=output:43
2172  priority=5,in_port=1029 actions=output:43
2173  priority=3,in_port=1028 actions=output:44
2174  priority=6,in_port=1027 actions=output:64
2175  priority=1,in_port=1026 actions=output:45
2176  priority=2,in_port=1025 actions=output:47
2177  priority=9,tcp,tp_src=6 actions=drop
2178  priority=8,tcp,tp_src=5 actions=drop
2179 ])
2180 AT_CHECK([ovs-ofctl --sort=tcp_src dump-flows br0 | ofctl_strip], [0], [dnl
2181  priority=8,tcp,tp_src=5 actions=drop
2182  priority=9,tcp,tp_src=6 actions=drop
2183  priority=7,in_port=1029 actions=output:43
2184  priority=6,in_port=1027 actions=output:64
2185  priority=5,in_port=1029 actions=output:43
2186  priority=4,in_port=23213 actions=output:42
2187  priority=3,in_port=1028 actions=output:44
2188  priority=2,in_port=1025 actions=output:47
2189  priority=1,in_port=1026 actions=output:45
2190 ])
2191 AT_CHECK(
2192   [ovs-ofctl --sort=in_port --sort=tcp_src dump-flows br0 | ofctl_strip], [0],
2193   [ priority=2,in_port=1025 actions=output:47
2194  priority=1,in_port=1026 actions=output:45
2195  priority=6,in_port=1027 actions=output:64
2196  priority=3,in_port=1028 actions=output:44
2197  priority=7,in_port=1029 actions=output:43
2198  priority=5,in_port=1029 actions=output:43
2199  priority=4,in_port=23213 actions=output:42
2200  priority=8,tcp,tp_src=5 actions=drop
2201  priority=9,tcp,tp_src=6 actions=drop
2202 ])
2203 OVS_VSWITCHD_STOP
2204 AT_CLEANUP
2205
2206 AT_SETUP([ovs-ofctl diff-flows])
2207 OVS_VSWITCHD_START
2208
2209 # Add tons of flows to br0.
2210 for i in `seq 0 1023`; do echo "dl_vlan=$i,actions=drop"; done > add-flows.txt
2211 AT_CHECK([ovs-ofctl add-flows br0 add-flows.txt])
2212
2213 # Dump them and compare against what we expect by hand, then with diff-flows.
2214 for i in `seq 0 1023`; do echo " dl_vlan=$i actions=drop"; done | sort > expout
2215 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sed '/NXST_FLOW/d' | sort],
2216   [0], [expout])
2217 AT_CHECK([ovs-ofctl diff-flows br0 add-flows.txt])
2218
2219 # Remove even-numbered flows, compare again.
2220 for i in `seq 0 1023 2`; do echo "dl_vlan=$i"; done > del-flows.txt
2221 AT_CHECK([ovs-ofctl del-flows br0 - < del-flows.txt])
2222 for i in `seq 0 1023 2`; do echo "+dl_vlan=$i actions=drop"; done | sort > expout
2223 AT_CHECK([ovs-ofctl diff-flows br0 add-flows.txt | sort], [0], [expout])
2224 for i in `seq 0 1023 2`; do echo "-dl_vlan=$i actions=drop"; done | sort > expout
2225 AT_CHECK([ovs-ofctl diff-flows add-flows.txt br0 | sort], [0], [expout])
2226
2227 OVS_VSWITCHD_STOP
2228 AT_CLEANUP
2229
2230 dnl ofpacts that differ bytewise don't necessarily differ when
2231 dnl converted to another representation, such as OpenFlow 1.0
2232 dnl or to a string.  "resubmit(,1)" is an example of an action
2233 dnl of this type: "ofpact_resubmit"s can differ in their "compat"
2234 dnl values even though this doesn't affect the string format.
2235 dnl
2236 dnl This test checks that "ovs-ofctl diff-flows" doesn't report
2237 dnl false ofpacts differences.
2238 AT_SETUP([ovs-ofctl diff-flows - suppress false differences])
2239 OVS_VSWITCHD_START
2240 AT_DATA([flows.txt], [actions=resubmit(,1)
2241 ])
2242 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2243 AT_CHECK([ovs-ofctl diff-flows br0 flows.txt])
2244 AT_CHECK([ovs-ofctl add-flow br0 idle_timeout=60,dl_vlan=9,actions=output:1])
2245 AT_CHECK([ovs-ofctl diff-flows br0 flows.txt], [2], [dnl
2246 -dl_vlan=9 idle_timeout=60 actions=output:1
2247 ])
2248 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=120,cookie=1234,dl_vlan=9,actions=output:1])
2249 AT_CHECK([ovs-ofctl diff-flows flows.txt br0], [2], [dnl
2250 +dl_vlan=9 cookie=0x4d2 hard_timeout=120 actions=output:1
2251 ])
2252 OVS_VSWITCHD_STOP
2253 AT_CLEANUP
2254
2255 AT_SETUP([ovs-ofctl -F and -O interaction])
2256 AT_CHECK([ovs-ofctl -F oxm -O openflow10], [1], [],
2257   [ovs-ofctl: None of the enabled OpenFlow versions (OpenFlow10) supports any of the enabled flow formats (OXM).  (Use -O to enable additional OpenFlow versions or -F to enable additional flow formats.)
2258 ])
2259 AT_CHECK([ovs-ofctl -F oxm -O openflow11], [1], [],
2260   [ovs-ofctl: None of the enabled OpenFlow versions (OpenFlow11) supports any of the enabled flow formats (OXM).  (Use -O to enable additional OpenFlow versions or -F to enable additional flow formats.)
2261 ])
2262 AT_CHECK([ovs-ofctl -F oxm -O openflow10,openflow11], [1], [],
2263   [ovs-ofctl: None of the enabled OpenFlow versions (OpenFlow10, OpenFlow11) supports any of the enabled flow formats (OXM).  (Use -O to enable additional OpenFlow versions or -F to enable additional flow formats.)
2264 ])
2265 AT_CHECK([ovs-ofctl -F oxm -O openflow10,openflow12], [1], [],
2266  [ovs-ofctl: missing command name; use --help for help
2267 ])
2268 AT_CHECK([ovs-ofctl -F oxm -O openflow12], [1], [],
2269   [ovs-ofctl: missing command name; use --help for help
2270 ])
2271 AT_CHECK([ovs-ofctl -F oxm -O openflow13], [1], [],
2272   [ovs-ofctl: missing command name; use --help for help
2273 ])
2274 AT_CLEANUP