]>
Commit | Line | Data |
---|---|---|
0e399d88 JP |
1 | AT_BANNER([datapath parsing and formatting]) |
2 | ||
eb1b39b3 BP |
3 | AT_SETUP([OVS datapath key parsing and formatting - valid forms]) |
4 | dnl We could add a test for invalid forms, but that's less important. | |
3bffc610 BP |
5 | AT_DATA([odp-base.txt], [dnl |
6 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15) | |
7 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x1234) | |
a61680c6 JP |
8 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=5,tos=0x80,ttl=128,frag=no) |
9 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=5,tos=0x81,ttl=128,frag=no) | |
10 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=5,tos=0x80,ttl=128,frag=first) | |
11 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=5,tos=0x80,ttl=128,frag=later) | |
12 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=6,tos=0,ttl=128,frag=no),tcp(src=80,dst=8080) | |
13 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=17,tos=0,ttl=128,frag=no),udp(src=81,dst=6632) | |
14 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=1,tos=0,ttl=128,frag=no),icmp(type=1,code=2) | |
60258dcb JP |
15 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no) |
16 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x71,hlimit=128,frag=no) | |
17 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=first) | |
18 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=later) | |
19 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=6,tclass=0,hlimit=128,frag=no),tcp(src=80,dst=8080) | |
20 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=17,tclass=0,hlimit=128,frag=no),udp(src=6630,dst=22) | |
21 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=1,code=2) | |
22 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=135,code=0),nd(target=::3) | |
23 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=135,code=0),nd(target=::3,sll=00:05:06:07:08:09) | |
24 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=136,code=0),nd(target=::3,tll=00:0a:0b:0c:0d:0e) | |
25 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=136,code=0),nd(target=::3,sll=00:05:06:07:08:09,tll=00:0a:0b:0c:0d:0e) | |
3bffc610 | 26 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0806),arp(sip=1.2.3.4,tip=5.6.7.8,op=1,sha=00:0f:10:11:12:13,tha=00:14:15:16:17:18) |
1b567fb9 | 27 | skb_mark(0x1234),in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=136,code=0),nd(target=::3,sll=00:05:06:07:08:09,tll=00:0a:0b:0c:0d:0e) |
b02475c5 SH |
28 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=3,ttl=64,bos=1) |
29 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=7,ttl=100,bos=1) | |
30 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8847),mpls(label=100,tc=7,ttl=100,bos=0) | |
31 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8848),mpls(label=1000,tc=4,ttl=200,bos=1) | |
32 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x8848),mpls(label=1000,tc=4,ttl=200,bos=0) | |
3bffc610 BP |
33 | ]) |
34 | ||
35 | (echo '# Valid forms without tun_id or VLAN header.' | |
36 | cat odp-base.txt | |
37 | ||
38 | echo | |
05fb0928 | 39 | echo '# Valid forms with tunnel header.' |
9b405f1a | 40 | sed 's/^/tunnel(tun_id=0x7f10354,src=10.10.10.10,dst=20.20.20.20,tos=0x0,ttl=64,flags(csum,key)),/' odp-base.txt |
3bffc610 BP |
41 | |
42 | echo | |
43 | echo '# Valid forms with VLAN header.' | |
fea393b1 BP |
44 | sed 's/\(eth([[^)]]*)\),*/\1,eth_type(0x8100),vlan(vid=99,pcp=7),encap(/ |
45 | s/$/)/' odp-base.txt | |
3bffc610 | 46 | |
b02475c5 SH |
47 | echo |
48 | echo '# Valid forms with MPLS header.' | |
49 | sed 's/\(eth([[^)]]*),?\)/\1,eth_type(0x8847),mpls(label=100,tc=7,ttl=64,bos=1)/' odp-base.txt | |
50 | ||
51 | echo | |
52 | echo '# Valid forms with MPLS multicast header.' | |
53 | sed 's/\(eth([[^)]]*),?\)/\1,eth_type(0x8848),mpls(label=100,tc=7,ttl=64,bos=1)/' odp-base.txt | |
54 | ||
abff858b PS |
55 | echo |
56 | echo '# Valid forms with QoS priority.' | |
1b567fb9 | 57 | sed 's/^/skb_priority(0x1234),/' odp-base.txt |
abff858b | 58 | |
3bffc610 | 59 | echo |
05fb0928 | 60 | echo '# Valid forms with tunnel and VLAN headers.' |
9b405f1a | 61 | sed 's/^/tunnel(tun_id=0xfedcba9876543210,src=10.0.0.1,dst=10.0.0.2,tos=0x8,ttl=128,flags(key)),/ |
fea393b1 | 62 | s/\(eth([[^)]]*)\),*/\1,eth_type(0x8100),vlan(vid=99,pcp=7),encap(/ |
2508ac16 BP |
63 | s/$/)/' odp-base.txt |
64 | ||
65 | echo | |
05fb0928 | 66 | echo '# Valid forms with QOS priority, tunnel, and VLAN headers.' |
9b405f1a | 67 | sed 's/^/skb_priority(0x1234),tunnel(tun_id=0xfedcba9876543210,src=10.10.10.10,dst=20.20.20.20,tos=0x8,ttl=64,flags(key)),/ |
2508ac16 | 68 | s/\(eth([[^)]]*)\),*/\1,eth_type(0x8100),vlan(vid=99,pcp=7),encap(/ |
fea393b1 | 69 | s/$/)/' odp-base.txt |
7257b535 BP |
70 | |
71 | echo | |
72 | echo '# Valid forms with IP first fragment.' | |
73 | sed -n 's/,frag=no),/,frag=first),/p' odp-base.txt | |
74 | ||
75 | echo | |
76 | echo '# Valid forms with IP later fragment.' | |
77 | sed -n 's/,frag=no),.*/,frag=later)/p' odp-base.txt) > odp.txt | |
3bffc610 | 78 | AT_CAPTURE_FILE([odp.txt]) |
eb1b39b3 | 79 | AT_CHECK_UNQUOTED([test-odp parse-keys < odp.txt], [0], [`cat odp.txt` |
3bffc610 BP |
80 | ]) |
81 | AT_CLEANUP | |
82 | ||
e6cc0bab AZ |
83 | AT_SETUP([OVS datapath wildcarded key parsing and formatting - valid forms]) |
84 | dnl We could add a test for invalid forms, but that's less important. | |
85 | AT_DATA([odp-base.txt], [dnl | |
86 | in_port(1/0xff),eth(src=00:01:02:03:04:05/ff:ff:ff:ff:ff:f0,dst=10:11:12:13:14:15/ff:ff:ff:ff:ff:f0) | |
87 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x1234/0xfff0) | |
88 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41/255.255.255.0,dst=172.16.0.20/255.255.255.0,proto=5/0xf0,tos=0x80/0xf0,ttl=128/0xf0,frag=no/0xf0) | |
89 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=6,tos=0,ttl=128,frag=no),tcp(src=80/0xff00,dst=8080/0xff) | |
90 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=17,tos=0,ttl=128,frag=no),udp(src=81/0xff00,dst=6632/0xff) | |
041e7168 | 91 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=17,tos=0,ttl=128,frag=no),udp(src=81/0xff,dst=6632/0xff00) |
e6cc0bab AZ |
92 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0800),ipv4(src=35.8.2.41,dst=172.16.0.20,proto=1,tos=0,ttl=128,frag=no),icmp(type=1/0xf0,code=2/0xff) |
93 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1/::255,dst=::2/::255,label=0/0xf0,proto=10/0xf0,tclass=0x70/0xf0,hlimit=128/0xf0,frag=no/0xf0) | |
94 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=6,tclass=0,hlimit=128,frag=no),tcp(src=80/0xff00,dst=8080/0xff) | |
95 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=17,tclass=0,hlimit=128,frag=no),udp(src=6630/0xff00,dst=22/0xff) | |
96 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=1/0xf0,code=2/0xff) | |
97 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=135,code=0),nd(target=::3/::250) | |
98 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=135,code=0),nd(target=::3/::250,sll=00:05:06:07:08:09/ff:ff:ff:ff:ff:00) | |
99 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=136,code=0),nd(target=::3/::250,tll=00:0a:0b:0c:0d:0e/ff:ff:ff:ff:ff:00) | |
100 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=136,code=0),nd(target=::3/::250,sll=00:05:06:07:08:09/ff:ff:ff:ff:ff:00,tll=00:0a:0b:0c:0d:0e/ff:ff:ff:ff:ff:00) | |
101 | in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x0806),arp(sip=1.2.3.4/255.255.255.250,tip=5.6.7.8/255.255.255.250,op=1/0xf0,sha=00:0f:10:11:12:13/ff:ff:ff:ff:ff:00,tha=00:14:15:16:17:18/ff:ff:ff:ff:ff:00) | |
102 | skb_mark(0x1234/0xfff0),in_port(1),eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15),eth_type(0x86dd),ipv6(src=::1,dst=::2,label=0,proto=58,tclass=0,hlimit=128,frag=no),icmpv6(type=136,code=0),nd(target=::3,sll=00:05:06:07:08:09,tll=00:0a:0b:0c:0d:0e) | |
103 | ]) | |
104 | ||
105 | (echo '# Valid forms without tun_id or VLAN header.' | |
106 | cat odp-base.txt | |
107 | ||
108 | echo | |
109 | echo '# Valid forms with tunnel header.' | |
110 | sed 's/^/tunnel(tun_id=0x7f10354\/0xff,src=10.10.10.10\/255.255.255.0,dst=20.20.20.20\/255.255.255.0,tos=0\/0xff,ttl=64\/0xff,flags(csum,key)),/' odp-base.txt | |
111 | ||
112 | echo | |
113 | echo '# Valid forms with VLAN header.' | |
114 | sed 's/\(eth([[^)]]*)\),*/\1,eth_type(0x8100),vlan(vid=99,pcp=7),encap(/ | |
115 | s/$/)/' odp-base.txt | |
116 | ||
117 | echo | |
118 | echo '# Valid forms with MPLS header.' | |
119 | sed 's/\(eth([[^)]]*),?\)/\1,eth_type(0x8847),mpls(label=100\/0xff,tc=7\/7,ttl=64\/0xff,bos=1\/1)/' odp-base.txt | |
120 | ||
121 | echo | |
122 | echo '# Valid forms with QoS priority.' | |
123 | sed 's/^/skb_priority(0x1234\/0xff),/' odp-base.txt | |
124 | ||
125 | echo | |
126 | echo '# Valid forms with tunnel and VLAN headers.' | |
127 | sed 's/^/tunnel(tun_id=0xfedcba9876543210,src=10.0.0.1,dst=10.0.0.2,tos=0x8,ttl=128,flags(key)),/ | |
128 | s/\(eth([[^)]]*)\),*/\1,eth_type(0x8100),vlan(vid=99/0xff0,pcp=7/0xe),encap(/ | |
129 | s/$/)/' odp-base.txt | |
130 | ||
131 | echo | |
132 | echo '# Valid forms with QOS priority, tunnel, and VLAN headers.' | |
133 | sed 's/^/skb_priority(0x1234),tunnel(tun_id=0xfedcba9876543210,src=10.10.10.10,dst=20.20.20.20,tos=0x8,ttl=64,flags(key)),/ | |
134 | s/\(eth([[^)]]*)\),*/\1,eth_type(0x8100),vlan(vid=99,pcp=7),encap(/ | |
135 | s/$/)/' odp-base.txt | |
136 | ||
137 | echo | |
138 | echo '# Valid forms with IP first fragment.' | |
139 | sed -n 's/,frag=no),/,frag=first),/p' odp-base.txt | |
140 | ||
141 | echo | |
142 | echo '# Valid forms with IP later fragment.' | |
143 | sed -n 's/,frag=no),.*/,frag=later)/p' odp-base.txt) > odp.txt | |
144 | AT_CAPTURE_FILE([odp.txt]) | |
145 | AT_CHECK_UNQUOTED([test-odp parse-wc-keys < odp.txt], [0], [`cat odp.txt` | |
146 | ]) | |
147 | AT_CLEANUP | |
148 | ||
eb1b39b3 BP |
149 | AT_SETUP([OVS datapath actions parsing and formatting - valid forms]) |
150 | AT_DATA([actions.txt], [dnl | |
151 | 1,2,3 | |
152 | userspace(pid=555666777) | |
153 | userspace(pid=6633,sFlow(vid=9,pcp=7,output=10)) | |
154 | userspace(pid=9765,slow_path()) | |
155 | userspace(pid=9765,slow_path(cfm)) | |
e995e3df | 156 | userspace(pid=1234567,userdata(0102030405060708090a0b0c0d0e0f)) |
29089a54 RL |
157 | userspace(pid=6633,flow_sample(probability=123,collector_set_id=1234,obs_domain_id=2345,obs_point_id=3456)) |
158 | userspace(pid=6633,ipfix) | |
eb1b39b3 BP |
159 | set(in_port(2)) |
160 | set(eth(src=00:01:02:03:04:05,dst=10:11:12:13:14:15)) | |
161 | set(eth_type(0x1234)) | |
162 | set(ipv4(src=35.8.2.41,dst=172.16.0.20,proto=5,tos=0x80,ttl=128,frag=no)) | |
163 | set(tcp(src=80,dst=8080)) | |
164 | set(udp(src=81,dst=6632)) | |
165 | set(icmp(type=1,code=2)) | |
166 | set(ipv6(src=::1,dst=::2,label=0,proto=10,tclass=0x70,hlimit=128,frag=no)) | |
167 | set(icmpv6(type=1,code=2)) | |
168 | push_vlan(vid=12,pcp=0) | |
169 | push_vlan(vid=13,pcp=5,cfi=0) | |
170 | push_vlan(tpid=0x9100,vid=13,pcp=5) | |
171 | push_vlan(tpid=0x9100,vid=13,pcp=5,cfi=0) | |
172 | pop_vlan | |
173 | sample(sample=9.7%,actions(1,2,3,push_vlan(vid=1,pcp=2))) | |
9b405f1a PS |
174 | set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(df,csum,key))) |
175 | set(tunnel(tun_id=0xabcdef1234567890,src=1.1.1.1,dst=2.2.2.2,tos=0x0,ttl=64,flags(key))) | |
eb1b39b3 BP |
176 | ]) |
177 | AT_CHECK_UNQUOTED([test-odp parse-actions < actions.txt], [0], | |
178 | [`cat actions.txt` | |
179 | ]) | |
180 | AT_CLEANUP |