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