[[PageOutline]] = Adopt-a-GENI Project Status Report = Period: Second Year == I. Major accomplishments == The following highlights our accomplishments during the second year of the project. === A. Milestones achieved === * Integrate the AAG path selection function with the GENI Desktop. * Incorporate SDN resource allocation functions with Jacks, including whatever compute resources are available through Jacks. * Develop monitoring capability to verify correct connectivity and functioning of user-defined SDN-controlled path. * Develop an approach for plugging a user-specified controller module into the AAG controller for controlling traffic flowing within an SDN-controlled slice. * Demonstrate the implemented functions at GEC21, GEC22 and GEC23. Prepare and present the Aodopt-A-GENI tutorial at the summer camp 2015 held at University of Connecticut. === B. Deliverables made === * We developed a module in the GENI Desktop for integrating the AAG path selection function into the GENI Desktop. * We integrated Jacks with the GENI Desktop so that users can allocate OVS nodes, together with other compute resources through the GENI Desktop. * We developed a flow monitoring module in the GENI Desktop that can monitor the user-defined path to verify its correctness. * We developed a sample module for port forwarding and demonstrated the approach of plugging the module into the AAG controller. == II. Description of work performed during the reporting period == The following provides a description of the progress made during the last reporting period. === A. Activities and findings === Our activities and findings can be described in the following five aspects. ==== 1. developing a module for integrating the AAG path selection function into the GENI Desktop. ==== The GENI Desktop was designed to be extensible in the sense that new modules can be written to include new functionalities. We took advantage of this property of the GENI Desktop and write a module for the AAG function. While creating a module is straightforward, the major task is to modify the exiting AAG code to handle the interactions between the GENI Desktop and the AAG module. There are two aspects. One aspect is how to get the information about a slice. In order to verify and set up the user-selected path, the AAG module needs information about the slice, such as the topology, IP addresses, MAC addresses, etc. The original AAG code obtained this information from the manifest, which was provided as a textual file in XML format. As a part of the GENI Desktop, the AAG module get the slice information from the parser of the GENI Desktop. The parser obtains the slice information from aggregates and provides the manifest as a JSON object. The AAG code was modified to accommodate this change. The other aspect is how the user selects the path. The GENI Desktop provides a graphical user interface (GUI) showing the topology of the slice. Instead of providing a list of desired nodes, the user can pick the nodes via the GUI of the GENI Desktop. There is a mechanism in the GENI Desktop to pass this information from GUI to an associated module. The AAG module processes this information and installs the flows to the switches. [[Image(aag_gec21_demo.png, 600)]] ==== 2. Integrating Jacks with the GENI Desktop for allocating SDN resource. ==== Jacks provided the function to allocate both OVS nodes and other compute resources. As a joint effort with the GENI Desktop project, we integrated Jacks with the GENI Desktop. We customized Jacks to create special icons, including the AAG controller node and the AAG OVS node. Users can drag the AAG controller into the experiment. The AAG OVS node includes the AAG initialization script and related code. It can initialize and configure the OVS node and point the OVS node to the AAG controller. Currently we are developing code to automate the initialization step. The AAG controller can be added automatically to the user experiment and the script on the OVS nodes will be run by the GENI desktop to specify the information about the AAG controller. ==== 3. Developing monitoring capability for SDN-controlled paths. ==== We designed a Flow Monitoring Module (FMM) in the GENI Desktop to verify that a flow is correctly installed and monitor the traffic that is part of the flow. We can get the statistics about the number of packets (bytes) matching a flow entry from the controller. However, they are the cumulative counts since the flow entry is installed. Therefore, it does not show the changes or trends of the interested flow. It will be hard and time-consuming for an experimenter to figure out the changes manually. The FMM provides a live monitoring functionality by periodically querying the controller to get these statistics over a period of time. Luckily, the controller does not restrict the frequency with which we can query statistics from it. The FMM transforms the collected data into a dynamic time series plot that depicts the flow’s performance over time since the data collection began. The plot is updated in real time as more data are collected from the controller. Therefore, it provides a live monitoring of the behavior of the flow. The following figure shows an example output where peaks can be easily identified by the experimenter. [[Image(15mins.png, 600)]] ==== 4. Developing an approach for plugging a user-specified controller module. === The AAG controller is based on the OpenDaylight controller. To plug the user-specified controller module to the AAG controller for controlling traffic flowing with a AAG-controlled user slice, we can use the Web GUI or the OSGi console of the OpenDaylight controller to install the user-specified module as a bundle. As the first step, the user needs to use tools like maven for compilation and dependencies, java as programming language and (optionally) eclipse to ease syntax completion. Once the module is written and successfully compiled, a .jar file representing the bundle will be created. The final step is to use Web GUI or OSGi console to install the bundle and start it. We developed a sample module for port forwarding and demonstrated the approach. The module checks if the destination port is within the (user-defined) range 5000-6000. If so, flow entries are installed that forward such traffic to port 5050 and handle packets sent back to the client. Otherwise, a "DROP" rule is installed preventing further connections to the target destination port. ==== 5. Demos and Tutorial ==== We demonstrated the AAG path selection funciton at GEC 21, the monitoring of flow traffic at GEC 22, and user-specified sub-controller at GEC 23. We also give a tutorial of the Adopt-A-GENI project at the 2015 summer camp held in the University of Connecticut. === B. Project participants === The following individuals are involved with the project in one way or another: * Zongming Fei - Project PI (Kentucky) * Jim Griffioen - Project Co-PI (Kentucky) * Kobus van der Merwe - Project Co-PI (Utah) * Rob Ricci - Project Co-PI (Utah) * Hussamuddin Nasir - Technician/Programmer (Kentucky) * Charles Carpenter - Technician/Programmer (Kentucky) * Jonathon Duerig - Research Associate (Utah) * Sergio Rivera Polanco - Ph.D. Student (Kentucky) === C. Publications (individual and organizational) === * Sergio Rivera P., Zongming Fei, and James Griffioen, "Providing a High Level Abstraction for SDN Networks in GENI", in Proc. of the 2nd International Workshop on Computer and Networking Experimental Research Using Testbeds (CNERT 2015), Columbus, OH, June 29, 2015. === D. Outreach activities === * We gave demos at GEC 21, GEC 22, and GEC 23. We also gave a tutorial at the GENI summer camp. === E. Collaborations === * Most of our collaborations have been between the Kentucky team and the Utah team. We continued our discussion on what functions need to be provided in Jacks for the AAG project and how to better integrate Jacks with the GENI Desktop. === F. Other Contributions ===