740892cb8c229f4ec61a51810437b5446e717985
[sliver-openvswitch.git] / tests / ovs-ofctl.at
1 AT_BANNER([ovs-ofctl])
2
3 AT_SETUP([ovs-ofctl parse-flows (OpenFlow 1.0)])
4 AT_DATA([flows.txt], [[
5 # comment
6 tcp,tp_src=123,actions=flood
7 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
8 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
9 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
10 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
11 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
12 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
13 ]])
14
15 AT_CHECK([ovs-ofctl parse-flows flows.txt
16 ], [0], [stdout])
17 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
18 [[usable protocols: any
19 chosen protocol: OpenFlow10-table_id
20 OFPT_FLOW_MOD: ADD tcp,tp_src=123 actions=FLOOD
21 OFPT_FLOW_MOD: ADD in_port=65534,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
22 OFPT_FLOW_MOD: ADD udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
23 OFPT_FLOW_MOD: ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
24 OFPT_FLOW_MOD: ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
25 OFPT_FLOW_MOD: ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
26 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
27 ]])
28 AT_CLEANUP
29
30 AT_SETUP([ovs-ofctl parse-flows (NXM)])
31 AT_DATA([flows.txt], [[
32 # comment
33 tcp,tp_src=123,actions=flood
34 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
35 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
36 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
37 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
38 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
39 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
40 tcp,tp_src=0x1230/0xfff0,tun_id=0x1234,cookie=0x5678,actions=flood
41 actions=set_tunnel:0x1234,set_tunnel64:0x9876,set_tunnel:0x123456789
42 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])
43 table=1,actions=drop
44 tun_id=0x1234000056780000/0xffff0000ffff0000,actions=drop
45 actions=bundle(eth_src,50,active_backup,ofport,slaves:1)
46 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:2,3)
47 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:)
48 actions=output:1,bundle(eth_src,0,hrw,ofport,slaves:1),output:2
49 actions=bundle_load(eth_src,50,active_backup,ofport,NXM_NX_REG0[],slaves:1)
50 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
51 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:[2,3])
52 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..30],slaves:)
53 actions=output:1,bundle_load(eth_src,0,hrw,ofport,NXM_NX_REG0[16..31],slaves:1),output:2
54 actions=resubmit:1,resubmit(2),resubmit(,3),resubmit(2,3)
55 send_flow_rem,actions=output:1,output:NXM_NX_REG0[],output:2,output:NXM_NX_REG1[16..31],output:3
56 check_overlap,actions=output:1,exit,output:2
57 actions=fin_timeout(idle_timeout=5,hard_timeout=15)
58 actions=controller(max_len=123,reason=invalid_ttl,id=555)
59 ]])
60
61 AT_CHECK([ovs-ofctl parse-flows flows.txt
62 ], [0], [stdout])
63 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
64 [[usable protocols: NXM+table_id
65 chosen protocol: NXM+table_id
66 NXT_FLOW_MOD: ADD table:255 tcp,tp_src=123 actions=FLOOD
67 NXT_FLOW_MOD: ADD table:255 in_port=65534,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
68 NXT_FLOW_MOD: ADD table:255 udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
69 NXT_FLOW_MOD: ADD table:255 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
70 NXT_FLOW_MOD: ADD table:255 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
71 NXT_FLOW_MOD: ADD table:255 priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
72 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
73 NXT_FLOW_MOD: ADD table:255 tcp,tun_id=0x1234,tp_src=0x1230/0xfff0 cookie:0x5678 actions=FLOOD
74 NXT_FLOW_MOD: ADD table:255 actions=set_tunnel:0x1234,set_tunnel64:0x9876,set_tunnel64:0x123456789
75 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])
76 NXT_FLOW_MOD: ADD table:1 actions=drop
77 NXT_FLOW_MOD: ADD table:255 tun_id=0x1234000056780000/0xffff0000ffff0000 actions=drop
78 NXT_FLOW_MOD: ADD table:255 actions=bundle(eth_src,50,active_backup,ofport,slaves:1)
79 NXT_FLOW_MOD: ADD table:255 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:2,3)
80 NXT_FLOW_MOD: ADD table:255 actions=bundle(symmetric_l4,60,hrw,ofport,slaves:)
81 NXT_FLOW_MOD: ADD table:255 actions=output:1,bundle(eth_src,0,hrw,ofport,slaves:1),output:2
82 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(eth_src,50,active_backup,ofport,NXM_NX_REG0[],slaves:1)
83 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
84 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..15],slaves:2,3)
85 NXT_FLOW_MOD: ADD table:255 actions=bundle_load(symmetric_l4,60,hrw,ofport,NXM_NX_REG0[0..30],slaves:)
86 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
87 NXT_FLOW_MOD: ADD table:255 actions=resubmit:1,resubmit:2,resubmit(,3),resubmit(2,3)
88 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
89 NXT_FLOW_MOD: ADD table:255 check_overlap actions=output:1,exit,output:2
90 NXT_FLOW_MOD: ADD table:255 actions=fin_timeout(idle_timeout=5,hard_timeout=15)
91 NXT_FLOW_MOD: ADD table:255 actions=controller(reason=invalid_ttl,max_len=123,id=555)
92 ]])
93 AT_CLEANUP
94
95 AT_SETUP([ovs-ofctl -F nxm parse-flows])
96 AT_DATA([flows.txt], [
97 # comment
98 tcp,tp_src=123,actions=flood
99 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
100 arp,dl_src=00:0A:E4:25:6B:B0,arp_sha=00:0A:E4:25:6B:B0 actions=drop
101 ipv6,ipv6_label=0x12345 actions=2
102 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=3
103 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5/64 actions=4
104 ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:5/127 actions=5
105 tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop 
106 udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop 
107 in_port=3 icmp6,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
108 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
109 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
110 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
111 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571 actions=drop
112 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4F:0571/112 actions=drop
113 icmp6,icmp_type=135,nd_sll=00:0A:E4:25:6B:B0 actions=drop
114 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571,nd_tll=00:0A:E4:25:6B:B1 actions=drop
115 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE00:0000/96,nd_tll=00:0A:E4:25:6B:B1 actions=drop
116 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
117 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
118 tun_id=0x1234,cookie=0x5678,actions=flood
119 actions=drop
120 tun_id=0x1234000056780000/0xffff0000ffff0000,actions=drop
121 dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,actions=drop
122 dl_dst=00:00:00:00:00:00/01:00:00:00:00:00,actions=drop
123 dl_dst=aa:bb:cc:dd:ee:ff/fe:ff:ff:ff:ff:ff,actions=drop
124 dl_dst=aa:bb:cc:dd:ee:ff/00:00:00:00:00:00,actions=drop
125 ])
126 AT_CHECK([ovs-ofctl -F nxm parse-flows flows.txt], [0], [stdout])
127 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0], [dnl
128 usable protocols: NXM
129 chosen protocol: NXM-table_id
130 NXT_FLOW_MOD: ADD tcp,tp_src=123 actions=FLOOD
131 NXT_FLOW_MOD: ADD in_port=65534,dl_vlan=9,dl_src=00:0a:e4:25:6b:b0 actions=drop
132 NXT_FLOW_MOD: ADD arp,dl_src=00:0a:e4:25:6b:b0,arp_sha=00:0a:e4:25:6b:b0 actions=drop
133 NXT_FLOW_MOD: ADD ipv6,ipv6_label=0x12345 actions=output:2
134 NXT_FLOW_MOD: ADD ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=output:3
135 NXT_FLOW_MOD: ADD ipv6,ipv6_src=2001:db8:3c4d:1::/64 actions=output:4
136 NXT_FLOW_MOD: ADD ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:4/127 actions=output:5
137 NXT_FLOW_MOD: ADD tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop
138 NXT_FLOW_MOD: ADD udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop
139 NXT_FLOW_MOD: ADD icmp6,in_port=3,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
140 NXT_FLOW_MOD: ADD udp,dl_vlan_pcp=7 idle:5 actions=strip_vlan,output:0
141 NXT_FLOW_MOD: ADD tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
142 NXT_FLOW_MOD: ADD udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
143 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_target=fec0:0:1234:f045:8fff:1111:fe4e:571 actions=drop
144 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_target=fec0:0:1234:f045:8fff:1111:fe4f:0/112 actions=drop
145 NXT_FLOW_MOD: ADD icmp6,icmp_type=135,nd_sll=00:0a:e4:25:6b:b0 actions=drop
146 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
147 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
148 NXT_FLOW_MOD: ADD priority=60000 cookie:0x123456789abcdef hard:10 actions=CONTROLLER:65535
149 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
150 NXT_FLOW_MOD: ADD tun_id=0x1234 cookie:0x5678 actions=FLOOD
151 NXT_FLOW_MOD: ADD actions=drop
152 NXT_FLOW_MOD: ADD tun_id=0x1234000056780000/0xffff0000ffff0000 actions=drop
153 NXT_FLOW_MOD: ADD dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=drop
154 NXT_FLOW_MOD: ADD dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=drop
155 NXT_FLOW_MOD: ADD dl_dst=aa:bb:cc:dd:ee:ff/fe:ff:ff:ff:ff:ff actions=drop
156 NXT_FLOW_MOD: ADD actions=drop
157 ])
158 AT_CLEANUP
159
160 AT_SETUP([ovs-ofctl -F nxm -mmm parse-flows])
161 AT_DATA([flows.txt], [[
162 # comment
163 tcp,tp_src=123,actions=flood
164 in_port=LOCAL dl_vlan=9 dl_src=00:0A:E4:25:6B:B0 actions=drop
165 arp,dl_src=00:0A:E4:25:6B:B0,arp_sha=00:0A:E4:25:6B:B0 actions=drop
166 ipv6,ipv6_label=0x12345 actions=2
167 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5 actions=3
168 ipv6,ipv6_src=2001:db8:3c4d:1:2:3:4:5/64 actions=4
169 ipv6,ipv6_dst=2001:db8:3c4d:1:2:3:4:5/127 actions=5
170 tcp6,ipv6_src=2001:db8:3c4d:1::1,tp_dst=80 actions=drop 
171 udp6,ipv6_src=2001:db8:3c4d:1::3,tp_dst=53 actions=drop 
172 in_port=3 icmp6,ipv6_src=2001:db8:3c4d:1::1,icmp_type=134 actions=drop
173 udp dl_vlan_pcp=7 idle_timeout=5 actions=strip_vlan output:0
174 tcp,nw_src=192.168.0.3,tp_dst=80 actions=set_queue:37,output:1
175 udp,nw_src=192.168.0.3,tp_dst=53 actions=pop_queue,output:1
176 icmp6,icmp_type=135,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571 actions=drop
177 icmp6,icmp_type=135,nd_sll=00:0A:E4:25:6B:B0 actions=drop
178 icmp6,icmp_type=136,nd_target=FEC0::1234:F045:8FFF:1111:FE4E:0571,nd_tll=00:0A:E4:25:6B:B1 actions=drop
179 cookie=0x123456789abcdef hard_timeout=10 priority=60000 actions=controller
180 actions=note:41.42.43,note:00.01.02.03.04.05.06.07,note
181 tun_id=0x1234,cookie=0x5678,actions=flood
182 actions=drop
183 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[]
184 actions=autopath(5,NXM_NX_REG0[])
185 vlan_tci=0x1123/0x1fff,actions=drop
186 ]])
187 AT_CHECK([ovs-ofctl -F nxm -mmm parse-flows flows.txt], [0], [stdout])
188 AT_CHECK([[sed 's/ (xid=0x[0-9a-fA-F]*)//' stdout]], [0],
189 [[usable protocols: NXM
190 chosen protocol: NXM-table_id
191 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(007b) actions=FLOOD
192 NXT_FLOW_MOD: ADD NXM_OF_IN_PORT(fffe), NXM_OF_ETH_SRC(000ae4256bb0), NXM_OF_VLAN_TCI_W(1009/1fff) actions=drop
193 NXT_FLOW_MOD: ADD NXM_OF_ETH_SRC(000ae4256bb0), NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_SHA(000ae4256bb0) actions=drop
194 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_LABEL(00012345) actions=output:2
195 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005) actions=output:3
196 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000) actions=output:4
197 NXT_FLOW_MOD: ADD NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST_W(20010db83c4d00010002000300040004/fffffffffffffffffffffffffffffffe) actions=output:5
198 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
199 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
200 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
201 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
202 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
203 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
204 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
205 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
206 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
207 NXT_FLOW_MOD: ADD <any> cookie:0x123456789abcdef hard:10 pri:60000 actions=CONTROLLER:65535
208 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
209 NXT_FLOW_MOD: ADD NXM_NX_TUN_ID(0000000000001234) cookie:0x5678 actions=FLOOD
210 NXT_FLOW_MOD: ADD <any> actions=drop
211 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[]
212 NXT_FLOW_MOD: ADD <any> actions=autopath(5,NXM_NX_REG0[])
213 NXT_FLOW_MOD: ADD NXM_OF_VLAN_TCI_W(1123/1fff) actions=drop
214 ]])
215 AT_CLEANUP
216
217 AT_SETUP([ovs-ofctl parse-nx-match])
218 AT_KEYWORDS([nx-match])
219 AT_DATA([nx-match.txt], [dnl
220 <any>
221
222 # in port
223 NXM_OF_IN_PORT(0000)
224 NXM_OF_IN_PORT(fffe)
225
226 # eth dst
227 NXM_OF_ETH_DST(0002e30f80a4)
228 NXM_OF_ETH_DST_W(010000000000/010000000000)
229 NXM_OF_ETH_DST_W(000000000000/010000000000)
230 NXM_OF_ETH_DST_W(ffffffffffff/010000000000)
231 NXM_OF_ETH_DST_W(0002e30f80a4/ffffffffffff)
232 NXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
233 NXM_OF_ETH_DST_W(60175619848f/5a5a5a5a5a5a)
234
235 # eth src
236 NXM_OF_ETH_SRC(020898456ddb)
237 NXM_OF_ETH_SRC_W(012345abcdef/ffffff555555)
238 NXM_OF_ETH_SRC_W(020898456ddb/ffffffffffff)
239
240 # eth type
241 NXM_OF_ETH_TYPE(0800)
242 NXM_OF_ETH_TYPE(0800) NXM_OF_IN_PORT(0012)
243
244 # vlan tci
245 NXM_OF_VLAN_TCI(f009)
246 NXM_OF_VLAN_TCI(f009) NXM_OF_VLAN_TCI(f009)
247 NXM_OF_VLAN_TCI(0000)           # Packets without 802.1Q header.
248 NXM_OF_VLAN_TCI(3123)           # Packets with VID=123, PCP=1.
249 NXM_OF_VLAN_TCI(0123)           # Does not make sense (but supported anyway)
250 NXM_OF_VLAN_TCI_W(1123/1fff)    # Packets with VID=123, any PCP.
251 NXM_OF_VLAN_TCI_W(f000/f000)    # Packets with any VID, PCP=7.
252 NXM_OF_VLAN_TCI_W(0000/e000)    # No 802.1Q or with VID=0
253
254 # IP TOS
255 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_TOS(f0)
256 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_TOS(41)
257 NXM_OF_IP_TOS(f0)
258
259 # IP ECN
260 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_ECN(03)
261 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_ECN(06)
262 NXM_NX_IP_ECN(03)
263
264 # IP protocol
265 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01)
266 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(05)
267 NXM_OF_IP_PROTO(05)
268
269 # IP TTL
270 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_TTL(80)
271 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_TTL(ff)
272 NXM_NX_IP_TTL(80)
273
274 # IP source
275 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC(ac100014)
276 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_SRC_W(C0a80000/FFFF0000)
277 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_SRC(ac100014)
278 NXM_OF_IP_SRC_W(C0D80000/FFFF0000)
279
280 # IP destination
281 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST(ac100014)
282 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_DST_W(C0a88012/FFFF0000)
283 NXM_OF_IP_DST(ac100014)
284 NXM_OF_ETH_TYPE(0806) NXM_OF_IP_DST_W(C0D80000/FFFF0000)
285
286 # TCP source port
287 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC(4231)
288 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_SRC_W(5050/F0F0)
289 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_SRC(4231)
290
291 # TCP destination port
292 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST(4231)
293 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_TCP_DST_W(FDE0/FFF0)
294 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(07) NXM_OF_TCP_DST(4231)
295
296 # UDP source port
297 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC(8732)
298 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_SRC_W(0132/01FF)
299 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(06) NXM_OF_UDP_SRC(7823)
300
301 # UDP destination port
302 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST(1782)
303 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(11) NXM_OF_UDP_DST_W(5005/F00F)
304 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(02) NXM_OF_UDP_DST(1293)
305
306 # ICMP type
307 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_TYPE(12)
308 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_TYPE(10)
309
310 # ICMP code
311 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(01) NXM_OF_ICMP_CODE(12)
312 NXM_OF_ETH_TYPE(0800) NXM_OF_IP_PROTO(00) NXM_OF_ICMP_CODE(10)
313 NXM_OF_ETH_TYPE(0800) NXM_OF_ICMP_CODE(10)
314 NXM_OF_ICMP_CODE(00)
315
316 # ARP opcode
317 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001)
318 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(1111)
319 NXM_OF_ETH_TYPE(0000) NXM_OF_ARP_OP(0001)
320 NXM_OF_ARP_OP(0001)
321 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_OP(0001) NXM_OF_ARP_OP(0001)
322
323 # ARP source protocol address
324 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA(ac100014)
325 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
326 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_SPA(ac100014)
327 NXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
328
329 # ARP destination protocol address
330 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA(ac100014)
331 NXM_OF_ETH_TYPE(0806) NXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
332 NXM_OF_ETH_TYPE(0800) NXM_OF_ARP_TPA(ac100014)
333 NXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
334
335 # ARP source hardware address
336 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_SHA(0002e30f80a4)
337 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_SHA(0002e30f80a4)
338 NXM_NX_ARP_SHA(0002e30f80a4)
339
340 # ARP destination hardware address
341 NXM_OF_ETH_TYPE(0806) NXM_NX_ARP_THA(0002e30f80a4)
342 NXM_OF_ETH_TYPE(0800) NXM_NX_ARP_THA(0002e30f80a4)
343 NXM_NX_ARP_THA(0002e30f80a4)
344
345 # IPv6 source
346 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
347 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
348 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
349 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
350
351 # IPv6 destination
352 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
353 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
354 NXM_OF_ETH_TYPE(86dd) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
355 NXM_OF_ETH_TYPE(0800) NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
356
357 # ND source hardware address
358 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)
359 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)
360 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)
361 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)
362
363 # ND destination hardware address
364 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)
365 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)
366 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)
367 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)
368
369 # IPv4 fragments.
370 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(00)
371 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(01)
372 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(02)
373 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(03)
374 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/03)
375 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/fd)
376 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(00/02)
377 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(01/01)
378 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(02/02)
379 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG_W(03/03)
380 NXM_OF_ETH_TYPE(0800) NXM_NX_IP_FRAG(f3)
381
382 # IPv6 fragments.
383 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(00)
384 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(01)
385 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(02)
386 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(03)
387 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/03)
388 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/01)
389 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(00/02)
390 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(01/01)
391 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(02/02)
392 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG_W(03/03)
393 NXM_OF_ETH_TYPE(86dd) NXM_NX_IP_FRAG(f3)
394
395 # Flow cookie.
396 NXM_NX_COOKIE(00000000abcdef01)
397 NXM_NX_COOKIE_W(84200000abcdef01/84200000FFFFFFFF)
398
399 # Tunnel ID.
400 NXM_NX_TUN_ID(00000000abcdef01)
401 NXM_NX_TUN_ID_W(84200000abcdef01/84200000FFFFFFFF)
402
403 # Register 0.
404 NXM_NX_REG0(acebdf56)
405 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
406
407 # Invalid field number.
408 01020304(1111/2222)
409
410 # Unimplemented registers.
411 #
412 # This test assumes that at least two registers, but fewer than 16,
413 # registers are implemented.
414 00010004(12345678)
415 00010108(12345678/12345678)
416 00011e04(12345678)
417 00011f08(12345678/12345678)
418 ])
419 AT_CHECK([ovs-ofctl --strict parse-nx-match < nx-match.txt], [0], [dnl
420 <any>
421
422 # in port
423 NXM_OF_IN_PORT(0000)
424 NXM_OF_IN_PORT(fffe)
425
426 # eth dst
427 NXM_OF_ETH_DST(0002e30f80a4)
428 NXM_OF_ETH_DST_W(010000000000/010000000000)
429 NXM_OF_ETH_DST_W(000000000000/010000000000)
430 NXM_OF_ETH_DST_W(010000000000/010000000000)
431 NXM_OF_ETH_DST(0002e30f80a4)
432 NXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
433 NXM_OF_ETH_DST_W(40125218000a/5a5a5a5a5a5a)
434
435 # eth src
436 NXM_OF_ETH_SRC(020898456ddb)
437 NXM_OF_ETH_SRC_W(012345014545/ffffff555555)
438 NXM_OF_ETH_SRC(020898456ddb)
439
440 # eth type
441 NXM_OF_ETH_TYPE(0800)
442 NXM_OF_IN_PORT(0012), NXM_OF_ETH_TYPE(0800) 
443
444 # vlan tci
445 NXM_OF_VLAN_TCI(f009)
446 nx_pull_match() returned error OFPBMC_DUP_FIELD
447 NXM_OF_VLAN_TCI(0000)
448 NXM_OF_VLAN_TCI(3123)
449 NXM_OF_VLAN_TCI(0123)
450 NXM_OF_VLAN_TCI_W(1123/1fff)
451 NXM_OF_VLAN_TCI_W(f000/f000)
452 NXM_OF_VLAN_TCI_W(0000/e000)
453
454 # IP TOS
455 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_TOS(f0)
456 nx_pull_match() returned error OFPBMC_BAD_VALUE
457 nx_pull_match() returned error OFPBMC_BAD_PREREQ
458
459 # IP ECN
460 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_ECN(03)
461 nx_pull_match() returned error OFPBMC_BAD_VALUE
462 nx_pull_match() returned error OFPBMC_BAD_PREREQ
463
464 # IP protocol
465 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01)
466 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(05)
467 nx_pull_match() returned error OFPBMC_BAD_PREREQ
468
469 # IP TTL
470 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_TTL(80)
471 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_TTL(ff)
472 nx_pull_match() returned error OFPBMC_BAD_PREREQ
473
474 # IP source
475 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC(ac100014)
476 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_SRC_W(c0a80000/ffff0000)
477 nx_pull_match() returned error OFPBMC_BAD_PREREQ
478 nx_pull_match() returned error OFPBMC_BAD_PREREQ
479
480 # IP destination
481 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST(ac100014)
482 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_DST_W(c0a80000/ffff0000)
483 nx_pull_match() returned error OFPBMC_BAD_PREREQ
484 nx_pull_match() returned error OFPBMC_BAD_PREREQ
485
486 # TCP source port
487 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC(4231)
488 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_SRC_W(5050/f0f0)
489 nx_pull_match() returned error OFPBMC_BAD_PREREQ
490
491 # TCP destination port
492 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST(4231)
493 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(06), NXM_OF_TCP_DST_W(fde0/fff0)
494 nx_pull_match() returned error OFPBMC_BAD_PREREQ
495
496 # UDP source port
497 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC(8732)
498 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_SRC_W(0132/01ff)
499 nx_pull_match() returned error OFPBMC_BAD_PREREQ
500
501 # UDP destination port
502 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST(1782)
503 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(11), NXM_OF_UDP_DST_W(5005/f00f)
504 nx_pull_match() returned error OFPBMC_BAD_PREREQ
505
506 # ICMP type
507 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_TYPE(12)
508 nx_pull_match() returned error OFPBMC_BAD_PREREQ
509
510 # ICMP code
511 NXM_OF_ETH_TYPE(0800), NXM_OF_IP_PROTO(01), NXM_OF_ICMP_CODE(12)
512 nx_pull_match() returned error OFPBMC_BAD_PREREQ
513 nx_pull_match() returned error OFPBMC_BAD_PREREQ
514 nx_pull_match() returned error OFPBMC_BAD_PREREQ
515
516 # ARP opcode
517 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_OP(0001)
518 nx_pull_match() returned error OFPBMC_BAD_VALUE
519 nx_pull_match() returned error OFPBMC_BAD_PREREQ
520 nx_pull_match() returned error OFPBMC_BAD_PREREQ
521 nx_pull_match() returned error OFPBMC_DUP_FIELD
522
523 # ARP source protocol address
524 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA(ac100014)
525 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_SPA_W(c0a81200/ffffff00)
526 nx_pull_match() returned error OFPBMC_BAD_PREREQ
527 nx_pull_match() returned error OFPBMC_BAD_PREREQ
528
529 # ARP destination protocol address
530 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA(ac100014)
531 NXM_OF_ETH_TYPE(0806), NXM_OF_ARP_TPA_W(c0a81200/ffffff00)
532 nx_pull_match() returned error OFPBMC_BAD_PREREQ
533 nx_pull_match() returned error OFPBMC_BAD_PREREQ
534
535 # ARP source hardware address
536 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_SHA(0002e30f80a4)
537 nx_pull_match() returned error OFPBMC_BAD_PREREQ
538 nx_pull_match() returned error OFPBMC_BAD_PREREQ
539
540 # ARP destination hardware address
541 NXM_OF_ETH_TYPE(0806), NXM_NX_ARP_THA(0002e30f80a4)
542 nx_pull_match() returned error OFPBMC_BAD_PREREQ
543 nx_pull_match() returned error OFPBMC_BAD_PREREQ
544
545 # IPv6 source
546 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC(20010db83c4d00010002000300040005)
547 nx_pull_match() returned error OFPBMC_BAD_PREREQ
548 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
549 nx_pull_match() returned error OFPBMC_BAD_PREREQ
550
551 # IPv6 destination
552 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST(20010db83c4d00010002000300040005)
553 nx_pull_match() returned error OFPBMC_BAD_PREREQ
554 NXM_OF_ETH_TYPE(86dd), NXM_NX_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
555 nx_pull_match() returned error OFPBMC_BAD_PREREQ
556
557 # ND source hardware address
558 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)
559 nx_pull_match() returned error OFPBMC_BAD_PREREQ
560 nx_pull_match() returned error OFPBMC_BAD_PREREQ
561 nx_pull_match() returned error OFPBMC_BAD_PREREQ
562
563 # ND destination hardware address
564 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)
565 nx_pull_match() returned error OFPBMC_BAD_PREREQ
566 nx_pull_match() returned error OFPBMC_BAD_PREREQ
567 nx_pull_match() returned error OFPBMC_BAD_PREREQ
568
569 # IPv4 fragments.
570 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
571 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(01)
572 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(02)
573 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
574 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(00)
575 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/01)
576 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(00/02)
577 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(01/01)
578 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG_W(02/02)
579 NXM_OF_ETH_TYPE(0800), NXM_NX_IP_FRAG(03)
580 nx_pull_match() returned error OFPBMC_BAD_VALUE
581
582 # IPv6 fragments.
583 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
584 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(01)
585 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(02)
586 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
587 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(00)
588 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/01)
589 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(00/02)
590 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(01/01)
591 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG_W(02/02)
592 NXM_OF_ETH_TYPE(86dd), NXM_NX_IP_FRAG(03)
593 nx_pull_match() returned error OFPBMC_BAD_VALUE
594
595 # Flow cookie.
596 NXM_NX_COOKIE(00000000abcdef01)
597 NXM_NX_COOKIE_W(84200000abcdef01/84200000ffffffff)
598
599 # Tunnel ID.
600 NXM_NX_TUN_ID(00000000abcdef01)
601 NXM_NX_TUN_ID_W(84200000abcdef01/84200000ffffffff)
602
603 # Register 0.
604 NXM_NX_REG0(acebdf56)
605 NXM_NX_REG0_W(a0e0d050/f0f0f0f0)
606
607 # Invalid field number.
608 nx_pull_match() returned error OFPBMC_BAD_FIELD
609
610 # Unimplemented registers.
611 #
612 # This test assumes that at least two registers, but fewer than 16,
613 # registers are implemented.
614 NXM_NX_REG0(12345678)
615 NXM_NX_REG0_W(12345678/12345678)
616 nx_pull_match() returned error OFPBMC_BAD_FIELD
617 nx_pull_match() returned error OFPBMC_BAD_FIELD
618 ])
619 AT_CLEANUP
620
621 AT_SETUP([ovs-ofctl parse-ofp11-match])
622 AT_KEYWORDS([OF1.1])
623 AT_DATA([test-data], [dnl
624 # in_port=65534
625 0000 0058 fffffffe 000003fe dnl
626 000000000000ffffffffffff 000000000000ffffffffffff dnl
627 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
628 00000000 00 000000 0000000000000000ffffffffffffffff
629
630 # bad ofp11_match: OFPBMC_BAD_VALUE
631 & ofp_util|WARN|port 305419896 is outside the supported range 0 through 65279 or 0xffffff00 through 0xffffffff
632 0000 0058 12345678 000003fe dnl
633 000000000000ffffffffffff 000000000000ffffffffffff dnl
634 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
635 00000000 00 000000 0000000000000000ffffffffffffffff
636
637 # dl_src=00:01:02:03:04:05
638 0000 0058 00000000 000003ff dnl
639 000102030405000000000000 000000000000ffffffffffff dnl
640 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
641 00000000 00 000000 0000000000000000ffffffffffffffff
642
643 # dl_src=55:55:55:55:55:55/55:55:55:55:55:55
644 0000 0058 00000000 000003ff dnl
645 555555555555aaaaaaaaaaaa 000000000000ffffffffffff dnl
646 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
647 00000000 00 000000 0000000000000000ffffffffffffffff
648
649 # dl_dst=00:01:02:03:04:05
650 0000 0058 00000000 000003ff dnl
651 000000000000ffffffffffff 000102030405000000000000 dnl
652 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
653 00000000 00 000000 0000000000000000ffffffffffffffff
654
655 # dl_dst=01:00:00:00:00:00/01:00:00:00:00:00
656 0000 0058 00000000 000003ff dnl
657 000000000000ffffffffffff 010000000000feffffffffff dnl
658 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
659 00000000 00 000000 0000000000000000ffffffffffffffff
660
661 # dl_dst=00:01:02:03:04:05/fe:ff:ff:ff:ff:ff
662 0000 0058 00000000 000003ff dnl
663 000000000000ffffffffffff 000102030405010000000000 dnl
664 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
665 00000000 00 000000 0000000000000000ffffffffffffffff
666
667 # dl_dst=55:55:55:55:55:55/55:55:55:55:55:55
668 0000 0058 00000000 000003ff dnl
669 000000000000ffffffffffff 555555555555aaaaaaaaaaaa dnl
670 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
671 00000000 00 000000 0000000000000000ffffffffffffffff
672
673 dnl dl_vlan_pcp is ignored if dl_vlan is wildcarded, which causes the
674 dnl the wildcard bit and the dl_vlan_pcp to be dropped for output:
675 # in_port=1
676 # 11: fa -> fe
677 # 38: 03 -> 00
678 0000 0058 00000001 000003fa dnl
679 000000000000ffffffffffff 000000000000ffffffffffff dnl
680 0000 03 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
681 00000000 00 000000 0000000000000000ffffffffffffffff
682
683 # dl_vlan=291
684 0000 0058 00000000 000003fd dnl
685 000000000000ffffffffffff 000000000000ffffffffffff dnl
686 0123 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
687 00000000 00 000000 0000000000000000ffffffffffffffff
688
689 dnl OFPVID_NONE:
690 # vlan_tci=0x0000
691 0000 0058 00000000 000003fd dnl
692 000000000000ffffffffffff 000000000000ffffffffffff dnl
693 ffff 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
694 00000000 00 000000 0000000000000000ffffffffffffffff
695
696 dnl OFPVID_NONE ignores dl_vlan_pcp even if not wildcarded, which causes
697 dnl the wildcard bit and the dl_vlan_pcp to be dropped for output:
698 # vlan_tci=0x0000
699 # 11: f9 -> fd
700 # 38: 05 -> 00
701 0000 0058 00000000 000003f9 dnl
702 000000000000ffffffffffff 000000000000ffffffffffff dnl
703 ffff 05 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
704 00000000 00 000000 0000000000000000ffffffffffffffff
705
706 # vlan_tci=0x1000/0x1000
707 0000 0058 00000000 000003fd dnl
708 000000000000ffffffffffff 000000000000ffffffffffff dnl
709 fffe 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
710 00000000 00 000000 0000000000000000ffffffffffffffff
711
712 dnl Try invalid VID:
713 # bad ofp11_match: OFPBMC_BAD_VALUE
714 0000 0058 00000000 000003fd dnl
715 000000000000ffffffffffff 000000000000ffffffffffff dnl
716 1234 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
717 00000000 00 000000 0000000000000000ffffffffffffffff
718
719 # dl_vlan_pcp=4
720 0000 0058 00000000 000003f9 dnl
721 000000000000ffffffffffff 000000000000ffffffffffff dnl
722 fffe 04 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
723 00000000 00 000000 0000000000000000ffffffffffffffff
724
725 # dl_vlan=10,dl_vlan_pcp=6
726 0000 0058 00000000 000003f9 dnl
727 000000000000ffffffffffff 000000000000ffffffffffff dnl
728 000a 06 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
729 00000000 00 000000 0000000000000000ffffffffffffffff
730
731 # dl_type=0x1234
732 0000 0058 00000000 000003f7 dnl
733 000000000000ffffffffffff 000000000000ffffffffffff dnl
734 0000 00 00 1234 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
735 00000000 00 000000 0000000000000000ffffffffffffffff
736
737 # ip,nw_tos=252
738 0000 0058 00000000 000003e7 dnl
739 000000000000ffffffffffff 000000000000ffffffffffff dnl
740 0000 00 00 0800 fc 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
741 00000000 00 000000 0000000000000000ffffffffffffffff
742
743 dnl Try invalid TOS:
744 # bad ofp11_match: OFPBMC_BAD_VALUE
745 0000 0058 00000000 000003e7 dnl
746 000000000000ffffffffffff 000000000000ffffffffffff dnl
747 0000 00 00 0800 01 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
748 00000000 00 000000 0000000000000000ffffffffffffffff
749
750 # ip,nw_proto=5
751 0000 0058 00000000 000003d7 dnl
752 000000000000ffffffffffff 000000000000ffffffffffff dnl
753 0000 00 00 0800 00 05 00000000ffffffff 00000000ffffffff 0000 0000 dnl
754 00000000 00 000000 0000000000000000ffffffffffffffff
755
756 # arp,arp_op=2
757 0000 0058 00000000 000003d7 dnl
758 000000000000ffffffffffff 000000000000ffffffffffff dnl
759 0000 00 00 0806 00 02 00000000ffffffff 00000000ffffffff 0000 0000 dnl
760 00000000 00 000000 0000000000000000ffffffffffffffff
761
762 # ip,nw_src=192.168.128.0/24
763 0000 0058 00000000 000003f7 dnl
764 000000000000ffffffffffff 000000000000ffffffffffff dnl
765 0000 00 00 0800 00 00 c0a88000000000ff 00000000ffffffff 0000 0000 dnl
766 00000000 00 000000 0000000000000000ffffffffffffffff
767
768 dnl Try non-CIDR nw_src_mask:
769 # bad ofp11_match: OFPBMC_BAD_NW_ADDR_MASK
770 0000 0058 00000000 000003f7 dnl
771 000000000000ffffffffffff 000000000000ffffffffffff dnl
772 0000 00 00 0800 00 00 c0a880005a5a5a5a 00000000ffffffff 0000 0000 dnl
773 00000000 00 000000 0000000000000000ffffffffffffffff
774
775 # ip,nw_dst=192.168.128.0/24
776 0000 0058 00000000 000003f7 dnl
777 000000000000ffffffffffff 000000000000ffffffffffff dnl
778 0000 00 00 0800 00 00 00000000ffffffff c0a88000000000ff 0000 0000 dnl
779 00000000 00 000000 0000000000000000ffffffffffffffff
780
781 dnl Try non-CIDR nw_dst_mask:
782 # bad ofp11_match: OFPBMC_BAD_NW_ADDR_MASK
783 0000 0058 00000000 000003f7 dnl
784 000000000000ffffffffffff 000000000000ffffffffffff dnl
785 0000 00 00 0800 00 00 00000000ffffffff c0a880005a5a5a5a 0000 0000 dnl
786 00000000 00 000000 0000000000000000ffffffffffffffff
787
788 # arp,nw_src=192.168.128.0/24
789 0000 0058 00000000 000003f7 dnl
790 000000000000ffffffffffff 000000000000ffffffffffff dnl
791 0000 00 00 0806 00 00 c0a88000000000ff 00000000ffffffff 0000 0000 dnl
792 00000000 00 000000 0000000000000000ffffffffffffffff
793
794 # arp,nw_dst=192.168.128.0/24
795 0000 0058 00000000 000003f7 dnl
796 000000000000ffffffffffff 000000000000ffffffffffff dnl
797 0000 00 00 0806 00 00 00000000ffffffff c0a88000000000ff 0000 0000 dnl
798 00000000 00 000000 0000000000000000ffffffffffffffff
799
800 # tcp,tp_src=443
801 0000 0058 00000000 00000397 dnl
802 000000000000ffffffffffff 000000000000ffffffffffff dnl
803 0000 00 00 0800 00 06 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
804 00000000 00 000000 0000000000000000ffffffffffffffff
805
806 # tcp,tp_dst=443
807 0000 0058 00000000 00000357 dnl
808 000000000000ffffffffffff 000000000000ffffffffffff dnl
809 0000 00 00 0800 00 06 00000000ffffffff 00000000ffffffff 0000 01bb dnl
810 00000000 00 000000 0000000000000000ffffffffffffffff
811
812 # udp,tp_src=443
813 0000 0058 00000000 00000397 dnl
814 000000000000ffffffffffff 000000000000ffffffffffff dnl
815 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
816 00000000 00 000000 0000000000000000ffffffffffffffff
817
818 # icmp,icmp_type=5
819 0000 0058 00000000 00000397 dnl
820 000000000000ffffffffffff 000000000000ffffffffffff dnl
821 0000 00 00 0800 00 01 00000000ffffffff 00000000ffffffff 0005 0000 dnl
822 00000000 00 000000 0000000000000000ffffffffffffffff
823
824 # icmp,icmp_code=8
825 0000 0058 00000000 00000357 dnl
826 000000000000ffffffffffff 000000000000ffffffffffff dnl
827 0000 00 00 0800 00 01 00000000ffffffff 00000000ffffffff 0000 0008 dnl
828 00000000 00 000000 0000000000000000ffffffffffffffff
829
830 # udp,tp_src=443
831 0000 0058 00000000 00000397 dnl
832 000000000000ffffffffffff 000000000000ffffffffffff dnl
833 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
834 00000000 00 000000 0000000000000000ffffffffffffffff
835
836 # udp,tp_dst=443
837 0000 0058 00000000 00000357 dnl
838 000000000000ffffffffffff 000000000000ffffffffffff dnl
839 0000 00 00 0800 00 11 00000000ffffffff 00000000ffffffff 0000 01bb dnl
840 00000000 00 000000 0000000000000000ffffffffffffffff
841
842 dnl SCTP, no ports.
843 # ip,nw_proto=132
844 0000 0058 00000000 000003d7 dnl
845 000000000000ffffffffffff 000000000000ffffffffffff dnl
846 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 0000 0000 dnl
847 00000000 00 000000 0000000000000000ffffffffffffffff
848
849 dnl SCTP tp_src matching not supported:
850 # bad ofp11_match: OFPBMC_BAD_FIELD
851 0000 0058 00000000 00000397 dnl
852 000000000000ffffffffffff 000000000000ffffffffffff dnl
853 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
854 00000000 00 000000 0000000000000000ffffffffffffffff
855
856 dnl SCTP tp_dst matching not supported:
857 # bad ofp11_match: OFPBMC_BAD_FIELD
858 0000 0058 00000000 00000357 dnl
859 000000000000ffffffffffff 000000000000ffffffffffff dnl
860 0000 00 00 0800 00 84 00000000ffffffff 00000000ffffffff 0000 01bb dnl
861 00000000 00 000000 0000000000000000ffffffffffffffff
862
863 dnl Ignore tp_src if not TCP or UDP or SCTP:
864 # ip,nw_proto=21
865 # 11: 97 -> d7
866 # 60: 01 -> 00
867 # 61: bb -> 00
868 0000 0058 00000000 00000397 dnl
869 000000000000ffffffffffff 000000000000ffffffffffff dnl
870 0000 00 00 0800 00 15 00000000ffffffff 00000000ffffffff 01bb 0000 dnl
871 00000000 00 000000 0000000000000000ffffffffffffffff
872
873 dnl Ignore tp_dst if not TCP or UDP or SCTP:
874 # ip,nw_proto=22
875 # 11: 57 -> d7
876 # 62: 01 -> 00
877 # 63: bb -> 00
878 0000 0058 00000000 00000357 dnl
879 000000000000ffffffffffff 000000000000ffffffffffff dnl
880 0000 00 00 0800 00 16 00000000ffffffff 00000000ffffffff 0000 01bb dnl
881 00000000 00 000000 0000000000000000ffffffffffffffff
882
883 dnl mpls_label not yet supported:
884 # bad ofp11_match: OFPBMC_BAD_TAG
885 0000 0058 00000000 000002f7 dnl
886 000000000000ffffffffffff 000000000000ffffffffffff dnl
887 0000 00 00 8847 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
888 12345678 00 000000 0000000000000000ffffffffffffffff
889
890 dnl mpls_tc not yet supported:
891 # bad ofp11_match: OFPBMC_BAD_TAG
892 0000 0058 00000000 000001f7 dnl
893 000000000000ffffffffffff 000000000000ffffffffffff dnl
894 0000 00 00 8848 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
895 00000000 5a 000000 0000000000000000ffffffffffffffff
896
897 dnl mpls_label and mpls_tc must be ignored if dl_type is not MPLS:
898 # dl_type=0x1234
899 # 10: 00 -> 03
900 # 64: 12 -> 00
901 # 65: 34 -> 00
902 # 66: 56 -> 00
903 # 67: 78 -> 00
904 # 68: 5a -> 00
905 0000 0058 00000000 000000f7 dnl
906 000000000000ffffffffffff 000000000000ffffffffffff dnl
907 0000 00 00 1234 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
908 12345678 5a 000000 0000000000000000ffffffffffffffff
909
910 dnl metadata match not yet supported:
911 # bad ofp11_match: OFPBMC_BAD_FIELD
912 0000 0058 00000000 000003ff dnl
913 000000000000ffffffffffff 000000000000ffffffffffff dnl
914 0000 00 00 0000 00 00 00000000ffffffff 00000000ffffffff 0000 0000 dnl
915 00000000 00 000000 0000000000000001fffffffffffffffe
916
917 ])
918 sed '/^[[#&]]/d' < test-data > input.txt
919 sed -n 's/^# //p; /^$/p' < test-data > expout
920 sed -n 's/^& //p' < test-data > experr
921 AT_CAPTURE_FILE([input.txt])
922 AT_CAPTURE_FILE([expout])
923 AT_CAPTURE_FILE([experr])
924 AT_CHECK(
925   [ovs-ofctl '-vPATTERN:console:%c|%p|%m' parse-ofp11-match < input.txt],
926   [0], [expout], [experr])
927 AT_CLEANUP
928
929 AT_SETUP([ovs-ofctl parse-nx-match loose])
930 AT_KEYWORDS([nx-match])
931 AT_DATA([nx-match.txt], [dnl
932 NXM_OF_IN_PORT(0001), 01020304(1111/2222), NXM_OF_ETH_TYPE(0800)
933 ])
934
935 AT_CHECK([ovs-ofctl --strict parse-nx-match < nx-match.txt], [0], [dnl
936 nx_pull_match() returned error OFPBMC_BAD_FIELD
937 ])
938
939 AT_CHECK([ovs-ofctl parse-nx-match < nx-match.txt], [0], [dnl
940 NXM_OF_IN_PORT(0001), NXM_OF_ETH_TYPE(0800)
941 ])
942 AT_CLEANUP
943
944 AT_SETUP([ovs-ofctl parse-oxm])
945 AT_KEYWORDS([oxm])
946 AT_DATA([oxm.txt], [dnl
947 <any>
948
949 # in port
950 OXM_OF_IN_PORT(00000000)
951 OXM_OF_IN_PORT(fffffffe)
952
953 # eth dst
954 OXM_OF_ETH_DST(0002e30f80a4)
955 OXM_OF_ETH_DST_W(010000000000/010000000000)
956 OXM_OF_ETH_DST_W(000000000000/010000000000)
957 OXM_OF_ETH_DST_W(ffffffffffff/010000000000)
958 OXM_OF_ETH_DST_W(0002e30f80a4/ffffffffffff)
959 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
960
961 # eth src
962 OXM_OF_ETH_SRC(020898456ddb)
963
964 # eth type
965 OXM_OF_ETH_TYPE(0800)
966 OXM_OF_ETH_TYPE(0800) OXM_OF_IN_PORT(00000012)
967
968 # IP ECN
969 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(03)
970 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_ECN(06)
971 OXM_OF_IP_ECN(03)
972
973 # IP protocol
974 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01)
975 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(05)
976 OXM_OF_IP_PROTO(05)
977
978 # IP source
979 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC(ac100014)
980 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_SRC_W(C0a80000/FFFF0000)
981 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_SRC(ac100014)
982 OXM_OF_IPV4_SRC_W(C0D80000/FFFF0000)
983
984 # IP destination
985 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST(ac100014)
986 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV4_DST_W(C0a88012/FFFF0000)
987 OXM_OF_IPV4_DST(ac100014)
988 OXM_OF_ETH_TYPE(0806) OXM_OF_IPV4_DST_W(C0D80000/FFFF0000)
989
990 # TCP source port
991 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC(4231)
992 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_SRC_W(5050/F0F0)
993 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_SRC(4231)
994
995 # TCP destination port
996 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST(4231)
997 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_TCP_DST_W(FDE0/FFF0)
998 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(07) OXM_OF_TCP_DST(4231)
999
1000 # UDP source port
1001 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC(8732)
1002 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_SRC_W(0132/01FF)
1003 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(06) OXM_OF_UDP_SRC(7823)
1004
1005 # UDP destination port
1006 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST(1782)
1007 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(11) OXM_OF_UDP_DST_W(5005/F00F)
1008 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(02) OXM_OF_UDP_DST(1293)
1009
1010 # ICMP type
1011 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_TYPE(12)
1012 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_TYPE(10)
1013
1014 # ICMP code
1015 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(01) OXM_OF_ICMPV4_CODE(12)
1016 OXM_OF_ETH_TYPE(0800) OXM_OF_IP_PROTO(00) OXM_OF_ICMPV4_CODE(10)
1017 OXM_OF_ETH_TYPE(0800) OXM_OF_ICMPV4_CODE(10)
1018 OXM_OF_ICMPV4_CODE(00)
1019
1020 # ARP opcode
1021 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001)
1022 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(1111)
1023 OXM_OF_ETH_TYPE(0000) OXM_OF_ARP_OP(0001)
1024 OXM_OF_ARP_OP(0001)
1025 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_OP(0001) OXM_OF_ARP_OP(0001)
1026
1027 # ARP source protocol address
1028 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA(ac100014)
1029 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SPA_W(C0a81234/FFFFFF00)
1030 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SPA(ac100014)
1031 OXM_OF_ARP_SPA_W(C0D8fedc/FFFF0000)
1032
1033 # ARP destination protocol address
1034 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA(ac100014)
1035 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_TPA_W(C0a812fe/FFFFFF00)
1036 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_TPA(ac100014)
1037 OXM_OF_ARP_TPA_W(C0D80000/FFFF0000)
1038
1039 # ARP source hardware address
1040 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_SHA(0002e30f80a4)
1041 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_SHA(0002e30f80a4)
1042 OXM_OF_ARP_SHA(0002e30f80a4)
1043
1044 # ARP destination hardware address
1045 OXM_OF_ETH_TYPE(0806) OXM_OF_ARP_THA(0002e30f80a4)
1046 OXM_OF_ETH_TYPE(0800) OXM_OF_ARP_THA(0002e30f80a4)
1047 OXM_OF_ARP_THA(0002e30f80a4)
1048
1049 # IPv6 source
1050 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1051 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1052 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1053 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1054
1055 # IPv6 destination
1056 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1057 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1058 OXM_OF_ETH_TYPE(86dd) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1059 OXM_OF_ETH_TYPE(0800) OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1060
1061 # ND source hardware address
1062 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)
1063 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)
1064 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)
1065 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)
1066
1067 # ND destination hardware address
1068 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)
1069 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)
1070 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)
1071 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)
1072
1073 # Invalid field number.
1074 01020304(1111/2222)
1075 ])
1076 AT_CHECK([ovs-ofctl --strict parse-oxm < oxm.txt], [0], [dnl
1077 <any>
1078
1079 # in port
1080 OXM_OF_IN_PORT(00000000)
1081 OXM_OF_IN_PORT(fffffffe)
1082
1083 # eth dst
1084 OXM_OF_ETH_DST(0002e30f80a4)
1085 OXM_OF_ETH_DST_W(010000000000/010000000000)
1086 OXM_OF_ETH_DST_W(000000000000/010000000000)
1087 OXM_OF_ETH_DST_W(010000000000/010000000000)
1088 OXM_OF_ETH_DST(0002e30f80a4)
1089 OXM_OF_ETH_DST_W(0002e30f80a4/feffffffffff)
1090
1091 # eth src
1092 OXM_OF_ETH_SRC(020898456ddb)
1093
1094 # eth type
1095 OXM_OF_ETH_TYPE(0800)
1096 OXM_OF_IN_PORT(00000012), OXM_OF_ETH_TYPE(0800)
1097
1098 # IP ECN
1099 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_ECN(03)
1100 nx_pull_match() returned error OFPBMC_BAD_VALUE
1101 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1102
1103 # IP protocol
1104 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01)
1105 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(05)
1106 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1107
1108 # IP source
1109 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC(ac100014)
1110 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_SRC_W(c0a80000/ffff0000)
1111 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1112 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1113
1114 # IP destination
1115 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST(ac100014)
1116 OXM_OF_ETH_TYPE(0800), OXM_OF_IPV4_DST_W(c0a80000/ffff0000)
1117 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1118 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1119
1120 # TCP source port
1121 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC(4231)
1122 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_SRC_W(5050/f0f0)
1123 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1124
1125 # TCP destination port
1126 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST(4231)
1127 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(06), OXM_OF_TCP_DST_W(fde0/fff0)
1128 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1129
1130 # UDP source port
1131 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC(8732)
1132 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_SRC_W(0132/01ff)
1133 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1134
1135 # UDP destination port
1136 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST(1782)
1137 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(11), OXM_OF_UDP_DST_W(5005/f00f)
1138 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1139
1140 # ICMP type
1141 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_TYPE(12)
1142 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1143
1144 # ICMP code
1145 OXM_OF_ETH_TYPE(0800), OXM_OF_IP_PROTO(01), OXM_OF_ICMPV4_CODE(12)
1146 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1147 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1148 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1149
1150 # ARP opcode
1151 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_OP(0001)
1152 nx_pull_match() returned error OFPBMC_BAD_VALUE
1153 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1154 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1155 nx_pull_match() returned error OFPBMC_DUP_FIELD
1156
1157 # ARP source protocol address
1158 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA(ac100014)
1159 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SPA_W(c0a81200/ffffff00)
1160 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1161 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1162
1163 # ARP destination protocol address
1164 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA(ac100014)
1165 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_TPA_W(c0a81200/ffffff00)
1166 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1167 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1168
1169 # ARP source hardware address
1170 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_SHA(0002e30f80a4)
1171 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1172 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1173
1174 # ARP destination hardware address
1175 OXM_OF_ETH_TYPE(0806), OXM_OF_ARP_THA(0002e30f80a4)
1176 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1177 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1178
1179 # IPv6 source
1180 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC(20010db83c4d00010002000300040005)
1181 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1182 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_SRC_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1183 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1184
1185 # IPv6 destination
1186 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST(20010db83c4d00010002000300040005)
1187 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1188 OXM_OF_ETH_TYPE(86dd), OXM_OF_IPV6_DST_W(20010db83c4d00010000000000000000/ffffffffffffffff0000000000000000)
1189 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1190
1191 # ND source hardware address
1192 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)
1193 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1194 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1195 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1196
1197 # ND destination hardware address
1198 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)
1199 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1200 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1201 nx_pull_match() returned error OFPBMC_BAD_PREREQ
1202
1203 # Invalid field number.
1204 nx_pull_match() returned error OFPBMC_BAD_FIELD
1205 ])
1206 AT_CLEANUP
1207
1208 AT_SETUP([ovs-ofctl parse-oxm loose])
1209 AT_KEYWORDS([oxm])
1210 AT_DATA([oxm.txt], [dnl
1211 OXM_OF_IN_PORT(00000001), 01020304(1111/2222), OXM_OF_ETH_TYPE(0800)
1212 ])
1213
1214 AT_CHECK([ovs-ofctl --strict parse-oxm < oxm.txt], [0], [dnl
1215 nx_pull_match() returned error OFPBMC_BAD_FIELD
1216 ])
1217
1218 AT_CHECK([ovs-ofctl parse-oxm < oxm.txt], [0], [dnl
1219 OXM_OF_IN_PORT(00000001), OXM_OF_ETH_TYPE(0800)
1220 ])
1221 AT_CLEANUP
1222
1223 dnl Check that "-F openflow10" rejects a flow_mod with a tun_id, since
1224 dnl OpenFlow 1.0 doesn't support tunnels.
1225 AT_SETUP([ovs-ofctl -F option and tun_id])
1226 AT_CHECK([ovs-ofctl -F openflow10 add-flow dummy tun_id=123,actions=drop],
1227   [1], [], [ovs-ofctl: none of the usable flow formats (NXM) is among the allowed flow formats (OpenFlow10)
1228 ])
1229 AT_CLEANUP
1230
1231 dnl Check that "-F nxm" really forces add-flow to use the NXM flow format.
1232 dnl (If it doesn't, then either the tun_id won't show up at all, or it will
1233 dnl additionally show up as the top 32 bits of the cookie.)  This checks
1234 dnl for regression against bug #4566.
1235 AT_SETUP([ovs-ofctl -F option with flow_mods])
1236 OVS_VSWITCHD_START
1237 AT_CHECK([ovs-ofctl -F nxm add-flow br0 tun_id=0x12345678,actions=drop])
1238 AT_CHECK([ovs-ofctl dump-flows br0 | ofctl_strip], [0], [dnl
1239 NXST_FLOW reply:
1240  tun_id=0x12345678 actions=drop
1241 ])
1242 OVS_VSWITCHD_STOP
1243 AT_CLEANUP
1244
1245 dnl Check that "-F openflow10" is really honored on dump-flows.
1246 dnl (If it isn't, then dump-flows will show the register match.)
1247 AT_SETUP([ovs-ofctl dump-flows honors -F option])
1248 OVS_VSWITCHD_START
1249 AT_CHECK([ovs-ofctl add-flow br0 reg0=0x12345,actions=drop])
1250 AT_CHECK([ovs-ofctl -F openflow10 dump-flows br0 | ofctl_strip], [0], [dnl
1251 OFPST_FLOW reply:
1252  actions=drop
1253 ])
1254 OVS_VSWITCHD_STOP
1255 AT_CLEANUP
1256
1257 dnl Check that "-F openflow10" fails on dump-flows if the requested match
1258 dnl can't be represented in OpenFlow 1.0.
1259 AT_SETUP([ovs-ofctl dump-flows rejects bad -F option])
1260 OVS_VSWITCHD_START
1261 AT_CHECK([ovs-ofctl -F openflow10 dump-flows unix:br0.mgmt reg0=0xabcdef], [1], [],
1262   [ovs-ofctl: none of the usable flow formats (NXM) is among the allowed flow formats (OpenFlow10)
1263 ])
1264 OVS_VSWITCHD_STOP
1265 AT_CLEANUP
1266
1267 dnl Check that add-flow reports non-normalized flows (feature #5029).
1268 AT_SETUP([ovs-ofctl add-flow reports non-normalized flows])
1269 OVS_VSWITCHD_START
1270 AT_CHECK([ovs-ofctl TESTABLE_LOG add-flow br0 nw_src=1.2.3.4,actions=5],
1271   [0], [], [dnl
1272 ofp_util|INFO|normalization changed ofp_match, details:
1273 ofp_util|INFO| pre: nw_src=1.2.3.4
1274 ofp_util|INFO|post: @&t@
1275 ])
1276 OVS_VSWITCHD_STOP
1277 AT_CLEANUP
1278