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