Neutron plugins/drivers for NEC networking products¶
networking-nec
library provides Neutron plugins/drivers
for NEC SDN networking products` (mainly OpenFlow related at now)
and Trema Sliceable Switch (reference implementation).
- Documentation: http://networking-nec.readthedocs.org/
- Source: http://git.openstack.org/cgit/openstack/networking-nec
- Bugs: http://bugs.launchpad.net/networking-nec
- License: Apache License 2.0
Warning
The current plugin, NEC OpenFlow plugin, is deprecated in OpenStack Liberty release (2015.2). A new driver for NEC NWA (Network Automation) product is coming. Note that the production support will be continued based on the production support policy.
Note
In 2015.1 release (Kilo development cycle) in OpenStack, Neutron community decided to decompose vendor plugins/drivers from the neutron code repo to address many pain points. NEC OpenFlow Neutron plugin is maintained in a separate module.
User Guide¶
Introduction¶
NEC OpenFlow plugin talks to OpenFlow Controller and each Neutron would be mapped to an virtual layer-2 network slice on an OpenFlow enabled network. The interface between the Neutron plugin and OpenFlow Controller is RESTful API. This API is supported by two implementations:
- NEC ProgrammableFlow Controller (NEC Commercial Product)
- Trema Sliceable Switch (OSS)
This plugin consists of two components:
- Plugin: It processes Neutron API calls and controls OpenFlow controller to handle logical networks on OpenFlow enabled network.
- Layer2-Agent: It runs on each compute node. It gathers a mapping beween a VIF and a switch port from local Open vSwitch and reports it to the plugin.

Installation¶
Requirements¶
OpenFlow controller is required to make NEC OpenFlow plugin work. A controller needs to support REST API available at Sliceable Network Management API.
The following controllers are available:
- Trema with Sliceable Switch (distributed under GPL2)
- NEC ProgrammableFlow Controller (NEC Commercial Product)
Running with DevStack¶
See DevStack plugin for NEC OpenFlow Neutron plugin integration
Manual Installation¶
(Kilo or later) Neutron integration is available. After the core/vendor decomposition work, the main code is provided as a separate python module called networking-nec, and the shim code and configuration exist in the Neutron code tree.
The code is maintained at http://git.openstack.org/cgit/openstack/networking-nec
The released versions of Python module is available at https://pypi.python.org/pypi/networking-nec. To install:
pip install networking-nec~=2015.1
Note that the version number like ‘’‘2015.1’‘’ should match the corresponding OpenStack release version (e.g., 2015.1 for Kilo, 2015.2 for Liberty).
Of course, make sure to install Neutron itself.
From Folsom to Juno, NEC OpenFlow plugin was maintained in the main repo of Neutron http://git.openstack.org/cgit/openstack/neutron.
Configuration¶
This section describes the configurations of the releases maintained by OpenStack community (i.e., Juno, Kilo).
neutron.conf¶
core_plugin: Needs to be configured to
neutron.plugins.nec.nec_plugin.NECPluginV2
to use NEC OpenFlow plugin as core plugin.:core_plugin = neutron.plugins.nec.nec_plugin.NECPluginV2
service_plugins: NEC OpenFlow plugin provides L3 router feature as part of the core plugin. Thus L3 router service plugin should NOT be contained in service_plugin. Other service plugins (LBaaS, FWaaS, VPNaaS, metering) are verified to work with NEC OpenFlow plugin.
plugin specific configuration¶
It is usually placed at /etc/neutron/plugins/nec/nec.ini
.
Section [OFC]
is configurations specific to NEC OpenFlow plugin.
We describe [OFC]
section first and then describe other sections.
[OFC] section¶
Features of North-bound REST API of OpenFlow controller
- driver: Shortcut name or full class path of OpenFlow controller driver.
The appropriate driver needs to be specified depending on your back-end OpenFlow controller.
The following drivers are available. The default value is
trema
.- NEC ProgrammableFlow OpenFlow controller
- pfc : Alias for the latest ProgrammableFlow release. pfc_v51 since Icehouse, pfc_v5 since Havana.
- pfc_v51 : ProgrammableFlow Controller V5.1. Supported since Icehouse
- pfc_v5 : ProgrammableFlow Controller V5.0. Supported since Havana.
- pfc_v4 : ProgrammableFlow Controller V4.0.
- pfc_v3 : ProgrammableFlow Controller V3.0.
- Trema Sliceable Switch
- trema: Trema Sliceable Switch. Alias for trema_port.
- trema_port : Virtual networks are identified based on OpenFlow port. Each port of virtual network is identified by datapath_id, port_no and (optional) vlan_id.
- trema_portmac : Similar to trema_port. In addition MAC address is also considered when identify a port of virtual network.
- trema_mac : Virtual networks are identified based on received MAC address.
- NEC ProgrammableFlow OpenFlow controller
- enable_packet_filter: Specified whether NEC plugin specific PacketFilter extension is enabled. This features is supported in all OpenStack releases for Trema Sliceable Switch and since Icehouse for ProgrammableFlow Controller. The default value is
true
. - support_packet_filter_on_ofc_router: Support packet filter features on OFC router interface. ProgrammableFlow Controller v5 does not support the packet filter on OFC router interface, so this parameter should be set to
false
. Otherwise it is recommended to set this totrue
. The default value istrue
. (Since Juno)
REST API endpoint of OpenFlow controller
- host: Host IP address of OpenFlow Controller where its north-bound REST API is listening to. Example: `` 127.0.0.1``
- port: Port number of OpenFlow Controller where its north0bound REST API is listening to. Example:
8888
- api_max_attempts (default: 3): Maximum attempts per OFC API request. NEC plugin retries API request to OFC when OFC returns ServiceUnavailable (503). The value must be greater than 0. (Since Icehouse)
- path_prefix (default: empty string): Base URL of OpenFlow Controller REST API. It is prepended to a path of each API request. (Since Icehouse)
SSL configuration for OpenFlow controller north bound API. It is only available for ProgrammableFlow Controller.
- use_ssl (default:
false
): Specify whether SSL is used to connection a back-end OpenFlow controller or not. - key_file: Key file
- cert_file: Certificate file
- insecure_ssl (default:
false
): Disable SSL certificate verification. (Since Icehouse)
[ovs] section¶
- integration_bridge (default:
br-int
) : This is the name of the OVS integration bridge. There is one per hypervisor. The integration bridge acts as a virtual “patch port”. All VM VIFs are attached to this bridge and then “patched” according to their network connectivity. Recommend not to change this parameter unless you have a good reason to.
[agent] section¶
- root_helper: Recommended to be configured to
sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf
. In Kilo, this parameter no longer has the meaning. - polling_interval (default: 2): Agent’s polling interval in seconds
[securitygroup] section¶
- firewall_driver: Firewall driver for realizing neutron security group function. Needs to configured to
neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
- enable_security_group (default: true): Controls if neutron security group is enabled or not. It should be false when you use nova security group.
[provider] section¶
NEC OpenFlow plugin supported multiple back-end for router implementation.
- default_router_provider (default:
l3-agent
): Default router provider to use.l3-agent
oropenflow
can be specified. - router_providers (default:
l3-agent,openflow
): List of enabled router providers. If a configured OpenFlow backed does not support router implementation,openflow
provider will be disabled automatically and all routers will be created using l3-agent.
Neutron service agent¶
Various neutron agents which plug interfaces to an integration bridge have a configuration parameter interface_driver.
interface_driver and ovs_use_veth need to be configured to OVSInterfaceDriver
to make NEC OpenFlow plugin work.
interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
ovs_use_veth = True
Such agents are:
- DHCP agent (/etc/neutron/dhcp_agent.ini)
- L3 agent (/etc/neutron/l3_agent.ini)
- LBaaS HAProxy agent (/etc/neutron/services/loadbalancer/haproxy/lbaas_agent.ini)
- Neutron Debug command neutron-debug (/etc/neutron/debug.ini)
Nova configuration¶
No configuration specific to this plugin.
Developers Guide¶
DevStack plugin for NEC OpenFlow Neutron plugin integration¶
As a part of vendor plugins/drivers decomposition work in Kilo, NEC plugin decomposition has been done.
This devstack external plugin installs NEC plugin library so that Neutron NEC OpenFlow plugin can be enabled.
To use this devstack plugin, add the following to your local.conf:
enable_plugin networking-nec https://git.openstack.org/openstack/networking-nec [<branch>]
When you use stable branches, branch needs to be specified to stable/xxxx such as stable/kilo.
Examples¶
Minimum sample local.conf:
[[local|localrc]]
disable_service n-net
enable_service neutron q-svc q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service q-lbaas
enable_service q-fwaas
enable_service q-vpn
# NEC plugin
Q_PLUGIN=nec
enable_plugin networking-nec https://git.openstack.org/openstack/networking-nec
# Trema Sliceable Switch (the following three lines are required at least)
OFC_DRIVER=trema
OFC_OFP_PORT=6653
enable_plugin trema-devstack-plugin https://github.com/nec-openstack/trema-devstack-plugin
# ProgrammableFlow controller
#OFC_DRIVER=pfc
References¶
Development Tips¶
Release package¶
Create a specific release¶
The following steps are required to release a package.
(Create a stable branch if necessary)
Add a signed tag to the repository
git checkout stable/xxxx (if necessary) git tag -s <version number> git show <version number> git push gerrit <version number>
Warning
Before pushing a tag to gerrit, you are strongly suggested to test whether a generated package works as expected.
git checkout <version number> python setup.py sdist pip install dist/networking-nec-<version number>.tar.gz
To push a tag to gerrit, you must be a member of
networking-nec-release
gerrit group.Push a release package to PyPI.
git checkout <version number> python setup.py sdist upload
Once the upload succeeded, you can find a new release at https://pypi.python.org/pypi/networking-nec.
Before uploading a package to PyPI, you need to create your PyPI account and prepare a proper credential file
~/.pypirc
like below.[distutils] index-servers = pypi [pypi] repository=https://pypi.python.org/pypi username=<your username> password=<your password>
Create a stable branch¶
The detail is available at: http://docs.openstack.org/infra/manual/drivers.html#release-management.
To create a (stable) branch, you must be a member of
networking-nec-release
gerrit group.
More information¶
Most of the release process is explained in OpenStack Infrastructure User Manual.
Requirements update¶
In OpenStack projects, requirements.txt and test-requirements.txt
should be synced with global-requirements.txt
in
http://git.openstack.org/cgit/openstack/requirements/tree/.
To sync requirements manually:
Check out requirements repository:
git clone https://git.openstack.org/openstack/requirements
Run update.py:
cd requirements tox -e venv -- python update.py <networking-nec top directory>
To sync it automatically, you need to:
- setup the jenkins job
gate-{name}-requirements
(it is usually unnecessary aspython-jobs
contains it), - add
check-requirements
tozuul/layout.yaml
in project-config, and - add
openstack/networking-nec
toprojects.txt
in the requirements project.
Documentation¶
Build documentation¶
To build the documentation:
tox -e docs
and the generated documentation will be found under doc/build/html
.
Publish documentation¶
The document is hosted by Read The Docs and the documentation is available at http://networking-nec.readthedocs.org/en/latest/.
To publish the latest documentation, visit the project page, go to Builds and click Build version after selecting latest. After completing the build, the status will be Passed and you can see the new document. If the build fails, investigate reasons of the failure.
Third party CI¶
- The master information about setting up and operating a third party CI is available at http://docs.openstack.org/infra/system-config/third_party.html. It is better to check this site regularly.
- The status of your third party CI system should be available at https://wiki.openstack.org/wiki/ThirdPartySystems. For example, you have a planned power blackout, it is encouraged to update the corresponding page.
Contributing¶
If you would like to contribute to the development of OpenStack, you must follow the steps in this page:
Once those steps have been completed, changes to OpenStack should be submitted for review via the Gerrit tool, following the workflow documented at:
Pull requests submitted through GitHub will be ignored.
Bugs should be filed on Launchpad, not GitHub: