28bca14a20a297a6465686ba7596ce06337848f2
[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     'tun_gbp_id=0                                NXM,OXM' \
17     'tun_gbp_id=0/0x1                            NXM,OXM' \
18     'tun_gbp_flags=0                             NXM,OXM' \
19     'tun_gbp_flags=0/0x1                         NXM,OXM' \
20     'tun_metadata0=0                             NXM,OXM' \
21     'tun_metadata0=0/0x1                         NXM,OXM' \
22     'metadata=0                                  NXM,OXM,OpenFlow11' \
23     'metadata=1/1                                NXM,OXM,OpenFlow11' \
24     'in_port=1                                   any' \
25     'skb_priority=0                              none' \
26     'pkt_mark=1                                  NXM,OXM' \
27     'pkt_mark=1/1                                NXM,OXM' \
28     'reg0=0                                      NXM,OXM' \
29     'reg0=0/1                                    NXM,OXM' \
30     'reg1=1                                      NXM,OXM' \
31     'reg1=1/1                                    NXM,OXM' \
32     'reg2=2                                      NXM,OXM' \
33     'reg2=2/1                                    NXM,OXM' \
34     'reg3=3                                      NXM,OXM' \
35     'reg3=3/1                                    NXM,OXM' \
36     'reg4=4                                      NXM,OXM' \
37     'reg4=4/1                                    NXM,OXM' \
38     'reg5=5                                      NXM,OXM' \
39     'reg5=5/1                                    NXM,OXM' \
40     'reg6=6                                      NXM,OXM' \
41     'reg6=6/1                                    NXM,OXM' \
42     'reg7=7                                      NXM,OXM' \
43     'reg7=7/1                                    NXM,OXM' \
44     'xreg0=0                                     NXM,OXM' \
45     'xreg0=0/1                                   NXM,OXM' \
46     'xreg1=1                                     NXM,OXM' \
47     'xreg1=1/1                                   NXM,OXM' \
48     'xreg2=2                                     NXM,OXM' \
49     'xreg2=2/3                                   NXM,OXM' \
50     'xreg3=3                                     NXM,OXM' \
51     'xreg3=3/5                                   NXM,OXM' \
52     'dl_src=00:11:22:33:44:55                    any' \
53     'dl_src=00:11:22:33:44:55/00:ff:ff:ff:ff:ff  NXM,OXM,OpenFlow11' \
54     'dl_dst=00:11:22:33:44:55                    any' \
55     'dl_dst=00:11:22:33:44:55/00:ff:ff:ff:ff:ff  NXM,OXM,OpenFlow11' \
56     'dl_type=0x1234                              any' \
57     'dl_type=0x0800                              any' \
58     'dl_type=0x0806                              any' \
59     'dl_type=0x86dd                              any' \
60     'vlan_tci=0                                  any' \
61     'vlan_tci=0x1009                             any' \
62     'vlan_tci=0x1009/0x1                         NXM,OXM' \
63     'dl_vlan=9                                   any' \
64     'vlan_vid=11                                 any' \
65     'vlan_vid=11/0x1                             NXM,OXM' \
66     'dl_vlan_pcp=6                               any' \
67     'vlan_pcp=5                                  any' \
68     'mpls,mpls_label=5                           NXM,OXM,OpenFlow11' \
69     'mpls,mpls_tc=1                              NXM,OXM,OpenFlow11' \
70     'mpls,mpls_bos=0                             NXM,OXM' \
71     'ip,ip_src=1.2.3.4                           any' \
72     'ip,ip_src=192.168.0.0/24                    any' \
73     'ip,ip_src=192.0.168.0/255.0.255.0           NXM,OXM,OpenFlow11' \
74     'ip,ip_dst=1.2.3.4                           any' \
75     'ip,ip_dst=192.168.0.0/24                    any' \
76     'ip,ip_dst=192.0.168.0/255.0.255.0           NXM,OXM,OpenFlow11' \
77     'ipv6,ipv6_src=::1                           NXM,OXM' \
78     'ipv6,ipv6_src=0:0:0:0:0:0:0:1/::1           NXM,OXM' \
79     'ipv6,ipv6_dst=::1                           NXM,OXM' \
80     'ipv6,ipv6_dst=0:0:0:0:0:0:0:1/::1           NXM,OXM' \
81     'ipv6,ipv6_label=5                           NXM,OXM' \
82     'ipv6,ipv6_label=5/1                         NXM,OXM' \
83     'ip,nw_proto=1                               any' \
84     'ipv6,nw_proto=1                             NXM,OXM' \
85     'ip,nw_tos=0xf0                              any' \
86     'ipv6,nw_tos=0xf0                            NXM,OXM' \
87     'ip,ip_dscp=0x3c                             any' \
88     'ipv6,ip_dscp=0x3c                           NXM,OXM' \
89     'ip,nw_ecn=1                                 NXM,OXM' \
90     'ipv6,nw_ecn=1                               NXM,OXM' \
91     'ip,nw_ttl=5                                 NXM,OXM' \
92     'ipv6,nw_ttl=5                               NXM,OXM' \
93     'ip,ip_frag=no                               NXM,OXM' \
94     'ipv6,ip_frag=no                             NXM,OXM' \
95     'arp,arp_op=0                                any' \
96     'arp,arp_spa=1.2.3.4                         any' \
97     'arp,arp_spa=1.2.3.4/0.0.0.1                 NXM,OXM,OpenFlow11' \
98     'arp,arp_tpa=1.2.3.4                         any' \
99     'arp,arp_tpa=1.2.3.4/0.0.0.1                 NXM,OXM,OpenFlow11' \
100     'arp,arp_sha=00:11:22:33:44:55               NXM,OXM' \
101     'arp,arp_sha=00:11:22:33:44:55/00:ff:ff:ff:ff:ff NXM,OXM' \
102     'arp,arp_tha=00:11:22:33:44:55               NXM,OXM' \
103     'arp,arp_tha=00:11:22:33:44:55/00:ff:ff:ff:ff:ff NXM,OXM' \
104     'tcp,tcp_src=80                              any' \
105     'tcp,tcp_src=0x1000/0x1000                   NXM,OXM' \
106     'tcp6,tcp_src=80                             NXM,OXM' \
107     'tcp6,tcp_src=0x1000/0x1000                  NXM,OXM' \
108     'tcp,tcp_dst=80                              any' \
109     'tcp,tcp_dst=0x1000/0x1000                   NXM,OXM' \
110     'tcp6,tcp_dst=80                             NXM,OXM' \
111     'tcp6,tcp_dst=0x1000/0x1000                  NXM,OXM' \
112     'udp,udp_src=80                              any' \
113     'udp,udp_src=0x1000/0x1000                   NXM,OXM' \
114     'udp6,udp_src=80                             NXM,OXM' \
115     'udp6,udp_src=0x1000/0x1000                  NXM,OXM' \
116     'udp,udp_dst=80                              any' \
117     'udp,udp_dst=0x1000/0x1000                   NXM,OXM' \
118     'udp6,udp_dst=80                             NXM,OXM' \
119     'udp6,udp_dst=0x1000/0x1000                  NXM,OXM' \
120     'icmp,icmp_type=1                            any' \
121     'icmp,icmp_code=2                            any' \
122     'icmp6,icmpv6_type=1                         NXM,OXM' \
123     'icmp6,icmpv6_code=2                         NXM,OXM'
124 do
125     set $test_case
126     echo
127     echo "### test case: '$1' should have usable protocols '$2'"
128     if test "$2" = none; then
129       AT_CHECK([ovs-ofctl parse-flow "$1,actions=drop"], [1],
130                [usable protocols: none
131 ],
132                [ovs-ofctl: no usable protocol
133 ])
134     else
135       AT_CHECK_UNQUOTED([ovs-ofctl parse-flow "$1,actions=drop" | sed 1q], [0],
136                         [usable protocols: $2
137 ])
138     fi
139 done
140 AT_CLEANUP
141
142 AT_SETUP([ovs-ofctl parse-flows (OpenFlow 1.0)])
143 AT_DATA([flows.txt], [[
144 # comment
145 tcp,tp_src=123,actions=flood
146 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
147 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
148 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
149 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
150 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
151 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
152 ip,actions=set_field:10.4.3.77->ip_src
153 sctp actions=drop
154 sctp actions=drop
155 in_port=0 actions=resubmit:0
156 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
157 ]])
158
159 AT_CHECK([ovs-ofctl parse-flows flows.txt
160 ], [0], [stdout])
161 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
162 [[usable protocols: any
163 chosen protocol: OpenFlow10-table_id
164 OFPT_FLOW_MOD: ADD tcp,tp_src=123 actions=FLOOD
165 OFPT_FLOW_MOD: ADD in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
166 OFPT_FLOW_MOD: ADD udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
167 OFPT_FLOW_MOD: ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
168 OFPT_FLOW_MOD: ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
169 OFPT_FLOW_MOD: ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
170 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
171 OFPT_FLOW_MOD: ADD ip actions=mod_nw_src:10.4.3.77
172 OFPT_FLOW_MOD: ADD sctp actions=drop
173 OFPT_FLOW_MOD: ADD sctp actions=drop
174 OFPT_FLOW_MOD: ADD in_port=0 actions=resubmit:0
175 OFPT_FLOW_MOD: ADD actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
176 ]])
177 AT_CLEANUP
178
179 AT_SETUP([ovs-ofctl parse-flows (OpenFlow 1.1)])
180 AT_DATA([flows.txt], [[
181 # comment
182 tcp,tp_src=123,actions=flood
183 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
184 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
185 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
186 udp,nw_src=192.168.0.3,tp_dst=53 actions=mod_nw_ecn:2,output:1
187 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
188 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
189 ip,actions=mod_nw_ttl:1,set_field:10.4.3.77->ip_src
190 sctp actions=drop
191 sctp actions=drop
192 in_port=0 actions=resubmit:0
193 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
194 ]])
195
196 AT_CHECK([ovs-ofctl --protocols OpenFlow11 parse-flows flows.txt
197 ], [0], [stdout])
198 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
199 [[usable protocols: any
200 chosen protocol: OpenFlow11
201 OFPT_FLOW_MOD (OF1.1): ADD tcp,tp_src=123 actions=FLOOD
202 OFPT_FLOW_MOD (OF1.1): ADD in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
203 OFPT_FLOW_MOD (OF1.1): ADD udp,dl_vlan_pcp=7 idle:5 actions=pop_vlan,output:0
204 OFPT_FLOW_MOD (OF1.1): ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
205 OFPT_FLOW_MOD (OF1.1): ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=mod_nw_ecn:2,output:1
206 OFPT_FLOW_MOD (OF1.1): ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
207 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
208 OFPT_FLOW_MOD (OF1.1): ADD ip actions=mod_nw_ttl:1,mod_nw_src:10.4.3.77
209 OFPT_FLOW_MOD (OF1.1): ADD sctp actions=drop
210 OFPT_FLOW_MOD (OF1.1): ADD sctp actions=drop
211 OFPT_FLOW_MOD (OF1.1): ADD in_port=0 actions=resubmit:0
212 OFPT_FLOW_MOD (OF1.1): ADD actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
213 ]])
214 AT_CLEANUP
215
216 AT_SETUP([ovs-ofctl parse-flows (OpenFlow 1.2)])
217 AT_DATA([flows.txt], [[
218 # comment
219 tcp,tp_src=123,actions=flood
220 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=mod_vlan_vid:7,mod_vlan_pcp:2
221 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
222 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
223 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
224 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
225 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
226 ipv6,actions=set_field:fe80:0123:4567:890a:a6ba:dbff:fefe:59fa->ipv6_src
227 sctp actions=set_field:3334->sctp_src
228 sctp actions=set_field:4445->sctp_dst
229 tcp actions=mod_tp_dst:1234
230 udp actions=mod_tp_src:1111
231 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
232 in_port=0 actions=mod_dl_src:11:22:33:44:55:66,mod_dl_dst:10:20:30:40:50:60
233 in_port=0 actions=resubmit:0
234 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
235 ]])
236
237 AT_CHECK([ovs-ofctl --protocols OpenFlow12 parse-flows flows.txt
238 ], [0], [stdout])
239 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
240 [[usable protocols: NXM,OXM
241 chosen protocol: OXM-OpenFlow12
242 OFPT_FLOW_MOD (OF1.2): ADD tcp,tp_src=123 actions=FLOOD
243 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
244 OFPT_FLOW_MOD (OF1.2): ADD udp,dl_vlan_pcp=7 idle:5 actions=pop_vlan,output:0
245 OFPT_FLOW_MOD (OF1.2): ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
246 OFPT_FLOW_MOD (OF1.2): ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
247 OFPT_FLOW_MOD (OF1.2): ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
248 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
249 OFPT_FLOW_MOD (OF1.2): ADD ipv6 actions=set_field:fe80:123:4567:890a:a6ba:dbff:fefe:59fa->ipv6_src
250 OFPT_FLOW_MOD (OF1.2): ADD sctp actions=set_field:3334->sctp_src
251 OFPT_FLOW_MOD (OF1.2): ADD sctp actions=set_field:4445->sctp_dst
252 OFPT_FLOW_MOD (OF1.2): ADD tcp actions=set_field:1234->tcp_dst
253 OFPT_FLOW_MOD (OF1.2): ADD udp actions=set_field:1111->udp_src
254 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
255 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
256 OFPT_FLOW_MOD (OF1.2): ADD in_port=0 actions=resubmit:0
257 OFPT_FLOW_MOD (OF1.2): ADD actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
258 ]])
259 AT_CLEANUP
260
261 AT_SETUP([ovs-ofctl parse-flow with invalid mask])
262 for test_case in \
263     'tun_tos 1/1' \
264     'tun_ttl 1/1' \
265     'skb_priority 1/1' \
266     'eth_type 0x1234/0x1' \
267     'dl_vlan 9/0x1' \
268     'dl_vlan_pcp 6/0x1' \
269     'vlan_pcp 5/0x1' \
270     'mpls mpls_label 5/0x1' \
271     'mpls mpls_tc 1/0x1' \
272     'mpls mpls_bos 1/0x1' \
273     'ip nw_proto 1/1' \
274     'ipv6 nw_proto 1/1' \
275     'ip nw_tos 0xf0/0xf0' \
276     'ipv6 nw_tos 0xf0/0xf0' \
277     'ip ip_dscp 0x3c/0xf0' \
278     'ipv6 ip_dscp 0x3c/0xf0' \
279     'ip nw_ecn 1/1' \
280     'ipv6 nw_ecn 1/1' \
281     'ip nw_ttl 5/1' \
282     'ipv6 nw_ttl 5/1' \
283     'arp arp_op 0/1' \
284     'icmp icmp_type 1/1' \
285     'icmp icmp_code 2/1' \
286     'icmp6 icmpv6_code 2/1'
287 do
288     set $test_case
289     if test $# = 3; then
290         prereq=$1, field=$2 value=$3
291     else
292         prereq= field=$1 value=$2
293     fi
294     AT_CHECK_UNQUOTED([ovs-ofctl parse-flow "$prereq$field=$value,actions=drop"], [1], [],
295 [ovs-ofctl: $value: invalid mask for field $field
296 ])
297 done
298 AT_CLEANUP
299
300 AT_SETUP([ovs-ofctl action inconsistency (OpenFlow 1.1)])
301 AT_CHECK([ovs-ofctl --protocols OpenFlow11 add-flow br0 'ip actions=mod_tp_dst:1234'
302 ], [1], [stdout], [ovs-ofctl: none of the usable flow formats (OpenFlow10,NXM) is among the allowed flow formats (OpenFlow11)
303 ])
304 AT_CLEANUP
305
306 AT_SETUP([ovs-ofctl parse-flows (With Tunnel-Parameters)])
307 AT_DATA([flows.txt], [[
308 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
309 ]])
310
311 AT_CHECK([ovs-ofctl parse-flows flows.txt
312 ], [1], [usable protocols: none
313 ], [stderr])
314
315 AT_CLEANUP
316
317
318 AT_SETUP([ovs-ofctl parse-flows (skb_priority)])
319 AT_DATA([flows.txt], [[
320 skb_priority=0x12341234,tcp,tp_src=123,actions=flood
321 ]])
322
323 AT_CHECK([ovs-ofctl parse-flows flows.txt
324 ], [1], [usable protocols: none
325 ], [stderr])
326
327 AT_CLEANUP
328
329
330 AT_SETUP([ovs-ofctl parse-flows (NXM)])
331 AT_DATA([flows.txt], [[
332 # comment
333 tcp,tp_src=123,actions=flood
334 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
335 pkt_mark=0xbb,actions=set_field:0xaa->pkt_mark
336 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
337 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
338 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
339 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
340 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
341 tcp,tp_src=0x1230/0xfff0,tun_id=0x1234,cookie=0x5678,actions=flood
342 actions=set_tunnel:0x1234,set_tunnel64:0x9876,set_tunnel:0x123456789
343 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])
344 table=1,actions=drop
345 tun_id=0x1234000056780000/0xffff0000ffff0000,actions=drop
346 metadata=0x1234ffff5678ffff/0xffff0000ffff0000,actions=drop
347 actions=bundle(eth_src,50,active_backup,ofport,slaves:1)
348 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:2,3)
349 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:)
350 actions=output:1,bundle(eth_src,0,hrw,ofport,slaves:1),output:2
351 actions=bundle_load(eth_src,50,active_backup,ofport,NXM_NX_REG0[],slaves:1)
352 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
353 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:[2,3])
354 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..30],slaves:)
355 actions=output:1,bundle_load(eth_src,0,hrw,ofport,NXM_NX_REG0[16..31],slaves:1),output:2
356 actions=resubmit:1,resubmit(2),resubmit(,3),resubmit(2,3)
357 send_flow_rem,actions=output:1,output:NXM_NX_REG0[],output:2,output:NXM_NX_REG1[16..31],output:3
358 check_overlap,actions=output:1,exit,output:2
359 tcp,actions=fin_timeout(idle_timeout=5,hard_timeout=15)
360 actions=controller(max_len=123,reason=invalid_ttl,id=555)
361 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
362 ]])
363
364 AT_CHECK([ovs-ofctl parse-flows flows.txt
365 ], [0], [stdout])
366 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
367 [[usable protocols: OXM,NXM+table_id
368 chosen protocol: NXM+table_id
369 NXT_FLOW_MOD: ADD table:255 tcp,tp_src=123 actions=FLOOD
370 NXT_FLOW_MOD: ADD table:255 in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
371 NXT_FLOW_MOD: ADD table:255 pkt_mark=0xbb actions=load:0xaa->NXM_NX_PKT_MARK[]
372 NXT_FLOW_MOD: ADD table:255 udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
373 NXT_FLOW_MOD: ADD table:255 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
374 NXT_FLOW_MOD: ADD table:255 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
375 NXT_FLOW_MOD: ADD table:255 priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
376 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
377 NXT_FLOW_MOD: ADD table:255 tcp,tun_id=0x1234,tp_src=0x1230/0xfff0 cookie:0x5678 actions=FLOOD
378 NXT_FLOW_MOD: ADD table:255 actions=set_tunnel:0x1234,set_tunnel64:0x9876,set_tunnel64:0x123456789
379 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])
380 NXT_FLOW_MOD: ADD table:1 actions=drop
381 NXT_FLOW_MOD: ADD table:255 tun_id=0x1234000056780000/0xffff0000ffff0000 actions=drop
382 NXT_FLOW_MOD: ADD table:255 metadata=0x1234000056780000/0xffff0000ffff0000 actions=drop
383 NXT_FLOW_MOD: ADD table:255 actions=bundle(eth_src,50,active_backup,ofport,slaves:1)
384 NXT_FLOW_MOD: ADD table:255 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:2,3)
385 NXT_FLOW_MOD: ADD table:255 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:)
386 NXT_FLOW_MOD: ADD table:255 actions=output:1,bundle(eth_src,0,hrw,ofport,slaves:1),output:2
387 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(eth_src,50,active_backup,ofport,NXM_NX_REG0[],slaves:1)
388 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
389 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
390 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..30],slaves:)
391 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
392 NXT_FLOW_MOD: ADD table:255 actions=resubmit:1,resubmit:2,resubmit(,3),resubmit(2,3)
393 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
394 NXT_FLOW_MOD: ADD table:255 check_overlap actions=output:1,exit,output:2
395 NXT_FLOW_MOD: ADD table:255 tcp actions=fin_timeout(idle_timeout=5,hard_timeout=15)
396 NXT_FLOW_MOD: ADD table:255 actions=controller(reason=invalid_ttl,max_len=123,id=555)
397 NXT_FLOW_MOD: ADD table:255 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
398 ]])
399 AT_CLEANUP
400
401 AT_SETUP([ovs-ofctl -F nxm parse-flows])
402 AT_DATA([flows.txt], [
403 # comment
404 tcp,tp_src=123,actions=flood
405 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
406 arp,dl_src=00:0A:E4:25:6B:B0,arp_sha=00:0A:E4:25:6B:B0 actions=drop
407 ipv6,ipv6_label=0x12345 actions=2
408 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=3
409 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5/64 actions=4
410 ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:5/127 actions=5
411 tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop 
412 udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop 
413 in_port=3 icmp6,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
414 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
415 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
416 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
417 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571 actions=drop
418 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4F:0571/112 actions=drop
419 icmp6,icmp_type=135,nd_sll=00:0A:E4:25:6B:B0 actions=drop
420 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571,nd_tll=00:0A:E4:25:6B:B1 actions=drop
421 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE00:0000/96,nd_tll=00:0A:E4:25:6B:B1 actions=drop
422 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
423 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
424 tun_id=0x1234,cookie=0x5678,actions=flood
425 actions=drop
426 tun_id=0x1234000056780000/0xffff0000ffff0000,actions=drop
427 dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,actions=drop
428 dl_dst=00:00:00:00:00:00/01:00:00:00:00:00,actions=drop
429 dl_dst=aa:bb:cc:dd:ee:ff/fe:ff:ff:ff:ff:ff,actions=drop
430 dl_dst=aa:bb:cc:dd:ee:ff/00:00:00:00:00:00,actions=drop
431 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
432 ])
433 AT_CHECK([ovs-ofctl -F nxm parse-flows flows.txt], [0], [stdout])
434 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0], [dnl
435 usable protocols: NXM,OXM
436 chosen protocol: NXM-table_id
437 NXT_FLOW_MOD: ADD tcp,tp_src=123 actions=FLOOD
438 NXT_FLOW_MOD: ADD in_port=LOCAL,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
439 NXT_FLOW_MOD: ADD arp,dl_src=00:0a:e4:25:6b:b0,arp_sha=00:0a:e4:25:6b:b0 actions=drop
440 NXT_FLOW_MOD: ADD ipv6,ipv6_label=0x12345 actions=output:2
441 NXT_FLOW_MOD: ADD ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output:3
442 NXT_FLOW_MOD: ADD ipv6,ipv6_src=2001:db8:3c4d:1::/64 actions=output:4
443 NXT_FLOW_MOD: ADD ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:4/127 actions=output:5
444 NXT_FLOW_MOD: ADD tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop
445 NXT_FLOW_MOD: ADD udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop
446 NXT_FLOW_MOD: ADD icmp6,in_port=3,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
447 NXT_FLOW_MOD: ADD udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
448 NXT_FLOW_MOD: ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
449 NXT_FLOW_MOD: ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
450 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_target=fec0:0:1234:f045:8fff:1111:fe4e:571 actions=drop
451 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_target=fec0:0:1234:f045:8fff:1111:fe4f:0/112 actions=drop
452 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_sll=00:0a:e4:25:6b:b0 actions=drop
453 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
454 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
455 NXT_FLOW_MOD: ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
456 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
457 NXT_FLOW_MOD: ADD tun_id=0x1234 cookie:0x5678 actions=FLOOD
458 NXT_FLOW_MOD: ADD actions=drop
459 NXT_FLOW_MOD: ADD tun_id=0x1234000056780000/0xffff0000ffff0000 actions=drop
460 NXT_FLOW_MOD: ADD dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=drop
461 NXT_FLOW_MOD: ADD dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=drop
462 NXT_FLOW_MOD: ADD dl_dst=aa:bb:cc:dd:ee:ff/fe:ff:ff:ff:ff:ff actions=drop
463 NXT_FLOW_MOD: ADD actions=drop
464 NXT_FLOW_MOD: ADD actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
465 ])
466 AT_CLEANUP
467
468 AT_SETUP([ovs-ofctl -F nxm -mmm parse-flows])
469 AT_DATA([flows.txt], [[
470 # comment
471 tcp,tp_src=123,actions=flood
472 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
473 arp,dl_src=00:0A:E4:25:6B:B0,arp_sha=00:0A:E4:25:6B:B0 actions=drop
474 ipv6,ipv6_label=0x12345 actions=2
475 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=3
476 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5/64 actions=4
477 ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:5/127 actions=5
478 tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop
479 udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop
480 sctp6,ipv6_src=2001:db8:3c4d:1::5,tp_dst=309 actions=drop
481 in_port=3 icmp6,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
482 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
483 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
484 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
485 sctp,nw_src=192.168.0.3,tp_dst=309 actions=pop_queue,output:1
486 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571 actions=drop
487 icmp6,icmp_type=135,nd_sll=00:0A:E4:25:6B:B0 actions=drop
488 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571,nd_tll=00:0A:E4:25:6B:B1 actions=drop
489 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
490 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
491 tun_id=0x1234,cookie=0x5678,actions=flood
492 actions=drop
493 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[]
494 actions=move:OXM_OF_ETH_DST[]->OXM_OF_ETH_SRC[]
495 actions=push:NXM_NX_REG0[0..31],pop:NXM_NX_REG0[]
496 vlan_tci=0x1123/0x1fff,actions=drop
497 actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
498 ]])
499 AT_CHECK([ovs-ofctl -F nxm -mmm parse-flows flows.txt], [0], [stdout], [stderr])
500 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
501 [[usable protocols: NXM,OXM
502 chosen protocol: NXM-table_id
503 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(007b) actions=FLOOD
504 NXT_FLOW_MOD: ADD NXM_OF_IN_PORT(fffe), NXM_OF_ETH_SRC(000ae4256bb0), NXM_OF_VLAN_TCI_W(1009/1fff) actions=drop
505 NXT_FLOW_MOD: ADD NXM_OF_ETH_SRC(000ae4256bb0), NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_SHA(000ae4256bb0) actions=drop
506 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_LABEL(00012345) actions=output:2
507 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005) actions=output:3
508 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000) actions=output:4
509 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST_W(20010db83c4d00010002000300040004/fffffffffffffffffffffffffffffffe) actions=output:5
510 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
511 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
512 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
513 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
514 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
515 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
516 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
517 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
518 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
519 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
520 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
521 NXT_FLOW_MOD: ADD <any> cookie:0x123456789abcdef hard:10 pri:60000 actions=CONTROLLER:65535
522 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
523 NXT_FLOW_MOD: ADD NXM_NX_TUN_ID(0000000000001234) cookie:0x5678 actions=FLOOD
524 NXT_FLOW_MOD: ADD <any> actions=drop
525 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[]
526 NXT_FLOW_MOD: ADD <any> actions=move:NXM_OF_ETH_DST[]->NXM_OF_ETH_SRC[]
527 NXT_FLOW_MOD: ADD <any> actions=push:NXM_NX_REG0[],pop:NXM_NX_REG0[]
528 NXT_FLOW_MOD: ADD NXM_OF_VLAN_TCI_W(1123/1fff) actions=drop
529 NXT_FLOW_MOD: ADD <any> actions=sample(probability=12345,collector_set_id=23456,obs_domain_id=34567,obs_point_id=45678)
530 ]])
531 AT_CLEANUP
532
533 AT_SETUP([ovs-ofctl parse-nx-match])
534 AT_KEYWORDS([nx-match])
535 AT_DATA([nx-match.txt], [dnl
536 <any>
537
538 # in port
539 NXM_OF_IN_PORT(0000)
540 NXM_OF_IN_PORT(fffe)
541
542 # eth dst
543 NXM_OF_ETH_DST(0002e30f80a4)
544 NXM_OF_ETH_DST_W(010000000000/010000000000)
545 NXM_OF_ETH_DST_W(000000000000/010000000000)
546 NXM_OF_ETH_DST_W(ffffffffffff/010000000000)
547 NXM_OF_ETH_DST_W(0002e30f80a4/ffffffffffff)
548 NXM_OF_ETH_DST_W(60175619848f/000000000000)
549 NXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
550 NXM_OF_ETH_DST_W(60175619848f/5a5a5a5a5a5a)
551
552 # eth src
553 NXM_OF_ETH_SRC(020898456ddb)
554 NXM_OF_ETH_SRC_W(012345abcdef/ffffff555555)
555 NXM_OF_ETH_SRC_W(020898456ddb/ffffffffffff)
556 NXM_OF_ETH_SRC_W(020898456ddb/000000000000)
557
558 # eth type
559 NXM_OF_ETH_TYPE(0800)
560 NXM_OF_ETH_TYPE(0800) NXM_OF_IN_PORT(0012)
561
562 # vlan tci
563 NXM_OF_VLAN_TCI(f009)
564 NXM_OF_VLAN_TCI(f009) NXM_OF_VLAN_TCI(f009)
565 NXM_OF_VLAN_TCI(0000)           # Packets without 802.1Q header.
566 NXM_OF_VLAN_TCI(3123)           # Packets with VID=123, PCP=1.
567 NXM_OF_VLAN_TCI(0123)           # Does not make sense (but supported anyway)
568 NXM_OF_VLAN_TCI_W(1123/1fff)    # Packets with VID=123, any PCP.
569 NXM_OF_VLAN_TCI_W(1123/ffff)    # Packets with VID=123, PCP=0
570 NXM_OF_VLAN_TCI_W(1123/0000)    # Packets with or without 802.1Q header
571 NXM_OF_VLAN_TCI_W(f000/f000)    # Packets with any VID, PCP=7.
572 NXM_OF_VLAN_TCI_W(0000/e000)    # No 802.1Q or with VID=0
573
574 # IP TOS
575 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_TOS(f0)
576 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_TOS(41)
577 NXM_OF_IP_TOS(f0)
578
579 # IP ECN
580 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_ECN(03)
581 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_ECN(06)
582 NXM_NX_IP_ECN(03)
583
584 # IP protocol
585 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01)
586 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(05)
587 NXM_OF_IP_PROTO(05)
588
589 # IP TTL
590 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_TTL(80)
591 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_TTL(ff)
592 NXM_NX_IP_TTL(80)
593
594 # IP source
595 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC(ac100014)
596 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/FFFF0000)
597 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/5a5a5a5a)
598 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/ffffffff)
599 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_SRC(ac100014)
600 NXM_OF_IP_SRC_W(C0D80000/FFFF0000)
601
602 # IP destination
603 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST(ac100014)
604 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a88012/FFFF0000)
605 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a80000/5a5a5a5a)
606 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a80000/ffffffff)
607 NXM_OF_IP_DST(ac100014)
608 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_DST_W(C0D80000/FFFF0000)
609
610 # TCP source port
611 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC(4231)
612 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/F0F0)
613 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/ffff)
614 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_SRC(4231)
615
616 # TCP destination port
617 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST(4231)
618 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/FFF0)
619 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/ffff)
620 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_DST(4231)
621
622 # TCP flags
623 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_NX_TCP_FLAGS(0131)
624 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_NX_TCP_FLAGS_W(00F0/0FF0)
625 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_NX_TCP_FLAGS_W(01E2/ffff)
626 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_NX_TCP_FLAGS(0fff)
627
628 # UDP source port
629 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC(8732)
630 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/01FF)
631 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/ffff)
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(02) NXM_OF_UDP_DST(1293)
639
640 # ICMP type
641 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_TYPE(12)
642 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_TYPE(10)
643
644 # ICMP code
645 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_CODE(12)
646 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_CODE(10)
647 NXM_OF_ETH_TYPE(0800) NXM_OF_ICMP_CODE(10)
648 NXM_OF_ICMP_CODE(00)
649
650 # ARP opcode
651 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001)
652 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(1111)
653 NXM_OF_ETH_TYPE(0000) NXM_OF_ARP_OP(0001)
654 NXM_OF_ARP_OP(0001)
655 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001) NXM_OF_ARP_OP(0001)
656
657 # ARP source protocol address
658 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA(ac100014)
659 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
660 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/aaaaaa00)
661 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/ffffffff)
662 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
663 NXM_OF_ARP_SPA_W(C0D80000/FFFF0000)
664
665 # ARP destination protocol address
666 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA(ac100014)
667 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
668 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/77777777)
669 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/ffffffff)
670 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
671 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
672
673 # ARP source hardware address
674 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_SHA(0002e30f80a4)
675 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_SHA(0002e30f80a4)
676 NXM_NX_ARP_SHA(0002e30f80a4)
677
678 # ARP destination hardware address
679 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_THA(0002e30f80a4)
680 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_THA(0002e30f80a4)
681 NXM_NX_ARP_THA(0002e30f80a4)
682
683 # RARP opcode
684 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(0003)
685 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(1111)
686 NXM_OF_ETH_TYPE(0000) NXM_OF_ARP_OP(0003)
687 NXM_OF_ARP_OP(0003)
688 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(0003) NXM_OF_ARP_OP(0003)
689
690 # RARP source protocol address
691 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA(ac100014)
692 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81200/FFFFFF00)
693 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/aaaaaa00)
694 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/ffffffff)
695 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
696 NXM_OF_ARP_SPA_W(C0D80000/FFFF0000)
697
698 # RARP destination protocol address
699 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA(ac100014)
700 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81200/FFFFFF00)
701 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/77777777)
702 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/ffffffff)
703 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
704 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
705
706 # RARP source hardware address
707 NXM_OF_ETH_TYPE(8035) NXM_NX_ARP_SHA(0002e30f80a4)
708 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_SHA(0002e30f80a4)
709 NXM_NX_ARP_SHA(0002e30f80a4)
710
711 # RARP destination hardware address
712 NXM_OF_ETH_TYPE(8035) NXM_NX_ARP_THA(0002e30f80a4)
713 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_THA(0002e30f80a4)
714 NXM_NX_ARP_THA(0002e30f80a4)
715
716 # IPv6 source
717 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
718 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
719 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
720 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/5a5a5a5a5a5a5a5a0000000000000000)
721 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
722 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
723 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffffffff000000000000)
724
725 # IPv6 destination
726 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
727 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
728 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/77777777777777777777777777777777)
729 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
730 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(00000000000000000000000000000000/00000000000000000000000000000000)
731 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
732
733 # IPv6 Flow Label
734 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_LABEL(1000000f)
735 NXM_NX_IPV6_LABEL(0000000f)
736 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_LABEL(0000000f)
737
738 # ND target address
739 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
740 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
741 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/0123456789abcdeffedcba9876543210)
742 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/ffffffffffffffffffffffffffffffff)
743 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(00000000000000000000000000000000/00000000000000000000000000000000)
744 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/fedcba98765432100123456789abcdef)
745
746 # ND source hardware address
747 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)
748 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)
749 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)
750 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)
751
752 # ND destination hardware address
753 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)
754 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)
755 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)
756 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)
757
758 # IPv4 fragments.
759 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(00)
760 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(01)
761 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(02)
762 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(03)
763 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/03)
764 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/fd)
765 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/02)
766 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(01/01)
767 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(02/02)
768 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/03)
769 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/ff)
770 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/00)
771 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(f3)
772
773 # IPv6 fragments.
774 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(00)
775 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(01)
776 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(02)
777 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(03)
778 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/03)
779 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/01)
780 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/02)
781 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(01/01)
782 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(02/02)
783 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/03)
784 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/00)
785 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/ff)
786 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(f3)
787
788 # Flow cookie.
789 NXM_NX_COOKIE(00000000abcdef01)
790 NXM_NX_COOKIE_W(84200000abcdef01/84200000FFFFFFFF)
791 NXM_NX_COOKIE_W(84200000abcdef01/ffffffffffffffff)
792 NXM_NX_COOKIE_W(0000000000000000/0000000000000000)
793
794 # Tunnel ID.
795 NXM_NX_TUN_ID(00000000abcdef01)
796 NXM_NX_TUN_ID_W(84200000abcdef01/84200000FFFFFFFF)
797 NXM_NX_TUN_ID_W(84200000abcdef01/FFFFFFFFFFFFFFFF)
798 NXM_NX_TUN_ID_W(0000000000000000/0000000000000000)
799
800 # Register 0.
801 NXM_NX_REG0(acebdf56)
802 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
803 NXM_NX_REG0_W(a0e0d050/ffffffff)
804 NXM_NX_REG0_W(00000000/00000000)
805
806 # dp_hash (testing experimenter OXM).
807 NXM_NX_DP_HASH(01234567)
808 NXOXM_ET_DP_HASH(01234567)
809
810 # Invalid field number.
811 01020304(1111/3333)
812
813 # Invalid field numbers (experimenter OXM).
814 ffff020800002320(11112222)
815 ffff030800002320(1111/3333)
816
817 # Unimplemented registers.
818 #
819 # This test assumes that at least two registers, but fewer than 16,
820 # registers are implemented.
821 00010004(12345678)
822 00010108(12345678/12345678)
823 00011e04(12345678)
824 00011f08(12345678/12345678)
825 ])
826 AT_CHECK([ovs-ofctl -vPATTERN:'console:%c|%p|%m' --strict parse-nx-match < nx-match.txt], [0], [dnl
827 <any>
828
829 # in port
830 NXM_OF_IN_PORT(0000)
831 NXM_OF_IN_PORT(fffe)
832
833 # eth dst
834 NXM_OF_ETH_DST(0002e30f80a4)
835 NXM_OF_ETH_DST_W(010000000000/010000000000)
836 NXM_OF_ETH_DST_W(000000000000/010000000000)
837 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
838 NXM_OF_ETH_DST(0002e30f80a4)
839 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
840 NXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
841 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
842
843 # eth src
844 NXM_OF_ETH_SRC(020898456ddb)
845 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
846 NXM_OF_ETH_SRC(020898456ddb)
847 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
848
849 # eth type
850 NXM_OF_ETH_TYPE(0800)
851 NXM_OF_IN_PORT(0012), NXM_OF_ETH_TYPE(0800) 
852
853 # vlan tci
854 NXM_OF_VLAN_TCI(f009)
855 nx_pull_match() returned error OFPBMC_DUP_FIELD
856 NXM_OF_VLAN_TCI(0000)
857 NXM_OF_VLAN_TCI(3123)
858 NXM_OF_VLAN_TCI(0123)
859 NXM_OF_VLAN_TCI_W(1123/1fff)
860 NXM_OF_VLAN_TCI(1123)
861 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
862 NXM_OF_VLAN_TCI_W(f000/f000)
863 NXM_OF_VLAN_TCI_W(0000/e000)
864
865 # IP TOS
866 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_TOS(f0)
867 nx_pull_match() returned error OFPBMC_BAD_VALUE
868 nx_pull_match() returned error OFPBMC_BAD_PREREQ
869
870 # IP ECN
871 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_ECN(03)
872 nx_pull_match() returned error OFPBMC_BAD_VALUE
873 nx_pull_match() returned error OFPBMC_BAD_PREREQ
874
875 # IP protocol
876 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01)
877 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(05)
878 nx_pull_match() returned error OFPBMC_BAD_PREREQ
879
880 # IP TTL
881 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_TTL(80)
882 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_TTL(ff)
883 nx_pull_match() returned error OFPBMC_BAD_PREREQ
884
885 # IP source
886 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(ac100014)
887 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(c0a80000/ffff0000)
888 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
889 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(c0a80000)
890 nx_pull_match() returned error OFPBMC_BAD_PREREQ
891 nx_pull_match() returned error OFPBMC_BAD_PREREQ
892
893 # IP destination
894 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(ac100014)
895 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
896 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
897 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(c0a80000)
898 nx_pull_match() returned error OFPBMC_BAD_PREREQ
899 nx_pull_match() returned error OFPBMC_BAD_PREREQ
900
901 # TCP source port
902 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(4231)
903 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC_W(5050/f0f0)
904 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(5050)
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 nx_pull_match() returned error OFPBMC_BAD_PREREQ
912
913 # TCP flags
914 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(0131)
915 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS_W(00f0/0ff0)
916 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(01e2)
917 nx_pull_match() returned error OFPBMC_BAD_PREREQ
918
919 # UDP source port
920 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(8732)
921 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC_W(0132/01ff)
922 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(0132)
923 nx_pull_match() returned error OFPBMC_BAD_PREREQ
924
925 # UDP destination port
926 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(1782)
927 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST_W(5005/f00f)
928 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(5005)
929 nx_pull_match() returned error OFPBMC_BAD_PREREQ
930
931 # ICMP type
932 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_TYPE(12)
933 nx_pull_match() returned error OFPBMC_BAD_PREREQ
934
935 # ICMP code
936 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_CODE(12)
937 nx_pull_match() returned error OFPBMC_BAD_PREREQ
938 nx_pull_match() returned error OFPBMC_BAD_PREREQ
939 nx_pull_match() returned error OFPBMC_BAD_PREREQ
940
941 # ARP opcode
942 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_OP(0001)
943 nx_pull_match() returned error OFPBMC_BAD_VALUE
944 nx_pull_match() returned error OFPBMC_BAD_PREREQ
945 nx_pull_match() returned error OFPBMC_BAD_PREREQ
946 nx_pull_match() returned error OFPBMC_DUP_FIELD
947
948 # ARP source protocol address
949 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(ac100014)
950 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
951 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
952 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(c0a81234)
953 nx_pull_match() returned error OFPBMC_BAD_PREREQ
954 nx_pull_match() returned error OFPBMC_BAD_PREREQ
955
956 # ARP destination protocol address
957 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(ac100014)
958 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
959 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
960 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(c0a81234)
961 nx_pull_match() returned error OFPBMC_BAD_PREREQ
962 nx_pull_match() returned error OFPBMC_BAD_PREREQ
963
964 # ARP source hardware address
965 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_SHA(0002e30f80a4)
966 nx_pull_match() returned error OFPBMC_BAD_PREREQ
967 nx_pull_match() returned error OFPBMC_BAD_PREREQ
968
969 # ARP destination hardware address
970 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_THA(0002e30f80a4)
971 nx_pull_match() returned error OFPBMC_BAD_PREREQ
972 nx_pull_match() returned error OFPBMC_BAD_PREREQ
973
974 # RARP opcode
975 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_OP(0003)
976 nx_pull_match() returned error OFPBMC_BAD_VALUE
977 nx_pull_match() returned error OFPBMC_BAD_PREREQ
978 nx_pull_match() returned error OFPBMC_BAD_PREREQ
979 nx_pull_match() returned error OFPBMC_DUP_FIELD
980
981 # RARP source protocol address
982 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA(ac100014)
983 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA_W(c0a81200/ffffff00)
984 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
985 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA(c0a81234)
986 nx_pull_match() returned error OFPBMC_BAD_PREREQ
987 nx_pull_match() returned error OFPBMC_BAD_PREREQ
988
989 # RARP destination protocol address
990 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA(ac100014)
991 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA_W(c0a81200/ffffff00)
992 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
993 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA(c0a81234)
994 nx_pull_match() returned error OFPBMC_BAD_PREREQ
995 nx_pull_match() returned error OFPBMC_BAD_PREREQ
996
997 # RARP source hardware address
998 NXM_OF_ETH_TYPE(8035), NXM_NX_ARP_SHA(0002e30f80a4)
999 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1000 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1001
1002 # RARP destination hardware address
1003 NXM_OF_ETH_TYPE(8035), NXM_NX_ARP_THA(0002e30f80a4)
1004 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1005 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1006
1007 # IPv6 source
1008 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
1009 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1010 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1011 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1012 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010000000000000000)
1013 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1014 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1015
1016 # IPv6 destination
1017 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
1018 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1019 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1020 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST(20010db83c4d00010000000000000000)
1021 NXM_OF_ETH_TYPE(86dd)
1022 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1023
1024 # IPv6 Flow Label
1025 nx_pull_match() returned error OFPBMC_BAD_VALUE
1026 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1027 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_LABEL(0000000f)
1028
1029 # ND target address
1030 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
1031 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(88), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
1032 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1033 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
1034 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87)
1035 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1036
1037 # ND source hardware address
1038 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)
1039 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1040 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1041 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1042
1043 # ND destination hardware address
1044 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)
1045 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1046 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1047 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1048
1049 # IPv4 fragments.
1050 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
1051 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(01)
1052 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(02)
1053 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
1054 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
1055 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/01)
1056 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/02)
1057 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(01/01)
1058 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(02/02)
1059 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
1060 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
1061 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1062 nx_pull_match() returned error OFPBMC_BAD_VALUE
1063
1064 # IPv6 fragments.
1065 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
1066 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(01)
1067 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(02)
1068 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
1069 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
1070 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/01)
1071 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/02)
1072 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(01/01)
1073 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(02/02)
1074 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
1075 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1076 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
1077 nx_pull_match() returned error OFPBMC_BAD_VALUE
1078
1079 # Flow cookie.
1080 NXM_NX_COOKIE(00000000abcdef01)
1081 NXM_NX_COOKIE_W(84200000abcdef01/84200000ffffffff)
1082 NXM_NX_COOKIE(84200000abcdef01)
1083 <any>
1084
1085 # Tunnel ID.
1086 NXM_NX_TUN_ID(00000000abcdef01)
1087 NXM_NX_TUN_ID_W(84200000abcdef01/84200000ffffffff)
1088 NXM_NX_TUN_ID(84200000abcdef01)
1089 <any>
1090
1091 # Register 0.
1092 NXM_NX_REG0(acebdf56)
1093 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
1094 NXM_NX_REG0(a0e0d050)
1095 <any>
1096
1097 # dp_hash (testing experimenter OXM).
1098 NXM_NX_DP_HASH(01234567)
1099 NXM_NX_DP_HASH(01234567)
1100
1101 # Invalid field number.
1102 nx_pull_match() returned error OFPBMC_BAD_FIELD
1103
1104 # Invalid field numbers (experimenter OXM).
1105 nx_pull_match() returned error OFPBMC_BAD_FIELD
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 '1-bits in value' stderr | sed 1q], [0], [dnl
1121 nx_match|WARN|Rejecting NXM/OXM entry 0:0:1:1:12 with 1-bits in value for bits wildcarded by the mask.
1122 ])
1123
1124 # Check that there wasn't any other stderr output.
1125 AT_CHECK([grep -v '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/3333), NXM_OF_ETH_TYPE(0800)
1673 NXM_OF_IN_PORT(0001), ffff020800002320(11112222), NXM_OF_ETH_TYPE(0800)
1674 NXM_OF_IN_PORT(0001), ffff030800002320(1111/3333), NXM_OF_ETH_TYPE(0800)
1675 ])
1676
1677 AT_CHECK([ovs-ofctl --strict parse-nx-match < nx-match.txt], [0], [dnl
1678 nx_pull_match() returned error OFPBMC_BAD_FIELD
1679 nx_pull_match() returned error OFPBMC_BAD_FIELD
1680 nx_pull_match() returned error OFPBMC_BAD_FIELD
1681 ])
1682
1683 AT_CHECK([ovs-ofctl parse-nx-match < nx-match.txt], [0], [dnl
1684 NXM_OF_IN_PORT(0001), NXM_OF_ETH_TYPE(0800)
1685 NXM_OF_IN_PORT(0001), NXM_OF_ETH_TYPE(0800)
1686 NXM_OF_IN_PORT(0001), NXM_OF_ETH_TYPE(0800)
1687 ])
1688 AT_CLEANUP
1689
1690 AT_SETUP([ovs-ofctl parse-oxm (OpenFlow 1.2)])
1691 AT_KEYWORDS([oxm])
1692 AT_DATA([oxm.txt], [dnl
1693 <any>
1694
1695 # in port
1696 OXM_OF_IN_PORT(00000000)
1697 OXM_OF_IN_PORT(fffffffe)
1698
1699 # metadata
1700 OXM_OF_METADATA(5a5a5a5a5a5a5a5a)
1701 OXM_OF_METADATA_W(0000000000000000/00000000ffffffff)
1702 OXM_OF_METADATA_W(1234567890abcdef/ffff0000ffff0000)
1703 OXM_OF_METADATA_W(1234567890abcdef/ffffffffffffffff)
1704 OXM_OF_METADATA_W(1234567890abcdef/0000000000000000)
1705
1706 # eth dst
1707 OXM_OF_ETH_DST(0002e30f80a4)
1708 OXM_OF_ETH_DST_W(010000000000/010000000000)
1709 OXM_OF_ETH_DST_W(000000000000/010000000000)
1710 OXM_OF_ETH_DST_W(ffffffffffff/010000000000)
1711 OXM_OF_ETH_DST_W(0002e30f80a4/ffffffffffff)
1712 OXM_OF_ETH_DST_W(0002e30f80a4/000000000000)
1713 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
1714
1715 # eth src
1716 OXM_OF_ETH_SRC(020898456ddb)
1717
1718 # eth type
1719 OXM_OF_ETH_TYPE(0800)
1720 OXM_OF_ETH_TYPE(0800) OXM_OF_IN_PORT(00000012)
1721
1722 # vlan
1723 OXM_OF_VLAN_VID(1009) OXM_OF_VLAN_VID(1009) # Duplicate Field
1724 OXM_OF_VLAN_VID(f009)           # Bad Value
1725 OXM_OF_VLAN_PCP(00)             # Bad Pre-Requisite
1726 OXM_OF_VLAN_VID(0000)           # Packets without 802.1Q header or with VID=0
1727 OXM_OF_VLAN_VID(1123)           # Packets with VID=123, any PCP
1728 OXM_OF_VLAN_VID(1123) OXM_OF_VLAN_PCP(01) # Packets with VID=123, PCP=1.
1729 OXM_OF_VLAN_VID(0123)           # Does not make sense (but supported anyway)
1730 OXM_OF_VLAN_VID_W(0123/0123)      # Does not make sense (but supported anyway)
1731 OXM_OF_VLAN_VID_W(1123/0123)      # Does not make sense (but supported anyway)
1732 OXM_OF_VLAN_VID_W(0123/1123)      # Does not make sense (but supported anyway)
1733 OXM_OF_VLAN_VID(0123) OXM_OF_VLAN_PCP(01)  #Bad Pre-Requisite
1734 OXM_OF_VLAN_VID_W(1123/1fff)    # Packets with VID=123, any PCP.
1735 OXM_OF_VLAN_VID_W(1123/ffff)    # Packets with VID=123, any PCP.
1736 OXM_OF_VLAN_VID_W(0000/0000)    # Packets with or without 802.1Q header
1737 OXM_OF_VLAN_VID_W(1103/1f0f),   # Packets with # VID=123 (masked)
1738 OXM_OF_VLAN_VID_W(1103/1f0f), OXM_OF_VLAN_PCP(01)  # Packets with VID=123 (masked), any PCP.
1739 OXM_OF_VLAN_VID_W(1000/1000)    # Packets with any VID, any PCP
1740 OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01)  # Packets with any VID, PCP=1.
1741
1742 # IP TOS
1743 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(f0)
1744 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(41)
1745 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(3f)
1746 OXM_OF_IP_DSCP(3f)
1747
1748 # IP ECN
1749 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(03)
1750 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(06)
1751 OXM_OF_IP_ECN(03)
1752
1753 # IP protocol
1754 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01)
1755 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(05)
1756 OXM_OF_IP_PROTO(05)
1757
1758 # IP source
1759 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC(ac100014)
1760 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/FFFF0000)
1761 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/FFFFFFFF)
1762 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(00000000/00000000)
1763 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_SRC(ac100014)
1764 OXM_OF_IPV4_SRC_W(C0D80000/FFFF0000)
1765
1766 # IP destination
1767 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST(ac100014)
1768 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a80000/FFFF0000)
1769 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/FFFFFFFF)
1770 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(00000000/00000000)
1771 OXM_OF_IPV4_DST(ac100014)
1772 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_DST_W(C0D80000/FFFF0000)
1773
1774 # TCP source port
1775 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC(4231)
1776 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/F0F0)
1777 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/FFFF)
1778 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(0000/0000)
1779 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_SRC(4231)
1780
1781 # TCP destination port
1782 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST(4231)
1783 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFF0)
1784 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFFF)
1785 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(0000/0000)
1786 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_DST(4231)
1787
1788 # UDP source port
1789 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC(8732)
1790 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/01FF)
1791 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/FFFF)
1792 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0000/0000)
1793 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_UDP_SRC(7823)
1794
1795 # UDP destination port
1796 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST(1782)
1797 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/F00F)
1798 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/FFFF)
1799 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(0000/0000)
1800 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_UDP_DST(1293)
1801
1802 # SCTP source port
1803 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC(8732)
1804 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/01FF)
1805 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/FFFF)
1806 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0000/0000)
1807 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_SCTP_SRC(7823)
1808
1809 # SCTP destination port
1810 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST(1782)
1811 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/F00F)
1812 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/FFFF)
1813 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(0000/0000)
1814 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_SCTP_DST(1293)
1815
1816 # ICMP type
1817 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_TYPE(12)
1818 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_TYPE(10)
1819
1820 # ICMP code
1821 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_CODE(12)
1822 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_CODE(10)
1823 OXM_OF_ETH_TYPE(0800) OXM_OF_ICMPV4_CODE(10)
1824 OXM_OF_ICMPV4_CODE(00)
1825
1826 # ARP opcode
1827 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001)
1828 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(1111)
1829 OXM_OF_ETH_TYPE(0000) OXM_OF_ARP_OP(0001)
1830 OXM_OF_ARP_OP(0001)
1831 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001) OXM_OF_ARP_OP(0001)
1832
1833 # ARP source protocol address
1834 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA(ac100014)
1835 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81200/FFFFFF00)
1836 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/FFFFFFFF)
1837 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(00000000/00000000)
1838 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SPA(ac100014)
1839 OXM_OF_ARP_SPA_W(C0D80000/FFFF0000)
1840
1841 # ARP destination protocol address
1842 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA(ac100014)
1843 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a81200/FFFFFF00)
1844 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/FFFFFFFF)
1845 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(00000000/00000000)
1846 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_TPA(ac100014)
1847 OXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
1848
1849 # ARP source hardware address
1850 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA(0002e30f80a4)
1851 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SHA(0002e30f80a4)
1852 OXM_OF_ARP_SHA(0002e30f80a4)
1853 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(0002e30f80a4/ffffffffffff)
1854 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(000000000000/000000000000)
1855 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(000000000004/00000000000f)
1856
1857 # ARP destination hardware address
1858 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA(0002e30f80a4)
1859 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_THA(0002e30f80a4)
1860 OXM_OF_ARP_THA(0002e30f80a4)
1861 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(0002e30f80a4/ffffffffffff)
1862 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(000000000000/000000000000)
1863 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(000000000004/00000000000f)
1864
1865 # IPv6 source
1866 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1867 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1868 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1869 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
1870 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(00000000000000000000000000000000/00000000000000000000000000000000)
1871 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1872
1873 # IPv6 destination
1874 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1875 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1876 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1877 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
1878 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(00000000000000000000000000000000/00000000000000000000000000000000)
1879 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1880
1881 # IPv6 Flow Label
1882 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL(1000000f)
1883 OXM_OF_IPV6_FLABEL(0000000f)
1884 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL(0000000f)
1885 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/0000000f)
1886 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/000fffff)
1887 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(00000000/000ffff0)
1888 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/100fffff)
1889 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/ffffffff)
1890 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(00000000/00000000)
1891
1892 # ND source hardware address
1893 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)
1894 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)
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_SLL(0002e30f80a4)
1896 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)
1897
1898 # ND destination hardware address
1899 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)
1900 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)
1901 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)
1902 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)
1903
1904 # Registers 0, 1, and 2.
1905 NXM_NX_REG0(acebdf56)
1906 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
1907 NXM_NX_REG0(a0e0d050)
1908 NXM_NX_REG1(acebdf56)
1909 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1_W(a0e0d050/f0f0f0f0)
1910 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1(a0e0d050)
1911 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2_W(a0e0d050/f0f0f0f0)
1912 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2(a0e0d050)
1913
1914 # Extended registers 0, 1, and 2.
1915 # (For OpenFlow 1.2, OVS transforms these into its extension registers.)
1916 OXM_OF_PKT_REG0_W(acebdf5600000000/ffffffff00000000)
1917 OXM_OF_PKT_REG0_W(a0e0d05000000000/f0f0f0f000000000)
1918 OXM_OF_PKT_REG0_W(a0e0d05000000000/ffffffff00000000)
1919 OXM_OF_PKT_REG0_W(00000000acebdf56/00000000ffffffff)
1920 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0f0f0f0f0)
1921 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0ffffffff)
1922 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/f0f0f0f000000000)
1923 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/ffffffff00000000)
1924
1925 # Invalid field number.
1926 01020304(1111/3333)
1927
1928 # Invalid field numbers (experimenter OXM).
1929 ffff020800002320(11112222)
1930 ffff030800002320(1111/3333)
1931 ])
1932 AT_CHECK([ovs-ofctl '-vPATTERN:console:%c|%p|%m' --strict parse-oxm OpenFlow12 < oxm.txt],
1933   [0], [dnl
1934 <any>
1935
1936 # in port
1937 OXM_OF_IN_PORT(00000000)
1938 OXM_OF_IN_PORT(fffffffe)
1939
1940 # metadata
1941 OXM_OF_METADATA(5a5a5a5a5a5a5a5a)
1942 OXM_OF_METADATA_W(0000000000000000/00000000ffffffff)
1943 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1944 OXM_OF_METADATA(1234567890abcdef)
1945 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1946
1947 # eth dst
1948 OXM_OF_ETH_DST(0002e30f80a4)
1949 OXM_OF_ETH_DST_W(010000000000/010000000000)
1950 OXM_OF_ETH_DST_W(000000000000/010000000000)
1951 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1952 OXM_OF_ETH_DST(0002e30f80a4)
1953 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1954 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
1955
1956 # eth src
1957 OXM_OF_ETH_SRC(020898456ddb)
1958
1959 # eth type
1960 OXM_OF_ETH_TYPE(0800)
1961 OXM_OF_IN_PORT(00000012), OXM_OF_ETH_TYPE(0800)
1962
1963 # vlan
1964 nx_pull_match() returned error OFPBMC_DUP_FIELD
1965 nx_pull_match() returned error OFPBMC_BAD_VALUE
1966 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1967 OXM_OF_VLAN_VID(0000)
1968 OXM_OF_VLAN_VID(1123)
1969 OXM_OF_VLAN_VID(1123), OXM_OF_VLAN_PCP(01)
1970 OXM_OF_VLAN_VID(0123)
1971 OXM_OF_VLAN_VID_W(0123/0123)
1972 nx_pull_match() returned error OFPBMC_BAD_WILDCARDS
1973 OXM_OF_VLAN_VID_W(0123/1123)
1974 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1975 OXM_OF_VLAN_VID(1123)
1976 OXM_OF_VLAN_VID(1123)
1977 <any>
1978 OXM_OF_VLAN_VID_W(1103/1f0f)
1979 OXM_OF_VLAN_VID_W(1103/1f0f), OXM_OF_VLAN_PCP(01)
1980 OXM_OF_VLAN_VID_W(1000/1000)
1981 OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01)
1982
1983 # IP TOS
1984 nx_pull_match() returned error OFPBMC_BAD_VALUE
1985 nx_pull_match() returned error OFPBMC_BAD_VALUE
1986 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_DSCP(3f)
1987 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1988
1989 # IP ECN
1990 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_ECN(03)
1991 nx_pull_match() returned error OFPBMC_BAD_VALUE
1992 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1993
1994 # IP protocol
1995 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01)
1996 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(05)
1997 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1998
1999 # IP source
2000 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC(ac100014)
2001 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC_W(c0a80000/ffff0000)
2002 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC(c0a80000)
2003 OXM_OF_ETH_TYPE(0800)
2004 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2005 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2006
2007 # IP destination
2008 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST(ac100014)
2009 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST_W(c0a80000/ffff0000)
2010 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST(c0a88012)
2011 OXM_OF_ETH_TYPE(0800)
2012 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2013 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2014
2015 # TCP source port
2016 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC(4231)
2017 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC_W(5050/f0f0)
2018 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC(5050)
2019 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06)
2020 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2021
2022 # TCP destination port
2023 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST(4231)
2024 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST_W(fde0/fff0)
2025 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST(fde0)
2026 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06)
2027 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2028
2029 # UDP source port
2030 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC(8732)
2031 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC_W(0132/01ff)
2032 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC(0132)
2033 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11)
2034 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2035
2036 # UDP destination port
2037 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST(1782)
2038 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST_W(5005/f00f)
2039 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST(5005)
2040 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11)
2041 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2042
2043 # SCTP source port
2044 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_SRC(8732)
2045 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_SRC_W(0132/01ff)
2046 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_SRC(0132)
2047 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84)
2048 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2049
2050 # SCTP destination port
2051 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_DST(1782)
2052 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_DST_W(5005/f00f)
2053 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_DST(5005)
2054 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84)
2055 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2056
2057 # ICMP type
2058 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_TYPE(12)
2059 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2060
2061 # ICMP code
2062 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_CODE(12)
2063 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2064 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2065 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2066
2067 # ARP opcode
2068 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_OP(0001)
2069 nx_pull_match() returned error OFPBMC_BAD_VALUE
2070 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2071 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2072 nx_pull_match() returned error OFPBMC_DUP_FIELD
2073
2074 # ARP source protocol address
2075 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA(ac100014)
2076 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA_W(c0a81200/ffffff00)
2077 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA(c0a81234)
2078 OXM_OF_ETH_TYPE(0806)
2079 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2080 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2081
2082 # ARP destination protocol address
2083 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA(ac100014)
2084 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA_W(c0a81200/ffffff00)
2085 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA(c0a812fe)
2086 OXM_OF_ETH_TYPE(0806)
2087 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2088 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2089
2090 # ARP source hardware address
2091 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA(0002e30f80a4)
2092 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2093 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2094 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA(0002e30f80a4)
2095 OXM_OF_ETH_TYPE(0806)
2096 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA_W(000000000004/00000000000f)
2097
2098 # ARP destination hardware address
2099 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA(0002e30f80a4)
2100 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2101 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2102 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA(0002e30f80a4)
2103 OXM_OF_ETH_TYPE(0806)
2104 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA_W(000000000004/00000000000f)
2105
2106 # IPv6 source
2107 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
2108 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2109 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
2110 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC(20010db83c4d00010000000000000000)
2111 OXM_OF_ETH_TYPE(86dd)
2112 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2113
2114 # IPv6 destination
2115 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
2116 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2117 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
2118 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST(20010db83c4d00010000000000000000)
2119 OXM_OF_ETH_TYPE(86dd)
2120 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2121
2122 # IPv6 Flow Label
2123 nx_pull_match() returned error OFPBMC_BAD_VALUE
2124 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2125 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2126 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL_W(0000000f/0000000f)
2127 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2128 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL_W(00000000/000ffff0)
2129 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2130 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2131 OXM_OF_ETH_TYPE(86dd)
2132
2133 # ND source hardware address
2134 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)
2135 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2136 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2137 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2138
2139 # ND destination hardware address
2140 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)
2141 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2142 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2143 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2144
2145 # Registers 0, 1, and 2.
2146 NXM_NX_REG0(acebdf56)
2147 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
2148 NXM_NX_REG0(a0e0d050)
2149 NXM_NX_REG1(acebdf56)
2150 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1_W(a0e0d050/f0f0f0f0)
2151 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1(a0e0d050)
2152 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2_W(a0e0d050/f0f0f0f0)
2153 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2(a0e0d050)
2154
2155 # Extended registers 0, 1, and 2.
2156 # (For OpenFlow 1.2, OVS transforms these into its extension registers.)
2157 NXM_NX_REG0(acebdf56)
2158 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
2159 NXM_NX_REG0(a0e0d050)
2160 NXM_NX_REG1(acebdf56)
2161 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1_W(a0e0d050/f0f0f0f0)
2162 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1(a0e0d050)
2163 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2_W(a0e0d050/f0f0f0f0)
2164 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2(a0e0d050)
2165
2166 # Invalid field number.
2167 nx_pull_match() returned error OFPBMC_BAD_FIELD
2168
2169 # Invalid field numbers (experimenter OXM).
2170 nx_pull_match() returned error OFPBMC_BAD_FIELD
2171 nx_pull_match() returned error OFPBMC_BAD_FIELD
2172 ], [stderr])
2173
2174 # Check that at least the first warning made it.  (It's rate-limited
2175 # so a variable number could show up, especially under valgrind etc.)
2176 AT_CHECK([grep '1-bits in value' stderr | sed 1q], [0], [dnl
2177 nx_match|WARN|Rejecting NXM/OXM entry 0:32768:2:1:16 with 1-bits in value for bits wildcarded by the mask.
2178 ])
2179
2180 # Check that there wasn't any other stderr output.
2181 AT_CHECK([grep -v '1-bits in value' stderr], [1])
2182 AT_CLEANUP
2183
2184 AT_SETUP([ovs-ofctl parse-oxm (OpenFlow 1.3)])
2185 AT_KEYWORDS([oxm])
2186 AT_DATA([oxm.txt], [dnl
2187 # actset_output
2188 ONFOXM_ET_ACTSET_OUTPUT(00000000)
2189 ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2190 ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2191 OXM_OF_ACTSET_OUTPUT(00000000)
2192 OXM_OF_ACTSET_OUTPUT(fffffffe)
2193 OXM_OF_ACTSET_OUTPUT(fffffff7)
2194 ])
2195 AT_CHECK([ovs-ofctl '-vPATTERN:console:%c|%p|%m' --strict parse-oxm OpenFlow13 < oxm.txt],
2196   [0], [dnl
2197 # actset_output
2198 ONFOXM_ET_ACTSET_OUTPUT(00000000)
2199 ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2200 ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2201 ONFOXM_ET_ACTSET_OUTPUT(00000000)
2202 ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2203 ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2204 ], [])
2205 AT_CLEANUP
2206
2207 AT_SETUP([ovs-ofctl parse-oxm (OpenFlow 1.5)])
2208 AT_KEYWORDS([oxm])
2209 AT_DATA([oxm.txt], [dnl
2210 # Extended registers 0 and 1.
2211 OXM_OF_PKT_REG0_W(acebdf5600000000/ffffffff00000000)
2212 OXM_OF_PKT_REG0_W(a0e0d05000000000/f0f0f0f000000000)
2213 OXM_OF_PKT_REG0_W(a0e0d05000000000/ffffffff00000000)
2214 OXM_OF_PKT_REG0_W(00000000acebdf56/00000000ffffffff)
2215 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0f0f0f0f0)
2216 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0ffffffff)
2217 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/f0f0f0f000000000)
2218 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/ffffffff00000000)
2219
2220 # Registers 0, 1, and 2.
2221 # (OpenFlow 1.5 transforms these into the standard "xregs".)
2222 NXM_NX_REG0(acebdf56)
2223 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
2224 NXM_NX_REG0(a0e0d050)
2225 NXM_NX_REG1(acebdf56)
2226 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1_W(a0e0d050/f0f0f0f0)
2227 NXM_NX_REG0_W(a0e0d050/f0f0f0f0), NXM_NX_REG1(a0e0d050)
2228 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2_W(a0e0d050/f0f0f0f0)
2229 NXM_NX_REG1_W(a0e0d050/f0f0f0f0), NXM_NX_REG2(a0e0d050)
2230
2231 # actset_output
2232 ONFOXM_ET_ACTSET_OUTPUT(00000000)
2233 ONFOXM_ET_ACTSET_OUTPUT(fffffffe)
2234 ONFOXM_ET_ACTSET_OUTPUT(fffffff7)
2235 OXM_OF_ACTSET_OUTPUT(00000000)
2236 OXM_OF_ACTSET_OUTPUT(fffffffe)
2237 OXM_OF_ACTSET_OUTPUT(fffffff7)
2238 ])
2239 AT_CHECK([ovs-ofctl '-vPATTERN:console:%c|%p|%m' --strict parse-oxm OpenFlow15 < oxm.txt],
2240   [0], [dnl
2241 # Extended registers 0 and 1.
2242 OXM_OF_PKT_REG0_W(acebdf5600000000/ffffffff00000000)
2243 OXM_OF_PKT_REG0_W(a0e0d05000000000/f0f0f0f000000000)
2244 OXM_OF_PKT_REG0_W(a0e0d05000000000/ffffffff00000000)
2245 OXM_OF_PKT_REG0_W(00000000acebdf56/00000000ffffffff)
2246 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0f0f0f0f0)
2247 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0ffffffff)
2248 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/f0f0f0f000000000)
2249 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/ffffffff00000000)
2250
2251 # Registers 0, 1, and 2.
2252 # (OpenFlow 1.5 transforms these into the standard "xregs".)
2253 OXM_OF_PKT_REG0_W(acebdf5600000000/ffffffff00000000)
2254 OXM_OF_PKT_REG0_W(a0e0d05000000000/f0f0f0f000000000)
2255 OXM_OF_PKT_REG0_W(a0e0d05000000000/ffffffff00000000)
2256 OXM_OF_PKT_REG0_W(00000000acebdf56/00000000ffffffff)
2257 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0f0f0f0f0)
2258 OXM_OF_PKT_REG0_W(a0e0d050a0e0d050/f0f0f0f0ffffffff)
2259 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/f0f0f0f000000000)
2260 OXM_OF_PKT_REG0_W(00000000a0e0d050/00000000f0f0f0f0), OXM_OF_PKT_REG1_W(a0e0d05000000000/ffffffff00000000)
2261
2262 # actset_output
2263 OXM_OF_ACTSET_OUTPUT(00000000)
2264 OXM_OF_ACTSET_OUTPUT(fffffffe)
2265 OXM_OF_ACTSET_OUTPUT(fffffff7)
2266 OXM_OF_ACTSET_OUTPUT(00000000)
2267 OXM_OF_ACTSET_OUTPUT(fffffffe)
2268 OXM_OF_ACTSET_OUTPUT(fffffff7)
2269 ], [])
2270 AT_CLEANUP
2271
2272 AT_SETUP([ovs-ofctl parse-oxm loose])
2273 AT_KEYWORDS([oxm])
2274 AT_DATA([oxm.txt], [dnl
2275 OXM_OF_IN_PORT(00000001), 01020304(1111/3333), OXM_OF_ETH_TYPE(0800)
2276 OXM_OF_IN_PORT(00000001), ffff020800002320(11112222), OXM_OF_ETH_TYPE(0800)
2277 OXM_OF_IN_PORT(00000001), ffff030800002320(1111/3333), OXM_OF_ETH_TYPE(0800)
2278 ])
2279
2280 AT_CHECK([ovs-ofctl --strict parse-oxm OpenFlow12 < oxm.txt], [0], [dnl
2281 nx_pull_match() returned error OFPBMC_BAD_FIELD
2282 nx_pull_match() returned error OFPBMC_BAD_FIELD
2283 nx_pull_match() returned error OFPBMC_BAD_FIELD
2284 ])
2285
2286 AT_CHECK([ovs-ofctl parse-oxm OpenFlow12 < oxm.txt], [0], [dnl
2287 OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
2288 OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
2289 OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
2290 ])
2291 AT_CLEANUP
2292
2293 AT_SETUP([experimenter OXM encoding])
2294 AT_DATA([oxm.txt], [dnl
2295 NXM_NX_DP_HASH(01234567)
2296 NXOXM_ET_DP_HASH(01234567)
2297
2298 NXM_NX_DP_HASH_W(01234567/0fffffff)
2299 NXOXM_ET_DP_HASH_W(01234567/0fffffff)
2300 ])
2301
2302 # To allow for testing experimenter OXM, which doesn't really have many
2303 # examples in the wild, we've defined a variant of NXM_NX_DP_HASH that uses
2304 # the experimenter OXM mechanism, called NXOXM_ET_DP_HASH.  We've defined
2305 # it as if it were introduced with OpenFlow 1.5, which gives us the
2306 # opportunity to see that both forms are accepted in all OpenFlow versions
2307 # but the experimenter form is used for encoding in OF1.5+.
2308 #
2309 # First verify that both forms are accepted and NXOXM_ET_DP_HASH is encoded
2310 # in OF1.5.
2311 AT_CHECK([ovs-ofctl -m --strict parse-oxm OpenFlow15 < oxm.txt], [0], [dnl
2312 NXOXM_ET_DP_HASH(01234567)
2313 00000000  00 01 00 10 ff ff 00 08-00 00 23 20 01 23 45 67 @&t@
2314 NXOXM_ET_DP_HASH(01234567)
2315 00000000  00 01 00 10 ff ff 00 08-00 00 23 20 01 23 45 67 @&t@
2316
2317 NXOXM_ET_DP_HASH_W(01234567/0fffffff)
2318 00000000  00 01 00 14 ff ff 01 0c-00 00 23 20 01 23 45 67 @&t@
2319 00000010  0f ff ff ff 00 00 00 00-
2320 NXOXM_ET_DP_HASH_W(01234567/0fffffff)
2321 00000000  00 01 00 14 ff ff 01 0c-00 00 23 20 01 23 45 67 @&t@
2322 00000010  0f ff ff ff 00 00 00 00-
2323 ])
2324
2325 # Then verify that both forms are accepted and NXM_NX_DP_HASH is encoded
2326 # in OF1.2.
2327 AT_CHECK([ovs-ofctl -m --strict parse-oxm OpenFlow12 < oxm.txt], [0], [dnl
2328 NXM_NX_DP_HASH(01234567)
2329 00000000  00 01 00 0c 00 01 46 04-01 23 45 67 00 00 00 00 @&t@
2330 NXM_NX_DP_HASH(01234567)
2331 00000000  00 01 00 0c 00 01 46 04-01 23 45 67 00 00 00 00 @&t@
2332
2333 NXM_NX_DP_HASH_W(01234567/0fffffff)
2334 00000000  00 01 00 10 00 01 47 08-01 23 45 67 0f ff ff ff @&t@
2335 NXM_NX_DP_HASH_W(01234567/0fffffff)
2336 00000000  00 01 00 10 00 01 47 08-01 23 45 67 0f ff ff ff @&t@
2337 ])
2338 AT_CLEANUP
2339
2340 AT_SETUP([check TCP flags expression in OXM and NXM])
2341 # NXM/OXM input for matching on TCP flags.
2342 tcp_flags='OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_FLAGS(0fff)'
2343
2344 # Check that marshaling into NXM gives all NXM headers.
2345 AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-nxm], [0],
2346   [NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(0fff)
2347 ])
2348
2349 # Check that marshaling in OXM for OF1.2 gives OXM headers except for
2350 # TCP flags, which didn't have an OXM definition.
2351 AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow12], [0],
2352     [OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), NXM_NX_TCP_FLAGS(0fff)
2353 ])
2354
2355 # Check that marshaling in OXM for OF1.3 and OF1.4 gives OXM headers,
2356 # including the ONF extension for TCP flags introduced in OF1.3.
2357 AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow13], [0],
2358     [OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), ONFOXM_ET_TCP_FLAGS(0fff)
2359 ])
2360 AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow14], [0],
2361     [OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), ONFOXM_ET_TCP_FLAGS(0fff)
2362 ])
2363
2364 # OpenFlow 1.5 added an OXM header for TCP flags:
2365 AT_CHECK([echo "$tcp_flags" | ovs-ofctl parse-oxm OpenFlow15], [0],
2366   [OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_FLAGS(0fff)
2367 ])
2368 AT_CLEANUP
2369
2370 dnl Check all of the patterns mentioned in the "VLAN Matching" section
2371 dnl in the DESIGN file at top level.
2372 AT_SETUP([ovs-ofctl check-vlan])
2373 AT_KEYWORDS([VLAN])
2374
2375 dnl [1]
2376 AT_CHECK([ovs-ofctl check-vlan 0000 0000], [0], [dnl
2377  -> 0000/0000
2378 NXM: <any> -> 0000/0000
2379 OXM: <any> -> 0000/0000,--
2380 OF1.0: 0000/1,00/1 -> 0000/0000
2381 OF1.1: 0000/1,00/1 -> 0000/0000
2382 ])
2383
2384 dnl [2]
2385 AT_CHECK([ovs-ofctl check-vlan 0000 ffff], [0], [dnl
2386 vlan_tci=0x0000 -> 0000/ffff
2387 NXM: NXM_OF_VLAN_TCI(0000) -> 0000/ffff
2388 OXM: OXM_OF_VLAN_VID(0000) -> 0000/1fff,--
2389 OF1.0: ffff/0,00/1 -> 0000/ffff
2390 OF1.1: ffff/0,00/1 -> 0000/ffff
2391 ])
2392
2393 dnl [3]
2394 AT_CHECK([ovs-ofctl check-vlan 1abc 1fff], [0], [dnl
2395 dl_vlan=2748 -> 1abc/1fff
2396 NXM: NXM_OF_VLAN_TCI_W(1abc/1fff) -> 1abc/1fff
2397 OXM: OXM_OF_VLAN_VID(1abc) -> 1abc/1fff,--
2398 OF1.0: 0abc/0,00/1 -> 1abc/1fff
2399 OF1.1: 0abc/0,00/1 -> 1abc/1fff
2400 ])
2401
2402 dnl [4]
2403 AT_CHECK([ovs-ofctl check-vlan b000 f000], [0], [dnl
2404 dl_vlan_pcp=5 -> b000/f000
2405 NXM: NXM_OF_VLAN_TCI_W(b000/f000) -> b000/f000
2406 OXM: OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(05) -> 1000/1000,05
2407 OF1.0: 0000/1,05/0 -> b000/f000
2408 OF1.1: fffe/0,05/0 -> b000/f000
2409 ])
2410
2411 dnl [5]
2412 AT_CHECK([ovs-ofctl check-vlan babc ffff], [0], [dnl
2413 dl_vlan=2748,dl_vlan_pcp=5 -> babc/ffff
2414 NXM: NXM_OF_VLAN_TCI(babc) -> babc/ffff
2415 OXM: OXM_OF_VLAN_VID(1abc), OXM_OF_VLAN_PCP(05) -> 1abc/1fff,05
2416 OF1.0: 0abc/0,05/0 -> babc/ffff
2417 OF1.1: 0abc/0,05/0 -> babc/ffff
2418 ])
2419
2420 dnl [6]
2421 AT_CHECK([ovs-ofctl check-vlan 0000 0fff], [0], [dnl
2422 vlan_tci=0x0000/0x0fff -> 0000/0fff
2423 NXM: NXM_OF_VLAN_TCI_W(0000/0fff) -> 0000/0fff
2424 OXM: OXM_OF_VLAN_VID_W(0000/0fff) -> 0000/0fff,--
2425 OF1.0: 0000/0,00/1 -> 1000/1fff
2426 OF1.1: 0000/0,00/1 -> 1000/1fff
2427 ])
2428
2429 dnl [7]
2430 AT_CHECK([ovs-ofctl check-vlan 0000 f000], [0], [dnl
2431 vlan_tci=0x0000/0xf000 -> 0000/f000
2432 NXM: NXM_OF_VLAN_TCI_W(0000/f000) -> 0000/f000
2433 OXM: OXM_OF_VLAN_VID_W(0000/1000) -> 0000/1000,--
2434 OF1.0: ffff/0,00/1 -> 0000/ffff
2435 OF1.1: ffff/0,00/1 -> 0000/ffff
2436 ])
2437
2438 dnl [8]
2439 AT_CHECK([ovs-ofctl check-vlan 0000 efff], [0], [dnl
2440 vlan_tci=0x0000/0xefff -> 0000/efff
2441 NXM: NXM_OF_VLAN_TCI_W(0000/efff) -> 0000/efff
2442 OXM: OXM_OF_VLAN_VID_W(0000/0fff) -> 0000/0fff,--
2443 OF1.0: 0000/0,00/0 -> 1000/ffff
2444 OF1.1: 0000/0,00/0 -> 1000/ffff
2445 ])
2446
2447 dnl [9]
2448 AT_CHECK([ovs-ofctl check-vlan 1001 1001], [0], [dnl
2449 vlan_tci=0x1001/0x1001 -> 1001/1001
2450 NXM: NXM_OF_VLAN_TCI_W(1001/1001) -> 1001/1001
2451 OXM: OXM_OF_VLAN_VID_W(1001/1001) -> 1001/1001,--
2452 OF1.0: 0001/0,00/1 -> 1001/1fff
2453 OF1.1: 0001/0,00/1 -> 1001/1fff
2454 ])
2455
2456 dnl [10]
2457 AT_CHECK([ovs-ofctl check-vlan 3000 3000], [0], [dnl
2458 vlan_tci=0x3000/0x3000 -> 3000/3000
2459 NXM: NXM_OF_VLAN_TCI_W(3000/3000) -> 3000/3000
2460 OXM: OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01) -> 1000/1000,01
2461 OF1.0: 0000/1,01/0 -> 3000/f000
2462 OF1.1: fffe/0,01/0 -> 3000/f000
2463 ])
2464 AT_CHECK
2465 AT_CLEANUP
2466
2467 dnl Check that "-F openflow10" rejects a flow_mod with unsupported features,
2468 dnl such as tunnels and metadata.
2469 AT_SETUP([ovs-ofctl -F option and NXM features])
2470 AT_CHECK([ovs-ofctl -F openflow10 add-flow dummy tun_id=123,actions=drop],
2471   [1], [], [ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the allowed flow formats (OpenFlow10)
2472 ])
2473 AT_CHECK([ovs-ofctl -F openflow10 add-flow dummy metadata=123,actions=drop],
2474   [1], [], [ovs-ofctl: none of the usable flow formats (NXM,OXM,OpenFlow11) is among the allowed flow formats (OpenFlow10)
2475 ])
2476 AT_CLEANUP
2477
2478 dnl Check that "-F nxm" really forces add-flow to use the NXM flow format.
2479 dnl (If it doesn't, then either the tun_id won't show up at all, or it will
2480 dnl additionally show up as the top 32 bits of the cookie.)  This checks
2481 dnl for regression against bug #4566.
2482 AT_SETUP([ovs-ofctl -F option with flow_mods])
2483 OVS_VSWITCHD_START
2484 AT_CHECK([ovs-ofctl -F nxm add-flow br0 tun_id=0x12345678,actions=drop])
2485 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0], [dnl
2486 NXST_FLOW reply:
2487  tun_id=0x12345678 actions=drop
2488 ])
2489 OVS_VSWITCHD_STOP
2490 AT_CLEANUP
2491
2492 dnl Check that "-F openflow10" is really honored on dump-flows.
2493 dnl (If it isn't, then dump-flows will show the register match.)
2494 AT_SETUP([ovs-ofctl dump-flows honors -F option])
2495 OVS_VSWITCHD_START
2496 AT_CHECK([ovs-ofctl add-flow br0 reg0=0x12345,actions=drop])
2497 AT_CHECK([ovs-ofctl -F openflow10 dump-flows br0 | ofctl_strip], [0], [dnl
2498 OFPST_FLOW reply:
2499  actions=drop
2500 ])
2501 OVS_VSWITCHD_STOP
2502 AT_CLEANUP
2503
2504 dnl Check that "-F openflow10" fails on dump-flows if the requested match
2505 dnl can't be represented in OpenFlow 1.0.
2506 AT_SETUP([ovs-ofctl dump-flows rejects bad -F option])
2507 OVS_VSWITCHD_START
2508 AT_CHECK([ovs-ofctl -F openflow10 dump-flows unix:br0.mgmt reg0=0xabcdef], [1], [],
2509   [ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the allowed flow formats (OpenFlow10)
2510 ])
2511 OVS_VSWITCHD_STOP
2512 AT_CLEANUP
2513
2514 dnl Check that add-flow reports non-normalized flows (feature #5029).
2515 AT_SETUP([ovs-ofctl add-flow reports non-normalized flows])
2516 OVS_VSWITCHD_START
2517 AT_CHECK([ovs-ofctl TESTABLE_LOG add-flow br0 nw_src=1.2.3.4,actions=5],
2518   [0], [], [dnl
2519 ofp_util|INFO|normalization changed ofp_match, details:
2520 ofp_util|INFO| pre: nw_src=1.2.3.4
2521 ofp_util|INFO|post: @&t@
2522 ])
2523 OVS_VSWITCHD_STOP
2524 AT_CLEANUP
2525
2526 dnl Check that --sort and --rsort works with dump-flows
2527 dnl Default field is 'priority'. Flow entries are displayed based
2528 dnl on field to sort.
2529 AT_SETUP([ovs-ofctl dump-flows with sorting])
2530 OVS_VSWITCHD_START
2531 AT_KEYWORDS([sort])
2532 AT_DATA([allflows.txt], [[
2533 priority=4,in_port=23213 actions=output:42
2534 priority=5,in_port=1029 actions=output:43
2535 priority=7,in_port=1029 actions=output:43
2536 priority=3,in_port=1028 actions=output:44
2537 priority=1,in_port=1026 actions=output:45
2538 priority=6,in_port=1027 actions=output:64
2539 priority=2,in_port=1025 actions=output:47
2540 priority=8,tcp,tp_src=5 actions=drop
2541 priority=9,tcp,tp_src=6 actions=drop
2542 ]])
2543
2544 AT_CHECK([ovs-ofctl add-flows br0 allflows.txt
2545 ], [0], [ignore])
2546 AT_CHECK([ovs-ofctl --sort dump-flows br0 | ofctl_strip], [0], [dnl
2547  priority=1,in_port=1026 actions=output:45
2548  priority=2,in_port=1025 actions=output:47
2549  priority=3,in_port=1028 actions=output:44
2550  priority=4,in_port=23213 actions=output:42
2551  priority=5,in_port=1029 actions=output:43
2552  priority=6,in_port=1027 actions=output:64
2553  priority=7,in_port=1029 actions=output:43
2554  priority=8,tcp,tp_src=5 actions=drop
2555  priority=9,tcp,tp_src=6 actions=drop
2556 ])
2557 AT_CHECK([ovs-ofctl --rsort dump-flows br0 | ofctl_strip], [0], [dnl
2558  priority=9,tcp,tp_src=6 actions=drop
2559  priority=8,tcp,tp_src=5 actions=drop
2560  priority=7,in_port=1029 actions=output:43
2561  priority=6,in_port=1027 actions=output:64
2562  priority=5,in_port=1029 actions=output:43
2563  priority=4,in_port=23213 actions=output:42
2564  priority=3,in_port=1028 actions=output:44
2565  priority=2,in_port=1025 actions=output:47
2566  priority=1,in_port=1026 actions=output:45
2567 ])
2568 AT_CHECK([ovs-ofctl --sort=in_port dump-flows br0 | ofctl_strip], [0], [dnl
2569  priority=2,in_port=1025 actions=output:47
2570  priority=1,in_port=1026 actions=output:45
2571  priority=6,in_port=1027 actions=output:64
2572  priority=3,in_port=1028 actions=output:44
2573  priority=7,in_port=1029 actions=output:43
2574  priority=5,in_port=1029 actions=output:43
2575  priority=4,in_port=23213 actions=output:42
2576  priority=9,tcp,tp_src=6 actions=drop
2577  priority=8,tcp,tp_src=5 actions=drop
2578 ])
2579 AT_CHECK([ovs-ofctl --rsort=in_port dump-flows br0 | ofctl_strip], [0], [dnl
2580  priority=4,in_port=23213 actions=output:42
2581  priority=7,in_port=1029 actions=output:43
2582  priority=5,in_port=1029 actions=output:43
2583  priority=3,in_port=1028 actions=output:44
2584  priority=6,in_port=1027 actions=output:64
2585  priority=1,in_port=1026 actions=output:45
2586  priority=2,in_port=1025 actions=output:47
2587  priority=9,tcp,tp_src=6 actions=drop
2588  priority=8,tcp,tp_src=5 actions=drop
2589 ])
2590 AT_CHECK([ovs-ofctl --sort=tcp_src dump-flows br0 | ofctl_strip], [0], [dnl
2591  priority=8,tcp,tp_src=5 actions=drop
2592  priority=9,tcp,tp_src=6 actions=drop
2593  priority=7,in_port=1029 actions=output:43
2594  priority=6,in_port=1027 actions=output:64
2595  priority=5,in_port=1029 actions=output:43
2596  priority=4,in_port=23213 actions=output:42
2597  priority=3,in_port=1028 actions=output:44
2598  priority=2,in_port=1025 actions=output:47
2599  priority=1,in_port=1026 actions=output:45
2600 ])
2601 AT_CHECK(
2602   [ovs-ofctl --sort=in_port --sort=tcp_src dump-flows br0 | ofctl_strip], [0],
2603   [ priority=2,in_port=1025 actions=output:47
2604  priority=1,in_port=1026 actions=output:45
2605  priority=6,in_port=1027 actions=output:64
2606  priority=3,in_port=1028 actions=output:44
2607  priority=7,in_port=1029 actions=output:43
2608  priority=5,in_port=1029 actions=output:43
2609  priority=4,in_port=23213 actions=output:42
2610  priority=8,tcp,tp_src=5 actions=drop
2611  priority=9,tcp,tp_src=6 actions=drop
2612 ])
2613 OVS_VSWITCHD_STOP
2614 AT_CLEANUP
2615
2616 AT_SETUP([ovs-ofctl diff-flows])
2617 OVS_VSWITCHD_START
2618
2619 # Add tons of flows to br0.
2620 for i in `seq 0 1023`; do echo "dl_vlan=$i,actions=drop"; done > add-flows.txt
2621 AT_CHECK([ovs-ofctl add-flows br0 add-flows.txt])
2622
2623 # Dump them and compare against what we expect by hand, then with diff-flows.
2624 for i in `seq 0 1023`; do echo " dl_vlan=$i actions=drop"; done | sort > expout
2625 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sed '/NXST_FLOW/d' | sort],
2626   [0], [expout])
2627 AT_CHECK([ovs-ofctl diff-flows br0 add-flows.txt])
2628
2629 # Remove even-numbered flows, compare again.
2630 for i in `seq 0 1023 2`; do echo "dl_vlan=$i"; done > del-flows.txt
2631 AT_CHECK([ovs-ofctl del-flows br0 - < del-flows.txt])
2632 for i in `seq 0 1023 2`; do echo "+dl_vlan=$i actions=drop"; done | sort > expout
2633 AT_CHECK([ovs-ofctl diff-flows br0 add-flows.txt | sort], [0], [expout])
2634 for i in `seq 0 1023 2`; do echo "-dl_vlan=$i actions=drop"; done | sort > expout
2635 AT_CHECK([ovs-ofctl diff-flows add-flows.txt br0 | sort], [0], [expout])
2636
2637 OVS_VSWITCHD_STOP
2638 AT_CLEANUP
2639
2640 dnl ofpacts that differ bytewise don't necessarily differ when
2641 dnl converted to another representation, such as OpenFlow 1.0
2642 dnl or to a string.  "resubmit(,1)" is an example of an action
2643 dnl of this type: "ofpact_resubmit"s can differ in their "compat"
2644 dnl values even though this doesn't affect the string format.
2645 dnl
2646 dnl This test checks that "ovs-ofctl diff-flows" doesn't report
2647 dnl false ofpacts differences.
2648 AT_SETUP([ovs-ofctl diff-flows - suppress false differences])
2649 OVS_VSWITCHD_START
2650 AT_DATA([flows.txt], [actions=resubmit(,1)
2651 ])
2652 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2653 AT_CHECK([ovs-ofctl diff-flows br0 flows.txt])
2654 AT_CHECK([ovs-ofctl add-flow br0 idle_timeout=60,dl_vlan=9,actions=output:1])
2655 AT_CHECK([ovs-ofctl diff-flows br0 flows.txt], [2], [dnl
2656 -dl_vlan=9 idle_timeout=60 actions=output:1
2657 ])
2658 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=120,cookie=1234,dl_vlan=9,actions=output:1])
2659 AT_CHECK([ovs-ofctl diff-flows flows.txt br0], [2], [dnl
2660 +dl_vlan=9 cookie=0x4d2 hard_timeout=120 actions=output:1
2661 ])
2662 OVS_VSWITCHD_STOP
2663 AT_CLEANUP
2664
2665 AT_SETUP([ovs-ofctl -F and -O interaction])
2666 AT_CHECK([ovs-ofctl -F oxm -O openflow10], [1], [],
2667   [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.)
2668 ])
2669 AT_CHECK([ovs-ofctl -F oxm -O openflow11], [1], [],
2670   [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.)
2671 ])
2672 AT_CHECK([ovs-ofctl -F oxm -O openflow10,openflow11], [1], [],
2673   [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.)
2674 ])
2675 AT_CHECK([ovs-ofctl -F oxm -O openflow10,openflow12], [1], [],
2676  [ovs-ofctl: missing command name; use --help for help
2677 ])
2678 AT_CHECK([ovs-ofctl -F oxm -O openflow12], [1], [],
2679   [ovs-ofctl: missing command name; use --help for help
2680 ])
2681 AT_CHECK([ovs-ofctl -F oxm -O openflow13], [1], [],
2682   [ovs-ofctl: missing command name; use --help for help
2683 ])
2684 AT_CLEANUP
2685
2686 AT_SETUP([ovs-ofctl ofp-parse])
2687 # Test the echo request/reply messages (0 payload).
2688 AT_CHECK([printf '\1\2\0\10\0\0\0\0\1\3\0\10\0\0\0\0' > binary_ofp_msg])
2689 AT_CHECK([ovs-ofctl ofp-parse binary_ofp_msg], [0], [dnl
2690 OFPT_ECHO_REQUEST (xid=0x0): 0 bytes of payload
2691 OFPT_ECHO_REPLY (xid=0x0): 0 bytes of payload
2692 ])
2693
2694 # Test the hello (xid:1 3-byte payload).
2695 AT_CHECK([printf '\1\0\0\13\0\0\0\1\101\102\103' > binary_ofp_msg])
2696 AT_CHECK([ovs-ofctl ofp-parse - < binary_ofp_msg], [0], [dnl
2697 OFPT_HELLO (xid=0x1):
2698  version bitmap: 0x01
2699  unknown data in hello:
2700 00000000  01 00 00 0b 00 00 00 01-41 42 43                |........ABC     |
2701 ])
2702 AT_CLEANUP
2703
2704 AT_SETUP([tcp flags - filtering])
2705 OVS_VSWITCHD_START([add-port br0 p1 -- set Interface p1 type=dummy ofport_request=1 \
2706                     -- add-port br0 p2 -- set Interface p2 type=dummy ofport_request=2])
2707 AT_DATA([flows.txt], [dnl
2708         in_port=1,tcp,tp_dst=80,tcp_flags=+syn-rst-ack-fin,action=2  # Allow outbound web traffic bare-SYN
2709         in_port=1,tcp,tp_dst=80,tcp_flags=+ack,action=2  # Allow outbound web traffic with ACK bit
2710         in_port=1,tcp,tp_dst=80,tcp_flags=+rst,action=2  # Allow outbound web traffic with RST bit
2711         in_port=2,tcp,tp_src=80,tcp_flags=+ack,action=1  # Allow inbound web traffic with ACK bit
2712         in_port=2,tcp,tp_src=80,tcp_flags=+rst,action=1  # Allow inbound web traffic with RST bit
2713         priority=0,in_port=1,action=drop  # Default drop outbound
2714         priority=0,in_port=2,action=drop  # Default drop inbound
2715 ])
2716
2717 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2718
2719 AT_CHECK([ovs-ofctl add-flow br0 "tcp,tcp_flags=+ack-ack,action="], [1], [],
2720   [ovs-ofctl: ack: Each TCP flag can be specified only once
2721 ])
2722
2723 AT_CHECK([ovs-appctl dpif/show | tail -n +4], [0], [dnl
2724                 p1 1/1: (dummy)
2725                 p2 2/2: (dummy)
2726 ])
2727
2728 dnl Outbound web traffic with bare-SYN
2729 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])
2730 AT_CHECK([tail -1 stdout], [0],
2731   [Datapath actions: 2
2732 ])
2733
2734 dnl Outbopund web traffic with ACK bit
2735 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])
2736 AT_CHECK([tail -1 stdout], [0],
2737   [Datapath actions: 2
2738 ])
2739
2740 dnl Outbound web traffic with RST bit
2741 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])
2742 AT_CHECK([tail -1 stdout], [0],
2743   [Datapath actions: 2
2744 ])
2745
2746 dnl Inbound web traffic with ACK bit
2747 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])
2748 AT_CHECK([tail -1 stdout], [0],
2749   [Datapath actions: 1
2750 ])
2751
2752 dnl Inbound web traffic with RST bit
2753 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])
2754 AT_CHECK([tail -1 stdout], [0],
2755   [Datapath actions: 1
2756 ])
2757
2758 dnl Inbound web traffic with SYN bit without ACK or RST bits
2759 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])
2760 AT_CHECK([tail -1 stdout], [0],
2761   [Datapath actions: drop
2762 ])
2763
2764 OVS_VSWITCHD_STOP
2765 AT_CLEANUP
2766
2767 dnl Check importance parameter added in OF1.4.
2768 dnl It validates whether importance set via add-flow via OpenFlow1.4+ gets
2769 dnl set or not by validating it againt the dump-flows output via OpenFlow1.4+
2770 dnl If add-flow or dump-flows is used with later version of OpenFlow prior to 1.4+
2771 dnl then the importance will be considered zero whether provided as an argument.
2772
2773 AT_SETUP([ovs-ofctl rule with importance])
2774 OVS_VSWITCHD_START
2775 dnl Flow with importance parameter added via OF1.4+ and later version
2776 AT_CHECK([ovs-ofctl -O OpenFlow14 add-flow br0 priority=21,importance=21,actions=normal])
2777 AT_CHECK([ovs-ofctl add-flow br0 priority=22,importance=22,actions=normal])
2778
2779 dnl Importance parameter will only be visible of flows that are added via OF1.4+ if dumped via OF1.4+
2780 AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip | sed '/ST_FLOW reply/d' | sort], [0], [dnl
2781  importance=21, priority=21 actions=NORMAL
2782  priority=22 actions=NORMAL
2783 ])
2784
2785 dnl Importance parameter will not be visible if flow is dumped with previous version prior to OF1.4+ whether added via OF1.4+
2786 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sed '/ST_FLOW reply/d' | sort], [0], [dnl
2787  priority=21 actions=NORMAL
2788  priority=22 actions=NORMAL
2789 ])
2790
2791 OVS_VSWITCHD_STOP
2792 AT_CLEANUP
2793
2794
2795 dnl Importance parameter added in OF1.4.
2796 dnl This validates whether flows with importance
2797 dnl parameter are getting replaced with "replace-flows" or
2798 dnl not by validating dump-flows output after replace with the expected output.
2799
2800 AT_SETUP([ovs-ofctl replace-flows with importance])
2801 OVS_VSWITCHD_START
2802
2803 dnl Add flows to br0 with importance via OF1.4+. For more details refer "ovs-ofctl rule with importance" test case.
2804 for i in 1 2 3 4 5 6 7 8; do echo "dl_vlan=$i,importance=$i,actions=drop"; done > add-flows.txt
2805 AT_CHECK([ovs-ofctl -O OpenFlow14 add-flows br0 add-flows.txt])
2806
2807 dnl Replace some flows in the bridge.
2808 for i in 1 3 5 7; do echo "dl_vlan=$i,importance=`expr $i + 10`,actions=drop"; done > replace-flows.txt
2809 AT_CHECK([ovs-ofctl -O OpenFlow14 replace-flows br0 replace-flows.txt])
2810
2811 dnl Dump them and compare the dump flows output against the expected output.
2812 for i in 1 2 3 4 5 6 7 8; do if [[ `expr $i % 2` -eq 1 ]]; then importance=`expr $i + 10`; else importance=$i; fi; echo " importance=$importance, dl_vlan=$i actions=drop"; done | sort > expout
2813 AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip | sed '/OFPST_FLOW/d' | sort],
2814   [0], [expout])
2815
2816 OVS_VSWITCHD_STOP
2817 AT_CLEANUP
2818
2819 AT_SETUP([ovs-ofctl replace-flows with --bundle])
2820 OVS_VSWITCHD_START
2821
2822 AT_CHECK([ovs-appctl vlog/set vconn:dbg])
2823
2824 dnl Add flows to br0 with importance via OF1.4+, using an OF1.4+ bundle. For more details refer "ovs-ofctl rule with importance" test case.
2825 for i in 1 2 3 4 5 6 7 8; do echo "dl_vlan=$i,importance=$i,actions=drop"; done > add-flows.txt
2826 AT_CHECK([ovs-ofctl --bundle add-flows br0 add-flows.txt])
2827
2828 dnl Replace some flows in the bridge.
2829 for i in 1 3 5 7; do echo "dl_vlan=$i,importance=`expr $i + 10`,actions=drop"; done > replace-flows.txt
2830 AT_CHECK([ovs-ofctl --bundle replace-flows br0 replace-flows.txt])
2831
2832 dnl Dump them and compare the dump flows output against the expected output.
2833 for i in 1 2 3 4 5 6 7 8; do if [[ `expr $i % 2` -eq 1 ]]; then importance=`expr $i + 10`; else importance=$i; fi; echo " importance=$importance, dl_vlan=$i actions=drop"; done | sort > expout
2834 AT_CHECK([ovs-ofctl -O OpenFlow14 dump-flows br0 | ofctl_strip | sed '/OFPST_FLOW/d' | sort],
2835   [0], [expout])
2836
2837 dnl Check logs for OpenFlow trace
2838 # Prevent race.
2839 OVS_WAIT_UNTIL([cat ovs-vswitchd.log | vconn_windows_sub | test `grep -- "|vconn|DBG|unix: sent (Success): OFPST_FLOW reply" | wc -l` -ge 2])
2840 # AT_CHECK([sed -n "s/^.*\(|vconn|DBG|.*xid=.*:\).*$/\1/p" ovs-vswitchd.log], [0], [dnl
2841 AT_CHECK([print_vconn_debug | vconn_windows_sub | ofctl_strip], [0], [dnl
2842 vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
2843  version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
2844 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
2845  version bitmap: 0x01, 0x05
2846 vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports versions 0x01, 0x05)
2847 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2848  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
2849 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2850  bundle_id=0 type=OPEN_REPLY flags=0
2851 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2852  bundle_id=0 flags=atomic ordered
2853 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=1 importance:1 actions=drop
2854 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2855  bundle_id=0 flags=atomic ordered
2856 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=2 importance:2 actions=drop
2857 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2858  bundle_id=0 flags=atomic ordered
2859 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=3 importance:3 actions=drop
2860 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2861  bundle_id=0 flags=atomic ordered
2862 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=4 importance:4 actions=drop
2863 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2864  bundle_id=0 flags=atomic ordered
2865 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=5 importance:5 actions=drop
2866 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2867  bundle_id=0 flags=atomic ordered
2868 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=6 importance:6 actions=drop
2869 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2870  bundle_id=0 flags=atomic ordered
2871 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=7 importance:7 actions=drop
2872 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2873  bundle_id=0 flags=atomic ordered
2874 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=8 importance:8 actions=drop
2875 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2876  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
2877 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2878  bundle_id=0 type=COMMIT_REPLY flags=0
2879 vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
2880  version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
2881 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
2882  version bitmap: 0x01, 0x05
2883 vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports versions 0x01, 0x05)
2884 vconn|DBG|unix: received: OFPST_FLOW request (OF1.4):
2885 vconn|DBG|unix: sent (Success): OFPST_FLOW reply (OF1.4):
2886 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2887  bundle_id=0 type=OPEN_REQUEST flags=atomic ordered
2888 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2889  bundle_id=0 type=OPEN_REPLY flags=0
2890 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2891  bundle_id=0 flags=atomic ordered
2892 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=1 importance:11 actions=drop
2893 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2894  bundle_id=0 flags=atomic ordered
2895 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=3 importance:13 actions=drop
2896 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2897  bundle_id=0 flags=atomic ordered
2898 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=5 importance:15 actions=drop
2899 vconn|DBG|unix: received: OFPT_BUNDLE_ADD_MESSAGE (OF1.4):
2900  bundle_id=0 flags=atomic ordered
2901 OFPT_FLOW_MOD (OF1.4): ADD dl_vlan=7 importance:17 actions=drop
2902 vconn|DBG|unix: received: OFPT_BUNDLE_CONTROL (OF1.4):
2903  bundle_id=0 type=COMMIT_REQUEST flags=atomic ordered
2904 vconn|DBG|unix: sent (Success): OFPT_BUNDLE_CONTROL (OF1.4):
2905  bundle_id=0 type=COMMIT_REPLY flags=0
2906 vconn|DBG|unix: sent (Success): OFPT_HELLO (OF1.5):
2907  version bitmap: 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
2908 vconn|DBG|unix: received: OFPT_HELLO (OF1.4):
2909  version bitmap: 0x05
2910 vconn|DBG|unix: negotiated OpenFlow version 0x05 (we support version 0x06 and earlier, peer supports version 0x05)
2911 vconn|DBG|unix: received: OFPST_FLOW request (OF1.4):
2912 vconn|DBG|unix: sent (Success): OFPST_FLOW reply (OF1.4):
2913  importance=2, dl_vlan=2 actions=drop
2914  importance=4, dl_vlan=4 actions=drop
2915  importance=6, dl_vlan=6 actions=drop
2916  importance=8, dl_vlan=8 actions=drop
2917  importance=11, dl_vlan=1 actions=drop
2918  importance=13, dl_vlan=3 actions=drop
2919  importance=15, dl_vlan=5 actions=drop
2920  importance=17, dl_vlan=7 actions=drop
2921 ])
2922
2923 OVS_VSWITCHD_STOP
2924 AT_CLEANUP