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