Tuesday, July 2, 2013

SDN plugin for the BIRD software router

A BGP router for SDN and OpenFlow

I've been playing with the BIRD software router for a couple of weeks to make it pipe out routes that I can play with. The reason for this is so that we can leverage the years of development time spent on the BGP side of things, and then simply translate the routes into flows to make a BGP router. There are already projects using RouteFlow for this, but we can simplify things a lot further - RouteFlow relies on VMs that run Quagga instances, and I feel it would be much better if the software router just talked directly to the OpenFlow controller.

What does it look like?

Every time a route update comes through to BIRD, BIRD pipes it out to a file. We can then get SDN controllers to follow this file and pull out the routes in JSON format and process as they wish to.

What's next?

Make an OpenFlow controller that polls the file and pushes out flows to your OF switch(es). This stuff isn't rocket science - just download and install and see it work for yourself!

https://github.com/samrussell/bird/tree/sam

2 comments:

  1. Why not just speak openflow directly? It seems like you've done almost all the work to make that happen.

    ReplyDelete
    Replies
    1. I want this to be as modular as possible. This application solves the problem we have of "how can I get a BGP daemon to communicate its route table to other modules?"

      This isn't totally ground-breaking - you can easily turn on MRT dumps in Quagga and accomplish the same thing, but the difference is that the same code that I've added to BIRD to print out JSON to a log can easily be modified to listen on a socket and communicate a bit smarter with an SDN controller.

      My next project is to build a stripped-back OpenFlow controller that takes JSON dumps and turns them into flows, but who knows - maybe SDN in a year or two will use a totally different protocol - and this router mod will still be totally relevant as JSON is universal.

      Delete