User login

Search Projects

Project Members

Joe Stringer admin

OpenFlow 1.1 Support in Open vSwitch

Open vSwitch is a production-quality OpenFlow-controlled software switch. It implements software forwarding of packets based on rules configured by the OpenFlow protocol. The current version of Open vSwitch supports OpenFlow 1.0, which cannot configure behaviour with important protocols such as MPLS and IPv6. More recent versions of the OpenFlow specification support these protocols, but Open vSwitch has yet to implement support for later versions of the specification. The goal of this project is to develop functionality necessary to reasonably claim OpenFlow 1.1 support in Open vSwitch.

18

Mar

2013

Open vSwitch is a production-quality software switch. It provides high-performance packet-forwarding in virtualised environments. One of the many protocols it supports is OpenFlow, which allows dynamic configuration of network behaviour. Newer versions of OpenFlow have recently been released, adding support for important protocols such as MPLS and IPv6. However, the support for OpenFlow in Open vSwitch is not in sync with the current standards.

At the end of 2011, a call for assistance was posted on the Open vSwitch mailing-list, requesting that the OpenFlow community contribute towards support for newer versions of the protocol. This report describes the process of responding to this call, contributing to an open source project, and working towards providing network researchers with a more flexible platform for their experiments.

Author(s): 
Joe Stringer

24

Oct

2012

Had my write-metadata patch accepted upstream this week, thanks to Yamahata rebasing against the latest master. Also finished up my report and handed it in. Churr to those who helped out:)

09

Oct

2012

Not a lot to report. Have just been keeping up with assignments, and trying to make some progress on my report each day. Have written the majority of my section on the development process, and about half of my introduction, with scatterings of details in the other chapters. Spent a bit long tinkering with the LaTeX template I'm using, so slightly behind my plan for writing, but should be able to make up for it.

01

Oct

2012

Been fairly quiet the last few weeks, written a little content for my final report and hoping to ramp that up in the next few days. Three weeks left!

In other news, got some feedback for some of my SCTP patches, but the biggest part---the kernel modifications---are still on the backburner. It doesn't look like I'll get everything upstream before the end of semester, although I'm still hoping that there might be some insight I can add to my report from any reviews between now and then.

10

Sep

2012

Had our Honours Conference presentations this week, my talk went reasonably well. Turns out that fifteen minutes disappears pretty quick when you're trying to explain a whole year's worth of work. Pretty happy with it, and having written a talk regarding my work, it gives a good overview of the kinds of content that I need to put in my final report.

Speaking of my final report, I made a start on it this week, starting with a top-down approach of writing up with a list of things I need to explain, which I'll flesh out later.

Had another misc patch to Open vSwitch upstreamed this week, but the primary patches -- metadata and sctp -- are blocking on other reviews/patches in the community.

03

Sep

2012

Tidied up all of my work this week and resubmitted new rounds for everything, write-metadata based on a new round of VALinux patches, and finally SCTP with some basic testing. I had one or two brief comments back regarding these so far, but it seems upstream is quite busy with other work at the moment. I'm hoping I'll get a more full set of feedback this week.

In the mean while, I've been working on my presentation for the Honours conference, and trying to get the OFTest1[1,2] frameworks to give me some useful information. Unfortunately there seems to be some issue in the frameworks where tests will throw exceptions rather than report a failure for some features that the target switch doesn't support. The issue doesn't affect all tests; some will fail correctly rather than report an error. I'm still investigating this behaviour.

29

Aug

2012

The last couple of weeks have been fairly unproductive, with my focus being mainly on other classes, but I did get a couple of things done. Write-metadata went for another round of review, this time based on another patchset from VA Linux. I received feedback for that, and have made most of the adjustments. Tests remain on that front.

In terms of evaluating my overall project, I spent a day attempting to cobble together oftest1[1,2] to do some interoperability testing. Even with the of1[1,2]softswitch implementations that come with the testing frameworks, I've had little luck getting any kind of sane output; it looks like this will be my focus in the following week.

I'd like to be able to have something positive to put in my upcoming honours talk regarding the standards-compliance of the latest OVS code, but we'll see how that pans out.

13

Aug

2012

Worked on my in-class presentation this week. Ran it past Richard and there's a few touch-ups needed before I present on Wednesday.

Got a response back regarding my metadata queries, going to tidy up the patch and submit for another round.

07

Aug

2012

Not a lot of progress this week. Finally worked through and realised what was causing the problem with my write-metadata instruction -- the execution order wasn't what I expected, so packets would be returned to the controller with information about a flow before the write-metadata instruction was executed, which means that it appears like the instruction hasn't been executed. Waiting on a response about how the specification expects things to work.

Brad and I brought the HP openflow switch back out and I had another crack at getting RouteFlow running on it. Made more progress this time, partially due to improvements in the latest RouteFlow code, and partially because I have a bit more familiarity with Open vSwitch, which was the point of failure last time we tried. Didn't quite get it all up and running, but the basic test environment + GUI seemed to work pretty nicely.

31

Jul

2012

Saw a patch come through this week for other instruction support, which made me do a bit of re-think on the way I've implemented the metadata instruction so far. Although this patchset is not particularly near ready, it may be useful for my patch to work against it. It seems that for supporting instructions as commandline input, I may end up running the same set of checks multiple times to verify correctness of the metadata instruction after it's ported to internal structures.

This isn't exactly elegant, but the way which actions are included in various packet types in OpenFlow mean it's the only way to proceed. I tinkered with this against the new patchset, but didn't make much progress. Hoping to post this once more for review in the next week.

23

Jul

2012

Refactored my metadata support patch this week, to try to handle the commandline parsing of the option such that it enforces the correct ordering on instructions to be executed. Hit a bit of a hurdle in that the instruction seems to be ignored after these changes. Haven't managed to figure this out yet - hoping to systematically go through the expected sequence of events this week and figure out where it gets dropped.

Got confirmation on the LXC mailinglist that SCTP doesn't work at the moment, the sctp kernel module needs some modification for this. Made some small steps in the direction of setting up kvm for testing, when not running into trouble with the -no-graphics option or broken serial cables.

16

Jul

2012

Had the first round of review for my write-metadata patch this week. There's two parts to this, support on OpenFlow 1.0 via vendor extensions, and support on 1.1 with the official instruction type. The instruction side just needs minimal changes but on the vendor side, my patch had a few unintended consequences - allowing for multiple metadata instructions to be executed in a single table. More rigorous protocol decode functions--and tests to verify they work--should prevent some of these issues.

For SCTP this week, I got a copy of the CRC32c checksum code from Linux and made use of it for the userspace implementation. I tried setting up my emulation network machine to use Linux Containers as hosts which connect to Open vSwitch, the idea being that I could run some basic SCTP example applications and test that the switch is forwarding/modifying as expected. Unfortunately I came across an issue with LXC where creating a socket fails when using the parameters AF_INET, SOCK_SEQPACKET and IPPROTO_SCTP. It reports back that the address family is not supported. The impression I got from a quick googling was that LXC hasn't really been tried with anything other than TCP/UDP. I'll probably just switch to qemu next week.

09

Jul

2012

My time this week was split between more metadata support and starting on SCTP support. On the metadata side, I made strides towards the write-metadata instruction from OF1.1 atop Ben's Open vSwitch branch, but stopped short of getting it review-ready, as there was still a bit of instability in that branch. The code got pushed upstream at the end of the week, so I'll look at tidying up write-metadata this week.

On the SCTP side, I started reading some material on how SCTP works, and made some basic adjustments to the code -- finding references to UDP/TCP and adding clauses for SCTP support. Spoke to Brendan about an emulation network machine that I could use to tinker on/test the SCTP stuff, and prepared the machine.

02

Jul

2012

Last week's work on metadata was an interesting look into how to use Nicira's actions alongside the extensible matches introduced in OpenFlow 1.1 (OXM). Nicira already has a similar functionality implemented as a set of registers. There's an NXM action to load data into registers, which was able to load into not just the general purpose registers, but also into any field that NXM (and now OXM) matches against. I made use of this to implement metadata matches, and have now upstreamed this code.

The last thing left for the code to be accepted upstream was to create a new test for the new functionality. One of the main ways that the tests are performed is by specifying the hex dump of a packet as an argument to ovs-ofctl, then checking the log output. Ended up spending quite a bit of time this week cross-referencing some of these hex dumps with the OpenFlow specifications to get familiar with them and write my own tests.

26

Jun

2012

Started on metadata support this week. I'm really starting to get a feel for how the protocol has been influenced by Nicira's work on Open vSwitch. Although it doesn't yet support much of the 1.1 and 1.2 specifications, they use the constants from 1.2 to define matches. I've submitted a patch for review, parsing metadata messages. With the feedback come back I'm looking at how I can use NXAST (Nicira's action type extensions) to test and verify that the patch works. When the 1.1 instruction support goes through, I'll be able to get OpenFlow to control the metadata rather than just NXAST.

18

Jun

2012

As expected, I spent this week on my last 513 and 553 assignments. Synced in with Ben regarding my plans to implement Metadata support, so going to focus on digging into the code this week, and do a bit of research on what other features are still needed for OF1.1+ support.

12

Jun

2012

This week, I worked on my interim report, although ended up skimping on the background as I didn't allocate enough time to properly cover it. As it turns out, the OF1.1 actions features I was considering as possible future work in the report are currently being written by other developers, so I may end up focusing on some OF1.2 stuff for the rest of the year. This week though, I'll be finishing up my other courses and perhaps taking an initial look at OF1.1 Metadata.

05

Jun

2012

The latest version of my arbitrary ethernet patch was upstreamed on wednesday, which is exciting:) Been spending the rest of the week reading up OpenFlow literature for 513, which conveniently doubles as more background info for my honours report. I don't expect to get started on my next patch for another week, as I'll be focusing on the interim report and other courses this week.

29

May

2012

Fixed up my arbitrary ethernet patch based on all the feedback from the first round of review. I've just got two tests left to satisfy, so I've re-posted the patch for review. Should be able to get this patch pushed upstream this week, then I'll start on my next patch. With interim reports due next week, I'll be working on that too.

21

May

2012

Finally cleaned up my initial version of the arbitrary ethernet patchset and got it to satisfy the testsuite. Put it up for review on the mailinglist and I've got a bunch of helpful feedback. Next step is to fix up a new version now that I've got a clearer picture of what the OVS devs are looking for in this patch.

Brad and I also spent a bit of time last week tinkering with various Openflow things, primarily POX and RouteFlow. POX was reasonably successful, with a L2 learning switch fairly easy to get running. We also tried the pox-gui and, seperately, RouteFlow's new development branch. Had less success in these areas though - there's a lot more moving parts there. The code is still pretty experimental.