lib/ofp-actions: Enforce action consistency.
[cascardo/ovs.git] / tests / ovs-ofctl.at
1 AT_BANNER([ovs-ofctl])
2
3 AT_SETUP([ovs-ofctl parse-flows choice of protocol])
4 # This doesn't cover some potential vlan_tci test cases.
5 for test_case in \
6     'tun_id=0                                    NXM,OXM' \
7     'tun_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 # UDP source port
543 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC(8732)
544 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/01FF)
545 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/ffff)
546 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/0000)
547 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_UDP_SRC(7823)
548
549 # UDP destination port
550 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST(1782)
551 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/F00F)
552 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/FFFF)
553 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/0000)
554 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(02) NXM_OF_UDP_DST(1293)
555
556 # ICMP type
557 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_TYPE(12)
558 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_TYPE(10)
559
560 # ICMP code
561 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_CODE(12)
562 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_CODE(10)
563 NXM_OF_ETH_TYPE(0800) NXM_OF_ICMP_CODE(10)
564 NXM_OF_ICMP_CODE(00)
565
566 # ARP opcode
567 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001)
568 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(1111)
569 NXM_OF_ETH_TYPE(0000) NXM_OF_ARP_OP(0001)
570 NXM_OF_ARP_OP(0001)
571 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001) NXM_OF_ARP_OP(0001)
572
573 # ARP source protocol address
574 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA(ac100014)
575 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
576 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/aaaaaa00)
577 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/ffffffff)
578 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/00000000)
579 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
580 NXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
581
582 # ARP destination protocol address
583 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA(ac100014)
584 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
585 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/77777777)
586 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/ffffffff)
587 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a81234/00000000)
588 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
589 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
590
591 # ARP source hardware address
592 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_SHA(0002e30f80a4)
593 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_SHA(0002e30f80a4)
594 NXM_NX_ARP_SHA(0002e30f80a4)
595
596 # ARP destination hardware address
597 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_THA(0002e30f80a4)
598 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_THA(0002e30f80a4)
599 NXM_NX_ARP_THA(0002e30f80a4)
600
601 # RARP opcode
602 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(0003)
603 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(1111)
604 NXM_OF_ETH_TYPE(0000) NXM_OF_ARP_OP(0003)
605 NXM_OF_ARP_OP(0003)
606 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_OP(0003) NXM_OF_ARP_OP(0003)
607
608 # RARP source protocol address
609 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA(ac100014)
610 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
611 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/aaaaaa00)
612 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/ffffffff)
613 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_SPA_W(C0a81234/00000000)
614 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
615 NXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
616
617 # RARP destination protocol address
618 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA(ac100014)
619 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
620 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/77777777)
621 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/ffffffff)
622 NXM_OF_ETH_TYPE(8035) NXM_OF_ARP_TPA_W(C0a81234/00000000)
623 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
624 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
625
626 # RARP source hardware address
627 NXM_OF_ETH_TYPE(8035) NXM_NX_ARP_SHA(0002e30f80a4)
628 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_SHA(0002e30f80a4)
629 NXM_NX_ARP_SHA(0002e30f80a4)
630
631 # RARP destination hardware address
632 NXM_OF_ETH_TYPE(8035) NXM_NX_ARP_THA(0002e30f80a4)
633 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_THA(0002e30f80a4)
634 NXM_NX_ARP_THA(0002e30f80a4)
635
636 # IPv6 source
637 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
638 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
639 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
640 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/5a5a5a5a5a5a5a5a0000000000000000)
641 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
642 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
643 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
644
645 # IPv6 destination
646 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
647 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
648 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/77777777777777777777777777777777)
649 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
650 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
651 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
652
653 # IPv6 Flow Label
654 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_LABEL(1000000f)
655 NXM_NX_IPV6_LABEL(0000000f)
656 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_LABEL(0000000f)
657
658 # ND target address
659 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
660 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
661 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/0123456789abcdeffedcba9876543210)
662 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/ffffffffffffffffffffffffffffffff)
663 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(87) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/00000000000000000000000000000000)
664 NXM_OF_ETH_TYPE(86dd) NXM_OF_IP_PROTO(3a) NXM_NX_ICMPV6_TYPE(88) NXM_NX_ND_TARGET_W(20010db83c4d00010002000300040005/fedcba98765432100123456789abcdef)
665
666 # ND source hardware address
667 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)
668 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)
669 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)
670 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)
671
672 # ND destination hardware address
673 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)
674 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)
675 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)
676 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)
677
678 # IPv4 fragments.
679 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(00)
680 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(01)
681 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(02)
682 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(03)
683 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/03)
684 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/fd)
685 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/02)
686 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(01/01)
687 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(02/02)
688 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/03)
689 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/ff)
690 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/00)
691 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(f3)
692
693 # IPv6 fragments.
694 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(00)
695 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(01)
696 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(02)
697 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(03)
698 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/03)
699 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/01)
700 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/02)
701 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(01/01)
702 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(02/02)
703 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/03)
704 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/00)
705 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/ff)
706 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(f3)
707
708 # Flow cookie.
709 NXM_NX_COOKIE(00000000abcdef01)
710 NXM_NX_COOKIE_W(84200000abcdef01/84200000FFFFFFFF)
711 NXM_NX_COOKIE_W(84200000abcdef01/ffffffffffffffff)
712 NXM_NX_COOKIE_W(84200000abcdef01/0000000000000000)
713
714 # Tunnel ID.
715 NXM_NX_TUN_ID(00000000abcdef01)
716 NXM_NX_TUN_ID_W(84200000abcdef01/84200000FFFFFFFF)
717 NXM_NX_TUN_ID_W(84200000abcdef01/FFFFFFFFFFFFFFFF)
718 NXM_NX_TUN_ID_W(84200000abcdef01/0000000000000000)
719
720 # Register 0.
721 NXM_NX_REG0(acebdf56)
722 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
723 NXM_NX_REG0_W(a0e0d050/ffffffff)
724 NXM_NX_REG0_W(a0e0d050/00000000)
725
726 # Invalid field number.
727 01020304(1111/2222)
728
729 # Unimplemented registers.
730 #
731 # This test assumes that at least two registers, but fewer than 16,
732 # registers are implemented.
733 00010004(12345678)
734 00010108(12345678/12345678)
735 00011e04(12345678)
736 00011f08(12345678/12345678)
737 ])
738 AT_CHECK([ovs-ofctl -vPATTERN:'console:%c|%p|%m' --strict parse-nx-match < nx-match.txt], [0], [dnl
739 <any>
740
741 # in port
742 NXM_OF_IN_PORT(0000)
743 NXM_OF_IN_PORT(fffe)
744
745 # eth dst
746 NXM_OF_ETH_DST(0002e30f80a4)
747 NXM_OF_ETH_DST_W(010000000000/010000000000)
748 NXM_OF_ETH_DST_W(000000000000/010000000000)
749 NXM_OF_ETH_DST_W(010000000000/010000000000)
750 NXM_OF_ETH_DST(0002e30f80a4)
751 <any>
752 NXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
753 NXM_OF_ETH_DST_W(40125218000a/5a5a5a5a5a5a)
754
755 # eth src
756 NXM_OF_ETH_SRC(020898456ddb)
757 NXM_OF_ETH_SRC_W(012345014545/ffffff555555)
758 NXM_OF_ETH_SRC(020898456ddb)
759 <any>
760
761 # eth type
762 NXM_OF_ETH_TYPE(0800)
763 NXM_OF_IN_PORT(0012), NXM_OF_ETH_TYPE(0800) 
764
765 # vlan tci
766 NXM_OF_VLAN_TCI(f009)
767 nx_pull_match() returned error OFPBMC_DUP_FIELD
768 NXM_OF_VLAN_TCI(0000)
769 NXM_OF_VLAN_TCI(3123)
770 NXM_OF_VLAN_TCI(0123)
771 NXM_OF_VLAN_TCI_W(1123/1fff)
772 NXM_OF_VLAN_TCI(1123)
773 <any>
774 NXM_OF_VLAN_TCI_W(f000/f000)
775 NXM_OF_VLAN_TCI_W(0000/e000)
776
777 # IP TOS
778 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_TOS(f0)
779 nx_pull_match() returned error OFPBMC_BAD_VALUE
780 nx_pull_match() returned error OFPBMC_BAD_PREREQ
781
782 # IP ECN
783 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_ECN(03)
784 nx_pull_match() returned error OFPBMC_BAD_VALUE
785 nx_pull_match() returned error OFPBMC_BAD_PREREQ
786
787 # IP protocol
788 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01)
789 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(05)
790 nx_pull_match() returned error OFPBMC_BAD_PREREQ
791
792 # IP TTL
793 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_TTL(80)
794 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_TTL(ff)
795 nx_pull_match() returned error OFPBMC_BAD_PREREQ
796
797 # IP source
798 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(ac100014)
799 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(c0a80000/ffff0000)
800 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(40080000/5a5a5a5a)
801 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(c0a80000)
802 NXM_OF_ETH_TYPE(0800)
803 nx_pull_match() returned error OFPBMC_BAD_PREREQ
804 nx_pull_match() returned error OFPBMC_BAD_PREREQ
805
806 # IP destination
807 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(ac100014)
808 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST_W(c0a80000/ffff0000)
809 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST_W(40080000/5a5a5a5a)
810 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(c0a80000)
811 NXM_OF_ETH_TYPE(0800)
812 nx_pull_match() returned error OFPBMC_BAD_PREREQ
813 nx_pull_match() returned error OFPBMC_BAD_PREREQ
814
815 # TCP source port
816 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(4231)
817 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC_W(5050/f0f0)
818 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(5050)
819 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06)
820 nx_pull_match() returned error OFPBMC_BAD_PREREQ
821
822 # TCP destination port
823 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(4231)
824 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST_W(fde0/fff0)
825 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(fde0)
826 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06)
827 nx_pull_match() returned error OFPBMC_BAD_PREREQ
828
829 # UDP source port
830 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(8732)
831 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC_W(0132/01ff)
832 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(0132)
833 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11)
834 nx_pull_match() returned error OFPBMC_BAD_PREREQ
835
836 # UDP destination port
837 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(1782)
838 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST_W(5005/f00f)
839 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(5005)
840 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11)
841 nx_pull_match() returned error OFPBMC_BAD_PREREQ
842
843 # ICMP type
844 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_TYPE(12)
845 nx_pull_match() returned error OFPBMC_BAD_PREREQ
846
847 # ICMP code
848 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_CODE(12)
849 nx_pull_match() returned error OFPBMC_BAD_PREREQ
850 nx_pull_match() returned error OFPBMC_BAD_PREREQ
851 nx_pull_match() returned error OFPBMC_BAD_PREREQ
852
853 # ARP opcode
854 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_OP(0001)
855 nx_pull_match() returned error OFPBMC_BAD_VALUE
856 nx_pull_match() returned error OFPBMC_BAD_PREREQ
857 nx_pull_match() returned error OFPBMC_BAD_PREREQ
858 nx_pull_match() returned error OFPBMC_DUP_FIELD
859
860 # ARP source protocol address
861 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(ac100014)
862 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA_W(c0a81200/ffffff00)
863 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA_W(80a80200/aaaaaa00)
864 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(c0a81234)
865 NXM_OF_ETH_TYPE(0806)
866 nx_pull_match() returned error OFPBMC_BAD_PREREQ
867 nx_pull_match() returned error OFPBMC_BAD_PREREQ
868
869 # ARP destination protocol address
870 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(ac100014)
871 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA_W(c0a81200/ffffff00)
872 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA_W(40201234/77777777)
873 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(c0a81234)
874 NXM_OF_ETH_TYPE(0806)
875 nx_pull_match() returned error OFPBMC_BAD_PREREQ
876 nx_pull_match() returned error OFPBMC_BAD_PREREQ
877
878 # ARP source hardware address
879 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_SHA(0002e30f80a4)
880 nx_pull_match() returned error OFPBMC_BAD_PREREQ
881 nx_pull_match() returned error OFPBMC_BAD_PREREQ
882
883 # ARP destination hardware address
884 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_THA(0002e30f80a4)
885 nx_pull_match() returned error OFPBMC_BAD_PREREQ
886 nx_pull_match() returned error OFPBMC_BAD_PREREQ
887
888 # RARP opcode
889 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_OP(0003)
890 nx_pull_match() returned error OFPBMC_BAD_VALUE
891 nx_pull_match() returned error OFPBMC_BAD_PREREQ
892 nx_pull_match() returned error OFPBMC_BAD_PREREQ
893 nx_pull_match() returned error OFPBMC_DUP_FIELD
894
895 # RARP source protocol address
896 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA(ac100014)
897 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA_W(c0a81200/ffffff00)
898 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA_W(80a80200/aaaaaa00)
899 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_SPA(c0a81234)
900 NXM_OF_ETH_TYPE(8035)
901 nx_pull_match() returned error OFPBMC_BAD_PREREQ
902 nx_pull_match() returned error OFPBMC_BAD_PREREQ
903
904 # RARP destination protocol address
905 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA(ac100014)
906 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA_W(c0a81200/ffffff00)
907 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA_W(40201234/77777777)
908 NXM_OF_ETH_TYPE(8035), NXM_OF_ARP_TPA(c0a81234)
909 NXM_OF_ETH_TYPE(8035)
910 nx_pull_match() returned error OFPBMC_BAD_PREREQ
911 nx_pull_match() returned error OFPBMC_BAD_PREREQ
912
913 # RARP source hardware address
914 NXM_OF_ETH_TYPE(8035), NXM_NX_ARP_SHA(0002e30f80a4)
915 nx_pull_match() returned error OFPBMC_BAD_PREREQ
916 nx_pull_match() returned error OFPBMC_BAD_PREREQ
917
918 # RARP destination hardware address
919 NXM_OF_ETH_TYPE(8035), NXM_NX_ARP_THA(0002e30f80a4)
920 nx_pull_match() returned error OFPBMC_BAD_PREREQ
921 nx_pull_match() returned error OFPBMC_BAD_PREREQ
922
923 # IPv6 source
924 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
925 nx_pull_match() returned error OFPBMC_BAD_PREREQ
926 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
927 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(00000818184800000000000000000000/5a5a5a5a5a5a5a5a0000000000000000)
928 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010000000000000000)
929 NXM_OF_ETH_TYPE(86dd)
930 nx_pull_match() returned error OFPBMC_BAD_PREREQ
931
932 # IPv6 destination
933 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
934 nx_pull_match() returned error OFPBMC_BAD_PREREQ
935 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST_W(20010530344500010000000000000000/77777777777777777777777777777777)
936 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST(20010db83c4d00010000000000000000)
937 NXM_OF_ETH_TYPE(86dd)
938 nx_pull_match() returned error OFPBMC_BAD_PREREQ
939
940 # IPv6 Flow Label
941 nx_pull_match() returned error OFPBMC_BAD_VALUE
942 nx_pull_match() returned error OFPBMC_BAD_PREREQ
943 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_LABEL(0000000f)
944
945 # ND target address
946 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
947 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(88), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
948 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET_W(00010520080900010000000000040000/0123456789abcdeffedcba9876543210)
949 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87), NXM_NX_ND_TARGET(20010db83c4d00010002000300040005)
950 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(87)
951 NXM_OF_ETH_TYPE(86dd), NXM_OF_IP_PROTO(3a), NXM_NX_ICMPV6_TYPE(88), NXM_NX_ND_TARGET_W(20000898344400000002000300000005/fedcba98765432100123456789abcdef)
952
953 # ND source hardware address
954 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)
955 nx_pull_match() returned error OFPBMC_BAD_PREREQ
956 nx_pull_match() returned error OFPBMC_BAD_PREREQ
957 nx_pull_match() returned error OFPBMC_BAD_PREREQ
958
959 # ND destination hardware address
960 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)
961 nx_pull_match() returned error OFPBMC_BAD_PREREQ
962 nx_pull_match() returned error OFPBMC_BAD_PREREQ
963 nx_pull_match() returned error OFPBMC_BAD_PREREQ
964
965 # IPv4 fragments.
966 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
967 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(01)
968 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(02)
969 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
970 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
971 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/01)
972 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/02)
973 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(01/01)
974 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(02/02)
975 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
976 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
977 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
978 nx_pull_match() returned error OFPBMC_BAD_VALUE
979
980 # IPv6 fragments.
981 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
982 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(01)
983 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(02)
984 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
985 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
986 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/01)
987 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/02)
988 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(01/01)
989 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(02/02)
990 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
991 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
992 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
993 nx_pull_match() returned error OFPBMC_BAD_VALUE
994
995 # Flow cookie.
996 NXM_NX_COOKIE(00000000abcdef01)
997 NXM_NX_COOKIE_W(84200000abcdef01/84200000ffffffff)
998 NXM_NX_COOKIE(84200000abcdef01)
999 <any>
1000
1001 # Tunnel ID.
1002 NXM_NX_TUN_ID(00000000abcdef01)
1003 NXM_NX_TUN_ID_W(84200000abcdef01/84200000ffffffff)
1004 NXM_NX_TUN_ID(84200000abcdef01)
1005 <any>
1006
1007 # Register 0.
1008 NXM_NX_REG0(acebdf56)
1009 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
1010 NXM_NX_REG0(a0e0d050)
1011 <any>
1012
1013 # Invalid field number.
1014 nx_pull_match() returned error OFPBMC_BAD_FIELD
1015
1016 # Unimplemented registers.
1017 #
1018 # This test assumes that at least two registers, but fewer than 16,
1019 # registers are implemented.
1020 NXM_NX_REG0(12345678)
1021 NXM_NX_REG0_W(12345678/12345678)
1022 nx_pull_match() returned error OFPBMC_BAD_FIELD
1023 nx_pull_match() returned error OFPBMC_BAD_FIELD
1024 ], [stderr])
1025
1026 # Check that at least the first warning made it.  (It's rate-limited
1027 # so a variable number could show up, especially under valgrind etc.)
1028 AT_CHECK([grep 'has 1-bits in value' stderr | sed 1q], [0], [dnl
1029 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.)
1030 ])
1031
1032 # Check that there wasn't any other stderr output.
1033 AT_CHECK([grep -v 'has 1-bits in value' stderr], [1])
1034 AT_CLEANUP
1035
1036 AT_SETUP([ovs-ofctl parse-ofp10-match])
1037 AT_KEYWORDS([OF1.0])
1038 AT_DATA([test-data], [dnl
1039 # in_port=LOCAL
1040 003820fe fffe xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx xxxx xx xx xxxx dnl
1041 xxxxxxxx xxxxxxxx xxxx xxxx
1042
1043 # dl_src=00:01:02:03:04:05
1044 003820fb xxxx 000102030405 xxxxxxxxxxxx xxxx xx xx xxxx xx xx xxxx dnl
1045 xxxxxxxx xxxxxxxx xxxx xxxx
1046
1047 # dl_dst=10:20:30:40:50:60
1048 003820f7 xxxx xxxxxxxxxxxx 102030405060 xxxx xx xx xxxx xx xx xxxx dnl
1049 xxxxxxxx xxxxxxxx xxxx xxxx
1050
1051 # dl_vlan=291
1052 003820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx 0123 xx xx xxxx xx xx xxxx dnl
1053 xxxxxxxx xxxxxxxx xxxx xxxx
1054
1055 # dl_vlan_pcp=5
1056 002820ff xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx 05 xx xxxx xx xx xxxx dnl
1057 xxxxxxxx xxxxxxxx xxxx xxxx
1058
1059 # dl_vlan=291,dl_vlan_pcp=4
1060 002820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx 0123 04 xx xxxx xx xx xxxx dnl
1061 xxxxxxxx xxxxxxxx xxxx xxxx
1062
1063 # vlan_tci=0x0000
1064 003820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx ffff xx xx xxxx xx xx xxxx dnl
1065 xxxxxxxx xxxxxxxx xxxx xxxx
1066
1067 dnl dl_vlan_pcp doesn't make sense when dl_vlan is "none", so
1068 dnl OVS ignores it and drops it on output.
1069 # vlan_tci=0x0000
1070 #  1: 28 -> 38
1071 # 20: 05 -> 00
1072 002820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx ffff 05 xx xxxx xx xx xxxx dnl
1073 xxxxxxxx xxxxxxxx xxxx xxxx
1074
1075 dnl Invalid VID and PCP discards out-of-range bits:
1076 # dl_vlan=256,dl_vlan_pcp=7
1077 # 18: f1 -> 01
1078 # 20: ff -> 07
1079 002820fd xxxx xxxxxxxxxxxx xxxxxxxxxxxx f100 ff xx xxxx xx xx xxxx dnl
1080 xxxxxxxx xxxxxxxx xxxx xxxx
1081
1082 # dl_type=0x1234
1083 003820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx xx xxxx dnl
1084 xxxxxxxx xxxxxxxx xxxx xxxx
1085
1086 # ip,nw_proto=5
1087 003820cf xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 05 xxxx dnl
1088 xxxxxxxx xxxxxxxx xxxx xxxx
1089
1090 dnl Ignore nw_proto if not IP or ARP:
1091 # dl_type=0x1234,nw_proto=5
1092 # normal:  3: cf -> ef
1093 # normal: 25: 05 -> 00
1094 & ofp_util|INFO|normalization changed ofp_match, details:
1095 & ofp_util|INFO| pre: dl_type=0x1234,nw_proto=5
1096 & ofp_util|INFO|post: dl_type=0x1234
1097 003820cf xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx 05 xxxx dnl
1098 xxxxxxxx xxxxxxxx xxxx xxxx
1099
1100 # ip,nw_tos=252
1101 001820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 fc xx xxxx dnl
1102 xxxxxxxx xxxxxxxx xxxx xxxx
1103
1104 dnl Ignore nw_tos if not IP:
1105 # arp,nw_tos=4
1106 # 24: 05 -> 04
1107 # normal:  1: 18 -> 38
1108 # normal: 24: 04 -> 00
1109 & ofp_util|INFO|normalization changed ofp_match, details:
1110 & ofp_util|INFO| pre: arp,nw_tos=4
1111 & ofp_util|INFO|post: arp
1112 001820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 05 xx xxxx dnl
1113 xxxxxxxx xxxxxxxx xxxx xxxx
1114
1115 dnl Low 2 bits of invalid TOS are forced to 0:
1116 # ip,nw_tos=48
1117 # 24: 31 -> 30
1118 001820ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 31 xx xxxx dnl
1119 xxxxxxxx xxxxxxxx xxxx xxxx
1120
1121 # arp,arp_op=2
1122 003820cf xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx 02 xxxx dnl
1123 xxxxxxxx xxxxxxxx xxxx xxxx
1124
1125 # ip,nw_src=192.168.128.85
1126 003800ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1127 c0a88055 xxxxxxxx xxxx xxxx
1128
1129 # ip,nw_src=192.168.128.0/24
1130 # 31: 55 -> 00
1131 003808ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1132 c0a88055 xxxxxxxx xxxx xxxx
1133
1134 # ip,nw_dst=192.168.128.85
1135 003020ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1136 xxxxxxxx c0a88055 xxxx xxxx
1137
1138 # ip,nw_dst=192.168.128.0/24
1139 # 35: 55 -> 00
1140 003220ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx xx xxxx dnl
1141 xxxxxxxx c0a88055 xxxx xxxx
1142
1143 # arp,arp_spa=192.168.128.85
1144 003800ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1145 c0a88055 xxxxxxxx xxxx xxxx
1146
1147 # arp,arp_spa=192.168.128.0/24
1148 # 31: 55 -> 00
1149 003808ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1150 c0a88055 xxxxxxxx xxxx xxxx
1151
1152 # arp,arp_tpa=192.168.128.85
1153 003020ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1154 xxxxxxxx c0a88055 xxxx xxxx
1155
1156 # arp,arp_tpa=192.168.128.0/24
1157 # 35: 55 -> 00
1158 003220ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0806 xx xx xxxx dnl
1159 xxxxxxxx c0a88055 xxxx xxxx
1160
1161 dnl Ignore nw_src if not IP or ARP:
1162 # dl_type=0x1234,nw_src=192.168.128.0/24
1163 # 31: 55 -> 00
1164 # normal:  2: 08 -> 20
1165 # normal: 28: c0 -> 00
1166 # normal: 29: a8 -> 00
1167 # normal: 30: 80 -> 00
1168 & ofp_util|INFO|normalization changed ofp_match, details:
1169 & ofp_util|INFO| pre: dl_type=0x1234,nw_src=192.168.128.0/24
1170 & ofp_util|INFO|post: dl_type=0x1234
1171 003808ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx xx xxxx dnl
1172 c0a88055 xxxxxxxx xxxx xxxx
1173
1174 dnl Ignore nw_dst if not IP or ARP:
1175 # dl_type=0x1234,nw_dst=192.168.128.0/24
1176 # 35: 55 -> 00
1177 # normal:  1: 32 -> 38
1178 # normal: 32: c0 -> 00
1179 # normal: 33: a8 -> 00
1180 # normal: 34: 80 -> 00
1181 & ofp_util|INFO|normalization changed ofp_match, details:
1182 & ofp_util|INFO| pre: dl_type=0x1234,nw_dst=192.168.128.0/24
1183 & ofp_util|INFO|post: dl_type=0x1234
1184 003220ef xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 1234 xx xx xxxx dnl
1185 xxxxxxxx c0a88055 xxxx xxxx
1186
1187 # tcp,tp_src=443
1188 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 06 xxxx dnl
1189 xxxxxxxx xxxxxxxx 01bb xxxx
1190
1191 # tcp,tp_dst=443
1192 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 06 xxxx dnl
1193 xxxxxxxx xxxxxxxx xxxx 01bb
1194
1195 # udp,tp_src=443
1196 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 11 xxxx dnl
1197 xxxxxxxx xxxxxxxx 01bb xxxx
1198
1199 # udp,tp_dst=443
1200 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 11 xxxx dnl
1201 xxxxxxxx xxxxxxxx xxxx 01bb
1202
1203 # sctp,tp_src=443
1204 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 84 xxxx dnl
1205 xxxxxxxx xxxxxxxx 01bb xxxx
1206
1207 # sctp,tp_dst=443
1208 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 84 xxxx dnl
1209 xxxxxxxx xxxxxxxx xxxx 01bb
1210
1211 # icmp,icmp_type=5
1212 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 01 xxxx dnl
1213 xxxxxxxx xxxxxxxx 0005 xxxx
1214
1215 # icmp,icmp_code=8
1216 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 01 xxxx dnl
1217 xxxxxxxx xxxxxxxx xxxx 0008
1218
1219 dnl Ignore tp_src if not TCP/UDP/SCTP:
1220 # ip,nw_proto=21,tp_src=443
1221 # normal:  3: 8f -> cf
1222 # normal: 36: 01 -> 00
1223 # normal: 37: bb -> 00
1224 & ofp_util|INFO|normalization changed ofp_match, details:
1225 & ofp_util|INFO| pre: ip,nw_proto=21,tp_src=443
1226 & ofp_util|INFO|post: ip,nw_proto=21
1227 0038208f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 15 xxxx dnl
1228 xxxxxxxx xxxxxxxx 01bb xxxx
1229
1230 dnl Ignore tp_dst if not TCP/UDP/SCTP:
1231 # ip,nw_proto=21,tp_dst=443
1232 # normal:  3: 4f -> cf
1233 # normal: 38: 01 -> 00
1234 # normal: 39: bb -> 00
1235 dnl The normalization details are suppressed here due to rate-limiting.
1236 0038204f xxxx xxxxxxxxxxxx xxxxxxxxxxxx xxxx xx xx 0800 xx 15 xxxx dnl
1237 xxxxxxxx xxxxxxxx xxxx 01bb
1238
1239 ])
1240 sed '/^[[#&]]/d' < test-data > input.txt
1241 sed -n 's/^# //p; /^$/p' < test-data > expout
1242 sed -n 's/^& //p' < test-data > experr
1243 AT_CAPTURE_FILE([input.txt])
1244 AT_CAPTURE_FILE([expout])
1245 AT_CAPTURE_FILE([experr])
1246 AT_CHECK(
1247   [ovs-ofctl '-vPATTERN:console:%c|%p|%m' parse-ofp10-match < input.txt],
1248   [0], [expout], [experr])
1249 AT_CLEANUP
1250
1251 AT_SETUP([ovs-ofctl parse-ofp11-match])
1252 AT_KEYWORDS([OF1.1])
1253 AT_DATA([test-data], [dnl
1254 # in_port=LOCAL
1255 0000 0058 fffffffe 000003fe dnl
1256 000000000000ffffffffffff 000000000000ffffffffffff dnl
1257 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1258 00000000 00 000000 0000000000000000ffffffffffffffff
1259
1260 # bad ofp11_match: OFPBMC_BAD_VALUE
1261 & ofp_util|WARN|port 305419896 is outside the supported range 0 through 65279 or 0xffffff00 through 0xffffffff
1262 0000 0058 12345678 000003fe dnl
1263 000000000000ffffffffffff 000000000000ffffffffffff dnl
1264 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1265 00000000 00 000000 0000000000000000ffffffffffffffff
1266
1267 # dl_src=00:01:02:03:04:05
1268 0000 0058 00000000 000003ff dnl
1269 000102030405000000000000 000000000000ffffffffffff dnl
1270 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1271 00000000 00 000000 0000000000000000ffffffffffffffff
1272
1273 # dl_src=55:55:55:55:55:55/55:55:55:55:55:55
1274 0000 0058 00000000 000003ff dnl
1275 555555555555aaaaaaaaaaaa 000000000000ffffffffffff dnl
1276 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1277 00000000 00 000000 0000000000000000ffffffffffffffff
1278
1279 # dl_dst=00:01:02:03:04:05
1280 0000 0058 00000000 000003ff dnl
1281 000000000000ffffffffffff 000102030405000000000000 dnl
1282 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1283 00000000 00 000000 0000000000000000ffffffffffffffff
1284
1285 # dl_dst=01:00:00:00:00:00/01:00:00:00:00:00
1286 0000 0058 00000000 000003ff dnl
1287 000000000000ffffffffffff 010000000000feffffffffff dnl
1288 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1289 00000000 00 000000 0000000000000000ffffffffffffffff
1290
1291 # dl_dst=00:01:02:03:04:05/fe:ff:ff:ff:ff:ff
1292 0000 0058 00000000 000003ff dnl
1293 000000000000ffffffffffff 000102030405010000000000 dnl
1294 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1295 00000000 00 000000 0000000000000000ffffffffffffffff
1296
1297 # dl_dst=55:55:55:55:55:55/55:55:55:55:55:55
1298 0000 0058 00000000 000003ff dnl
1299 000000000000ffffffffffff 555555555555aaaaaaaaaaaa dnl
1300 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1301 00000000 00 000000 0000000000000000ffffffffffffffff
1302
1303 dnl dl_vlan_pcp is ignored if dl_vlan is wildcarded, which causes the
1304 dnl the wildcard bit and the dl_vlan_pcp to be dropped for output:
1305 # in_port=1
1306 # 11: fa -> fe
1307 # 38: 03 -> 00
1308 0000 0058 00000001 000003fa dnl
1309 000000000000ffffffffffff 000000000000ffffffffffff dnl
1310 0000 03 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1311 00000000 00 000000 0000000000000000ffffffffffffffff
1312
1313 # dl_vlan=291
1314 0000 0058 00000000 000003fd dnl
1315 000000000000ffffffffffff 000000000000ffffffffffff dnl
1316 0123 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1317 00000000 00 000000 0000000000000000ffffffffffffffff
1318
1319 dnl OFPVID_NONE:
1320 # vlan_tci=0x0000
1321 0000 0058 00000000 000003fd dnl
1322 000000000000ffffffffffff 000000000000ffffffffffff dnl
1323 ffff 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1324 00000000 00 000000 0000000000000000ffffffffffffffff
1325
1326 dnl OFPVID_NONE ignores dl_vlan_pcp even if not wildcarded, which causes
1327 dnl the wildcard bit and the dl_vlan_pcp to be dropped for output:
1328 # vlan_tci=0x0000
1329 # 11: f9 -> fd
1330 # 38: 05 -> 00
1331 0000 0058 00000000 000003f9 dnl
1332 000000000000ffffffffffff 000000000000ffffffffffff dnl
1333 ffff 05 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1334 00000000 00 000000 0000000000000000ffffffffffffffff
1335
1336 # vlan_tci=0x1000/0x1000
1337 0000 0058 00000000 000003fd dnl
1338 000000000000ffffffffffff 000000000000ffffffffffff dnl
1339 fffe 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1340 00000000 00 000000 0000000000000000ffffffffffffffff
1341
1342 dnl Try invalid VID:
1343 # bad ofp11_match: OFPBMC_BAD_VALUE
1344 0000 0058 00000000 000003fd dnl
1345 000000000000ffffffffffff 000000000000ffffffffffff dnl
1346 1234 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1347 00000000 00 000000 0000000000000000ffffffffffffffff
1348
1349 # dl_vlan_pcp=4
1350 0000 0058 00000000 000003f9 dnl
1351 000000000000ffffffffffff 000000000000ffffffffffff dnl
1352 fffe 04 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1353 00000000 00 000000 0000000000000000ffffffffffffffff
1354
1355 # dl_vlan=10,dl_vlan_pcp=6
1356 0000 0058 00000000 000003f9 dnl
1357 000000000000ffffffffffff 000000000000ffffffffffff dnl
1358 000a 06 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1359 00000000 00 000000 0000000000000000ffffffffffffffff
1360
1361 # dl_type=0x1234
1362 0000 0058 00000000 000003f7 dnl
1363 000000000000ffffffffffff 000000000000ffffffffffff dnl
1364 0000 00 00 1234 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1365 00000000 00 000000 0000000000000000ffffffffffffffff
1366
1367 # ip,nw_tos=252
1368 0000 0058 00000000 000003e7 dnl
1369 000000000000ffffffffffff 000000000000ffffffffffff dnl
1370 0000 00 00 0800 fc 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1371 00000000 00 000000 0000000000000000ffffffffffffffff
1372
1373 dnl Try invalid TOS:
1374 # bad ofp11_match: OFPBMC_BAD_VALUE
1375 0000 0058 00000000 000003e7 dnl
1376 000000000000ffffffffffff 000000000000ffffffffffff dnl
1377 0000 00 00 0800 01 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1378 00000000 00 000000 0000000000000000ffffffffffffffff
1379
1380 # ip,nw_proto=5
1381 0000 0058 00000000 000003d7 dnl
1382 000000000000ffffffffffff 000000000000ffffffffffff dnl
1383 0000 00 00 0800 00 05 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1384 00000000 00 000000 0000000000000000ffffffffffffffff
1385
1386 # arp,arp_op=2
1387 0000 0058 00000000 000003d7 dnl
1388 000000000000ffffffffffff 000000000000ffffffffffff dnl
1389 0000 00 00 0806 00 02 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1390 00000000 00 000000 0000000000000000ffffffffffffffff
1391
1392 # ip,nw_src=192.168.128.0/24
1393 0000 0058 00000000 000003f7 dnl
1394 000000000000ffffffffffff 000000000000ffffffffffff dnl
1395 0000 00 00 0800 00 00 c0a88000000000ff 00000000ffffffff 0000 0000 dnl
1396 00000000 00 000000 0000000000000000ffffffffffffffff
1397
1398 # ip,nw_src=128.160.128.0/165.165.165.165
1399 # 44: c0 -> 80
1400 # 45: a8 -> a0
1401 0000 0058 00000000 000003f7 dnl
1402 000000000000ffffffffffff 000000000000ffffffffffff dnl
1403 0000 00 00 0800 00 00 c0a880005a5a5a5a 00000000ffffffff 0000 0000 dnl
1404 00000000 00 000000 0000000000000000ffffffffffffffff
1405
1406 # ip,nw_dst=192.168.128.0/24
1407 0000 0058 00000000 000003f7 dnl
1408 000000000000ffffffffffff 000000000000ffffffffffff dnl
1409 0000 00 00 0800 00 00 00000000ffffffff c0a88000000000ff 0000 0000 dnl
1410 00000000 00 000000 0000000000000000ffffffffffffffff
1411
1412 # ip,nw_dst=128.160.128.0/165.165.165.165
1413 # 52: c0 -> 80
1414 # 53: a8 -> a0
1415 0000 0058 00000000 000003f7 dnl
1416 000000000000ffffffffffff 000000000000ffffffffffff dnl
1417 0000 00 00 0800 00 00 00000000ffffffff c0a880005a5a5a5a 0000 0000 dnl
1418 00000000 00 000000 0000000000000000ffffffffffffffff
1419
1420 # arp,arp_spa=192.168.128.0/24
1421 0000 0058 00000000 000003f7 dnl
1422 000000000000ffffffffffff 000000000000ffffffffffff dnl
1423 0000 00 00 0806 00 00 c0a88000000000ff 00000000ffffffff 0000 0000 dnl
1424 00000000 00 000000 0000000000000000ffffffffffffffff
1425
1426 # arp,arp_tpa=192.168.128.0/24
1427 0000 0058 00000000 000003f7 dnl
1428 000000000000ffffffffffff 000000000000ffffffffffff dnl
1429 0000 00 00 0806 00 00 00000000ffffffff c0a88000000000ff 0000 0000 dnl
1430 00000000 00 000000 0000000000000000ffffffffffffffff
1431
1432 # tcp,tp_src=443
1433 0000 0058 00000000 00000397 dnl
1434 000000000000ffffffffffff 000000000000ffffffffffff dnl
1435 0000 00 00 0800 00 06 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1436 00000000 00 000000 0000000000000000ffffffffffffffff
1437
1438 # tcp,tp_dst=443
1439 0000 0058 00000000 00000357 dnl
1440 000000000000ffffffffffff 000000000000ffffffffffff dnl
1441 0000 00 00 0800 00 06 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1442 00000000 00 000000 0000000000000000ffffffffffffffff
1443
1444 # udp,tp_src=443
1445 0000 0058 00000000 00000397 dnl
1446 000000000000ffffffffffff 000000000000ffffffffffff dnl
1447 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1448 00000000 00 000000 0000000000000000ffffffffffffffff
1449
1450 # icmp,icmp_type=5
1451 0000 0058 00000000 00000397 dnl
1452 000000000000ffffffffffff 000000000000ffffffffffff dnl
1453 0000 00 00 0800 00 01 00000000ffffffff 00000000ffffffff 0005 0000 dnl
1454 00000000 00 000000 0000000000000000ffffffffffffffff
1455
1456 # icmp,icmp_code=8
1457 0000 0058 00000000 00000357 dnl
1458 000000000000ffffffffffff 000000000000ffffffffffff dnl
1459 0000 00 00 0800 00 01 00000000ffffffff 00000000ffffffff 0000 0008 dnl
1460 00000000 00 000000 0000000000000000ffffffffffffffff
1461
1462 # udp,tp_src=443
1463 0000 0058 00000000 00000397 dnl
1464 000000000000ffffffffffff 000000000000ffffffffffff dnl
1465 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1466 00000000 00 000000 0000000000000000ffffffffffffffff
1467
1468 # udp,tp_dst=443
1469 0000 0058 00000000 00000357 dnl
1470 000000000000ffffffffffff 000000000000ffffffffffff dnl
1471 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1472 00000000 00 000000 0000000000000000ffffffffffffffff
1473
1474 # sctp
1475 0000 0058 00000000 000003d7 dnl
1476 000000000000ffffffffffff 000000000000ffffffffffff dnl
1477 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1478 00000000 00 000000 0000000000000000ffffffffffffffff
1479
1480 # sctp,tp_src=443
1481 0000 0058 00000000 00000397 dnl
1482 000000000000ffffffffffff 000000000000ffffffffffff dnl
1483 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1484 00000000 00 000000 0000000000000000ffffffffffffffff
1485
1486 # sctp,tp_dst=443
1487 0000 0058 00000000 00000357 dnl
1488 000000000000ffffffffffff 000000000000ffffffffffff dnl
1489 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1490 00000000 00 000000 0000000000000000ffffffffffffffff
1491
1492 dnl Ignore tp_src if not TCP/UDP/SCTP:
1493 # ip,nw_proto=21
1494 # 11: 97 -> d7
1495 # 60: 01 -> 00
1496 # 61: bb -> 00
1497 0000 0058 00000000 00000397 dnl
1498 000000000000ffffffffffff 000000000000ffffffffffff dnl
1499 0000 00 00 0800 00 15 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
1500 00000000 00 000000 0000000000000000ffffffffffffffff
1501
1502 dnl Ignore tp_dst if not TCP/UDP/SCTP:
1503 # ip,nw_proto=22
1504 # 11: 57 -> d7
1505 # 62: 01 -> 00
1506 # 63: bb -> 00
1507 0000 0058 00000000 00000357 dnl
1508 000000000000ffffffffffff 000000000000ffffffffffff dnl
1509 0000 00 00 0800 00 16 00000000ffffffff 00000000ffffffff 0000 01bb dnl
1510 00000000 00 000000 0000000000000000ffffffffffffffff
1511
1512 dnl mpls_label not yet supported:
1513 # bad ofp11_match: OFPBMC_BAD_TAG
1514 0000 0058 00000000 000002f7 dnl
1515 000000000000ffffffffffff 000000000000ffffffffffff dnl
1516 0000 00 00 8847 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1517 12345678 00 000000 0000000000000000ffffffffffffffff
1518
1519 dnl mpls_tc not yet supported:
1520 # bad ofp11_match: OFPBMC_BAD_TAG
1521 0000 0058 00000000 000001f7 dnl
1522 000000000000ffffffffffff 000000000000ffffffffffff dnl
1523 0000 00 00 8848 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1524 00000000 5a 000000 0000000000000000ffffffffffffffff
1525
1526 dnl mpls_label and mpls_tc must be ignored if dl_type is not MPLS:
1527 # dl_type=0x1234
1528 # 10: 00 -> 03
1529 # 64: 12 -> 00
1530 # 65: 34 -> 00
1531 # 66: 56 -> 00
1532 # 67: 78 -> 00
1533 # 68: 5a -> 00
1534 0000 0058 00000000 000000f7 dnl
1535 000000000000ffffffffffff 000000000000ffffffffffff dnl
1536 0000 00 00 1234 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1537 12345678 5a 000000 0000000000000000ffffffffffffffff
1538
1539 dnl metadata match:
1540 # metadata=0x1234567890abcdef
1541 0000 0058 00000000 000003ff dnl
1542 000000000000ffffffffffff 000000000000ffffffffffff dnl
1543 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1544 00000000 00 000000 1234567890abcdef0000000000000000
1545
1546 dnl metadata match:
1547 # metadata=0x5555555555555555/0x5555555555555555
1548 0000 0058 00000000 000003ff dnl
1549 000000000000ffffffffffff 000000000000ffffffffffff dnl
1550 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1551 00000000 00 000000 5555555555555555aaaaaaaaaaaaaaaa
1552
1553 dnl metadata match:
1554 # metadata=0x1234000090ab0000/0xffff0000ffff0000
1555 # 74: 56 -> 00
1556 # 75: 78 -> 00
1557 # 78: cd -> 00
1558 # 79: ef -> 00
1559 0000 0058 00000000 000003ff dnl
1560 000000000000ffffffffffff 000000000000ffffffffffff dnl
1561 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
1562 00000000 00 000000 1234567890abcdef0000ffff0000ffff
1563
1564 ])
1565 sed '/^[[#&]]/d' < test-data > input.txt
1566 sed -n 's/^# //p; /^$/p' < test-data > expout
1567 sed -n 's/^& //p' < test-data > experr
1568 AT_CAPTURE_FILE([input.txt])
1569 AT_CAPTURE_FILE([expout])
1570 AT_CAPTURE_FILE([experr])
1571 AT_CHECK(
1572   [ovs-ofctl '-vPATTERN:console:%c|%p|%m' parse-ofp11-match < input.txt],
1573   [0], [expout], [experr])
1574 AT_CLEANUP
1575
1576 AT_SETUP([ovs-ofctl parse-nx-match loose])
1577 AT_KEYWORDS([nx-match])
1578 AT_DATA([nx-match.txt], [dnl
1579 NXM_OF_IN_PORT(0001), 01020304(1111/2222), NXM_OF_ETH_TYPE(0800)
1580 ])
1581
1582 AT_CHECK([ovs-ofctl --strict parse-nx-match < nx-match.txt], [0], [dnl
1583 nx_pull_match() returned error OFPBMC_BAD_FIELD
1584 ])
1585
1586 AT_CHECK([ovs-ofctl parse-nx-match < nx-match.txt], [0], [dnl
1587 NXM_OF_IN_PORT(0001), NXM_OF_ETH_TYPE(0800)
1588 ])
1589 AT_CLEANUP
1590
1591 AT_SETUP([ovs-ofctl parse-oxm])
1592 AT_KEYWORDS([oxm])
1593 AT_DATA([oxm.txt], [dnl
1594 <any>
1595
1596 # in port
1597 OXM_OF_IN_PORT(00000000)
1598 OXM_OF_IN_PORT(fffffffe)
1599
1600 # metadata
1601 OXM_OF_METADATA(5a5a5a5a5a5a5a5a)
1602 OXM_OF_METADATA_W(0000000000000000/00000000ffffffff)
1603 OXM_OF_METADATA_W(1234567890abcdef/ffff0000ffff0000)
1604 OXM_OF_METADATA_W(1234567890abcdef/ffffffffffffffff)
1605 OXM_OF_METADATA_W(1234567890abcdef/0000000000000000)
1606
1607 # eth dst
1608 OXM_OF_ETH_DST(0002e30f80a4)
1609 OXM_OF_ETH_DST_W(010000000000/010000000000)
1610 OXM_OF_ETH_DST_W(000000000000/010000000000)
1611 OXM_OF_ETH_DST_W(ffffffffffff/010000000000)
1612 OXM_OF_ETH_DST_W(0002e30f80a4/ffffffffffff)
1613 OXM_OF_ETH_DST_W(0002e30f80a4/000000000000)
1614 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
1615
1616 # eth src
1617 OXM_OF_ETH_SRC(020898456ddb)
1618
1619 # eth type
1620 OXM_OF_ETH_TYPE(0800)
1621 OXM_OF_ETH_TYPE(0800) OXM_OF_IN_PORT(00000012)
1622
1623 # vlan
1624 OXM_OF_VLAN_VID(1009) OXM_OF_VLAN_VID(1009) # Duplicate Field
1625 OXM_OF_VLAN_VID(f009)           # Bad Value
1626 OXM_OF_VLAN_PCP(00)             # Bad Pre-Requisite
1627 OXM_OF_VLAN_VID(0000)           # Packets without 802.1Q header or with VID=0
1628 OXM_OF_VLAN_VID(1123)           # Packets with VID=123, any PCP
1629 OXM_OF_VLAN_VID(1123) OXM_OF_VLAN_PCP(01) # Packets with VID=123, PCP=1.
1630 OXM_OF_VLAN_VID(0123)           # Does not make sense (but supported anyway)
1631 OXM_OF_VLAN_VID_W(0123/0123)      # Does not make sense (but supported anyway)
1632 OXM_OF_VLAN_VID_W(1123/0123)      # Does not make sense (but supported anyway)
1633 OXM_OF_VLAN_VID_W(0123/1123)      # Does not make sense (but supported anyway)
1634 OXM_OF_VLAN_VID(0123) OXM_OF_VLAN_PCP(01)  #Bad Pre-Requisite
1635 OXM_OF_VLAN_VID_W(1123/1fff)    # Packets with VID=123, any PCP.
1636 OXM_OF_VLAN_VID_W(1123/ffff)    # Packets with VID=123, any PCP.
1637 OXM_OF_VLAN_VID_W(1123/0000)    # Packets with or without 802.1Q header
1638 OXM_OF_VLAN_VID_W(1123/1f0f),   # Packets with # VID=123 (masked)
1639 OXM_OF_VLAN_VID_W(1123/1f0f), OXM_OF_VLAN_PCP(01)  # Packets with VID=123 (masked), any PCP.
1640 OXM_OF_VLAN_VID_W(1000/1000)    # Packets with any VID, any PCP
1641 OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01)  # Packets with any VID, PCP=1.
1642
1643 # IP TOS
1644 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(f0)
1645 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(41)
1646 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_DSCP(3f)
1647 OXM_OF_IP_DSCP(f0)
1648
1649 # IP ECN
1650 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(03)
1651 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(06)
1652 OXM_OF_IP_ECN(03)
1653
1654 # IP protocol
1655 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01)
1656 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(05)
1657 OXM_OF_IP_PROTO(05)
1658
1659 # IP source
1660 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC(ac100014)
1661 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/FFFF0000)
1662 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/FFFFFFFF)
1663 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/00000000)
1664 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_SRC(ac100014)
1665 OXM_OF_IPV4_SRC_W(C0D80000/FFFF0000)
1666
1667 # IP destination
1668 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST(ac100014)
1669 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/FFFF0000)
1670 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/FFFFFFFF)
1671 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/00000000)
1672 OXM_OF_IPV4_DST(ac100014)
1673 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_DST_W(C0D80000/FFFF0000)
1674
1675 # TCP source port
1676 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC(4231)
1677 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/F0F0)
1678 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/FFFF)
1679 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/0000)
1680 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_SRC(4231)
1681
1682 # TCP destination port
1683 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST(4231)
1684 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFF0)
1685 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFFF)
1686 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/0000)
1687 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_DST(4231)
1688
1689 # UDP source port
1690 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC(8732)
1691 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/01FF)
1692 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/FFFF)
1693 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/0000)
1694 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_UDP_SRC(7823)
1695
1696 # UDP destination port
1697 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST(1782)
1698 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/F00F)
1699 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/FFFF)
1700 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/0000)
1701 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_UDP_DST(1293)
1702
1703 # SCTP source port
1704 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC(8732)
1705 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/01FF)
1706 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/FFFF)
1707 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_SRC_W(0132/0000)
1708 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_SCTP_SRC(7823)
1709
1710 # SCTP destination port
1711 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST(1782)
1712 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/F00F)
1713 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/FFFF)
1714 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(84) OXM_OF_SCTP_DST_W(5005/0000)
1715 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_SCTP_DST(1293)
1716
1717 # ICMP type
1718 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_TYPE(12)
1719 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_TYPE(10)
1720
1721 # ICMP code
1722 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_CODE(12)
1723 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_CODE(10)
1724 OXM_OF_ETH_TYPE(0800) OXM_OF_ICMPV4_CODE(10)
1725 OXM_OF_ICMPV4_CODE(00)
1726
1727 # ARP opcode
1728 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001)
1729 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(1111)
1730 OXM_OF_ETH_TYPE(0000) OXM_OF_ARP_OP(0001)
1731 OXM_OF_ARP_OP(0001)
1732 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001) OXM_OF_ARP_OP(0001)
1733
1734 # ARP source protocol address
1735 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA(ac100014)
1736 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
1737 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/FFFFFFFF)
1738 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/00000000)
1739 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SPA(ac100014)
1740 OXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
1741
1742 # ARP destination protocol address
1743 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA(ac100014)
1744 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
1745 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/FFFFFFFF)
1746 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/00000000)
1747 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_TPA(ac100014)
1748 OXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
1749
1750 # ARP source hardware address
1751 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA(0002e30f80a4)
1752 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SHA(0002e30f80a4)
1753 OXM_OF_ARP_SHA(0002e30f80a4)
1754 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(0002e30f80a4/ffffffffffff)
1755 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(0002e30f80a4/000000000000)
1756 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA_W(0002e30f80a4/00000000000f)
1757
1758 # ARP destination hardware address
1759 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA(0002e30f80a4)
1760 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_THA(0002e30f80a4)
1761 OXM_OF_ARP_THA(0002e30f80a4)
1762 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(0002e30f80a4/ffffffffffff)
1763 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(0002e30f80a4/000000000000)
1764 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA_W(0002e30f80a4/00000000000f)
1765
1766 # IPv6 source
1767 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1768 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1769 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1770 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
1771 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
1772 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1773
1774 # IPv6 destination
1775 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1776 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1777 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1778 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffffffffffffffffffff)
1779 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/00000000000000000000000000000000)
1780 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1781
1782 # IPv6 Flow Label
1783 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL(1000000f)
1784 OXM_OF_IPV6_FLABEL(0000000f)
1785 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL(0000000f)
1786 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/0000000f)
1787 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/000fffff)
1788 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/000ffff0)
1789 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/100fffff)
1790 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/ffffffff)
1791 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_FLABEL_W(0000000f/00000000)
1792
1793 # ND source hardware address
1794 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)
1795 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)
1796 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)
1797 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)
1798
1799 # ND destination hardware address
1800 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)
1801 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)
1802 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)
1803 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)
1804
1805 # Invalid field number.
1806 01020304(1111/2222)
1807 ])
1808 AT_CHECK([ovs-ofctl '-vPATTERN:console:%c|%p|%m' --strict parse-oxm < oxm.txt],
1809   [0], [dnl
1810 <any>
1811
1812 # in port
1813 OXM_OF_IN_PORT(00000000)
1814 OXM_OF_IN_PORT(fffffffe)
1815
1816 # metadata
1817 OXM_OF_METADATA(5a5a5a5a5a5a5a5a)
1818 OXM_OF_METADATA_W(0000000000000000/00000000ffffffff)
1819 OXM_OF_METADATA_W(1234000090ab0000/ffff0000ffff0000)
1820 OXM_OF_METADATA(1234567890abcdef)
1821 <any>
1822
1823 # eth dst
1824 OXM_OF_ETH_DST(0002e30f80a4)
1825 OXM_OF_ETH_DST_W(010000000000/010000000000)
1826 OXM_OF_ETH_DST_W(000000000000/010000000000)
1827 OXM_OF_ETH_DST_W(010000000000/010000000000)
1828 OXM_OF_ETH_DST(0002e30f80a4)
1829 <any>
1830 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
1831
1832 # eth src
1833 OXM_OF_ETH_SRC(020898456ddb)
1834
1835 # eth type
1836 OXM_OF_ETH_TYPE(0800)
1837 OXM_OF_IN_PORT(00000012), OXM_OF_ETH_TYPE(0800)
1838
1839 # vlan
1840 nx_pull_match() returned error OFPBMC_DUP_FIELD
1841 nx_pull_match() returned error OFPBMC_BAD_VALUE
1842 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1843 OXM_OF_VLAN_VID(0000)
1844 OXM_OF_VLAN_VID(1123)
1845 OXM_OF_VLAN_VID(1123), OXM_OF_VLAN_PCP(01)
1846 OXM_OF_VLAN_VID(0123)
1847 OXM_OF_VLAN_VID_W(0123/0123)
1848 OXM_OF_VLAN_VID_W(0123/0123)
1849 OXM_OF_VLAN_VID_W(0123/1123)
1850 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1851 OXM_OF_VLAN_VID(1123)
1852 OXM_OF_VLAN_VID(1123)
1853 <any>
1854 OXM_OF_VLAN_VID_W(1103/1f0f)
1855 OXM_OF_VLAN_VID_W(1103/1f0f), OXM_OF_VLAN_PCP(01)
1856 OXM_OF_VLAN_VID_W(1000/1000)
1857 OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01)
1858
1859 # IP TOS
1860 nx_pull_match() returned error OFPBMC_BAD_VALUE
1861 nx_pull_match() returned error OFPBMC_BAD_VALUE
1862 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_DSCP(3f)
1863 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1864
1865 # IP ECN
1866 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_ECN(03)
1867 nx_pull_match() returned error OFPBMC_BAD_VALUE
1868 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1869
1870 # IP protocol
1871 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01)
1872 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(05)
1873 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1874
1875 # IP source
1876 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC(ac100014)
1877 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC_W(c0a80000/ffff0000)
1878 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC(c0a80000)
1879 OXM_OF_ETH_TYPE(0800)
1880 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1881 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1882
1883 # IP destination
1884 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST(ac100014)
1885 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST_W(c0a80000/ffff0000)
1886 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST(c0a88012)
1887 OXM_OF_ETH_TYPE(0800)
1888 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1889 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1890
1891 # TCP source port
1892 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC(4231)
1893 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC_W(5050/f0f0)
1894 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC(5050)
1895 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06)
1896 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1897
1898 # TCP destination port
1899 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST(4231)
1900 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST_W(fde0/fff0)
1901 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST(fde0)
1902 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06)
1903 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1904
1905 # UDP source port
1906 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC(8732)
1907 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC_W(0132/01ff)
1908 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC(0132)
1909 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11)
1910 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1911
1912 # UDP destination port
1913 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST(1782)
1914 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST_W(5005/f00f)
1915 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST(5005)
1916 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11)
1917 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1918
1919 # SCTP source port
1920 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_SRC(8732)
1921 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_SRC_W(0132/01ff)
1922 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_SRC(0132)
1923 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84)
1924 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1925
1926 # SCTP destination port
1927 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_DST(1782)
1928 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_DST_W(5005/f00f)
1929 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84), OXM_OF_SCTP_DST(5005)
1930 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(84)
1931 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1932
1933 # ICMP type
1934 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_TYPE(12)
1935 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1936
1937 # ICMP code
1938 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_CODE(12)
1939 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1940 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1941 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1942
1943 # ARP opcode
1944 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_OP(0001)
1945 nx_pull_match() returned error OFPBMC_BAD_VALUE
1946 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1947 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1948 nx_pull_match() returned error OFPBMC_DUP_FIELD
1949
1950 # ARP source protocol address
1951 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA(ac100014)
1952 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA_W(c0a81200/ffffff00)
1953 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA(c0a81234)
1954 OXM_OF_ETH_TYPE(0806)
1955 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1956 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1957
1958 # ARP destination protocol address
1959 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA(ac100014)
1960 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA_W(c0a81200/ffffff00)
1961 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA(c0a812fe)
1962 OXM_OF_ETH_TYPE(0806)
1963 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1964 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1965
1966 # ARP source hardware address
1967 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA(0002e30f80a4)
1968 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1969 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1970 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA(0002e30f80a4)
1971 OXM_OF_ETH_TYPE(0806)
1972 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA_W(000000000004/00000000000f)
1973
1974 # ARP destination hardware address
1975 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA(0002e30f80a4)
1976 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1977 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1978 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA(0002e30f80a4)
1979 OXM_OF_ETH_TYPE(0806)
1980 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA_W(000000000004/00000000000f)
1981
1982 # IPv6 source
1983 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1984 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1985 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1986 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC(20010db83c4d00010000000000000000)
1987 OXM_OF_ETH_TYPE(86dd)
1988 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1989
1990 # IPv6 destination
1991 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1992 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1993 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1994 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST(20010db83c4d00010000000000000000)
1995 OXM_OF_ETH_TYPE(86dd)
1996 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1997
1998 # IPv6 Flow Label
1999 nx_pull_match() returned error OFPBMC_BAD_VALUE
2000 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2001 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2002 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL_W(0000000f/0000000f)
2003 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2004 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL_W(00000000/000ffff0)
2005 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2006 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_FLABEL(0000000f)
2007 OXM_OF_ETH_TYPE(86dd)
2008
2009 # ND source hardware address
2010 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)
2011 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2012 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2013 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2014
2015 # ND destination hardware address
2016 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)
2017 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2018 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2019 nx_pull_match() returned error OFPBMC_BAD_PREREQ
2020
2021 # Invalid field number.
2022 nx_pull_match() returned error OFPBMC_BAD_FIELD
2023 ], [stderr])
2024
2025 # Check that at least the first warning made it.  (It's rate-limited
2026 # so a variable number could show up, especially under valgrind etc.)
2027 AT_CHECK([grep 'has 1-bits in value' stderr | sed 1q], [0], [dnl
2028 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.)
2029 ])
2030
2031 # Check that there wasn't any other stderr output.
2032 AT_CHECK([grep -v 'has 1-bits in value' stderr], [1])
2033 AT_CLEANUP
2034
2035 AT_SETUP([ovs-ofctl parse-oxm loose])
2036 AT_KEYWORDS([oxm])
2037 AT_DATA([oxm.txt], [dnl
2038 OXM_OF_IN_PORT(00000001), 01020304(1111/2222), OXM_OF_ETH_TYPE(0800)
2039 ])
2040
2041 AT_CHECK([ovs-ofctl --strict parse-oxm < oxm.txt], [0], [dnl
2042 nx_pull_match() returned error OFPBMC_BAD_FIELD
2043 ])
2044
2045 AT_CHECK([ovs-ofctl parse-oxm < oxm.txt], [0], [dnl
2046 OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
2047 ])
2048 AT_CLEANUP
2049
2050 dnl Check all of the patterns mentioned in the "VLAN Matching" section
2051 dnl in the DESIGN file at top level.
2052 AT_SETUP([ovs-ofctl check-vlan])
2053 AT_KEYWORDS([VLAN])
2054
2055 dnl [1]
2056 AT_CHECK([ovs-ofctl check-vlan 0000 0000], [0], [dnl
2057  -> 0000/0000
2058 NXM: <any> -> 0000/0000
2059 OXM: <any> -> 0000/0000,--
2060 OF1.0: 0000/1,00/1 -> 0000/0000
2061 OF1.1: 0000/1,00/1 -> 0000/0000
2062 ])
2063
2064 dnl [2]
2065 AT_CHECK([ovs-ofctl check-vlan 0000 ffff], [0], [dnl
2066 vlan_tci=0x0000 -> 0000/ffff
2067 NXM: NXM_OF_VLAN_TCI(0000) -> 0000/ffff
2068 OXM: OXM_OF_VLAN_VID(0000) -> 0000/1fff,--
2069 OF1.0: ffff/0,00/1 -> 0000/ffff
2070 OF1.1: ffff/0,00/1 -> 0000/ffff
2071 ])
2072
2073 dnl [3]
2074 AT_CHECK([ovs-ofctl check-vlan 1abc 1fff], [0], [dnl
2075 dl_vlan=2748 -> 1abc/1fff
2076 NXM: NXM_OF_VLAN_TCI_W(1abc/1fff) -> 1abc/1fff
2077 OXM: OXM_OF_VLAN_VID(1abc) -> 1abc/1fff,--
2078 OF1.0: 0abc/0,00/1 -> 1abc/1fff
2079 OF1.1: 0abc/0,00/1 -> 1abc/1fff
2080 ])
2081
2082 dnl [4]
2083 AT_CHECK([ovs-ofctl check-vlan b000 f000], [0], [dnl
2084 dl_vlan_pcp=5 -> b000/f000
2085 NXM: NXM_OF_VLAN_TCI_W(b000/f000) -> b000/f000
2086 OXM: OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(05) -> 1000/1000,05
2087 OF1.0: 0000/1,05/0 -> b000/f000
2088 OF1.1: fffe/0,05/0 -> b000/f000
2089 ])
2090
2091 dnl [5]
2092 AT_CHECK([ovs-ofctl check-vlan babc ffff], [0], [dnl
2093 dl_vlan=2748,dl_vlan_pcp=5 -> babc/ffff
2094 NXM: NXM_OF_VLAN_TCI(babc) -> babc/ffff
2095 OXM: OXM_OF_VLAN_VID(1abc), OXM_OF_VLAN_PCP(05) -> 1abc/1fff,05
2096 OF1.0: 0abc/0,05/0 -> babc/ffff
2097 OF1.1: 0abc/0,05/0 -> babc/ffff
2098 ])
2099
2100 dnl [6]
2101 AT_CHECK([ovs-ofctl check-vlan 0000 0fff], [0], [dnl
2102 vlan_tci=0x0000/0x0fff -> 0000/0fff
2103 NXM: NXM_OF_VLAN_TCI_W(0000/0fff) -> 0000/0fff
2104 OXM: OXM_OF_VLAN_VID_W(0000/0fff) -> 0000/0fff,--
2105 OF1.0: 0000/0,00/1 -> 1000/1fff
2106 OF1.1: 0000/0,00/1 -> 1000/1fff
2107 ])
2108
2109 dnl [7]
2110 AT_CHECK([ovs-ofctl check-vlan 0000 f000], [0], [dnl
2111 vlan_tci=0x0000/0xf000 -> 0000/f000
2112 NXM: NXM_OF_VLAN_TCI_W(0000/f000) -> 0000/f000
2113 OXM: OXM_OF_VLAN_VID_W(0000/1000) -> 0000/1000,--
2114 OF1.0: ffff/0,00/1 -> 0000/ffff
2115 OF1.1: ffff/0,00/1 -> 0000/ffff
2116 ])
2117
2118 dnl [8]
2119 AT_CHECK([ovs-ofctl check-vlan 0000 efff], [0], [dnl
2120 vlan_tci=0x0000/0xefff -> 0000/efff
2121 NXM: NXM_OF_VLAN_TCI_W(0000/efff) -> 0000/efff
2122 OXM: OXM_OF_VLAN_VID_W(0000/0fff) -> 0000/0fff,--
2123 OF1.0: 0000/0,00/0 -> 1000/ffff
2124 OF1.1: 0000/0,00/0 -> 1000/ffff
2125 ])
2126
2127 dnl [9]
2128 AT_CHECK([ovs-ofctl check-vlan 1001 1001], [0], [dnl
2129 vlan_tci=0x1001/0x1001 -> 1001/1001
2130 NXM: NXM_OF_VLAN_TCI_W(1001/1001) -> 1001/1001
2131 OXM: OXM_OF_VLAN_VID_W(1001/1001) -> 1001/1001,--
2132 OF1.0: 0001/0,00/1 -> 1001/1fff
2133 OF1.1: 0001/0,00/1 -> 1001/1fff
2134 ])
2135
2136 dnl [10]
2137 AT_CHECK([ovs-ofctl check-vlan 3000 3000], [0], [dnl
2138 vlan_tci=0x3000/0x3000 -> 3000/3000
2139 NXM: NXM_OF_VLAN_TCI_W(3000/3000) -> 3000/3000
2140 OXM: OXM_OF_VLAN_VID_W(1000/1000), OXM_OF_VLAN_PCP(01) -> 1000/1000,01
2141 OF1.0: 0000/1,01/0 -> 3000/f000
2142 OF1.1: fffe/0,01/0 -> 3000/f000
2143 ])
2144 AT_CHECK
2145 AT_CLEANUP
2146
2147 dnl Check that "-F openflow10" rejects a flow_mod with unsupported features,
2148 dnl such as tunnels and metadata.
2149 AT_SETUP([ovs-ofctl -F option and NXM features])
2150 AT_CHECK([ovs-ofctl -F openflow10 add-flow dummy tun_id=123,actions=drop],
2151   [1], [], [ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the allowed flow formats (OpenFlow10)
2152 ])
2153 AT_CHECK([ovs-ofctl -F openflow10 add-flow dummy metadata=123,actions=drop],
2154   [1], [], [ovs-ofctl: none of the usable flow formats (NXM,OXM,OpenFlow11) is among the allowed flow formats (OpenFlow10)
2155 ])
2156 AT_CLEANUP
2157
2158 dnl Check that "-F nxm" really forces add-flow to use the NXM flow format.
2159 dnl (If it doesn't, then either the tun_id won't show up at all, or it will
2160 dnl additionally show up as the top 32 bits of the cookie.)  This checks
2161 dnl for regression against bug #4566.
2162 AT_SETUP([ovs-ofctl -F option with flow_mods])
2163 OVS_VSWITCHD_START
2164 AT_CHECK([ovs-ofctl -F nxm add-flow br0 tun_id=0x12345678,actions=drop])
2165 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0], [dnl
2166 NXST_FLOW reply:
2167  tun_id=0x12345678 actions=drop
2168 ])
2169 OVS_VSWITCHD_STOP
2170 AT_CLEANUP
2171
2172 dnl Check that "-F openflow10" is really honored on dump-flows.
2173 dnl (If it isn't, then dump-flows will show the register match.)
2174 AT_SETUP([ovs-ofctl dump-flows honors -F option])
2175 OVS_VSWITCHD_START
2176 AT_CHECK([ovs-ofctl add-flow br0 reg0=0x12345,actions=drop])
2177 AT_CHECK([ovs-ofctl -F openflow10 dump-flows br0 | ofctl_strip], [0], [dnl
2178 OFPST_FLOW reply:
2179  actions=drop
2180 ])
2181 OVS_VSWITCHD_STOP
2182 AT_CLEANUP
2183
2184 dnl Check that "-F openflow10" fails on dump-flows if the requested match
2185 dnl can't be represented in OpenFlow 1.0.
2186 AT_SETUP([ovs-ofctl dump-flows rejects bad -F option])
2187 OVS_VSWITCHD_START
2188 AT_CHECK([ovs-ofctl -F openflow10 dump-flows unix:br0.mgmt reg0=0xabcdef], [1], [],
2189   [ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the allowed flow formats (OpenFlow10)
2190 ])
2191 OVS_VSWITCHD_STOP
2192 AT_CLEANUP
2193
2194 dnl Check that add-flow reports non-normalized flows (feature #5029).
2195 AT_SETUP([ovs-ofctl add-flow reports non-normalized flows])
2196 OVS_VSWITCHD_START
2197 AT_CHECK([ovs-ofctl TESTABLE_LOG add-flow br0 nw_src=1.2.3.4,actions=5],
2198   [0], [], [dnl
2199 ofp_util|INFO|normalization changed ofp_match, details:
2200 ofp_util|INFO| pre: nw_src=1.2.3.4
2201 ofp_util|INFO|post: @&t@
2202 ])
2203 OVS_VSWITCHD_STOP
2204 AT_CLEANUP
2205
2206 dnl Check that --sort and --rsort works with dump-flows
2207 dnl Default field is 'priority'. Flow entries are displayed based
2208 dnl on field to sort.
2209 AT_SETUP([ovs-ofctl dump-flows with sorting])
2210 OVS_VSWITCHD_START
2211 AT_KEYWORDS([sort])
2212 AT_DATA([allflows.txt], [[
2213 priority=4,in_port=23213 actions=output:42
2214 priority=5,in_port=1029 actions=output:43
2215 priority=7,in_port=1029 actions=output:43
2216 priority=3,in_port=1028 actions=output:44
2217 priority=1,in_port=1026 actions=output:45
2218 priority=6,in_port=1027 actions=output:64
2219 priority=2,in_port=1025 actions=output:47
2220 priority=8,tcp,tp_src=5 actions=drop
2221 priority=9,tcp,tp_src=6 actions=drop
2222 ]])
2223
2224 AT_CHECK([ovs-ofctl add-flows br0 allflows.txt
2225 ], [0], [ignore])
2226 AT_CHECK([ovs-ofctl --sort dump-flows br0 | ofctl_strip], [0], [dnl
2227  priority=1,in_port=1026 actions=output:45
2228  priority=2,in_port=1025 actions=output:47
2229  priority=3,in_port=1028 actions=output:44
2230  priority=4,in_port=23213 actions=output:42
2231  priority=5,in_port=1029 actions=output:43
2232  priority=6,in_port=1027 actions=output:64
2233  priority=7,in_port=1029 actions=output:43
2234  priority=8,tcp,tp_src=5 actions=drop
2235  priority=9,tcp,tp_src=6 actions=drop
2236 ])
2237 AT_CHECK([ovs-ofctl --rsort dump-flows br0 | ofctl_strip], [0], [dnl
2238  priority=9,tcp,tp_src=6 actions=drop
2239  priority=8,tcp,tp_src=5 actions=drop
2240  priority=7,in_port=1029 actions=output:43
2241  priority=6,in_port=1027 actions=output:64
2242  priority=5,in_port=1029 actions=output:43
2243  priority=4,in_port=23213 actions=output:42
2244  priority=3,in_port=1028 actions=output:44
2245  priority=2,in_port=1025 actions=output:47
2246  priority=1,in_port=1026 actions=output:45
2247 ])
2248 AT_CHECK([ovs-ofctl --sort=in_port dump-flows br0 | ofctl_strip], [0], [dnl
2249  priority=2,in_port=1025 actions=output:47
2250  priority=1,in_port=1026 actions=output:45
2251  priority=6,in_port=1027 actions=output:64
2252  priority=3,in_port=1028 actions=output:44
2253  priority=7,in_port=1029 actions=output:43
2254  priority=5,in_port=1029 actions=output:43
2255  priority=4,in_port=23213 actions=output:42
2256  priority=9,tcp,tp_src=6 actions=drop
2257  priority=8,tcp,tp_src=5 actions=drop
2258 ])
2259 AT_CHECK([ovs-ofctl --rsort=in_port dump-flows br0 | ofctl_strip], [0], [dnl
2260  priority=4,in_port=23213 actions=output:42
2261  priority=7,in_port=1029 actions=output:43
2262  priority=5,in_port=1029 actions=output:43
2263  priority=3,in_port=1028 actions=output:44
2264  priority=6,in_port=1027 actions=output:64
2265  priority=1,in_port=1026 actions=output:45
2266  priority=2,in_port=1025 actions=output:47
2267  priority=9,tcp,tp_src=6 actions=drop
2268  priority=8,tcp,tp_src=5 actions=drop
2269 ])
2270 AT_CHECK([ovs-ofctl --sort=tcp_src dump-flows br0 | ofctl_strip], [0], [dnl
2271  priority=8,tcp,tp_src=5 actions=drop
2272  priority=9,tcp,tp_src=6 actions=drop
2273  priority=7,in_port=1029 actions=output:43
2274  priority=6,in_port=1027 actions=output:64
2275  priority=5,in_port=1029 actions=output:43
2276  priority=4,in_port=23213 actions=output:42
2277  priority=3,in_port=1028 actions=output:44
2278  priority=2,in_port=1025 actions=output:47
2279  priority=1,in_port=1026 actions=output:45
2280 ])
2281 AT_CHECK(
2282   [ovs-ofctl --sort=in_port --sort=tcp_src dump-flows br0 | ofctl_strip], [0],
2283   [ priority=2,in_port=1025 actions=output:47
2284  priority=1,in_port=1026 actions=output:45
2285  priority=6,in_port=1027 actions=output:64
2286  priority=3,in_port=1028 actions=output:44
2287  priority=7,in_port=1029 actions=output:43
2288  priority=5,in_port=1029 actions=output:43
2289  priority=4,in_port=23213 actions=output:42
2290  priority=8,tcp,tp_src=5 actions=drop
2291  priority=9,tcp,tp_src=6 actions=drop
2292 ])
2293 OVS_VSWITCHD_STOP
2294 AT_CLEANUP
2295
2296 AT_SETUP([ovs-ofctl diff-flows])
2297 OVS_VSWITCHD_START
2298
2299 # Add tons of flows to br0.
2300 for i in `seq 0 1023`; do echo "dl_vlan=$i,actions=drop"; done > add-flows.txt
2301 AT_CHECK([ovs-ofctl add-flows br0 add-flows.txt])
2302
2303 # Dump them and compare against what we expect by hand, then with diff-flows.
2304 for i in `seq 0 1023`; do echo " dl_vlan=$i actions=drop"; done | sort > expout
2305 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip | sed '/NXST_FLOW/d' | sort],
2306   [0], [expout])
2307 AT_CHECK([ovs-ofctl diff-flows br0 add-flows.txt])
2308
2309 # Remove even-numbered flows, compare again.
2310 for i in `seq 0 1023 2`; do echo "dl_vlan=$i"; done > del-flows.txt
2311 AT_CHECK([ovs-ofctl del-flows br0 - < del-flows.txt])
2312 for i in `seq 0 1023 2`; do echo "+dl_vlan=$i actions=drop"; done | sort > expout
2313 AT_CHECK([ovs-ofctl diff-flows br0 add-flows.txt | sort], [0], [expout])
2314 for i in `seq 0 1023 2`; do echo "-dl_vlan=$i actions=drop"; done | sort > expout
2315 AT_CHECK([ovs-ofctl diff-flows add-flows.txt br0 | sort], [0], [expout])
2316
2317 OVS_VSWITCHD_STOP
2318 AT_CLEANUP
2319
2320 dnl ofpacts that differ bytewise don't necessarily differ when
2321 dnl converted to another representation, such as OpenFlow 1.0
2322 dnl or to a string.  "resubmit(,1)" is an example of an action
2323 dnl of this type: "ofpact_resubmit"s can differ in their "compat"
2324 dnl values even though this doesn't affect the string format.
2325 dnl
2326 dnl This test checks that "ovs-ofctl diff-flows" doesn't report
2327 dnl false ofpacts differences.
2328 AT_SETUP([ovs-ofctl diff-flows - suppress false differences])
2329 OVS_VSWITCHD_START
2330 AT_DATA([flows.txt], [actions=resubmit(,1)
2331 ])
2332 AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
2333 AT_CHECK([ovs-ofctl diff-flows br0 flows.txt])
2334 AT_CHECK([ovs-ofctl add-flow br0 idle_timeout=60,dl_vlan=9,actions=output:1])
2335 AT_CHECK([ovs-ofctl diff-flows br0 flows.txt], [2], [dnl
2336 -dl_vlan=9 idle_timeout=60 actions=output:1
2337 ])
2338 AT_CHECK([ovs-ofctl add-flow br0 hard_timeout=120,cookie=1234,dl_vlan=9,actions=output:1])
2339 AT_CHECK([ovs-ofctl diff-flows flows.txt br0], [2], [dnl
2340 +dl_vlan=9 cookie=0x4d2 hard_timeout=120 actions=output:1
2341 ])
2342 OVS_VSWITCHD_STOP
2343 AT_CLEANUP
2344
2345 AT_SETUP([ovs-ofctl -F and -O interaction])
2346 AT_CHECK([ovs-ofctl -F oxm -O openflow10], [1], [],
2347   [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.)
2348 ])
2349 AT_CHECK([ovs-ofctl -F oxm -O openflow11], [1], [],
2350   [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.)
2351 ])
2352 AT_CHECK([ovs-ofctl -F oxm -O openflow10,openflow11], [1], [],
2353   [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.)
2354 ])
2355 AT_CHECK([ovs-ofctl -F oxm -O openflow10,openflow12], [1], [],
2356  [ovs-ofctl: missing command name; use --help for help
2357 ])
2358 AT_CHECK([ovs-ofctl -F oxm -O openflow12], [1], [],
2359   [ovs-ofctl: missing command name; use --help for help
2360 ])
2361 AT_CHECK([ovs-ofctl -F oxm -O openflow13], [1], [],
2362   [ovs-ofctl: missing command name; use --help for help
2363 ])
2364 AT_CLEANUP
2365
2366 AT_SETUP([ovs-ofctl ofp-parse])
2367 # Test the echo request/reply messages (0 payload).
2368 AT_CHECK([printf '\1\2\0\10\0\0\0\0\1\3\0\10\0\0\0\0' > binary_ofp_msg])
2369 AT_CHECK([ovs-ofctl ofp-parse binary_ofp_msg], [0], [dnl
2370 OFPT_ECHO_REQUEST (xid=0x0): 0 bytes of payload
2371 OFPT_ECHO_REPLY (xid=0x0): 0 bytes of payload
2372 ])
2373
2374 # Test the hello (xid:1 3-byte payload).
2375 AT_CHECK([printf '\1\0\0\13\0\0\0\1\101\102\103' > binary_ofp_msg])
2376 AT_CHECK([ovs-ofctl ofp-parse - < binary_ofp_msg], [0], [dnl
2377 OFPT_HELLO (xid=0x1):
2378  version bitmap: 0x01
2379  unknown data in hello:
2380 00000000  01 00 00 0b 00 00 00 01-41 42 43                |........ABC     |
2381 ])
2382 AT_CLEANUP