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