Software Defined Networking

CS 8001 Seminar, Georgia Tech Fall 2013

This course introduces software defined networking, an emerging paradigm in computer networking that allows a logically centralized software program to control the behavior of an entire network.

Separating a network's control logic from the underlying physical routers and switches that forward traffic allows network operators to write high-level control programs that specify the behavior of an entire network, in contrast to conventional networks, whereby network operators must codify functionality in terms of low-level device configuration.

Logically centralized network control makes it possible for operators to specify more complex tasks that involve integrating many disjoint network functions (e.g., security, resource control, prioritization) into a single control framework, allowing network operators to create more sophisticated policies, and making network configurations easier to configure, manage, troubleshoot, and debug.

This course provides a path for students with a broad diversity in backgrounds to learn programming and computer science, including those considering a computer science major. Students will use a problem-driven approach to build complex, interactive software systems. The course includes an introduction to a wide variety of issues relating to software, including design, problem-solving, development processes, and broader issues such as security, performance, and ethics.

Prof. Nick Feamster
Klaus 3347
<my last name>

Class Location and Time:
Fridays, 11:00am-12:30pm, ES&T L1118

Office Hours:
Fridays, 1-2pm

Technology Requirements: You must bring a laptop to every class. If you would like to take the course, but do not have access to a laptop, contact the instructor as a small number of "loaner" laptops for class time may be available for this purpose.

Course Format

The course will meet once a week for two hours. The course will be offered in a "flipped" style, with students watching video lectures before coming to class. Classroom time will be used for discussion and in-class lab time.

The first hour of each session will be devoted to paper and topic discussion. You should read the paper, watch the videos, and participate in online discussion before coming to class.

The second hour of the course will allow for class-time to gain hands-on experience with SDN-related tools and concepts.

Optional assignments for the course will be lab-based programming assignments, likely building off of the Mininet software developed at Stanford University, which can run SDNs in emulated environments on networks of virtual machines.

Recommended Background

Students should have taken at least an undergraduate-level networking course and have programming experience in Python. Experience with virtual machines and other virtual networking environments may also be useful.

Getting Started

There are some useful videos available online; these might be a good starting point for many people: You may find the additional reading useful for introductory material:


Grading is based on participation and completion of a group research/programming project involving SDN.

Participation includes:

  • Watching the videos (as determined with in-class quizzes).
  • Participating in online discussion on Piazza.
  • Attending class.

The project can be done in groups of any size, subject to approval of the instructor. Important milestones:

  • One-page project proposal (due by September 13).
  • Project video/demo posted to YouTube.
  • Code release on github.
  • Project writeup (pre-publication draft)
Date Modules Readings Hands-On Activity
August 23
  • Overview
  • History and Evolution of SDN
    • Central Control
    • Programmable Networks
  • Nick McKeown Interview
Virtual Box Setup
August 30
  • History and Evolution of SDN
    • Network Virtualization
    • Control-Plane Evolution
  • Martin Casado Interview
Mininet Setup
September 6
  • Control and Data Plane Separation
    • Overview
    • Opportunities
    • Challenges
  • David Clark Interview
Mininet Programming
September 13
  • Virtual Networking
    • What is network virtualization?
    • Applications of network virtualization
    • Virtual networking in Mininet
    • Mininet Python API
  • Teemu Koponen Interview
Mininet Custom Topology
September 20
  • Control Plane
    • Overview
    • Examples of SDN Controllers
  • Guido Appenzeller Interview
Pox, Floodlight
September 27
  • Customizing the Control Plane
    • Switching
    • Firewalls
  • Russ Clark Interview
Control-Plane Applications:
Firewalls and more
October 4
  • Data Planes: Software
    • Software Data Planes: Click
    • Scaling Software Data planes
Click in Mininet
October 11
  • Data Planes: Hardware
    • Making Hardware Programmable
October 18
  • Programming SDNs: Northbound APIs
    • Motivation for Northbound APIs
    • Frenetic
    • Pyretic
  • Jennifer Rexford Interview
Pyretic Applications
October 25
  • Advanced SDN Programming
    • Composing SDNs
    • Resonance: Event-Driven Control
Pyretic and PyResonance Applications
November 1
  • Use Cases
    • Data Centers
    • Internet Exchange Points
  • Susie Wee/John Apostolopoulos Interview
Project Hacking
November 8
  • Use Cases
    • Backbone Networks (e.g., Google)
    • Home Networks
  • Amin Vahdat Interview
Project Hacking
November 15 Project Presentations Project Presentations

Course Resources

  • Piazza Online Discussion Forum
  • Connection Management Blog: Blog where various SDN topics will be discussed during the course.
  • YouTube SDN Playlist: Videos for all lectures.
  • Supplementary Videos
    • Structure and Design of SDN (Teemu Koponen)
    • The Frenetic Programming Language (Jennifer Rexford)
    • Event-Driven SDN Control (Nick Feamster)
  • Hands-On Programming Assignments (Will be done in-class.)
    • Mininet Topology
    • Basic Pox Applications
    • Pyretic Applications
    • PyResonance Applications

Software Resources


  • Cristian Lumezanu's SDN Reading List
  • SDN Bibliography (To be built during the course.)