]>
Commit | Line | Data |
---|---|---|
bea97716 BP |
1 | OpenFlow 1.1+ support in Open vSwitch |
2 | ===================================== | |
3 | ||
4 | Open vSwitch support for OpenFlow 1.1, 1.2, and 1.3 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 | ||
bea97716 BP |
57 | * The new in_phy_port field in OFPT_PACKET_IN needs some kind of |
58 | implementation. It has a sensible interpretation for tunnels | |
59 | but in general the physical port is not in the datapath for OVS | |
60 | so the value is not necessarily meaningful. We might have to | |
61 | just fix it as the same as in_port. | |
4db3f50a | 62 | [required for OF1.1; optional for OF1.2+] |
bea97716 | 63 | |
4db3f50a | 64 | * OFPT_TABLE_MOD message. This is new in OF1.1, so we need to |
bea97716 BP |
65 | implement it. It should be implemented so that the default OVS |
66 | behavior does not change. | |
4db3f50a SH |
67 | [required for OF1.1 and OF1.2] |
68 | ||
bea97716 | 69 | * MPLS. Simon Horman maintains a patch series that adds this |
ac3d64b1 | 70 | feature. This is partially merged. |
4db3f50a | 71 | [optional for OF1.1+] |
bea97716 | 72 | |
bea97716 BP |
73 | * Match and set double-tagged VLANs (QinQ). This requires kernel |
74 | work for reasonable performance. | |
4db3f50a | 75 | [optional for OF1.1+] |
bea97716 BP |
76 | |
77 | * VLANs tagged with 88a8 Ethertype. This requires kernel work for | |
78 | reasonable performance. | |
4db3f50a | 79 | [required for OF1.1+] |
bea97716 BP |
80 | |
81 | * Groups. | |
82 | ||
4db3f50a SH |
83 | * Type all |
84 | [required for OF1.1+] | |
85 | ||
86 | * Type select | |
87 | [optional for OF1.1+] | |
88 | ||
89 | * Type indirect | |
90 | [required for OF1.1+] | |
91 | ||
92 | * Type fast failover | |
93 | [optional for OF1.1+] | |
94 | ||
95 | * Statistics | |
96 | [optional for OF1.1+] | |
97 | ||
bea97716 BP |
98 | OpenFlow 1.2 |
99 | ------------ | |
100 | ||
86189a8c GS |
101 | OpenFlow 1.2 support requires OpenFlow 1.1 as a prerequisite. All the |
102 | additional work specific to Openflow 1.2 are complete. (This is based | |
103 | on the change log at the end of the OF1.2 spec. I didn't compare the | |
104 | specs carefully yet.) | |
bea97716 | 105 | |
260aeca8 BP |
106 | * Action translation needs some work to transform OpenFlow 1.1 |
107 | field modification actions into OpenFlow 1.2+ "set-field" | |
108 | actions, because OpenFlow 1.2 dropped support for the OF1.1 | |
109 | actions. | |
110 | ||
bea97716 BP |
111 | OpenFlow 1.3 |
112 | ------------ | |
113 | ||
114 | OpenFlow 1.3 support requires OpenFlow 1.2 as a prerequisite, plus the | |
115 | following additional work. (This is based on the change log at the | |
116 | end of the OF1.3 spec, reusing most of the section titles directly. I | |
b2c9b585 | 117 | didn't compare the specs carefully yet.) |
bea97716 BP |
118 | |
119 | * Add support for multipart requests. | |
ff3c2c63 | 120 | Currently we always report OFPBRC_MULTIPART_BUFFER_OVERFLOW. |
4db3f50a | 121 | [optional for OF1.3+] |
bea97716 BP |
122 | |
123 | * Add OFPMP_TABLE_FEATURES statistics. | |
4db3f50a | 124 | [optional for OF1.3+] |
bea97716 BP |
125 | |
126 | * More flexible table miss support. | |
48a5f330 YT |
127 | This requires the following. |
128 | - Change the default table-miss action (in the absense of table-miss | |
129 | entry) from packet_in to drop for OF1.3+. Decide what to do if | |
130 | a switch is configured to support multiple OF versions. | |
4db3f50a | 131 | [required for OF1.3+] |
bea97716 BP |
132 | |
133 | * IPv6 extension header handling support. Fully implementing this | |
134 | requires kernel support. This likely will take some careful and | |
135 | probably time-consuming design work. The actual coding, once | |
136 | that is all done, is probably 2 or 3 days work. | |
4db3f50a | 137 | [optional for OF1.3+] |
bea97716 BP |
138 | |
139 | * Per-flow meters. Similar to IPv6 extension headers in kernel | |
140 | and design requirements. Might be politically difficult to add | |
141 | directly to the kernel module, since its functionality overlaps | |
142 | with tc. Ideally, therefore, we could implement these somehow | |
b2c9b585 | 143 | with tc, but I haven't investigated whether that makes sense. |
4db3f50a | 144 | [optional for OF1.3+] |
bea97716 | 145 | |
ac3d64b1 | 146 | * Per-connection event filtering. OF1.3 adopted Open vSwitch's |
bea97716 BP |
147 | existing design for this feature so implementation should be |
148 | easy. | |
4db3f50a | 149 | [required for OF1.3+] |
bea97716 | 150 | |
4db3f50a SH |
151 | * Auxiliary connections. An implementation in generic code might |
152 | be a week's worth of work. The value of an implementation in | |
153 | generic code is questionable, though, since much of the benefit | |
154 | of axuiliary connections is supposed to be to take advantage of | |
155 | hardware support. (We could make the kernel module somehow | |
156 | send packets across the auxiliary connections directly, for | |
157 | some kind of "hardware" support, if we judged it useful enough.) | |
158 | [optional for OF1.3+] | |
bea97716 BP |
159 | |
160 | * MPLS BoS matching. (Included in Simon's MPLS series?) | |
4db3f50a | 161 | [optional for OF1.3+] |
bea97716 | 162 | |
b2c9b585 BP |
163 | * Provider Backbone Bridge tagging. I don't plan to implement |
164 | this (but we'd accept an implementation). | |
4db3f50a | 165 | [optional for OF1.3+] |
bea97716 | 166 | |
b2c9b585 | 167 | * Rework tag order. I'm not sure whether we need to do anything |
4db3f50a SH |
168 | for this. Part of MPLS patchset by Simon Horman. |
169 | [required for v1.3+] | |
bea97716 | 170 | |
bea97716 BP |
171 | * On-demand flow counters. I think this might be a real |
172 | optimization in some cases for the software switch. | |
4db3f50a SH |
173 | [optional for OF1.3+] |
174 | ||
9fa96468 YT |
175 | ONF OpenFlow Exensions for 1.3.X Pack1 |
176 | -------------------------------------- | |
177 | ||
178 | OpenFlow 1.3 has a bunch of ONF extentions. | |
179 | Many of them are necessary for OpenFlow 1.4 as well. | |
180 | ||
181 | * Flow entry notifications | |
182 | This seems to be modelled after OVS's NXST_FLOW_MONITOR. | |
183 | [EXT-187] | |
184 | [required for OF1.4+] | |
185 | ||
186 | * Role Status | |
187 | [EXT-191] | |
188 | [required for OF1.4+] | |
189 | ||
190 | * Flow entry eviction | |
191 | OVS has flow eviction functionality. | |
192 | table_mod OFPTC_EVICTION, flow_mod 'importance', and | |
193 | table_desc ofp_table_mod_prop_eviction need to be implemented. | |
194 | [EXT-192-e] | |
195 | [optional for OF1.4+] | |
196 | ||
197 | * Vacancy events | |
198 | [EXT-192-v] | |
199 | [optional for OF1.4+] | |
200 | ||
201 | * Bundle | |
202 | Transactional modification. OpenFlow 1.4 requires to support | |
203 | flow_mods and port_mods in a bundle. | |
204 | (Not related to OVS's 'ofbundle' stuff.) | |
205 | [EXT-230] | |
206 | [required for OF1.4+] | |
207 | ||
208 | * Table synchronisation | |
209 | [EXT-232] | |
210 | [optional for OF1.4+] | |
211 | ||
212 | * Group notifications | |
213 | [EXT-235] | |
214 | [optional for OF1.4+] | |
215 | ||
216 | * Bad flow entry priority error | |
217 | Probably not so useful to the software switch. | |
218 | [EXT-236] | |
219 | [optional for OF1.4+] | |
220 | ||
221 | * Set async config error | |
222 | [EXT-237] | |
223 | [optional for OF1.4+] | |
224 | ||
225 | * PBB UCA header field | |
226 | [EXT-256] | |
227 | [optional for OF1.4+] | |
228 | ||
229 | * Duplicate instruction error | |
230 | We already have ONFBIC_DUP_INSTRUCTION. | |
231 | [EXT-260] | |
232 | [required for OF1.4+] | |
233 | ||
234 | * Multipart timeout error | |
235 | [EXT-264] | |
236 | [required for OF1.4+] | |
237 | ||
238 | OpenFlow 1.4 | |
239 | ------------ | |
240 | ||
241 | * More extensible wire protocol | |
242 | Many on-wire structures got TLVs. | |
243 | [EXT-262] | |
244 | [required for OF1.4+] | |
245 | ||
246 | * More descriptive reasons for packet-in | |
247 | Distinguish OFPR_APPLY_ACTION, OFPR_ACTION_SET, OFPR_GROUP, | |
248 | OFPR_PACKET_OUT. NO_MATCH was renamed to OFPR_TABLE_MISS. | |
249 | [EXT-136] | |
250 | [required for OF1.4+] | |
251 | ||
252 | * Optical port properties | |
253 | [EXT-154] | |
254 | [optional for OF1.4+] | |
255 | ||
256 | * Flow-removed reason for meter delete | |
257 | Report flow removal due to meter deletion with OFPRR_METER_DELETE. | |
258 | [EXT-261] | |
259 | [optional for OF1.4+] | |
260 | ||
261 | * Meter notifications | |
262 | [EXT-235] | |
263 | [optional for OF1.4+] | |
bea97716 BP |
264 | |
265 | How to contribute | |
266 | ----------------- | |
267 | ||
268 | If you plan to contribute code for a feature, please let everyone know | |
269 | on ovs-dev before you start work. This will help avoid duplicating | |
270 | work. | |
271 | ||
272 | Please consider the following: | |
273 | ||
274 | * Testing. Please test your code. | |
275 | ||
276 | * Unit tests. Please consider writing some. The tests directory | |
277 | has many examples that you can use as a starting point. | |
278 | ||
279 | * ovs-ofctl. If you add a feature that is useful for some | |
280 | ovs-ofctl command then you should add support for it there. | |
281 | ||
282 | * Documentation. If you add a user-visible feature, then you | |
283 | should document it in the appropriate manpage and mention it in | |
284 | NEWS as well. | |
285 | ||
286 | * Coding style (see the CodingStyle file at the top of the source | |
287 | tree). | |
288 | ||
289 | * The patch submission guidelines (see SubmittingPatches). I | |
b2c9b585 | 290 | recommend using "git send-email", which automatically follows a |
bea97716 BP |
291 | lot of those guidelines. |
292 | ||
293 | Bug Reporting | |
294 | ------------- | |
295 | ||
296 | Please report problems to bugs@openvswitch.org. |