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