vBrigade Meetup
September 18-19, 2017
1
Topics for Discussion
2
Season 1 checkpoint�
3
Goal | Completed in season 1? |
Define Virtualization API or reuse existing one (if we feel that it is sufficient) | Completed - existing Virtualization API was reused. |
Decide whether to make virtualization a subsystem or build it into the core of ONOS | Completed - virtualization is a subsystem that is well supported by ONOS core |
Port OVX base features to ONOS · Address virtualization · Topology virtualization · Control function virtualization | Completed - this was demonstrated by YoonSeon at his talk (ONOS-minisummit) at ONS 2017! |
Support external controllers through Openflow | Incomplete |
Topology virtualization
4
Address virtualization
Control function virtualization
5
Current design�
6
Virtual network model
7
Model element | Virtualization source (package org.onosproject.incubator.net.virtual) | ||
Interface name | Counterpart in Physical Network Infrasctructure | Contains direct reference to physical counterpart | |
Tenant | TenantId | - | - |
Virtual Network | VirtualNetwork | - | - |
Virtual Device | VirtualDevice | Device | No |
Virtual Port | VirtualPort | Port | Yes (VirtualPort.realizedBy maps to a physical port) |
Virtual Link | VirtualLink | Link | No |
Virtual Host | VirtualHost | Host | No |
VN model implementation
8
ONOS core and VN core service modules
9
Illustration of ONOS core services from https://wiki.onosproject.org/display/ONOS/System+Components
VN core services as depicted on slide 19 of ONS 2017 slides
Virtual network subsystem structure
10
VN subsystem structure from slide #14 (YoonSeon’s ONS 2017)
Virtual network components - FlowRule example
Using FlowRule as an example, we will examine some concrete classes that make up the main virtual network components:
Similar components exist for Packet, Group, Meter, etc.
11
VN subsystem structure - FlowRule
12
Virtual Manager - FlowRule
13
Virtual Flow Rule Store & Flow Rule Store
14
Provider & Virtual Provider - FlowRule
15
Provider Service & Virtual Provider Service - FlowRule
16
OFAgent
Goal: allow tenant to use external SDN controllers through Openflow
Features
17
OFAgent main components
18
Interface(s) | Implementing class | Function |
OFAgent | DefaultOFAgent 1 instance per virtual network | OpenFlow agent (holds the mapping between the virtual network and the external OpenFlow controllers) |
OFAgentService, OFAgentAdminService | Administers inventory of OpenFlow agents using a distributed store | |
OFAgentStore | DistributedOFAgentStore * | Manages inventory of OpenFlow agents |
OFController | DefaultOFController | Default OpenFlow controller |
OFSwitch, OFSwitchOperationService, OFControllerRoleService | 1 instance per virtual device | Virtual OpenFlow switch |
OFSwitchService | Manages OpenFlow switches |
* OSGI component
OFAgentManager
Administers inventory of OpenFlow agents using a distributed store
CLI commands and/or REST api are used to:
19
20
REST api | OFAgentAdminService/ OFAgentService method | ONOS CLI | ||
URI | Description | Command | Description | |
POST /service/ofagent-create | Adds a new OpenFlow agent | *AdminService.createAgent | ofagent-create | Add a new ofagent |
PUT /service/ofagent-update | Updates OpenFlow agent | *AdminService.updateAgent | ofagent-controller-add | Add a controller to the ofagent |
ofagent-controller-delete | Deletes a controller from the ofagent | |||
POST /service/ofagent-start | Starts OpenFlow agent | *AdminService.startAgent | ofagent-start | Starts the ofagent |
POST /service/ofagent-stop | Stops OFAgent | *AdminService.stopAgent | ofagent-stop | Stops the ofagent |
DELETE /service/ofagent-remove/{networkId} | Deletes OFAgent | *AdminService.removeAgent | ofagent-remove | Removes the ofagent |
GET /service/ofagents | Lists OpenFlow agents | *Service.agents | ofagents | Lists all ofagents |
GET /service/ofagent/{networkId} | Lists OpenFlow agent | *Service.agent | | |
OFSwitchManager
Manages all OpenFlow switches (for all virtual networks)
OSGI component
21
OFSwitchManager - Event triggers
22
OFAgentEvent
| OFAGENT_CREATED | For all virtual devices of the virtual network handled by the subject OFAgent:
|
OFAGENT_STARTED | External controllers are connected to all OFSwitch objects of the virtual network handled by the subject OFAgent. | |
OFAGENT_STOPPED | External controllers are disconnected from all OFSwitch objects of the virtual network handled by the subject OFAgent. | |
OFAGENT_REMOVED | For each OFSwitch objects of the virtual network handled by the subject OFAgent:
| |
VirtualNetworkEvent
| VIRTUAL_DEVICE_ADDED |
|
VIRTUAL_DEVICE_REMOVED |
|
DefaultOFSwitch
Represents an OpenFlow switch to an external controller.
23
DefaultOFSwitch
24
Demo
25
How-to’s
26
Development environment setup
27
Mininet - How to Invoke
Using CLI (this must be run on the server that will be actually running mininet):
Using stc (need to have cell setup):
28
Ad-hoc testing with external ONOS controller setup - 1
To perform ad-hoc testing with external controller, the following is needed:
29
Ad-hoc testing with external ONOS controller setup - 2
Steps:
30
Ad-hoc testing with external ONOS controller setup - 3
Steps (continued):
31
Ad-hoc testing with external ONOS controller setup - 4
Steps (continued):
32
Tips for newcomers
Based on the feedback vBrigade members, newcomers are encouraged to develop a good understanding of:
33
OpenFlow protocol and its stack | |
ONOS code flow (core and api) <- MUST! Virtual networks are built on top of ONOS abstractions so basic knowledge regarding ONOS concepts is prerequisite. | |
Apache Felix and OSGi | |
Logging | |
Distributed Primitives (used in Distributed stores) | |
<Team input needed> | |
Unfinished tasks from Season 1 - OFAgent
OFAgent tasks - needed to support external controllers through Openflow
34
(OFAgent ) Logger/Tracer per tenant on OFAgent | |
(OFAgent) Handle stats request message | |
(OFAgent) Handle asynchronous messages | |
(OFAgent) Handle controller to switch command messages | |
(OFAgent) Handle role request message and implement role management |
Unfinished tasks from Season 1 - Virtual core/SB
35
Key | Summary | Assignee |
(vNet SBI) Implement VirtualMeterProvider functionality | Unassigned | |
(vNet SBI) Implement VirtualGroupProvider functionality | Unassigned | |
(Vnet) flow manager multi thread issue for multi ONOS instances | Yoonseon | |
(Vnet) Create Host-to-Host intent for Vnet | Yoonseon | |
(vNet) Implement skeleton for virtual gateway | Yoonseon | |
(vProvider) Test cases for virtual packet provider | Yoonseon | |
(vProvider) Test cases for Virtual FlowRule Provider | Yoonseon | |
(SBI) review the implemented skeletal codes. | Yoonseon |
Unfinished tasks from Season 1
36
Testing
ONOS testing options:
Integration testing (sometimes called integration and testing, abbreviated I&T) is the phase in software testing in which individual software modules are combined and tested as a group. It occurs after unit testing and before validation testing.
System testing of software or hardware is testing conducted on a complete, integrated system to evaluate the system's compliance with its specified requirements.
1. Create system test plan
2. Define testcases and test data
3. Testing automation (TestON on Jenkins https://wiki.onosproject.org/display/ONOS/System+Test+Setup+Overview)
37
38
External Connectivity to allow communications between other networks
Goal: Support external connectivity to allow communications between other networks (I.e., Other virtual networks, Internet)
Doyoung Lee will be sharing his research and looking for feedback.
39
Openstack integration to support network infrastructure
Goal: Adapt the Neutron APIs to the Virtual Network API’s.
Hyunsun explained ONOS and OpenStack integration and its use cases: https://groups.google.com/a/onosproject.org/forum/#!topic/onos-discuss/NIS-m-mpp3E
40
Virtual network pausing and snapshotting
Goal: Support network pausing and snapshotting to enable backup and restore of a VN, and migration.
Ali: Snapshotting and pausing is not supported in ovx. Although it would be rather simple to implement. Snapshotting can be done by dumping the virtual flowstate to some storage, clearly there is a little more to this but that would be a good start. Pausing would involve changing output actions of all ingress forwarding rules from the dataplane such that traffic from one network is effectively stopped.
41
Virtual Network embedding
Allow user to define a general structure of a vnet without specifying how it maps to the underlying network. This floating structure then needs to be embedded/mapped onto the underlying network before the vnet can be realized. This can be done either manually or computationally based on the current structure/utilization of the underlying network.
42
Brigade Expectations
43
Brigade Expectations
44
Unused/discarded
45
Virtual Manager - AbstractVirtualListenerManager
46
Tips for newcomers
Based on the feedback vBrigade members, newcomers are encouraged to develop a good understanding of:
47