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