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