{"id":712,"date":"2020-09-10T03:29:43","date_gmt":"2020-09-10T03:29:43","guid":{"rendered":"http:\/\/www.atlanticwave-sdx.net\/?page_id=712"},"modified":"2022-07-14T19:45:45","modified_gmt":"2022-07-14T19:45:45","slug":"about-2-2-2","status":"publish","type":"page","link":"https:\/\/www.atlanticwave-sdx.net\/?page_id=712","title":{"rendered":"Development"},"content":{"rendered":"<p>[vc_row wrap_container=&#8221;yes&#8221; css=&#8221;.vc_custom_1600116045578{padding-top: 10px !important;padding-bottom: 10px !important;}&#8221;][vc_column][vc_text_separator title=&#8221;AtlanticWave\/SDX Controller Prototype&#8221; css=&#8221;.vc_custom_1600116101682{padding-top: 25px !important;padding-bottom: 15px !important;}&#8221;][vc_column_text css_animation=&#8221;top-to-bottom&#8221;]<\/p>\n<h3>Introduction<\/h3>\n<p>This repository contains all the code for the prototype AtlanticWave\/SDX controller. It will likely transition to being the basis for a production controller in the future, however, a different controller platform may be more appropriate.<\/p>\n<p>The initial deployment for the AtlanticWave\/SDX will be in Atlanta, Miami, and Sao Paulo. The controller is broken into multiple parts (described in more detail below) running at these different locations.<\/p>\n<p>It is written in Python, using the\u00a0<a href=\"https:\/\/osrg.github.io\/ryu\/\" rel=\"nofollow\">Ryu<\/a>\u00a0SDN Framework as an OpenFlow speaker, and has a REST API and web application for management. It is being designed to allow for new types of rules to be added, as well as communicating using other SDN protocols (<a href=\"http:\/\/p4.org\/\" rel=\"nofollow\">P4<\/a>, for instance).<\/p>\n<h3><a id=\"user-content-updating-ryu\" class=\"anchor\" href=\"https:\/\/github.com\/atlanticwave-sdx\/atlanticwave-proto#updating-ryu\"><\/a>Updating Ryu<\/h3>\n<p>The AtlanticWave\/SDX controller is built upon Ryu. Ryu isn&#8217;t the friendliest controller to extend, thus there is a folder vendor-update. Inside of it, there is a script\u00a0<em>update-ryu-flags.sh<\/em>\u00a0that must be run with the location of your ryu installation.<\/p>\n<h3><a id=\"user-content-controller-breakdown\" class=\"anchor\" href=\"https:\/\/github.com\/atlanticwave-sdx\/atlanticwave-proto#controller-breakdown\"><\/a>Controller Breakdown<\/h3>\n<p>The controller will be split into three main parts:<\/p>\n<h2>Participant Interface(s)<\/h2>\n<p>The participant interfaces are where the participants (network operators typically, scientists moving data in this case) install rules that dictate how flows behave. There will be multiple, and of multiple different kinds. For the initial prototype, there will be a web app that allows users to create and install rules.<\/p>\n<p>The SDX controller (below) will have a REST API, so other participant interfaces could be created. For example, a participant could create a meta-controller that uses the REST API to control their own flows.<\/p>\n<h2>SDX Controller<\/h2>\n<p>The SDX controller is responsible for a number of things, including authentication and authorization of participants and local controllers, taking rules from the participant interfaces and breaking them down into per-location rules for the local controllers, and handling federation challenges from many participants installing rules on a shared network, and providing an interface for the participants.<\/p>\n<p>The SDX controller will provide a REST API that allows participants&#8217; rules to be installed. The participants will likely\u00a0<em>not<\/em>\u00a0use it directly, but rather than provides participant interfaces (described above). This will provide options for installing many different types of rules, at different levels of abstraction (non-abstract near-OpenFlow to the very abstract creating a 40Gbps connection between Chicago and Chile).<\/p>\n<h2>Local Controllers<\/h2>\n<p>Each location in the AtlanticWave\/SDX will have a local controller that controls the local switch. The local controller has one main job: take the somewhat abstract rules to form the SDX controller, and translate them to a switch friendly protocol, OpenFlow right now. The local controller also bootstraps the configuration of the switch to establish connectivity between the local controller and the SDX controller.<\/p>\n<h3><a id=\"user-content-shared-code\" class=\"anchor\" href=\"https:\/\/github.com\/atlanticwave-sdx\/atlanticwave-proto#shared-code\"><\/a>Shared Code<\/h3>\n<p>There is a significant shared code of two different types: interface objects and library functions. Both types of shared code can be found in the\u00a0<code>shared<\/code>\u00a0folder.<\/p>\n<p>The interface objects are used to pass data between different modules, typically different parts of the controller.<\/p>\n<p>The libraries as of this writing include a communication library that abstracts away how to encode, send, and receive objects that are being sent between different parts of the controller. Abstracting the communication interface allows us to add more features, without altering other code. For instance, the initial implementation is very simple, sending data on an unencrypted TCP connection. Future versions will use bidirectionally authenticated TLS, while retaining the same\u00a0<code>send<\/code>\u00a0and\u00a0<code>receive<\/code>\u00a0functionality.<\/p>\n<h3><a id=\"user-content-other-code\" class=\"anchor\" href=\"https:\/\/github.com\/atlanticwave-sdx\/atlanticwave-proto#other-code\"><\/a>Other code<\/h3>\n<p>The\u00a0<code>testing<\/code>\u00a0and\u00a0<code>topo<\/code>\u00a0folders are both for testing.\u00a0<code>testing<\/code>\u00a0contains test cases, typically at unit-test level, but some system tests as well.\u00a0<code>topo<\/code>\u00a0provides topologies for testing and demos.<\/p>\n<h2><a id=\"user-content-vm-requirements\" class=\"anchor\" href=\"https:\/\/github.com\/atlanticwave-sdx\/atlanticwave-proto#vm-requirements\"><\/a>VM Requirements<\/h2>\n<p>**\u00a0TBD **<\/p>\n<h3><a id=\"user-content-virtual-environment\" class=\"anchor\" href=\"https:\/\/github.com\/atlanticwave-sdx\/atlanticwave-proto#virtual-environment\"><\/a>Virtual Environment<\/h3>\n<p>Use virtualenv to easily set up the controller<\/p>\n<p>create a virtual environment. do not do this inside of the directory if you are a contributor<\/p>\n<pre><code>virtualenv venv\r\nsource venv\/bin\/activate\r\n<\/code><\/pre>\n<p>now go into the atlanticwave directory and download the requirements<\/p>\n<pre><code>cd atlanticwave-proto\/\r\npip install -r requirements.txt\r\n<\/code><\/pre>\n<p>Also, be sure to set your python path<\/p>\n<pre><code>export PYTHONPATH=\/Users\/johnskan\/atlanticwave-proto\r\n\r\nThe AtlanticWave-SDX prototype can be found at https:\/\/github.com\/atlanticwave-sdx\/atlanticwave-proto<\/code><\/pre>\n<p>[\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[vc_row wrap_container=&#8221;yes&#8221; css=&#8221;.vc_custom_1600116045578{padding-top: 10px !important;padding-bottom: 10px !important;}&#8221;][vc_column][vc_text_separator title=&#8221;AtlanticWave\/SDX Controller Prototype&#8221; css=&#8221;.vc_custom_1600116101682{padding-top: 25px !important;padding-bottom: 15px !important;}&#8221;][vc_column_text css_animation=&#8221;top-to-bottom&#8221;] Introduction This repository contains all the code for the prototype AtlanticWave\/SDX controller. It will likely transition to being the basis for a production controller in the future, however, a different controller platform may be more appropriate. The initial deployment [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=\/wp\/v2\/pages\/712"}],"collection":[{"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=712"}],"version-history":[{"count":6,"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=\/wp\/v2\/pages\/712\/revisions"}],"predecessor-version":[{"id":1149,"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=\/wp\/v2\/pages\/712\/revisions\/1149"}],"wp:attachment":[{"href":"https:\/\/www.atlanticwave-sdx.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}