]> git.proxmox.com Git - ovs.git/blame - TODO.md
vtep: Introduce other_config column in some vtep schema tables.
[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
84f7a527
BP
71Basic OpenFlow 1.4 support
72--------------------------
73
74Some basic support for OpenFlow 1.4 is missing and needs to be
75implemented. These can be found by looking through lib/ofp-util.c for
76mentions of OFP14_VERSION followed by a call to OVS_NOT_REACHED (which
77aborts the program).
78
79OpenFlow 1.4: Flow monitoring
80-----------------------------
81
82OpenFlow 1.4 introduces OFPMP_FLOW_MONITOR for notifying a controller
83of changes to selected flow tables. This feature is based on
84NXST_FLOW_MONITOR that is already part of Open vSwitch, so to
85implement this feature would be to extend that code to handle the
86OpenFlow 1.4 wire protocol.
87
88OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
89ideally OVS would support that too.
90
91OpenFlow 1.4 Role Status Message
92--------------------------------
93
94OpenFlow 1.4 section 7.4.4 ``Controller Role Status Message''
95defines a new message sent by a switch to notify the controller that
96its role (whether it is a master or a slave) has changed. OVS should
97implement this.
98
99OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
100ideally OVS would support that too.
101
102OpenFlow 1.4 Vacancy Events
103---------------------------
104
105OpenFlow 1.4 section 7.4.5 ``Table Status Message'' defines a new
106message sent by a switch to notify the controller that a flow table is
107close to filling up (or that it is no longer close to filling up).
108OVS should implement this.
109
110OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
111ideally OVS would support that too.
112
113OpenFlow 1.4 Group and Meter Change Notification
114------------------------------------------------
115
116OpenFlow 1.4 adds a feature whereby a controller can ask the switch to
117send it copies of messages that change groups and meters. (This is
118only useful in the presence of multiple controllers.) OVS should
119implement this.
120
121OpenFlow 1.3 also includes this feature as a ONF-defined extension, so
122ideally OVS would support that too.
123
124
125Testing Project Ideas
126=====================
127
128Each of these projects would ideally result in confirmation that
129features work or bug reports explaining how they do not. Please sent
130bug reports to dev at openvswitch.org, with as many details as you have.
131
132ONF Plugfest Results Analysis
133-----------------------------
134
135Ben Pfaff has a collection of files reporting Open vSwitch conformance
136to OpenFlow 1.3 provided by one of the vendors at the ONF plugfest
137last year. Some of the reported failures have been fixed, some of the
138other failures probably result from differing interpretations of
139OpenFlow 1.3, and others are probably genuine bugs in Open vSwitch.
140Open vSwitch has also improved in the meantime. Ben can provide the
141results, privately, to some person or team who wishes to check them
142out and try to pick out the genuine bugs.
143
144OpenFlow Fuzzer
145---------------
146
147Build a ``fuzzer'' for the OpenFlow protocol (or use an existing
148one, if there is one) and run it against the Open vSwitch
149implementation. One could also build a fuzzer for the OSVDB protocol.
150
151Ryu Certification Tests Analysis
152--------------------------------
153
154The Ryu controller comes with a suite of ``certification tests''
155that check the correctness of a switch's implementation of various
156OpenFlow 1.3 features. The INSTALL file in the OVS source tree has a
157section that explains how to easily run these tests against an OVS
158source tree. Run the tests and figure out whether any tests fail but
159should pass. (Some tests fail and should fail because OVS does not
160implement the particular feature; for example, OVS does not implement
161PBB encapsulation, so related tests fail.)
162
163OFTest Results Analysis
164-----------------------
165
166OFTest is a test suite for OpenFlow 1.0 compliance. The INSTALL file
167in the OVS source tree has a section that explains how to easily run
168these tests against an OVS source tree. Run the tests and figure out
169whether any tests fail but should pass, and ideally why. OFTest is
170not particularly well vetted--in the past, at least, some tests have
171failed against OVS due to bugs in OFTest, not in OVS--so some care is
172warranted.
173
174
175Documentation Project Ideas
176===========================
177
178Each of these projects would ideally result in creating some new
179documentation for users. Some documentation might be suitable to
180accompany Open vSwitch as part of its source tree most likely either
181in plain text or ``nroff'' (manpage) format.
182
183OpenFlow Basics Tutorial
184------------------------
185
186Open vSwitch has a tutorial that covers its advanced features, but it
187does not have a basic tutorial. There are several tutorials on the
188Internet already, so a new tutorial would have to distinguish itself
189in some way. One way would be to use the Open vSwitch ``sandbox''
190environment already used in the advanced tutorial. The sandbox does
191not require any real network or even supervisor privilege on the
192machine where it runs, and thus it is easy to use with hardly any
193up-front setup, so it is a gentle way to get started.
194
195FlowVisor via patch ports
196-------------------------
197
198FlowVisor is a proxy that sits between OpenFlow controllers and a
199switch. It divides up switch resources, allowing each controller to
200control a ``slice'' of the network. For example, it can break up a
201network based on VLAN, allowing different controllers to handle
202packets with different VLANs.
203
204It seems that Open vSwitch has features that allow it to implement at
205least simple forms of FlowVisor control without any need for
206FlowVisor. Consider an Open vSwitch instance with three bridges.
207Bridge br0 has physical ports eth0 and eth1. Bridge v9 has no
208physical ports, but it has two ``patch ports'' that connect it to
209br0. Bridge v11 has the same setup. Flows in br0 match packets
210received on vlan 9, strip the vlan header, and direct them to the
211appropriate patch port leading to v9. Additional flows in br0 match
212packets received from v9, attach a VLAN 9 tag to them, and direct them
213out eth0 or eth1 as appropriate. Other flows in br0 treat packets on
214VLAN 11 similarly. Controllers attached to bridge v9 or v11 may thus
215work as if they had full control of a network.
216
217It seems to me that this is a good example of the power of OpenFlow
218and Open vSwitch. The point of this project is to explain how to do
219this, with detailed examples, in case someone finds it handy and to
220open eyes toward the generality of Open vSwitch usefulness.
221
222``Cookbooks''
223-------------
224
225The Open vSwitch website has a few ``cookbook'' entries that
226describe how to use Open vSwitch in a few scenarios. There are only a
227few of these and all of them are dated. It would be a good idea to
228come up with ideas for some more and write them. These could be added
229to the Open vSwitch website or the source tree or somewhere else.
230
231Demos
232-----
233
234Record a demo of Open vSwitch functionality in use (or something else
235relevant) and post it to youtube or another video site so that we can
236link to it from openvswitch.org.
237
238
239How to contribute
240=================
241
242If you plan to contribute code for a feature, please let everyone know
243on ovs-dev before you start work. This will help avoid duplicating
244work.
245
246Please consider the following:
247
542cc9bb 248 * Testing. Please test your code.
84f7a527 249
542cc9bb
TG
250 * Unit tests. Please consider writing some. The tests directory
251 has many examples that you can use as a starting point.
84f7a527 252
542cc9bb
TG
253 * ovs-ofctl. If you add a feature that is useful for some
254 ovs-ofctl command then you should add support for it there.
84f7a527 255
542cc9bb
TG
256 * Documentation. If you add a user-visible feature, then you
257 should document it in the appropriate manpage and mention it in
258 NEWS as well.
84f7a527 259
9feb1017
TG
260 * Coding style (see the [CodingStyle.md] file at the top of the
261 source tree).
84f7a527 262
9feb1017
TG
263 * The patch submission guidelines (see [CONTRIBUTING.md]). I
264 recommend using "git send-email", which automatically follows a
542cc9bb 265 lot of those guidelines.
84f7a527
BP
266
267
268Bug Reporting
269=============
270
271Please report problems to bugs@openvswitch.org.
272
273
274Local Variables:
275mode: text
276End:
9feb1017
TG
277
278[OPENFLOW-1.1+.md]:OPENFLOW-1.1+.md
279[CONTRIBUTING.md]:CONTRIBUTING.md
280[CodingStyle.md]:CodingStyle.md