OpenFlow and Software defined networking?


Fully [H]
Aug 3, 2004
I am having one of those curious learning spree's and am reading all sorts.

Being curious about the networking world and it's state today brought me across articles relating to googles Pluto switching platform:

As Google was fashioning this kind of “software-defined networking,” researchers at Stanford University were developing similar methods, giving rise to an open source protocol called OpenFlow.

Facebook has pushed the movement forward still further by open sourcing its software and hardware designs, freely sharing them with the world at large.

I know there are router OS like Vy that gave you a ton of control, but I was curious as to what has become of basically building out your own switches these days?

Is it something only these behemoth companies are doing, or are there options for us little guys for a home version of a very customization switch OS?

The thoughts running through my head are images of a 1U server with several quad port nics in it running an OS to handle networking, not a router, like pfsense, but purely a "switch" os..

Has anyone dove into this?
I've long wished to be able to build a small switch out of a 1U server with a couple of quad NIC's however I think you'd run into limitations with throughput very quickly. As I understand it, each NIC has a controller local to that NIC that moves packets in and out of the machine. You can of course pass traffic between NIC's on the same machine and implement any number of virtual switches that utilize the NIC's. However, using multiple NIC's to build a switch would run into the limitation of every packet having to be processed by the CPU (moving from one NIC, to the CPU for processing, then back out another NIC) and even with modern hardware you'd quickly run into issues there. Switches determine where packets should go via ASICs that are purpose built for switching (or in the case of layer 3 capable switches routing and switching) which are much faster (and more cost effective for what they do.

The approach many companies such as Dell / HP / Cumulus / Pica8 are taking is to place a Linux-based distro within a switch, running on a traditional CPU and then building methods for that OS to control the programming of the ASICs. ASICs still do the actual switching, thus retaining the speed and efficiency while the Linux distro offers the ability to use traditional tools / packages / development methods.

Depending on your needs, you may want to instead look into utilizing something like Chef to automate the configuration of switches and other networking appliances. This approach would give you a set of recipes that you can use to build your network (or rebuild from scratch for a new network / in case of catastrophe) as well as make changes, etc. all of which can be tracked in a git repo (just make sure it's a private repo...). I know at least some Cisco gear supports this approach.