]> git.proxmox.com Git - ovs.git/blame - TODO.md
netdev-dpdk: Add vhost enqueue retries.
[ovs.git] / TODO.md
CommitLineData
542cc9bb
TG
1Open vSwitch Project Ideas
2==========================
84f7a527
BP
3
4This file lists a number of project ideas for Open vSwitch. The ideas
9feb1017 5here overlap somewhat with those in the [OPENFLOW-1.1+.md] file.
84f7a527
BP
6
7
8Programming Project Ideas
9=========================
10
11Each of these projects would ideally result in a patch or a short
12series of them posted to ovs-dev.
13
9feb1017
TG
14Please read [CONTRIBUTING.md] and [CodingStyle.md] in the top of the
15source tree before you begin work. The [OPENFLOW-1.1+.md] file also has
16an introduction to how OpenFlow is implemented in Open vSwitch. It is
17also a good idea to look around the source tree for related code, and
84f7a527
BP
18back through the Git history for commits on related subjects, to allow
19you to follow existing patterns and conventions.
20
21Meters
22------
23
24Open vSwitch has OpenFlow protocol support for meters, but it does not
25have an implementation in the kernel or userspace datapaths. An
26implementation was proposed some time ago (I recommend looking for the
27discussion in the ovs-dev mailing list archives), but for a few
28different reasons it was not accepted. Some of those reasons apply
29only to a kernel implementation of meters. At the time, a userspace
30implementation wasn't as interesting, because the userspace switch
31did not perform at a production speed, but with the advent of
32multithreaded forwarding and, now, DPDK support, userspace-only meters
33would be a great way to get started.
34
35Improve SSL/TLS Security
36------------------------
37
38Open vSwitch allows some weak ciphers to be used for its secure
39connections. Security audits often suggest that the project remove
40those ciphers, but there's not a clean way to modify the acceptable
41ciphers. At the very least, the cipher list should be audited, but it
42would be nice to make it configurable.
43
44Open vSwitch does not insist on perfect forward security via ephemeral
45Diffie-Hellman key exchange when it establishes an SSL/TLS connection.
46Given the wiretapping revelations over the last year, it seems wise to
47turn this on. (This would probably amount to finding the right
48OpenSSL function to call or just reducing the acceptable ciphers
49further.)
50
51These changes might have backward-compatibility implications; one
52would have to test the behavior of the reduced cipher list OVS against
53older versions.
54
84f7a527
BP
55Bash Command Completion
56-----------------------
57
58ovs-vsctl and other programs would be easier to use if bash command
59completion (with ``tab'', etc.) were supported. Alex Wang
60<alexw@nicira.com> is leading a team for this project.
61
62Auxiliary Connections
63---------------------
64
65Auxiliary connections are a feature of OpenFlow 1.3 and later that
66allow OpenFlow messages to be carried over datagram channels such as
67UDP or DTLS. One place to start would be to implement a datagram
68abstraction library for OVS analogous to the ``stream'' library
69that already abstracts TCP, SSL, and other stream protocols.
70
71Controller connection logging to pcap file
72------------------------------------------
73
74http://patchwork.openvswitch.org/patch/2249/ is an RFC patch that
75allows the switch to record the traffic on OpenFlow controller
76connections to a pcap file for later analysis. The patch lacks a good
77way to enable and disable the feature. The task here would be to add
78that and repost the patch.
79
80Basic OpenFlow 1.4 support
81--------------------------
82
83Some basic support for OpenFlow 1.4 is missing and needs to be
84implemented. These can be found by looking through lib/ofp-util.c for
85mentions of OFP14_VERSION followed by a call to OVS_NOT_REACHED (which
86aborts the program).
87
88OpenFlow 1.4: Flow monitoring
89-----------------------------
90
91OpenFlow 1.4 introduces OFPMP_FLOW_MONITOR for notifying a controller
92of changes to selected flow tables. This feature is based on
93NXST_FLOW_MONITOR that is already part of Open vSwitch, so to
94implement this feature would be to extend that code to handle the
95OpenFlow 1.4 wire protocol.
96
97OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
98ideally OVS would support that too.
99
100OpenFlow 1.4 Role Status Message
101--------------------------------
102
103OpenFlow 1.4 section 7.4.4 ``Controller Role Status Message''
104defines a new message sent by a switch to notify the controller that
105its role (whether it is a master or a slave) has changed. OVS should
106implement this.
107
108OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
109ideally OVS would support that too.
110
111OpenFlow 1.4 Vacancy Events
112---------------------------
113
114OpenFlow 1.4 section 7.4.5 ``Table Status Message'' defines a new
115message sent by a switch to notify the controller that a flow table is
116close to filling up (or that it is no longer close to filling up).
117OVS should implement this.
118
119OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
120ideally OVS would support that too.
121
122OpenFlow 1.4 Group and Meter Change Notification
123------------------------------------------------
124
125OpenFlow 1.4 adds a feature whereby a controller can ask the switch to
126send it copies of messages that change groups and meters. (This is
127only useful in the presence of multiple controllers.) OVS should
128implement this.
129
130OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
131ideally OVS would support that too.
132
133
134Testing Project Ideas
135=====================
136
137Each of these projects would ideally result in confirmation that
138features work or bug reports explaining how they do not. Please sent
139bug reports to dev at openvswitch.org, with as many details as you have.
140
141ONF Plugfest Results Analysis
142-----------------------------
143
144Ben Pfaff has a collection of files reporting Open vSwitch conformance
145to OpenFlow 1.3 provided by one of the vendors at the ONF plugfest
146last year. Some of the reported failures have been fixed, some of the
147other failures probably result from differing interpretations of
148OpenFlow 1.3, and others are probably genuine bugs in Open vSwitch.
149Open vSwitch has also improved in the meantime. Ben can provide the
150results, privately, to some person or team who wishes to check them
151out and try to pick out the genuine bugs.
152
153OpenFlow Fuzzer
154---------------
155
156Build a ``fuzzer'' for the OpenFlow protocol (or use an existing
157one, if there is one) and run it against the Open vSwitch
158implementation. One could also build a fuzzer for the OSVDB protocol.
159
160Ryu Certification Tests Analysis
161--------------------------------
162
163The Ryu controller comes with a suite of ``certification tests''
164that check the correctness of a switch's implementation of various
165OpenFlow 1.3 features. The INSTALL file in the OVS source tree has a
166section that explains how to easily run these tests against an OVS
167source tree. Run the tests and figure out whether any tests fail but
168should pass. (Some tests fail and should fail because OVS does not
169implement the particular feature; for example, OVS does not implement
170PBB encapsulation, so related tests fail.)
171
172OFTest Results Analysis
173-----------------------
174
175OFTest is a test suite for OpenFlow 1.0 compliance. The INSTALL file
176in the OVS source tree has a section that explains how to easily run
177these tests against an OVS source tree. Run the tests and figure out
178whether any tests fail but should pass, and ideally why. OFTest is
179not particularly well vetted--in the past, at least, some tests have
180failed against OVS due to bugs in OFTest, not in OVS--so some care is
181warranted.
182
183
184Documentation Project Ideas
185===========================
186
187Each of these projects would ideally result in creating some new
188documentation for users. Some documentation might be suitable to
189accompany Open vSwitch as part of its source tree most likely either
190in plain text or ``nroff'' (manpage) format.
191
192OpenFlow Basics Tutorial
193------------------------
194
195Open vSwitch has a tutorial that covers its advanced features, but it
196does not have a basic tutorial. There are several tutorials on the
197Internet already, so a new tutorial would have to distinguish itself
198in some way. One way would be to use the Open vSwitch ``sandbox''
199environment already used in the advanced tutorial. The sandbox does
200not require any real network or even supervisor privilege on the
201machine where it runs, and thus it is easy to use with hardly any
202up-front setup, so it is a gentle way to get started.
203
204FlowVisor via patch ports
205-------------------------
206
207FlowVisor is a proxy that sits between OpenFlow controllers and a
208switch. It divides up switch resources, allowing each controller to
209control a ``slice'' of the network. For example, it can break up a
210network based on VLAN, allowing different controllers to handle
211packets with different VLANs.
212
213It seems that Open vSwitch has features that allow it to implement at
214least simple forms of FlowVisor control without any need for
215FlowVisor. Consider an Open vSwitch instance with three bridges.
216Bridge br0 has physical ports eth0 and eth1. Bridge v9 has no
217physical ports, but it has two ``patch ports'' that connect it to
218br0. Bridge v11 has the same setup. Flows in br0 match packets
219received on vlan 9, strip the vlan header, and direct them to the
220appropriate patch port leading to v9. Additional flows in br0 match
221packets received from v9, attach a VLAN 9 tag to them, and direct them
222out eth0 or eth1 as appropriate. Other flows in br0 treat packets on
223VLAN 11 similarly. Controllers attached to bridge v9 or v11 may thus
224work as if they had full control of a network.
225
226It seems to me that this is a good example of the power of OpenFlow
227and Open vSwitch. The point of this project is to explain how to do
228this, with detailed examples, in case someone finds it handy and to
229open eyes toward the generality of Open vSwitch usefulness.
230
231``Cookbooks''
232-------------
233
234The Open vSwitch website has a few ``cookbook'' entries that
235describe how to use Open vSwitch in a few scenarios. There are only a
236few of these and all of them are dated. It would be a good idea to
237come up with ideas for some more and write them. These could be added
238to the Open vSwitch website or the source tree or somewhere else.
239
240Demos
241-----
242
243Record a demo of Open vSwitch functionality in use (or something else
244relevant) and post it to youtube or another video site so that we can
245link to it from openvswitch.org.
246
247
248How to contribute
249=================
250
251If you plan to contribute code for a feature, please let everyone know
252on ovs-dev before you start work. This will help avoid duplicating
253work.
254
255Please consider the following:
256
542cc9bb 257 * Testing. Please test your code.
84f7a527 258
542cc9bb
TG
259 * Unit tests. Please consider writing some. The tests directory
260 has many examples that you can use as a starting point.
84f7a527 261
542cc9bb
TG
262 * ovs-ofctl. If you add a feature that is useful for some
263 ovs-ofctl command then you should add support for it there.
84f7a527 264
542cc9bb
TG
265 * Documentation. If you add a user-visible feature, then you
266 should document it in the appropriate manpage and mention it in
267 NEWS as well.
84f7a527 268
9feb1017
TG
269 * Coding style (see the [CodingStyle.md] file at the top of the
270 source tree).
84f7a527 271
9feb1017
TG
272 * The patch submission guidelines (see [CONTRIBUTING.md]). I
273 recommend using "git send-email", which automatically follows a
542cc9bb 274 lot of those guidelines.
84f7a527
BP
275
276
277Bug Reporting
278=============
279
280Please report problems to bugs@openvswitch.org.
281
282
283Local Variables:
284mode: text
285End:
9feb1017
TG
286
287[OPENFLOW-1.1+.md]:OPENFLOW-1.1+.md
288[CONTRIBUTING.md]:CONTRIBUTING.md
289[CodingStyle.md]:CodingStyle.md