An SDN Controller in a software-defined network (SDN) is the “brains” of the network. It is the strategic control point in the SDN network, relaying information to the switches/routers ‘below’ (via southbound APIs) and the applications and business logic ‘above’ (via northbound APIs). Recently, as organizations deploy more SDN networks, the Controllers have been tasked with federating between SDN Controller domains, using common application interfaces, such as the open virtual switch database (OVS DB).
The SDN Controller platform typically contains a collection of “pluggable” modules that can perform different network tasks. Some of the basic tasks including inventorying what devices are within the network and the capabilities of each, gathering network statistics, etc. Extensions can be inserted that enhance the functionality and support more advanced capabilities, such as running algorithms to perform analytics and orchestrating new rules throughout the network.
One of the most well-known protocols used by SDN Controllers to communicate with the switches/routers isOpenFlow. Others are being developed, while more established networking protocols are finding ways to run in an SDN environment. For example, the Internet Engineering Task Force (IETF) working group – the Interface to the Routing System (i2rs) – is developing an SDN strategy that enables the Controller to leverage proven, traditional protocols, such as OSPF, MPLS, BGP, and IS-IS.
The type of protocols supported can influence the overall architecture of the network – for example, while OpenFlow attempts to completely centralize packet-forwarding decisions, i2rs splits the decision making by leveraging traditional routing protocols to execute distributed routing and allowing applications to modify routing decisions.
A Little History
A current battle is raging between networking vendors, who want to provide their own Controllers to orchestrate their own equipment (and potentially other vendors’ networking equipment), and Open Source Controllers designed for all vendors to support.
The first SDN Controller was NOX, which was initially developed by Nicira Neworks, alongside OpenFlow. In 2008, Nicira Networks (acquired by VMWare) and donated NOX to the SDN community (it was open sourced), where it has become the basis for many subsequent SDN Controller solutions. Nicira then went on to co-develop ONIX with NTT and Google; ONIX is the base for the Nicira / VMware Controller and rumored to be the base for the Google WAN Controller. While ONIX was originally supposed to be opened up, the parties later decided not to make it Open Source.
There are, however, a variety of Open Source Controllers under development, from POX to Beacon, which is one of the most popular. Started in early 2010, Beacon is a Java-based OpenFlow Controller licensed under a combination of the GPL v2 license and the Stanford University FOSS License Exception v1.0. Other SDN Controllers of note include Trema (Ruby-based from NEC), as well as Ryu (supported by NTT). (Check here for a full list of Open Source Projects.)
Floodlight was forked from Beacon – it was made available under an Apache 2.0 license and formed the basis of one of the early commercial Controllers from Big Switch Networks. Note, NEC’s programmable flow Controller was actually the first commercial Controller on the market, and it was NOT a derivative of any of the Open Source Controllers.
Subsequently, vendors, such as Cisco, HP, IBM, VMWare and Juniper have jumped into the SDN Controller market with their own offerings. The HP, Cisco, and IBM Controllers are all based off Beacon. Juniper’s Controller became a part of their product portfolio when they acquired Contrail; it is available in both Open Source and commercial versions.
On April 8, 2013, the open-source foundation, OpenDaylight, which is part of the Linux Foundation, was announced. This Controller is Java-based, and derived from the original Beacon design. It supports OpenFlow and other southbound APIs and includes critical features, such as high-availability and clustering.