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