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