Software Defined Networking (SDN) is a set of simple ideas that defines an abstract model for switching. In general, network devices are either host devices or transit devices. Host devices request and serve information, while transit devices move information to its intended recipient. SDN focuses on defining an abstract computing model and API for transit devices, or switches.

Every switch in the SDN model is composed of ports and tables. Packets arrive and leave the switch through ports. Tables consist of rows containing a classifier and set of actions. When a packet is indexed against a table a row is selected by finding the first classifier that best matches the packet. Once a row has been selected the set of actions in that row are applied to the packet. Actions can govern the treatment of packets (drop, forward, queue), as well as modify the packets state (rewrite, push, pop). Table state and port propoerties are manipulated by a well defined protocol or API.

This basic idea of is has been at the core of networking for quite some time. Companies have internally defined instances of this model for their networking devices. Additionally, standards bodies have attempted to codify this model (ForCES, MIDCOM). The most significant contribution of today's SDN movement has been its traction. There are several instances of the SDN model, in terms of the OpenFlow protocol, which have been widely supported. There are existing network operators using SDN in transport networks, data center networks, and enterprise networks.

The goal of these sections is to explain, in detail, the OpenFlow protocol, the Flowgrammable implementation of the OpenFlow protocol, and noteworthy research in the field of SDN.

OpenFlow The OpenFlow protocol is actually a suite of protocols maintained by the Open Networking Foundation (ONF). There are several versions of OpenFlow as well as configuration profiles, testing rubrics, and other assorted information. When our group started investigating this protocol we quickly found ourselves building an information base describing the protocol. Many of the existing references for the protocol were not sufficient. The standards documents are couched in the context of the The C programming language and GNU GCC compiler directives, while books on the topic were too high-level.
Flowgrammable Stack The ONF hosted a open source software competition over the summer of 2013. The competition was soliciting open source implementations of the available versions of OpenFlow. Flowgrammable was initially organized to participate in this competition. We thought it would be a good way of gaining OpenFlow and SDN experience. 
SDN Research A large portion of the Flowgrammable team is from the research community. The ONF competition, and subsequent work, has proved to be a good way to survey and contribute to SDN research as a whole.