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