Jump to: navigation, search

Difference between revisions of "Neutron/NEC OpenFlow Plugin"

(How to get)
m
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
'''[Deprecation 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 Kilo development cycle, Neutron community decides to move
 
'''[Note]''' In Kilo development cycle, Neutron community decides to move
 
vendor specific codes into separate repositories.
 
vendor specific codes into separate repositories.
NEC OpenFlow plugin is now available at https://git.openstack.org/stackforge/networking-nec.
+
NEC OpenFlow plugin is now available at https://git.openstack.org/openstack/networking-nec.
More detail will be coming soon.
 
 
 
== Abstract ==
 
 
 
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:Trema Sliceable Switch
 
(OSS) and NEC [[ProgrammableFlow]] Controller (NEC Commercial Product).
 
 
 
This plugin consists of two components: "Plugin" and "Agent".
 
 
 
* '''Plugin''': It processes Neutron API calls and controls [[OpenFlow]] controller to handle logical networks on [[OpenFlow]] enabled network.
 
* '''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.
 
 
 
== Requirements ==
 
 
 
* [[OpenFlow]] Controller: Trema with Sliceable Switch (distributed under GPL2), or an [[OpenFlow]] Controller that has the same functionalities and REST API available at https://github.com/trema/apps/wiki/Sliceable-Network-Management-API .
 
 
 
== Design ==
 
 
 
[[File:quantum-nec-openflow-plugin-design.png|alt|Neutron NEC OpenFlow] Plugin Design| width=600]]
 
 
 
=== Communication between plugin and agent ===
 
 
 
This plugin uses "common-rpc" in openstack-common for the agents to
 
communicate with the plugin and will conform to the convention for scalable-agent-comms.
 
The topic name for RPC will be set to "neutron.plugin" as proposed in the blueprint scalable-agent-comms.
 
 
 
=== Integration with Nova ===
 
 
 
There are no need for additional features in Nova.
 
This implementation utilizes a current libvirt VIF driver and linux-net interface driver.
 
 
 
== How to run this plugin ==
 
=== Using devstack (Kilo and later) ===
 
 
 
During Kilo development cycle, the code/vendor code decomposition work has been done in Neutron.
 
Along with this, DevStack external plugin mechanism was introduced for more flexibility.
 
DevStack support of NEC OpenFlow plugin is provided at networking-nec repository.
 
To use NEC plugin DevStack support,
 
 
 
  enable_plugin networking-nec https://git.openstack.org/stackforge/networking-nec
 
 
 
The detail is available at http://git.openstack.org/cgit/stackforge/networking-nec/plain/devstack/README.md .
 
 
 
=== Using DevStack (Juno, Icehouse) ===
 
 
 
Devstack support of NEC OpenFlow plugin is a part of the official devstack (http://github.com/openstack-dev/devstack) from Grizzly.
 
 
 
Detail instruction and sample devstack configuration examples (localrc) are available at https://github.com/nec-openstack/devstack-neutron-nec-openflow/wiki .
 
 
 
== How to get ==
 
 
 
* '''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'''.
 
** The code is maintained at stackforge https://github.com/stackforge/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).
 
* '''Juno, Icehouse (Folsom or later)''' : Merged into the mainline of Neutron https://github.com/openstack/neutron
 
 
 
== Configuration ==
 
=== Havana & Icehouse ===
 
==== neutron.conf ====
 
* '''core_plugin''':  Needs to be configured to <code>neutron.plugins.nec.nec_plugin.NECPluginV2</code> to use NEC OpenFlow plugin as core plugin.
 
** <code>core_plugin = neutron.plugins.nec.nec_plugin.NECPluginV2</code>
 
* '''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 particular configurations to NEC [[OpenFlow]] plugin. We describe '''[OFC]''' section first and then describe other sections.
 
 
 
===== [OFC] section =====
 
* North-bound REST API of OpenFlow controller
 
** '''host''': Host IP address of OpenFlow Controller where its north-bound REST API is listening to. Example: <code> 127.0.0.1</code>
 
** '''port''': Port number of OpenFlow Controller where its north0bound REST API is listening to. Example: <code>8888</code>
 
** '''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 <code>trema</code>.
 
*** NEC ProgrammableFlow OpenFlow controller
 
**** '''pfc''' : Alias for the latest ProgrammableFlow release. '''pfc_v51''' in Icehouse, '''pfc_v5''' in Havana.
 
**** '''pfc_v51''' : ProgrammableFlow Controller V5.1. Supported in Icehouse (or NEC customized version of Havana Neutron https://github.com/nec-openstack/neutron/tree/havana-nec).
 
**** '''pfc_v5''' : ProgrammableFlow Controller V5.0. Supported in Havana or later.
 
**** '''pfc_v4''' : ProgrammableFlow Controller V4.0.
 
**** '''pfc_v3''' : ProgrammableFlow Controller V3.0.
 
*** Trema Sliceable Switch
 
**** '''trema''': Trema Slieable 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.
 
** '''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 <code>true</code>.
 
** '''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: <code>false</code>): 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: <code>false</code>): Disable SSL certificate verification. (Since Icehouse)
 
 
 
===== [ovs] section =====
 
* '''integration_bridge''' (default: <code>br-int</code>) : 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 <code>sudo /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf</code>
 
* '''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 <code>neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver</code>
 
* '''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''' or '''openflow''' 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.
 
<pre><nowiki>
 
interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
 
ovs_use_veth = True
 
</nowiki></pre>
 
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 ====
 
* Icehouse: no configuration specific to this plugin.
 
* '''Havana''': libvirt_vif_driver needs to be configured:
 
** <code>libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver</code>
 
 
 
=== Grizzly ===
 
  
In quantum.conf, `core_plugin` needs to be configured to use NEC OpenFlow plugin.
+
== Project Links ==
<pre><nowiki>
 
# Quantum plugin provider module
 
core_plugin = quantum.plugins.nec.nec_plugin.NECPluginV2
 
# Path to the extensions.
 
# It must be abosolute path (or relative path from the directory where quantum-server is invoked)
 
api_extensions_path = /opt/stack/quantum/quantum/plugins/nec/extensions/
 
</nowiki></pre>
 
  
* Plugin specific configurations /etc/quantum/plugins/nec/nec.ini . Section "[OFC]" is particular configurations to NEC [[OpenFlow]] plugin.
+
* Git: https://github.com/openstack/networking-nec
+
* Documentation: http://pythonhosted.org/networking-nec/
<pre><nowiki>
+
* Launchpad: https://launchpad.net/networking-nec
[OFC]
+
* PyPI: https://pypi.python.org/pypi/networking-nec
# OpenFlow Controller Host and Port to connect.
 
host = 127.0.0.1
 
port = 8888
 
# Drivers are in quantum/plugins/nec/drivers/ .
 
driver = trema
 
# PacketFilter is available when it's enabled in this configuration
 
# and supported by the driver.
 
enable_packet_filter = true
 
</nowiki></pre>
 
  
* quantum agent configuration : needs to use '''OVSInterfaceDriver''' to use DHCP agent (dhcp_agent.ini), L3 agent (l3_agent.ini), and LBaaS HAproxy agent (lbaas.ini).
+
== Introduction ==
 
<pre><nowiki>
 
interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
 
ovs_use_veth = True
 
</nowiki></pre>
 
  
* nova.conf : same as OVS plugin
+
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:
 +
[http://www.necam.com/SDN/ NEC ProgrammableFlow Networking Controller] and
 +
[https://github.com/trema/apps/tree/master/sliceable_switch Trema Sliceable Switch].
 +
More detail is available in [https://github.com/openstack/networking-nec/blob/master/doc/source/readme.rst networking-nec repository].
  
<pre><nowiki>
+
== Using NEC OpenFlow plugin ==
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
 
</nowiki></pre>
 
  
== Related websites ==
+
* [http://pythonhosted.org/networking-nec/devstack.html] (with Kilo or later)
 +
* [http://pythonhosted.org/networking-nec/installation.html#manual-installation Manual installation]
 +
* [http://pythonhosted.org/networking-nec/settings.html Configuration Guide]
  
* Github repositories of NEC [[OpenStack]] team : https://github.com/nec-openstack/
+
----
* Trema - Full-Stack [[OpenFlow]] Framework in Ruby and C : https://github.com/trema/trema
 
* Trema Sliceable Switch : https://github.com/trema/apps/tree/master/sliceable_switch
 
  
(Contact: Ryota Mibu, Akihiro Motoki, NEC)
+
Note for Juno DevStack users:
 +
* Devstack support of NEC OpenFlow plugin is a part of the official devstack (http://github.com/openstack-dev/devstack) from Grizzly.
 +
* Detail instruction and sample devstack configuration examples (localrc) are available at https://github.com/nec-openstack/devstack-neutron-nec-openflow/wiki .
  
 
[[Category: Neutron]]
 
[[Category: Neutron]]

Latest revision as of 11:29, 26 December 2015

[Deprecation 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 Kilo development cycle, Neutron community decides to move vendor specific codes into separate repositories. NEC OpenFlow plugin is now available at https://git.openstack.org/openstack/networking-nec.

Project Links

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 Networking Controller and Trema Sliceable Switch. More detail is available in networking-nec repository.

Using NEC OpenFlow plugin


Note for Juno DevStack users: