EPA and SDN assist
THIS PAGE IS DEPRECATED. OSM User Guide has been moved to a new location: https://osm.etsi.org/docs/user-guide/
---
Introduction
OSM supports EPA (Enhanced Platform Awareness) since Rel ZERO (May 2016). EPA features like use of hugepages memory, CPU pinning, NUMA pinning, and the use of passthrough and SR-IOV interfaces, can be used in OSM's VNF descriptors since then.
If your VIM supports EPA, then you don't need to do anything extra to use it from OSM. VIM connectors in OSM take advantage of EPA capabilities if the VIM supports it. All you need to do is build your descriptors and deploy.
However, as you may have noticed, not all VIMs support EPA. To overcome this limitation, OSM has added the following two features:
- Since Rel ONE (October 2016), OSM includes openvim as a reference VIM, with full support of EPA. You can follow the instructions in this link to install and use openvim.
- Since Rel TWO (April 2017), OSM includes a new capability in the Resource Orchestrator called SDN assist. Through this capability, OSM can manage, via the RO, the dataplane underlay conectivity through an external SDN controller. The only requirement for the VIM is that it must able to use SRIOV and/or passthrough interfaces, and expose the assigned interfaces so that the RO can use them to create the underlay connectivity. By default, the SDN assist capability is disabled when a datacenter or VIM is added to OSM, but you can instruct OSM to enable it per datacenter.
SDN assist
Introduction
The way SDN assist works, succinctly, is as follows. OSM will deploy the VMs of a NS with Passthrough and/or SRIOV interfaces, then will get from the VIM (in your case, Openstack) the compute node where the VM was deployed and the physical interface assigned to the VM (identified by its PCI address). Then, OSM will map those interfaces to Openflow ports in the switch making use of the mapping that you should have introduced in the system, and finally OSM will create the dataplane networks by talking to the SDN controller and connecting the appropriate Openflow ports to the same network.
The module in charge of this is the OSM-RO (Resource Orchestrator). It uses an internal library to manage the underlay connectivity via SDN. The library relies on Openflow pro-active rules to configure the connectivity in the switch. The current library includes plugins for FloodLight, ONOS and OpenDayLight.
General requirements
The general requirements are:
- A dataplane switch with Openflow capabilities that will connect the physical interfaces of the VIM compute nodes.
- An external SDN controller controlling the previous dataplane switch.
- The mapping between the switch ports (identified by name) and the compute node interfaces (identified by host-id and PCI address)
- Some VIMs as Openstack requires admin credentials in order to be able to get the physical place of the SRIOV/passthrough VM interfaces
In addition to the general requirements, every VIM will have to be properly configured.
Openstack configuration
You should do extra configuration to configure Openstack for running VNFs which use SRIOV or passthrough interfaces. You can find a reference guide in this link.
Using SDN assist
Adding a SDN controller to OSM
This is done through RO CLI. Enter in the RO container (lxc exec RO bash) and type:
export OPENMANO_TENANT=osm # Indicate the RO tenant to use
In order to set the information of an existing sdn controller, use the following sintax:
root@RO:~# openmano sdn-controller-create -h usage: openmano sdn-controller-create [-h] [--verbose] [--debug] [--description DESCRIPTION] [--ip IP] [--port PORT] [--dpid DPID] [--type TYPE] [--user USER] [--passwd PASSWORD] name positional arguments: name name of the SDN controller optional arguments: -h, --help show this help message and exit --verbose, -v increase verbosity level. Use several times --debug, -d show debug information --description DESCRIPTION description of the SDN controller --ip IP IP of the SDN controller --port PORT Port of the SDN controller --dpid DPID DPID of the dataplane switch controlled by this SDN controller --type TYPE Specify the SDN controller type. Valid types are 'opendaylight' and 'floodlight' --user USER user credentials for the SDN controller --passwd PASSWORD password credentials for the SDN controller
For example:
root@RO:~# openmano sdn-controller-create mySDN --ip=192.168.15.2 --port=8080 --dpid=56:55:12:12:12:12:12:12 --user sdnuser --passwd sdnpasswd --type onos 98113d4a-51b7-11e7-8f07-00163e1229e4 mySDN ACTIVE
You can list the defined SDN controllers like this:
root@RO:~# openmano sdn-controller-list { "sdn_controllers": [ { "status": "ACTIVE", "password": "sdnpasswd", "uuid": "98113d4a-51b7-11e7-8f07-00163e1229e4", "last_error": null, "dpid": "56:55:12:12:12:12:12:12", "version": null, "user": "sdnuser", "ip": "192.168.15.2", "nets_with_same_vlan": "false", "type": "onos", "port": 8080, "name": "mySDN" } ] }
You can manage SDN controllers with sdn-controller-create/list/edit/delete
Note that at SDN creation, connectivity and credentials are not checked.
Enabling SDN assist in a VIM (associate a SDN controller with a VIM)
If we check the information of the datacenter we can see that this is disabled by default. No information about SDN can be seen in the config section:
root@RO:~# openmano datacenter-list mydc -vvv datacenter: config: null created_at: '2017-06-02T07:55:41' description: mydc name: mydc type: openstack uuid: dfcd6ca2-4768-11e7-8f07-00163e1229e4 vim_tenants: - config: dataplane_physical_net: physnet_sriov use_floating_ip: true passwd: '******' user: osm vim_tenant_id: null vim_tenant_name: osm vim_url: http://10.0.0.12:5000/v2.0 vim_url_admin: null
In order to add the sdn controller to the datacenter:
root@RO:~# openmano datacenter-edit mydc --sdn-controller mySDN Edit datacenter mydc (y/N)? y dfcd6ca2-4768-11e7-8f07-00163e1229e4 mydc 2017-06-02T07:55:41
And now we can see this information in the datacenter:
root@RO:~# openmano datacenter-list mydc -vvv datacenter: config: sdn-controller: 98113d4a-51b7-11e7-8f07-00163e1229e4 created_at: '2017-06-02T07:55:41' description: mydc name: mydc type: openstack uuid: dfcd6ca2-4768-11e7-8f07-00163e1229e4 vim_tenants: - config: dataplane_physical_net: physnet_sriov use_floating_ip: true passwd: '******' user: osm vim_tenant_id: null vim_tenant_name: osm vim_url: http://10.0.0.12:5000/v2.0 vim_url_admin: null
In order to remove the sdn controller:
root@RO:~# openmano datacenter-edit mydc --sdn-controller null Edit datacenter mydc (y/N)? y dfcd6ca2-4768-11e7-8f07-00163e1229e4 mydc 2017-06-02T07:55:41
Adding a port mapping
A sample of sdn port mapping can be found in RO/sdn/sdn_port_mapping.yaml
root@RO:~# tail -n 24 RO/sdn/sdn_port_mapping.yaml --- #The mapping is composed of a list of compute nodes. Each compute nodes has two elements: #"compute_node": name to identify the compute node within the datacenter #"ports": list of ports mapped to a switch for that compute node. #The information to identify the SDN controller and the dataplane switch is obtained from the datacenter information - compute_node: "compute node 1" ports: #Each mapped port contains the following information: #"pci": pci address of the port in the compute node. This is a mandatory parameter #"switch_mac": MAC address of the corresponding port in the dataplane switch. #"switch_port": Openflow name of the port in the dataplane switch. #"switch_mac" or "switch_port" must be specified. Both of them could be specified - pci: "0000:81:00.0" switch_port: "port-2/1" - pci: "0000:81:00.1" switch_mac: "52:54:00:94:21:22" - compute_node: "compute node 2" ports: - pci: "0000:81:00.0" switch_port: "port-2/3" switch_mac: "52:54:00:94:22:21" - pci: "0000:81:00.1" switch_port: "port-2/4" switch_mac: "52:54:00:94:22:22"
In order to populate the port-mapping:
root@RO:~# openmano datacenter-sdn-port-mapping-set mydc RO/sdn/sdn_port_mapping.yaml sdn_port_mapping: - {compute_node: compute node 1, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: '0000:81:00.0', region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: '00:01:64:00:6a:e6:b3:14', switch_mac: null, switch_port: port-2/1, uuid: 977b50f8-51b9-11e7-8f07-00163e1229e4} - {compute_node: compute node 1, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: '0000:81:00.1', region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: '00:01:64:00:6a:e6:b3:14', switch_mac: '52:54:00:94:21:22', switch_port: null, uuid: 977b50f9-51b9-11e7-8f07-00163e1229e4} - {compute_node: compute node 2, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: '0000:81:00.0', region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: '00:01:64:00:6a:e6:b3:14', switch_mac: '52:54:00:94:22:21', switch_port: port-2/3, uuid: 977b50fa-51b9-11e7-8f07-00163e1229e4} - {compute_node: compute node 2, ofc_id: 963b5616-4769-11e7-8f07-00163e1229e4, pci: '0000:81:00.1', region: dfcd6ca2-4768-11e7-8f07-00163e1229e4, switch_dpid: '00:01:64:00:6a:e6:b3:14', switch_mac: '52:54:00:94:22:22', switch_port: port-2/4, uuid: 977b50fb-51b9-11e7-8f07-00163e1229e4}
To overwrite the port mapping the same instruction can be used.
To clear the port mapping:
root@RO:~# openmano datacenter-sdn-port-mapping-clear mydc Clean SDN port mapping for datacenter dfcd6ca2-4768-11e7-8f07-00163e1229e4 (y/N)? y {result: 4 deleted from of_port_mapping}
Managing dataplane networks with external connectivity
Create a new network in the VIM and an associated network for the SDN assist
root@RO:~# openmano vim-net-create --name mydc_net --type data --datacenter mydc d30315d5-4ed7-442b-94e4-cf81d058ae00 mydc_net ACTIVE
Now you can include in the network a port (and a vlan as optional parameter) of the dataplane switch that will provide access to an external element. As an additional parameter, the mac address of the external element can also be specified in this command using --mac
root@RO:~# openmano vim-net-sdn-attach mydc_net Te1/1 --vlan 300 --datacenter mydc Success 062a50b4-51bd-11e7-9496-00163eb5e904
Now when listing the network we can see this port belongs to vim network and if we deploy a NS using dataplane interfaces connected to this network all of them will be able to communicate with the external element/network through the attached port.
root@RO:~# openmano vim-net-list --datacenter mydc mydc_net d30315d5-4ed7-442b-94e4-cf81d058ae00 mydc_net ACTIVE 2017-06-15T11:23:08Z sdn_attached_ports: - switch_port: Te1/1 uuid: 062a50b4-51bd-11e7-9496-00163eb5e904 vlan: 300
In order to remove a port from a network you can use the --id option to remove a specific port from the network or --all to remove all of them:
root@RO:~# openmano vim-net-sdn-detach mydc_net --all --datacenter mydc Confirm action' (y/N)? y Success root@RO:~# openmano vim-net-list --datacenter mydc mydc_net d30315d5-4ed7-442b-94e4-cf81d058ae00 mydc_net ACTIVE 2017-06-15T11:23:08Z