]>
Commit | Line | Data |
---|---|---|
1 | OpenFlow 1.1+ support in Open vSwitch | |
2 | ===================================== | |
3 | ||
4 | Open vSwitch support for OpenFlow 1.1 and beyond is a work in | |
5 | progress. This file describes the work still to be done. | |
6 | ||
7 | The Plan | |
8 | -------- | |
9 | ||
10 | OpenFlow version support is not a build-time option. A single build | |
11 | of Open vSwitch must be able to handle all supported versions of | |
12 | OpenFlow. Ideally, even at runtime it should be able to support all | |
13 | protocol versions at the same time on different OpenFlow bridges (and | |
14 | perhaps even on the same bridge). | |
15 | ||
16 | At the same time, it would be a shame to litter the core of the OVS | |
17 | code with lots of ugly code concerned with the details of various | |
18 | OpenFlow protocol versions. | |
19 | ||
20 | The primary approach to compatibility is to abstract most of the | |
21 | details of the differences from the core code, by adding a protocol | |
22 | layer that translates between OF1.x and a slightly higher-level | |
23 | abstract representation. The core of this approach is the many struct | |
24 | ofputil_* structures in lib/ofp-util.h. | |
25 | ||
26 | As a consequence of this approach, OVS cannot use OpenFlow protocol | |
27 | definitions that closely resemble those in the OpenFlow specification, | |
28 | because openflow.h in different versions of the OpenFlow specification | |
29 | defines the same identifier with different values. Instead, | |
30 | openflow-common.h contains definitions that are common to all the | |
31 | specifications and separate protocol version-specific headers contain | |
32 | protocol-specific definitions renamed so as not to conflict, | |
33 | e.g. OFPAT10_ENQUEUE and OFPAT11_ENQUEUE for the OpenFlow 1.0 and 1.1 | |
34 | values for OFPAT_ENQUEUE. Generally, in cases of conflict, the | |
35 | protocol layer will define a more abstract OFPUTIL_* or struct | |
36 | ofputil_*. | |
37 | ||
38 | Here are the current approaches in a few tricky areas: | |
39 | ||
40 | * Port numbering. OpenFlow 1.0 has 16-bit port numbers and later | |
41 | OpenFlow versions have 32-bit port numbers. For now, OVS | |
42 | support for later protocol versions requires all port numbers to | |
43 | fall into the 16-bit range, translating the reserved OFPP_* port | |
44 | numbers. | |
45 | ||
46 | * Actions. OpenFlow 1.0 and later versions have very different | |
47 | ideas of actions. OVS reconciles by translating all the | |
48 | versions' actions (and instructions) to and from a common | |
49 | internal representation. | |
50 | ||
51 | OpenFlow 1.1 | |
52 | ------------ | |
53 | ||
54 | The list of remaining work items for OpenFlow 1.1 is below. It is | |
55 | probably incomplete. | |
56 | ||
57 | * Match and set double-tagged VLANs (QinQ). This requires kernel | |
58 | work for reasonable performance. | |
59 | [optional for OF1.1+] | |
60 | ||
61 | * VLANs tagged with 88a8 Ethertype. This requires kernel work for | |
62 | reasonable performance. | |
63 | [required for OF1.1+] | |
64 | ||
65 | OpenFlow 1.2 | |
66 | ------------ | |
67 | ||
68 | OpenFlow 1.2 support requires OpenFlow 1.1 as a prerequisite. All the | |
69 | additional work specific to Openflow 1.2 are complete. (This is based | |
70 | on the change log at the end of the OF1.2 spec. I didn't compare the | |
71 | specs carefully yet.) | |
72 | ||
73 | OpenFlow 1.3 | |
74 | ------------ | |
75 | ||
76 | OpenFlow 1.3 support requires OpenFlow 1.2 as a prerequisite, plus the | |
77 | following additional work. (This is based on the change log at the | |
78 | end of the OF1.3 spec, reusing most of the section titles directly. I | |
79 | didn't compare the specs carefully yet.) | |
80 | ||
81 | * Add support for multipart requests. | |
82 | Currently we always report OFPBRC_MULTIPART_BUFFER_OVERFLOW. | |
83 | [optional for OF1.3+] | |
84 | ||
85 | * IPv6 extension header handling support. Fully implementing this | |
86 | requires kernel support. This likely will take some careful and | |
87 | probably time-consuming design work. The actual coding, once | |
88 | that is all done, is probably 2 or 3 days work. | |
89 | [optional for OF1.3+] | |
90 | ||
91 | * Per-flow meters. OpenFlow protocol support is now implemented. | |
92 | Support for the special OFPM_SLOWPATH and OFPM_CONTROLLER meters | |
93 | is missing. Support for the software switch is under review. | |
94 | [optional for OF1.3+] | |
95 | ||
96 | * Auxiliary connections. An implementation in generic code might | |
97 | be a week's worth of work. The value of an implementation in | |
98 | generic code is questionable, though, since much of the benefit | |
99 | of axuiliary connections is supposed to be to take advantage of | |
100 | hardware support. (We could make the kernel module somehow | |
101 | send packets across the auxiliary connections directly, for | |
102 | some kind of "hardware" support, if we judged it useful enough.) | |
103 | [optional for OF1.3+] | |
104 | ||
105 | * Provider Backbone Bridge tagging. I don't plan to implement | |
106 | this (but we'd accept an implementation). | |
107 | [optional for OF1.3+] | |
108 | ||
109 | * On-demand flow counters. I think this might be a real | |
110 | optimization in some cases for the software switch. | |
111 | [optional for OF1.3+] | |
112 | ||
113 | OpenFlow 1.4 & ONF Extensions for 1.3.X Pack1 | |
114 | --------------------------------------------- | |
115 | ||
116 | The following features are both defined as a set of ONF Extensions | |
117 | for 1.3 and integrated in 1.4. | |
118 | When defined as an ONF Extension for 1.3, the feature is using the | |
119 | Experimenter mechanism with the ONF Experimenter ID. | |
120 | When defined integrated in 1.4, the feature use the standard OpenFlow | |
121 | structures (for example defined in openflow-1.4.h). | |
122 | The two definitions for each feature are independant and can exist in | |
123 | parallel in OVS. | |
124 | ||
125 | * Flow entry notifications | |
126 | This seems to be modelled after OVS's NXST_FLOW_MONITOR. | |
127 | (Simon Horman is working on this.) | |
128 | [EXT-187] | |
129 | [optional for OF1.4+] | |
130 | ||
131 | * Role Status | |
132 | Already implemented as a 1.4 feature. | |
133 | [EXT-191] | |
134 | [required for OF1.4+] | |
135 | ||
136 | * Flow entry eviction | |
137 | OVS has flow eviction functionality. | |
138 | table_mod OFPTC_EVICTION, flow_mod 'importance', and | |
139 | table_desc ofp_table_mod_prop_eviction need to be implemented. | |
140 | [EXT-192-e] | |
141 | [optional for OF1.4+] | |
142 | ||
143 | * Vacancy events | |
144 | [EXT-192-v] | |
145 | [optional for OF1.4+] | |
146 | ||
147 | * Bundle | |
148 | Transactional modification. OpenFlow 1.4 requires to support | |
149 | flow_mods and port_mods in a bundle if bundle is supported. | |
150 | (Not related to OVS's 'ofbundle' stuff.) | |
151 | [EXT-230] | |
152 | [optional for OF1.4+] | |
153 | ||
154 | * Table synchronisation | |
155 | Probably not so useful to the software switch. | |
156 | [EXT-232] | |
157 | [optional for OF1.4+] | |
158 | ||
159 | * Group and Meter change notifications | |
160 | [EXT-235] | |
161 | [optional for OF1.4+] | |
162 | ||
163 | * Bad flow entry priority error | |
164 | Probably not so useful to the software switch. | |
165 | [EXT-236] | |
166 | [optional for OF1.4+] | |
167 | ||
168 | * Set async config error | |
169 | [EXT-237] | |
170 | [optional for OF1.4+] | |
171 | ||
172 | * PBB UCA header field | |
173 | See comment on Provider Backbone Bridge in section about OpenFlow 1.3. | |
174 | [EXT-256] | |
175 | [optional for OF1.4+] | |
176 | ||
177 | * Multipart timeout error | |
178 | [EXT-264] | |
179 | [required for OF1.4+] | |
180 | ||
181 | OpenFlow 1.4 only | |
182 | ----------------- | |
183 | ||
184 | Those features are those only available in OpenFlow 1.4, other | |
185 | OpenFlow 1.4 features are listed in the previous section. | |
186 | ||
187 | * More extensible wire protocol | |
188 | Many on-wire structures got TLVs. | |
189 | Already implemented: port desc properties, port mod properties, | |
190 | port stats properties, table mod properties, | |
191 | queue stats, unified property errors. | |
192 | Remaining required: set-async, queue desc | |
193 | Remaining optional: table desc, table-status | |
194 | [EXT-262] | |
195 | [required for OF1.4+] | |
196 | ||
197 | * More descriptive reasons for packet-in | |
198 | Distinguish OFPR_APPLY_ACTION, OFPR_ACTION_SET, OFPR_GROUP, | |
199 | OFPR_PACKET_OUT. NO_MATCH was renamed to OFPR_TABLE_MISS. | |
200 | (OFPR_ACTION_SET and OFPR_GROUP are now supported) | |
201 | [EXT-136] | |
202 | [required for OF1.4+] | |
203 | ||
204 | * Optical port properties | |
205 | [EXT-154] | |
206 | [optional for OF1.4+] | |
207 | ||
208 | OpenFlow 1.5 & ONF Extensions for 1.3.X Pack2 | |
209 | --------------------------------------------- | |
210 | ||
211 | The following features are both defined as a set of ONF Extensions for | |
212 | 1.3 and integrated in 1.5. Note that this list is not definitive as | |
213 | those are not yet published. | |
214 | When defined as an ONF Extension for 1.3, the feature is using the | |
215 | Experimenter mechanism with the ONF Experimenter ID. | |
216 | When defined integrated in 1.5, the feature use the standard OpenFlow | |
217 | structures (for example defined in openflow-1.5.h). | |
218 | The two definitions for each feature are independant and can exist in | |
219 | parallel in OVS. | |
220 | ||
221 | * Time scheduled bundles | |
222 | [EXT-340] | |
223 | [optional for OF1.5+] | |
224 | ||
225 | OpenFlow 1.5 only | |
226 | ----------------- | |
227 | ||
228 | Those features are those only available in OpenFlow 1.5, other | |
229 | OpenFlow 1.5 features are listed in the previous section. | |
230 | Note that this list is not definitive as OpenFlow 1.5 is not yet | |
231 | published. | |
232 | ||
233 | * Egress Tables | |
234 | [EXT-306] | |
235 | [optional for OF1.5+] | |
236 | ||
237 | * Packet Type aware pipeline | |
238 | Prototype for OVS was done during specification. | |
239 | [EXT-112] | |
240 | [optional for OF1.5+] | |
241 | ||
242 | * Extensible Flow Entry Statistics | |
243 | [EXT-334] | |
244 | [required for OF1.5+] | |
245 | ||
246 | * Flow Entry Statistics Trigger | |
247 | [EXT-335] | |
248 | [optional for OF1.5+] | |
249 | ||
250 | * Controller connection status | |
251 | Prototype for OVS was done during specification. | |
252 | [EXT-454] | |
253 | [optional for OF1.5+] | |
254 | ||
255 | * Meter action | |
256 | [EXT-379] | |
257 | [required for OF1.5+ if metering is supported] | |
258 | ||
259 | * Enable setting all pipeline fields in packet-out | |
260 | Prototype for OVS was done during specification. | |
261 | [EXT-427] | |
262 | [required for OF1.5+] | |
263 | ||
264 | * Port properties for pipeline fields | |
265 | Prototype for OVS was done during specification. | |
266 | [EXT-388] | |
267 | [optional for OF1.5+] | |
268 | ||
269 | * Port property for recirculation | |
270 | Prototype for OVS was done during specification. | |
271 | [EXT-399] | |
272 | [optional for OF1.5+] | |
273 | ||
274 | General | |
275 | ----- | |
276 | ||
277 | * ovs-ofctl(8) often lists as Nicira extensions features that | |
278 | later OpenFlow versions support in standard ways. | |
279 | ||
280 | How to contribute | |
281 | ----------------- | |
282 | ||
283 | If you plan to contribute code for a feature, please let everyone know | |
284 | on ovs-dev before you start work. This will help avoid duplicating | |
285 | work. | |
286 | ||
287 | Please consider the following: | |
288 | ||
289 | * Testing. Please test your code. | |
290 | ||
291 | * Unit tests. Please consider writing some. The tests directory | |
292 | has many examples that you can use as a starting point. | |
293 | ||
294 | * ovs-ofctl. If you add a feature that is useful for some | |
295 | ovs-ofctl command then you should add support for it there. | |
296 | ||
297 | * Documentation. If you add a user-visible feature, then you | |
298 | should document it in the appropriate manpage and mention it in | |
299 | NEWS as well. | |
300 | ||
301 | * Coding style (see the [CodingStyle.md] file at the top of the | |
302 | source tree). | |
303 | ||
304 | * The patch submission guidelines (see [CONTRIBUTING.md]). I | |
305 | recommend using "git send-email", which automatically follows a | |
306 | lot of those guidelines. | |
307 | ||
308 | Bug Reporting | |
309 | ------------- | |
310 | ||
311 | Please report problems to bugs@openvswitch.org. | |
312 | ||
313 | [CONTRIBUTING.md]:CONTRIBUTING.md | |
314 | [CodingStyle.md]:CodingStyle.md |