Release notes

The headings below refer either to branches on Switchyard’s github repo (v1 and v2) or tags (2017.01.1).


Add the capability to pass arguments to a Switchyard program via -g option to swyard. Switchyard parses and assembles *args and **kwargs to pass into the user code, being careful to only pass them if the code can accept them.


Major revision; expansion of types of exercises supported (notably application-layer programs via socket emulation) and several non-backward compatible API changes. Simplified user code import (single import of switchyard.lib.userlib). Installation via standard setuptools, so easily installed via easy_install or pip. Major revision of documentation. Lots of new tests were written, bringing test coverage above 90%. Expansion of exercises is still in progress.

Some key API changes to be aware of:

  • the Scenario class is renamed TestScenario. The PacketOutputEvent previously allowed Openflow 1.0-like wildcard strings to specify wildcards for matching packets; these strings are no longer supported. To specify wildcards, a tuple of (classname,attribute) must be used; refer to Test scenario creation, above.
  • recv_packet always returns a timestamp now; it returns a 3-tuple (named tuple) of timestamp, input_port and packet.
  • The only import required by user code is switchyard.lib.userlib, although individual imports are still fine (just more verbose).
  • Instead of invoking, a swyard program is installed during the new install process. swyard has a few command-line changes compared with In particular, the -s option has gone away; to run Switchyard with a test, just use the -t option with the scenario file as the argument.


Complete rewrite of v1. Moved to Python 3 and created packet parsing libraries, new libpcap interface library (pcapffi). Redesigned test scenario modules and an expanded of publicly available exercises. Used at Colgate twice and University of Wisconsin-Madison twice. Available on the v2 branch on github.


First version, which used the POX packet parsing libraries and had a variety of limitations. Implemented in Python 2 and used at Colgate once. Available on the v1 branch on github, but very much obsolete.