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