~ubuntu-branches/ubuntu/wily/openvswitch/wily

« back to all changes in this revision

Viewing changes to TODO

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2015-08-10 11:35:15 UTC
  • mfrom: (1.1.30)
  • Revision ID: package-import@ubuntu.com-20150810113515-575vj06oq29emxsn
Tags: 2.4.0~git20150810.97bab95-0ubuntu1
* New upstream snapshot from 2.4 branch:
  - d/*: Align any relevant packaging changes with upstream.
* d/*: wrap-and-sort.
* d/openvswitch-{common,vswitch}.install: Correct install location for
  bash completion files.
* d/tests/openflow.py: Explicitly use ovs-testcontroller as provided
  by 2.4.0 release.

Show diffs side-by-side

added added

removed removed

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