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