Workflow ************************ 1. Define the network graph, creating instances of model.Node and model.DIF classes. 2. Create an instance of a Testbed class. 3. Create an instance of the selected prototype.Experiment class, passing the testbed instance and a list of Node instances. 1. At the end of the base Experiment constructor, the generate function is called to generate information about per-node IPCPs, registrations and enrollment, ready to be used by the plugins. 4. Call methods on the prototype.Experiment instance: 1. swap_in() swaps the experiment in on the testbed, and fills in the missing information in the model. 2. install_prototype() installs the chosen prototype on the testbed. Currently an Ubuntu image is assumed. 3. bootstrap_prototype() calls a prototype-specific setup function, to create the required IPCPs, perform registrations, enrollments, etc. 4. swap_out() swaps the experiment out of the testbed. 5. Run a Storyboard to emulate real network traffic. Accessing nodes after swap-in ----------------------------- To access a node once the experiment is swapped in, use the following command (in the same terminal where ssh-agent was run in case of jFed): :: $ rumba-access $NODE_NAME Where $NODE_NAME is the name of the node to access.