<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ivar+Lazzaro</id>
		<title>OpenStack - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.openstack.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ivar+Lazzaro"/>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/wiki/Special:Contributions/Ivar_Lazzaro"/>
		<updated>2026-07-13T11:13:16Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.2</generator>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy/InstallDevstack&amp;diff=81858</id>
		<title>GroupBasedPolicy/InstallDevstack</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy/InstallDevstack&amp;diff=81858"/>
				<updated>2015-05-26T22:53:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: /* Configuring and testing External Connectivity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installing and Running GBP ==&lt;br /&gt;
The following are a set of instructions for installing and working with GBP:&lt;br /&gt;
&lt;br /&gt;
=== Devstack Installation ===&lt;br /&gt;
0. Install Ubuntu 14.04&lt;br /&gt;
&lt;br /&gt;
1. git clone http://github.com/group-policy/devstack -b kilo-gbp&lt;br /&gt;
&lt;br /&gt;
or for stable/juno use:&lt;br /&gt;
git clone http://github.com/group-policy/devstack -b stable/juno-gbp&lt;br /&gt;
&lt;br /&gt;
2. cd devstack&lt;br /&gt;
&lt;br /&gt;
3. ./stack.sh&lt;br /&gt;
&lt;br /&gt;
4. source openrc demo demo&lt;br /&gt;
&lt;br /&gt;
5. Use the &amp;quot;gbp&amp;quot; CLI binary (&amp;quot;gbp --help&amp;quot; will give you the commands)&lt;br /&gt;
&lt;br /&gt;
== GBP Basic CLI and Workflow ==&lt;br /&gt;
Example scenario: Modeling connectivity between Web and App Tiers using GBP:&lt;br /&gt;
&lt;br /&gt;
  # Create allow action that can used in several rules&lt;br /&gt;
  gbp policy-action-create allow --action-type allow&lt;br /&gt;
&lt;br /&gt;
  # Create ICMP rule&lt;br /&gt;
  gbp policy-classifier-create icmp-traffic --protocol icmp --direction bi&lt;br /&gt;
  gbp policy-rule-create ping-policy-rule --classifier icmp-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # Create SSH Rule (Optional)&lt;br /&gt;
  # gbp policy-classifier-create ssh-traffic --protocol tcp --port-range 22 --direction bi&lt;br /&gt;
  # gbp policy-rule-create ssh-policy-rule --classifier ssh-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # Create HTTP Rule&lt;br /&gt;
  gbp policy-classifier-create web-traffic --protocol tcp --port-range 80 --direction in&lt;br /&gt;
  gbp policy-rule-create web-policy-rule --classifier web-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # Create HTTPs Rule&lt;br /&gt;
  gbp policy-classifier-create secure-web-traffic --protocol tcp --port-range 443 --direction in&lt;br /&gt;
  gbp policy-rule-create secure-web-policy-rule --classifier secure-web-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # ICMP policy-rule-set&lt;br /&gt;
  gbp policy-rule-set-create icmp-policy-rule-set --policy-rules ping-policy-rule&lt;br /&gt;
&lt;br /&gt;
  # WEB policy-rule-set&lt;br /&gt;
  gbp policy-rule-set-create web-policy-rule-set --policy-rules web-policy-rule&lt;br /&gt;
&lt;br /&gt;
  # Policy Target Group (PTG) creation&lt;br /&gt;
  gbp group-create  web&lt;br /&gt;
  gbp group-create  client-1&lt;br /&gt;
  gbp group-create  client-2&lt;br /&gt;
&lt;br /&gt;
  # Policy Target creation and launching VMs&lt;br /&gt;
  WEB1=$(gbp policy-target-create web-ep-1 --policy-target-group web | awk &amp;quot;/port_id/ {print \$4}&amp;quot;)&lt;br /&gt;
  CLIENT1=$(gbp policy-target-create client-ep-1 --policy-target-group client-1 | awk &amp;quot;/port_id/ {print \$4}&amp;quot;)&lt;br /&gt;
  CLIENT2=$(gbp policy-target-create client-ep-2 --policy-target-group client-2 | awk &amp;quot;/port_id/ {print \$4}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  nova boot --flavor m1.nano --image cirros-0.3.2-x86_64-uec --nic port-id=$WEB1 web-vm-1&lt;br /&gt;
  nova boot --flavor m1.nano --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT1 client-vm-1&lt;br /&gt;
  nova boot --flavor m1.nano --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT2 client-vm-2&lt;br /&gt;
&lt;br /&gt;
  ####CHECKPOINT: No traffic flows&lt;br /&gt;
&lt;br /&gt;
  # policy-rule-set Association&lt;br /&gt;
  gbp group-update client-1 --consumed-policy-rule-sets &amp;quot;icmp-policy-rule-set=true,web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  gbp group-update client-2 --consumed-policy-rule-sets &amp;quot;icmp-policy-rule-set=true,web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  gbp group-update web --provided-policy-rule-sets &amp;quot;icmp-policy-rule-set=true,web-policy-rule-set=true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  ####CHECKPOINT: ICMP and HTTP work from app to web and vice versa&lt;br /&gt;
&lt;br /&gt;
  gbp policy-rule-set-update web-policy-rule-set --policy-rules &amp;quot;secure-web-policy-rule&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  ####CHECKPOINT: HTTP stops working for both the client PTGs, HTTPs is now enabled&lt;br /&gt;
&lt;br /&gt;
== Configuring and testing External Connectivity ==&lt;br /&gt;
Implicit workflow for RMD.&lt;br /&gt;
&lt;br /&gt;
  # ADMIN: create default external segment based on the name configured in &amp;quot;default_external_segment_name&amp;quot;&lt;br /&gt;
  # NOTE: in Juno, the RMD requires the Neutron external subnet to pre-exist.&lt;br /&gt;
  &lt;br /&gt;
  gbp external-segment-create default --subnet_id $EXT_SUB_ID --external-route destination=0.0.0.0/0,nexthop= --shared True&lt;br /&gt;
&lt;br /&gt;
  # USER (any tenant): create PTG with the normal workflow&lt;br /&gt;
  &lt;br /&gt;
  gbp group-create group-with-external-access&lt;br /&gt;
&lt;br /&gt;
  # Create external PTG (called External Policy)&lt;br /&gt;
  &lt;br /&gt;
  gbp external-policy-create [name]&lt;br /&gt;
&lt;br /&gt;
  # Provide and Consumes PRS on normal PTGs and EPs&lt;br /&gt;
  &lt;br /&gt;
  gbp group-update group-with-external-access --consumed-policy-rule-sets &amp;quot;web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  gbp external-policy-update [name] --provided_policy_rule_sets &amp;quot;web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  ###HTTP traffic is now enabled towards the external world&lt;br /&gt;
&lt;br /&gt;
Explicit Workflow (old non-external workflow still assumed implicit here):&lt;br /&gt;
&lt;br /&gt;
  # ADMIN: create non-default external segment for a given tenant (or shared)&lt;br /&gt;
  # NOTE: in Juno, the RMD requires the Neutron external subnet to pre-exist.&lt;br /&gt;
  &lt;br /&gt;
  EXT_SEG_ID=$(gbp external-segment-create [not-default-name] --subnet_id $EXT_SUB_ID --external-route destination=0.0.0.0/0,nexthop= --shared True | awk &amp;quot;/ id / {print \$4}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  # USER: create PTG with the normal workflow&lt;br /&gt;
  &lt;br /&gt;
  gbp group-create group-with-external-access&lt;br /&gt;
&lt;br /&gt;
  # Link the implicitly created L3P to the external segment&lt;br /&gt;
  &lt;br /&gt;
  gbp l3policy-update [l3-policy-id] --external-segment $EXT_SEG_ID=&lt;br /&gt;
&lt;br /&gt;
  # Create external PTG (called External Policy) linked to the External Segment&lt;br /&gt;
  &lt;br /&gt;
  gbp external-policy-create [name] --external-segments $EXT_SEG_ID&lt;br /&gt;
&lt;br /&gt;
  # Provide and Consumes PRS on normal PTGs and EPs&lt;br /&gt;
  &lt;br /&gt;
  gbp group-update group-with-external-access --consumed-policy-rule-sets &amp;quot;web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  gbp external-policy-update [name] --provided_policy_rule_sets &amp;quot;web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  ###HTTP traffic is now enabled towards the external world&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy&amp;diff=76387</id>
		<title>GroupBasedPolicy</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy&amp;diff=76387"/>
				<updated>2015-03-26T18:12:38Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  ** GBP Juno Release is now available, see below for details **&lt;br /&gt;
== Overview ==&lt;br /&gt;
* The Group-based Policy (GBP) abstractions for OpenStack provide a intent-driven declarative policy model that presents simplified application-oriented interfaces to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Launchpad Project ====&lt;br /&gt;
* https://launchpad.net/group-based-policy&lt;br /&gt;
* Join [https://launchpad.net/~group-based-policy-contributors group-based-policy-contributors] for notifications on blueprints, bugs, and questions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documents ==&lt;br /&gt;
* [https://docs.google.com/a/noironetworks.com/presentation/d/1Nn1HjghAvk2RTPwvltSrnCUJkidWKWY2ckU7OYAVNpo/edit#slide=id.g1c910cf8b_038 The Group-based Policy Model]&lt;br /&gt;
* [https://wiki.openstack.org/w/images/a/aa/Group-BasedPolicyWhitePaper_v3.pdf White Paper]&lt;br /&gt;
* [https://docs.google.com/document/d/14UyvBkptmrxB9FsWEP8PEGv9kLqTQbsmlRxnqeF9Be8/edit#heading=h.hyj8vcqqd6ib A represenative Use Case]&lt;br /&gt;
* [https://docs.google.com/a/noironetworks.com/document/d/134P7TJdiIfjPWbmstSTY4vp9E6oRYTFs64ON3thFxhI/edit?usp=sharing Group-based Policy to Classical Neutron Mapping]&lt;br /&gt;
* [https://wiki.opendaylight.org/view/Project_Proposals:Application_Policy_Plugin ODL GBP]&lt;br /&gt;
* [https://wiki.openstack.org/wiki/Neutron/GroupPolicy/PolicyDrivers OpenDaylight/Vendor Drivers]&lt;br /&gt;
* Presentations&lt;br /&gt;
** [https://www.youtube.com/watch?v=7p5I6mnOCts Paris Summit Conference Talk (video)]&lt;br /&gt;
** [https://www.youtube.com/watch?v=a3Ur1IDyALA Paris Summit (video)]&lt;br /&gt;
&lt;br /&gt;
== Try Group-based Policy ==&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/InstallDevstack Instructions] for installing and running GBP with devstack&lt;br /&gt;
* [https://openstack.redhat.com/Neutron_GBP Instructions] for installing and running GBP with [https://openstack.redhat.com/Main_Page RDO] (currently on Fedora 20)&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/InstallUbuntu Instructions] for installing and running with GBP packages on Ubunutu 14.04 &lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/InstallODLIntegrationDevstack Instructions] for installing and running GBP/ODL integration, with devstack&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/InstallCiscoACI Instructions] for installing and running GBP with Cisco ACI&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/InstallNuage Instructions] for installing and running GBP with Nuage VSP&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/InstallOneConvergence Instructions] for installing and running GBP with One Convergence NVSD Controller&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GBP Juno Release ==&lt;br /&gt;
&lt;br /&gt;
* [https://launchpad.net/group-based-policy/juno/2014.2 Package and Release Notes]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How to Participate ==&lt;br /&gt;
==== Development ====&lt;br /&gt;
* This work is currently being pursued in StackForge and Neutron&lt;br /&gt;
* [https://etherpad.openstack.org/p/kilo-gbp-plan Current Kilo priorities]&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/Testing Testing] &lt;br /&gt;
&lt;br /&gt;
===== StackForge =====&lt;br /&gt;
* Development in in StackForge spans multiple repositories, please click [https://wiki.openstack.org/wiki/GroupBasedPolicy/StackForge/repos this link] for more details.&lt;br /&gt;
&lt;br /&gt;
===== Neutron =====&lt;br /&gt;
* Please click [https://wiki.openstack.org/wiki/GroupBasedPolicy/Neutron this link] for more details&lt;br /&gt;
&lt;br /&gt;
===== Open Issues =====&lt;br /&gt;
* [https://bugs.launchpad.net/openstack/+bugs?field.searchtext=group_policy&amp;amp;search=Search&amp;amp;field.status%3Alist=NEW&amp;amp;field.status%3Alist=INCOMPLETE_WITH_RESPONSE&amp;amp;field.status%3Alist=INCOMPLETE_WITHOUT_RESPONSE&amp;amp;field.status%3Alist=CONFIRMED&amp;amp;field.status%3Alist=TRIAGED&amp;amp;field.status%3Alist=INPROGRESS&amp;amp;field.status%3Alist=FIXCOMMITTED&amp;amp;field.assignee=&amp;amp;field.bug_reporter=&amp;amp;field.omit_dupes=on&amp;amp;field.has_patch=&amp;amp;field.has_no_package= All open Group Policy bugs across the projects, pick one and start hacking!]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Meetings ====&lt;br /&gt;
* [https://wiki.openstack.org/wiki/Meetings/GroupBasedPolicy Weekly IRC meetings]&lt;br /&gt;
&lt;br /&gt;
==== IRC channel ====&lt;br /&gt;
* #openstack-gbp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Mailing List discussions ====&lt;br /&gt;
* Send emails to the OpenStack Development Mailing List &amp;lt;openstack-dev@lists.openstack.org&amp;gt;. Please use [Policy][Group-based-policy] in the subject line of your email when possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GBP Cross Project Liaisons ==&lt;br /&gt;
&lt;br /&gt;
* Keystone - Rukhsana Ansari (ransari)&lt;br /&gt;
* Nova - Robert Kukura (rkukura)&lt;br /&gt;
* Oslo - Robert Kukura (rkukura)&lt;br /&gt;
&lt;br /&gt;
== Project Stats and Elections ==&lt;br /&gt;
&lt;br /&gt;
* [http://stackalytics.com/?project_type=stackforge&amp;amp;module=group-based-policy-group&amp;amp;metric=commits&amp;amp;release=all Stackalytics]&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/PTL_Elections_Kilo_Liberty GBP PTL Elections]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Team Activities ==&lt;br /&gt;
* Vancouver Summit Accepted Talks&lt;br /&gt;
** [https://openstacksummitmay2015vancouver.sched.org/event/fe712eb5f27186ffd64ed787244af4f3 Group Based Policy Hands-on Lab]&lt;br /&gt;
* Vancouver Summit Proposed Talks&lt;br /&gt;
** [https://www.openstack.org/vote-vancouver/presentation/panel-defining-policy-frameworks-for-openstack Panel: Defining Policy Frameworks for OpenStack]&lt;br /&gt;
** [http://www.openstack.org/vote-vancouver/presentation/meta-data-driven-cloud-running-openstack-scale-using-a-policy-framework-intel Meta-data Driven Cloud – Running OpenStack @ Scale Using a Policy Framework (Intel)]&lt;br /&gt;
** [https://www.openstack.org/vote-vancouver/presentation/group-based-policy-hands-on-lab Group Based Policy Hands-on Lab]&lt;br /&gt;
** [https://www.openstack.org/vote-vancouver/presentation/integrating-openstack-group-based-policy-with-opendaylight-group-based-policy Integrating OpenDayLight with OpenStack via Group-based Policy]&lt;br /&gt;
* [https://wiki.openstack.org/wiki/GroupBasedPolicy/kilo-bug-squash Kilo Bug Squash Day]&lt;br /&gt;
* [http://kilodesignsummit.sched.org/event/98dc4255384e340682137c8a7ee7e60d#.VEcllIt4r4x Kilo, Paris, Design Summit Session]&lt;br /&gt;
* [https://openstacksummitnovember2014paris.sched.org/event/3381db355f042c612c11960a588e31de Kilo, Paris, Conference Talk]&lt;br /&gt;
* [http://opennetworkingusergroup.com/group-based-policy-using-intent-to-manage-infrastructure/ ONUG]&lt;br /&gt;
* [https://wiki.openstack.org/wiki/Neutron/GroupPolicy/JunoCodeSprint Juno Code Sprint]&lt;br /&gt;
* [https://drive.google.com/file/d/0BzXAWQLtAkavWnpUU1pwWFBCRTA/edit Atlanta Summit Talk]&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy/ReleaseNotes/Juno&amp;diff=71228</id>
		<title>GroupBasedPolicy/ReleaseNotes/Juno</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy/ReleaseNotes/Juno&amp;diff=71228"/>
				<updated>2015-01-06T23:00:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Juno Release Notes ==&lt;br /&gt;
&lt;br /&gt;
This is the first OpenStack Group Based Policy release. The release comprises of our components/repositories (Service, Client, Heat automation, Horizon UI) and is designed to work&lt;br /&gt;
with OpenStack stable Juno. This release includes policy drivers for policy rendering using Neutron (with ML2 plugin and OVS driver), or OpenDaylight Controller. In addition, vendor-specifc policy drviers are for Cisco ACI, Nuage Virtual Services' Platform and One Convergence Network Virtualization and Service Delivery (NVSD) Controller.&lt;br /&gt;
&lt;br /&gt;
When using the Neutron Resource Mapping driver in this release:&lt;br /&gt;
* Overlapping IP addresses are supported across tenants but not within the same tenant&lt;br /&gt;
* Policy Target Group association for Policy Target is immutable&lt;br /&gt;
* L2 Policy association for Policy Target Group is immutable&lt;br /&gt;
* L3 Policy association for L2 Policy is immutable&lt;br /&gt;
* ip_pool for L3 Policy is immutable&lt;br /&gt;
* Policy Rule Sets cannot be shared&lt;br /&gt;
* External Policy cannot be shared&lt;br /&gt;
* L2 Policy can't be associated to a different tenant's L3 Policy even if shared&lt;br /&gt;
* Policy Target Group can't be associated to a different tenant's L2 Policy even if shared&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy/InstallDevstack&amp;diff=70209</id>
		<title>GroupBasedPolicy/InstallDevstack</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=GroupBasedPolicy/InstallDevstack&amp;diff=70209"/>
				<updated>2014-12-12T02:37:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installing and Running GBP ==&lt;br /&gt;
The following are a set of instructions for installing and working with GBP:&lt;br /&gt;
&lt;br /&gt;
=== Devstack Installation ===&lt;br /&gt;
0. Install Ubuntu 14.04&lt;br /&gt;
&lt;br /&gt;
1. git clone http://github.com/group-policy/devstack -b juno-gbp-3&lt;br /&gt;
&lt;br /&gt;
2. cd devstack&lt;br /&gt;
&lt;br /&gt;
3. ./stack.sh&lt;br /&gt;
&lt;br /&gt;
4. source openrc demo demo&lt;br /&gt;
&lt;br /&gt;
5. Use the &amp;quot;gbp&amp;quot; CLI binary (&amp;quot;gbp --help&amp;quot; will give you the commands)&lt;br /&gt;
&lt;br /&gt;
== GBP Basic CLI and Workflow ==&lt;br /&gt;
Example scenario: Modeling connectivity between Web and App Tiers using GBP:&lt;br /&gt;
&lt;br /&gt;
  # Create allow action that can used in several rules&lt;br /&gt;
  gbp policy-action-create allow --action-type allow&lt;br /&gt;
&lt;br /&gt;
  # Create ICMP rule&lt;br /&gt;
  gbp policy-classifier-create icmp-traffic --protocol icmp --direction bi&lt;br /&gt;
  gbp policy-rule-create ping-policy-rule --classifier icmp-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # Create SSH Rule (Optional)&lt;br /&gt;
  # gbp policy-classifier-create ssh-traffic --protocol tcp --port-range 22 --direction bi&lt;br /&gt;
  # gbp policy-rule-create ssh-policy-rule --classifier ssh-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # Create HTTP Rule&lt;br /&gt;
  gbp policy-classifier-create web-traffic --protocol tcp --port-range 80 --direction in&lt;br /&gt;
  gbp policy-rule-create web-policy-rule --classifier web-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # Create HTTPs Rule&lt;br /&gt;
  gbp policy-classifier-create secure-web-traffic --protocol tcp --port-range 443 --direction in&lt;br /&gt;
  gbp policy-rule-create secure-web-policy-rule --classifier secure-web-traffic --actions allow&lt;br /&gt;
&lt;br /&gt;
  # ICMP policy-rule-set&lt;br /&gt;
  gbp policy-rule-set-create icmp-policy-rule-set --policy-rules ping-policy-rule&lt;br /&gt;
&lt;br /&gt;
  # WEB policy-rule-set&lt;br /&gt;
  gbp policy-rule-set-create web-policy-rule-set --policy-rules web-policy-rule&lt;br /&gt;
&lt;br /&gt;
  # Policy Target Group creation&lt;br /&gt;
  gbp group-create  web&lt;br /&gt;
  gbp group-create  client-1&lt;br /&gt;
  gbp group-create  client-2&lt;br /&gt;
&lt;br /&gt;
  # Policy Target ceation and launching VMs&lt;br /&gt;
  WEB1=$(gbp policy-target-create web-ep-1 --policy-target-group web | awk &amp;quot;/port_id/ {print \$4}&amp;quot;)&lt;br /&gt;
  CLIENT1=$(gbp policy-target-create client-ep-1 --policy-target-group client-1 | awk &amp;quot;/port_id/ {print \$4}&amp;quot;)&lt;br /&gt;
  CLIENT2=$(gbp policy-target-create client-ep-2 --policy-target-group client-2 | awk &amp;quot;/port_id/ {print \$4}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  nova boot --flavor m1.nano --image cirros-0.3.2-x86_64-uec --nic port-id=$WEB1 web-vm-1&lt;br /&gt;
  nova boot --flavor m1.nano --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT1 client-vm-1&lt;br /&gt;
  nova boot --flavor m1.nano --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT2 client-vm-2&lt;br /&gt;
&lt;br /&gt;
  ####CHECKPOINT: No traffic flows&lt;br /&gt;
&lt;br /&gt;
  # policy-rule-set Association&lt;br /&gt;
  gbp group-update client-1 --consumed-policy-rule-sets &amp;quot;icmp-policy-rule-set=true,web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  gbp group-update client-2 --consumed-policy-rule-sets &amp;quot;icmp-policy-rule-set=true,web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  gbp group-update web --provided-policy-rule-sets &amp;quot;icmp-policy-rule-set=true,web-policy-rule-set=true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  ####CHECKPOINT: ICMP and HTTP work from app to web and vice versa&lt;br /&gt;
&lt;br /&gt;
  gbp policy-rule-set-update web-policy-rule-set --policy-rules &amp;quot;secure-web-policy-rule&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  ####CHECKPOINT: HTTP stops working for both the client EPGs, HTTPs is now enabled&lt;br /&gt;
&lt;br /&gt;
== Configuring and testing External Connecitiviy ==&lt;br /&gt;
Implicit workflow for RMD (high level constructs, CLI is not defined yet).&lt;br /&gt;
&lt;br /&gt;
  # ADMIN: create default external segment based on the name configured in &amp;quot;default_external_segment_name&amp;quot;&lt;br /&gt;
  # NOTE: in Juno, the RMD requires the Neutron external subnet to pre-exist.&lt;br /&gt;
  &lt;br /&gt;
  POST /grouppolicy/external_segments {&amp;quot;external_segment&amp;quot;: {&amp;quot;name&amp;quot;: &amp;lt;default-name&amp;gt;, &amp;quot;subnet_id&amp;quot;:&amp;lt;neutron-external-subnet-id&amp;gt;, external_routes: [{&amp;quot;destination&amp;quot;: &amp;quot;0.0.0.0/0&amp;quot;, &amp;quot;nexthop&amp;quot;:null }], &amp;quot;shared&amp;quot;:true}}&lt;br /&gt;
&lt;br /&gt;
  # USER (any tenant): create PTG with the normal workflow&lt;br /&gt;
  &lt;br /&gt;
  gbp group-create  group-with-external-access&lt;br /&gt;
&lt;br /&gt;
  # Create external PTG (called External Policy)&lt;br /&gt;
  &lt;br /&gt;
  POST /grouppolicy/external_policies {&amp;quot;external_policy&amp;quot;: {&amp;quot;name&amp;quot;: &amp;lt;choose-your-name&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
  # Provide and Consumes PRS on normal PTGs and EPs&lt;br /&gt;
  &lt;br /&gt;
  gbp group-update group-with-external-access --consumed-policy-rule-sets &amp;quot;web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  PUT /grouppolicy/external_policies {&amp;quot;external_policy&amp;quot;: {&amp;quot;provided_policy_target_groups&amp;quot;: {&amp;lt;web-policy-rule-set-id&amp;gt;: &amp;lt;scope&amp;gt;}}}&lt;br /&gt;
  &lt;br /&gt;
  ###HTTP traffic is now enabled towards the external world&lt;br /&gt;
&lt;br /&gt;
Explicit Workflow (old non-external workflow still assumed implicit here):&lt;br /&gt;
&lt;br /&gt;
  # ADMIN: create non-default external segment for a given tenant (or shared)&lt;br /&gt;
  # NOTE: in Juno, the RMD requires the Neutron external subnet to pre-exist.&lt;br /&gt;
  &lt;br /&gt;
  POST /grouppolicy/external_segments {&amp;quot;external_segment&amp;quot;: {&amp;quot;name&amp;quot;: &amp;lt;name&amp;gt;, &amp;quot;subnet_id&amp;quot;:&amp;lt;neutron-external-subnet-id&amp;gt;, external_routes: [{&amp;quot;destination&amp;quot;: &amp;quot;0.0.0.0/0&amp;quot;, &amp;quot;nexthop&amp;quot;:null }],   &amp;quot;shared&amp;quot;:true}}&lt;br /&gt;
&lt;br /&gt;
  # USER: create PTG with the normal workflow&lt;br /&gt;
  &lt;br /&gt;
  gbp group-create  group-with-external-access&lt;br /&gt;
&lt;br /&gt;
  # Link the implicitly created L3P to the external segment&lt;br /&gt;
  &lt;br /&gt;
  PUT /grouppolicy/l3_policy {&amp;quot;l3_policy&amp;quot;: {&amp;quot;external_segments&amp;quot;: {&amp;lt;es_id&amp;gt;: [&amp;lt;list_of_ips_or_none&amp;gt;]}}}&lt;br /&gt;
&lt;br /&gt;
  # Create external PTG (called External Policy) linked to the External Segment&lt;br /&gt;
  &lt;br /&gt;
  POST /grouppolicy/external_policies {&amp;quot;external_policy&amp;quot;: {&amp;quot;name&amp;quot;: &amp;lt;choose-your-name&amp;gt;}, &amp;quot;external_segments&amp;quot;: [&amp;lt;es_id&amp;gt;]}&lt;br /&gt;
&lt;br /&gt;
  # Provide and Consumes PRS on normal PTGs and EPs&lt;br /&gt;
  &lt;br /&gt;
  gbp group-update group-with-external-access --consumed-policy-rule-sets &amp;quot;web-policy-rule-set=true&amp;quot;&lt;br /&gt;
  PUT /grouppolicy/external_policies {&amp;quot;external_policy&amp;quot;: {&amp;quot;provided_policy_target_groups&amp;quot;: {&amp;lt;web-policy-rule-set-id&amp;gt;: &amp;lt;scope&amp;gt;}}}&lt;br /&gt;
  &lt;br /&gt;
  ###HTTP traffic is now enabled towards the external world&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron/AdvancedServices/JunoPlan&amp;diff=54397</id>
		<title>Neutron/AdvancedServices/JunoPlan</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron/AdvancedServices/JunoPlan&amp;diff=54397"/>
				<updated>2014-05-31T06:44:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: /* Reviewers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Reviewers ==&lt;br /&gt;
&lt;br /&gt;
Please add your name if you would like to be on the &amp;quot;assigned reviewers&amp;quot; team for Advanced Services:&lt;br /&gt;
&lt;br /&gt;
Ryan Moats (regXboi), Louis F (LouisF), Marios Andreou (marios), Bob Kukura (rkukura), Ivar Lazzaro (ivar-lazzaro)&lt;br /&gt;
&lt;br /&gt;
== Tasks ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Task !! Gerrit Link !! Status !! Milestone !! Owner&lt;br /&gt;
|-&lt;br /&gt;
! Topic: Framework&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint || https://review.openstack.org/#/c/92200 || Approved || Juno || Sumit&lt;br /&gt;
|-&lt;br /&gt;
! Topic: Neutron Flavor Framework&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint || https://review.openstack.org/#/c/90070 || Pending || Not set || Eugene&lt;br /&gt;
|-&lt;br /&gt;
| Neutron || Pending || Pending || Not set || Eugene&lt;br /&gt;
|-&lt;br /&gt;
| CLI/Client || Pending || Pending || Not set || Eugene&lt;br /&gt;
|-&lt;br /&gt;
| Tempest || Pending || Pending || Not set || Eugene&lt;br /&gt;
|-&lt;br /&gt;
| Horizon || Pending || Pending || Not set || Eugene&lt;br /&gt;
|-&lt;br /&gt;
| Heat || Pending || Pending || Not set || Eugene&lt;br /&gt;
|-&lt;br /&gt;
| Documentation || Pending || Pending || Not set || Eugene&lt;br /&gt;
|-&lt;br /&gt;
! Topic: Service Insertion&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint || https://review.openstack.org/#/c/93128 || Pending || J1 || Kanzhe&lt;br /&gt;
|-&lt;br /&gt;
| Neutron || Pending || Pending || J1 and J2 || Kanzhe&lt;br /&gt;
|-&lt;br /&gt;
| CLI/Client || Pending || Pending || J1 and J2 || Kanzhe&lt;br /&gt;
|-&lt;br /&gt;
| Tempest || Pending || Pending || J2 || Kanzhe&lt;br /&gt;
|-&lt;br /&gt;
| Horizon || Pending || Pending || J2 || Kanzhe&lt;br /&gt;
|-&lt;br /&gt;
| Heat || Pending || Pending || Not set || Kanzhe&lt;br /&gt;
|-&lt;br /&gt;
| Documentation || Pending || Pending || J2 || Kanzhe&lt;br /&gt;
|-&lt;br /&gt;
! Topic: Traffic Steering&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint || https://review.openstack.org/#/c/92477 || Pending || J1 || Carlos&lt;br /&gt;
|-&lt;br /&gt;
| Neutron || Pending || Pending || J2 || Carlos&lt;br /&gt;
|-&lt;br /&gt;
| CLI/Client || Pending || Pending || J2 || Carlos&lt;br /&gt;
|-&lt;br /&gt;
| DevStack || Pending || Pending || J2 || Carlos&lt;br /&gt;
|-&lt;br /&gt;
| Tempest || Pending || Pending || Not set || Carlos&lt;br /&gt;
|-&lt;br /&gt;
| Horizon || Pending || Pending || Not set || Carlos&lt;br /&gt;
|-&lt;br /&gt;
| Heat || Pending || Pending || Not set || Carlos&lt;br /&gt;
|-&lt;br /&gt;
| Documentation || Pending || Pending || Not set || Carlos&lt;br /&gt;
|-&lt;br /&gt;
! Topic: Service Chaining&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint || https://review.openstack.org/#/c/93524 || Pending || Not set || Mandeep&lt;br /&gt;
|-&lt;br /&gt;
| Neutron || Pending || Pending || Not set || Mandeep&lt;br /&gt;
|-&lt;br /&gt;
| CLI/Client || Pending || Pending || Not set || Mandeep&lt;br /&gt;
|-&lt;br /&gt;
| Tempest || Pending || Pending || Not set || Mandeep&lt;br /&gt;
|-&lt;br /&gt;
| Horizon || Pending || Pending || Not set || Mandeep&lt;br /&gt;
|-&lt;br /&gt;
| Heat || Pending || Pending || Not set || Mandeep&lt;br /&gt;
|-&lt;br /&gt;
| Documentation || Pending || Pending || Not set || Mandeep&lt;br /&gt;
|-&lt;br /&gt;
! Topic: L3 Agent consolidation&lt;br /&gt;
|-&lt;br /&gt;
| Blueprint || https://review.openstack.org/#/c/91532 || Pending || Not set || Toshihiro&lt;br /&gt;
|-&lt;br /&gt;
| Neutron || Pending || Pending || Not set || Toshihiro&lt;br /&gt;
|-&lt;br /&gt;
| CLI/Client || NA || NA || NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| Tempest || Pending || Pending || Not set || Toshihiro&lt;br /&gt;
|-&lt;br /&gt;
| Horizon || NA || NA || NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| Heat || NA || NA || NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| Documentation || Pending || Pending || Not set || Toshihiro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron&amp;diff=42392</id>
		<title>Neutron</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron&amp;diff=42392"/>
				<updated>2014-02-15T01:52:32Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= OpenStack Networking (&amp;quot;Neutron&amp;quot;) =&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|  [http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html Administrator Guide ]&lt;br /&gt;
|-&lt;br /&gt;
|  [http://docs.openstack.org/user-guide/content/neutron_client_sample_commands.html Neutron CLI Guide ]&lt;br /&gt;
|-&lt;br /&gt;
| [http://docs.openstack.org/api/openstack-network/2.0/content/  API Developer Doc (v2) ]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/openstack/quantum  Source code ]&lt;br /&gt;
|-&lt;br /&gt;
| [https://bugs.launchpad.net/quantum Bug tracker  ]&lt;br /&gt;
|-&lt;br /&gt;
| [https://blueprints.launchpad.net/quantum Blueprints ]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Related projects ==&lt;br /&gt;
* [https://launchpad.net/python-quantumclient Python Neutron client]&lt;br /&gt;
* Neutron Admin and API documentation in [https://launchpad.net/openstack-manuals  OpenStack Manuals]&lt;br /&gt;
* Tempest testing project [http://docs.openstack.org/developer/tempest/ Tempest Manuals]. For the Icehouse cycle, the community is undertaking a focused effort to strengthen the suite of Tempest tests for Neutron. If you are interested on contributing to this effort, please go to [https://etherpad.openstack.org/p/icehouse-summit-qa-neutron Icehouse Neutron Tempest push] to see what is being done and to [https://wiki.openstack.org/wiki/Neutron/TempestAPITests TempestAPITests] for HOWTO instructions. Helping to develop Tempest tests (particularly API tests) is an excellent way for new contributors to learn Neutron.&lt;br /&gt;
&lt;br /&gt;
== What is Neutron? ==&lt;br /&gt;
&lt;br /&gt;
Neutron is an [https://wiki.openstack.org OpenStack] project to provide &amp;quot;networking as a service&amp;quot; between interface devices (e.g., vNICs) managed by other Openstack services (e.g., nova).  &lt;br /&gt;
&lt;br /&gt;
Starting in the Folsom release, Neutron is a core and supported part of the [https://wiki.openstack.org OpenStack] platform (for Essex, we were an &amp;quot;incubated&amp;quot; project, which means use is suggested only for those who really know what they're doing with Neutron).  &lt;br /&gt;
&lt;br /&gt;
If you're a networking geek and like to hack on [https://wiki.openstack.org OpenStack], please join! &lt;br /&gt;
&lt;br /&gt;
More Info: &lt;br /&gt;
* [http://www.slideshare.net/danwent/openstack-quantum-intro-os-meetup-32612 Overview of Neutron] (slides) (3/12)&lt;br /&gt;
* [https://www.youtube.com/watch?v=_I1SrO2QBpg Neutron Project Overview + Update from Grizzly Summit] (video) (10/12) &lt;br /&gt;
* [http://www.infoq.com/presentations/Quantum-Virtual-Networks-for-OpenStack Video Neutron Overview] (3/12)&lt;br /&gt;
* [http://sdrv.ms/YdnQYS Slides on Technical Architecture of Neutron] (2013-03-14)&lt;br /&gt;
&lt;br /&gt;
== Why Neutron? ==&lt;br /&gt;
&lt;br /&gt;
* Give cloud tenants an API to build rich networking topologies, and configure advanced network policies in the cloud.  &lt;br /&gt;
** Example: create multi-tier web application topology&lt;br /&gt;
* Enable innovation plugins (open and closed source) that introduce advanced network capabilities&lt;br /&gt;
** Example:  use L2-in-L3 tunneling to avoid VLAN limits, provide end-to-end QoS guarantees, used monitoring protocols like [[NetFlow]]. &lt;br /&gt;
* Let anyone build advanced network services (open and closed source) that plug into Openstack tenant networks.  &lt;br /&gt;
** Examples:  LB-aaS, VPN-aaS, firewall-aaS, IDS-aaS, data-center-interconnect-aaS.&lt;br /&gt;
* Horizon GUI support for: &lt;br /&gt;
** Neutron L2 and L3 network and subnet creation/deletion&lt;br /&gt;
** Booting VMs on specific Neutron networks.  &lt;br /&gt;
* API Extensibility Framework, including extensions for: &lt;br /&gt;
** &amp;quot;provider network&amp;quot;, which maps Neutron L2 networks to a specific VLAN in the physical data center&lt;br /&gt;
&lt;br /&gt;
== Using Neutron ==&lt;br /&gt;
&lt;br /&gt;
Follow the instructions in the  [http://docs.openstack.org/admin-guide-cloud/content/ch_networking.html  Neutron Administrator Guide], or use the installation documentation at http://docs.openstack.org to use Neutron with OpenStack Nova.  &lt;br /&gt;
&lt;br /&gt;
Forget documentation, I just want to get the code!:  [https://launchpad.net/quantum/+download Neutron Downloads]&lt;br /&gt;
&lt;br /&gt;
Detailed information for programming against v2.0 of the Neutron web services API is available in the [http://docs.openstack.org/api/openstack-network/2.0/content/  Neutron API Guide]  &lt;br /&gt;
&lt;br /&gt;
If you are looking for information on using Neutron with devstack, please see: [[NeutronDevstack]] . &lt;br /&gt;
&lt;br /&gt;
Neutron lets you use a set of different backends called &amp;quot;plugins&amp;quot; that work with a growing variety of networking technologies.  These plugins may be distributed as part of the main Neutron release, or separately.  &lt;br /&gt;
&lt;br /&gt;
The set of plugins included in the main Neutron distribution and supported by the Neutron community include: &lt;br /&gt;
&lt;br /&gt;
* [http://www.openvswitch.org Open vSwitch] Plugin&lt;br /&gt;
* [http://wiki.openstack.org/cisco-quantum  Cisco UCS/Nexus] Plugin&lt;br /&gt;
* [http://wiki.openstack.org/Quantum-Linux-Bridge-Plugin  Linux Bridge] Plugin&lt;br /&gt;
* [http://wiki.openstack.org/Neutron/ML2  Modular Layer 2] Plugin&lt;br /&gt;
* [http://www.nicira.com  Nicira Network Virtualization Platform (NVP)] Plugin&lt;br /&gt;
* [http://www.osrg.net/ryu/using_with_openstack.html  Ryu OpenFlow Controller] Plugin&lt;br /&gt;
* [[Neutron/NEC OpenFlow Plugin|NEC OpenFlow]] Plugin &lt;br /&gt;
* [http://docs.projectfloodlight.org/display/floodlightcontroller/Quantum+REST+Proxy+Plugin  Big Switch Controller Plugin]&lt;br /&gt;
* [http://www.cloudbase.it/quantum-hyper-v-plugin/  Cloudbase Hyper-V] Plugin&lt;br /&gt;
* [http://www.midokura.com  MidoNet] Plugin&lt;br /&gt;
* [https://github.com/brocade/brocade  Brocade Neutron Plugin] Brocade Neutron Plugin&lt;br /&gt;
* [http://www.plumgrid.com/ PLUMgrid] Plugin&lt;br /&gt;
* [https://wiki.openstack.org/wiki/Mellanox-Neutron Mellanox Neutron Plugin] Mellanox Neutron Plugin&lt;br /&gt;
* [https://wiki.openstack.org/wiki/Neutron/EmbraneNeutronPlugin Embrane Neutron Plugin]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional plugins are available from other sources: &lt;br /&gt;
* [http://www.opencontrail.org OpenContrail] Plugin&lt;br /&gt;
* [http://www.extremenetworks.com  Extreme Networks] Plugin&lt;br /&gt;
* [https://github.com/ruijie/rgos_quantum_plugin  Ruijie Networks] Plugin&lt;br /&gt;
* [https://www.juniper.net/support/downloads/?p=qpluginopen#sw Juniper Networks] Neutron Plugin&lt;br /&gt;
If you have your own plugin, feel free to add it to this list.&lt;br /&gt;
&lt;br /&gt;
== Havana Release and ML2 Plugin Update ==&lt;br /&gt;
Starting with Havana release, openvswitch and linuxbridge plugins are deprecated. Modular Layer 2 (ML2) plugin replaces these plugins. &lt;br /&gt;
L2 agents work with ML2 plugin and continue to work with the deprecated monolithic plugins. &lt;br /&gt;
&lt;br /&gt;
ML2 plugin architecture facilitates the type drivers to support multiple networking technologies, and mechanism drivers to facilitate the access to the networking configuration in a transactional model. The details of these drivers is described [https://wiki.openstack.org/wiki/Neutron/ML2#ML2_Drivers here]. Long term goal is to transition all vendor specific plugins to the type and mechanism drivers. &lt;br /&gt;
&lt;br /&gt;
Following [https://wiki.openstack.org/wiki/Neutron/ML2#Type_Drivers Type Drivers] are supported: &lt;br /&gt;
* Flat&lt;br /&gt;
* Local&lt;br /&gt;
* VLAN&lt;br /&gt;
* GRE&lt;br /&gt;
* VxLan&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following Vendor specific [https://wiki.openstack.org/wiki/Neutron/ML2#Mechanism_Drivers Mechanism Drivers] are supported: &lt;br /&gt;
* [https://wiki.openstack.org/wiki/Arista-neutron-ml2-driver Arista Driver]&lt;br /&gt;
* [https://wiki.openstack.org/wiki/Neutron/ML2/MechCiscoNexus Cisco Nexus Driver]&lt;br /&gt;
* [https://wiki.openstack.org/wiki/Neutron/ML2/Tail-f-NCS-neutron-ml2-driver Tail-f NCS Driver]&lt;br /&gt;
&lt;br /&gt;
== Participate ==&lt;br /&gt;
&lt;br /&gt;
To get code, ask questions, view blueprints, etc, see: [https://launchpad.net/quantum/ Neutron Launchpad Page]&lt;br /&gt;
&lt;br /&gt;
See [[NeutronDevelopment]] for some (rough) guides on how to contribute code to Neutron, including how to add your own plugin.  &lt;br /&gt;
&lt;br /&gt;
If you would like to participate, please send mail to the main openstack-dev list:  http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev&lt;br /&gt;
&lt;br /&gt;
You can also attend our regular IRC meetings, which start one hour after the main openstack meeting, on the same #openstack-meeting channel: http://wiki.openstack.org/Network/Meetings&lt;br /&gt;
&lt;br /&gt;
Check out [[NeutronStarterBugs]] for ideas on easy bugs or starter projects you might tackle.  Or just start playing with [[NeutronDevstack]] and come up with your own ideas!&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
=== Neutron/* ===&lt;br /&gt;
{{Special:PrefixIndex/Neutron}}&lt;br /&gt;
&lt;br /&gt;
=== Network/* ===&lt;br /&gt;
{{Special:PrefixIndex/Network}}&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron_Plugins_and_Drivers&amp;diff=37052</id>
		<title>Neutron Plugins and Drivers</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron_Plugins_and_Drivers&amp;diff=37052"/>
				<updated>2013-12-02T22:36:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
Ensuring release quality through proper testing is an important tenant of the OpenStack community and Neutron team wants to do our part. We are introducing changes below provide more visibility into the quality and stability of vendor plugin and driver code.  The policies described here are in effect immediately.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
Code proposals for third party plugins have always presented a review challenge for the Neutron core team.  In the early days, code was often proposed by core project contributors and our review process only validated whether the requirements were met for community coding style and unit testing.  As Neutron has added new resources via extensions, it has become more difficult for Neutron reviewers to ensure the proposed code is functional.  Many of the plugins and/or drivers require proprietary hardware and/or software to conduct such testing.&lt;br /&gt;
&lt;br /&gt;
In addition to testing changes, the Neutron team is revising the requirements for the point of contact for third party code.  The changes bring the written expectations for contacts in line with current practice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Point of Contact Requirements ===&lt;br /&gt;
Each third party plugin and/or driver shall designate a point of contact for each coordinated release cycle.  The contact will serve as a liaison between the Neutron core team and the vendor or community supporting the plugin or driver.  The contact shall:&lt;br /&gt;
	- Attend weekly Neutron team IRC meetings&lt;br /&gt;
	- Be an active reviewer and contributor &lt;br /&gt;
	- Be an active participant on openstack-dev mailing list&lt;br /&gt;
	- Assist the core team with triaging bugs specific to the plugin and/or driver&lt;br /&gt;
	- Ensure OpenStack development deadlines are properly communicated back to their company and/or community&lt;br /&gt;
&lt;br /&gt;
NOTE: The this information can be maintained here: https://wiki.openstack.org/wiki/Neutron_Plugins_and_Drivers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Testing Requirements ===&lt;br /&gt;
To be designated as compatible, a third-party plugin and/or driver code must implement external third party testing.  The testing should be Tempest executed against a Devstack build with the proposed code changes.  The environment managed by the vendor should be configured to incorporate the plugin and/or driver solution.  The OpenStack Infrastructure team has provided details on how to integrate 3rd party testing at:&lt;br /&gt;
&lt;br /&gt;
http://ci.openstack.org/third_party.html&lt;br /&gt;
&lt;br /&gt;
and Tempest can be found at:&lt;br /&gt;
&lt;br /&gt;
https://github.com/openstack/tempest&lt;br /&gt;
&lt;br /&gt;
The Neutron team expects that the third party testing will provide a +/-1 verify vote for all changes to a plugin or driver’s code.  In addition, the Neutron team expects that the third party test will also vote on all code submissions by the jenkins user.  The jenkins user regularly submits requirements changes and the Neutron team hopes to catch any possible regressions as early as possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Existing Plugin and Drivers ===&lt;br /&gt;
Plugins and drivers currently in the Neutron project repository will be given a grace period until the Icehouse-2 milestone to implement external third party testing.  At that time, the Neutron team will release a list of the compatible plugins and drivers (i.e. those that meet the testing requirements).  Plugins and drivers that do not have external testing will be deprecated at the Icehouse release and will be candidates for removal when the J-release cycle opens.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Plugin/Driver Name !! Contact Name !! IRC Nick&lt;br /&gt;
|-&lt;br /&gt;
| ML2 || Neutron Team || rkukura&lt;br /&gt;
|-&lt;br /&gt;
| Big Switch/Floodlight || Sumit Naiksatam || snaiksat&lt;br /&gt;
|-&lt;br /&gt;
| Arista Networks || Sukhdev Kapur || Sukhdev&lt;br /&gt;
|-&lt;br /&gt;
| Embrane || Ivar Lazzaro || ivar-lazzaro&lt;br /&gt;
|-&lt;br /&gt;
| Place Holder || Person 1 Name || irc_nick&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron/LBaaS/EmbraneDriver&amp;diff=34266</id>
		<title>Neutron/LBaaS/EmbraneDriver</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron/LBaaS/EmbraneDriver&amp;diff=34266"/>
				<updated>2013-10-28T20:40:08Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Embrane [[Neutron]] LBaaS Driver =&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
&lt;br /&gt;
The present blueprint aims at the implementation of a Neutron LBaaS driver which allows users to provision heleos Load Balancers using Neutron LBaaS framework.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Cloud service providers who choose to adopt [[OpenStack]] and [[Neutron]] for their cloud orchestration, will also be able to provide load balancing through the Embrane heleos appliances still using the API and workflows they are comfortable with. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation==&lt;br /&gt;
&lt;br /&gt;
The new added files are the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/__init__.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/agent/__init__.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/config.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/constants.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/db.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/driver.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/models.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/poller.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Provisioning ===&lt;br /&gt;
&lt;br /&gt;
While using the Embrane Neutron LBaaS driver, any operation which doesn't involve an active VIP model object will be simply managed and written in the DB, without changing the current network state.&lt;br /&gt;
Whenever a VIP is associated to a pool, the heleos platform will create a Load Balancer appliance, taking care of establishing connectivity between it and the pool members, and configuring all the requested parameters.&lt;br /&gt;
&lt;br /&gt;
=== Using existing plugins for L2 connectivity ===&lt;br /&gt;
The Embrane LBaaS driver and the core L2 plugin share information about the network implementation, which will be used by heleos  to provide connectivity between the Load Balancer appliance and the existing pool members.&lt;br /&gt;
This can be done in 2 ways:&lt;br /&gt;
&lt;br /&gt;
'''Using [[Neutron/EmbraneNeutronPlugin|Embrane's L3 Neutron Plugin]]'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will automatically share the information with the Embrane's LBaaS driver, without any need for further configuration.&lt;br /&gt;
&lt;br /&gt;
'''Plugin Support'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the driver is used over any other core plugin implementation, the user shall configure &amp;quot;l2_support&amp;quot; from /etc/neutron/services/loadbalancer/embrane/heleos-conf.ini&lt;br /&gt;
An L2 support is a module which, given a core plugin, returns all the information about the specific network implementation (e.g. VLAN id).&lt;br /&gt;
A list of the available supports can be found in neutron/plugins/embrane/l2_base&amp;lt;br /&amp;gt;&lt;br /&gt;
At the time this wiki page was written, the support includes:&lt;br /&gt;
&lt;br /&gt;
*'''neutron.plugins.embrane.l2_base.openvswitch.openvswitch_support.OpenvswitchSupport'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''-Instructions to build a new L2 plugin Support-'''&lt;br /&gt;
	&lt;br /&gt;
see examples from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron.plugins.embrane.l2_base.openvswitch.openvswitch_support.OpenvswitchSupport&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To build a new L2 support for the Embrane's Neutron plugin, you must first implement the specific l2base.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a new package under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron.plugins.embrane.l2base&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And name it with the specific plugin technology. Create a python module, and a class which extends support_base.SupportBase, implementing all its abstract methods.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
@abstractmethod&lt;br /&gt;
def retrieve_utif_info(self, context, neutron_port=None, network=None):&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the contract is fulfilled configure /etc/neutron/services/loadbalancer/embrane/heleos-conf.ini as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[heleoslb]&lt;br /&gt;
l2_support=neutron.plugins.embrane.l2_base.new_vendor.new_module.NewClass&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asynchronous Calls===&lt;br /&gt;
&lt;br /&gt;
To  avoid too much wait time on long operations, the calls to the Embrane LBaaS driver will be executed asynchronously and by a different thread &amp;quot;per VIP&amp;quot;. &lt;br /&gt;
This means that each request will be sent to the dispatcher (' neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py') which will serve each Load Balancer using a different thread, &lt;br /&gt;
in which all the operations will be queued and executed sequentially, while the available database information on the specific resource will be returned to the user ([[Nova]] style). &lt;br /&gt;
Moreover, the LB models state attributes are used to tell the user when a lb is busy with an operation:&lt;br /&gt;
&lt;br /&gt;
'''Table 1. Status Values '''&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| '''Name''' &lt;br /&gt;
|-&lt;br /&gt;
| ACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_CREATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_UPDATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_DELETE &lt;br /&gt;
|-&lt;br /&gt;
| INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| ERROR &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So when the model is changed (via POST, PUT or DELETE for example) the call may return before the actual operation is executed on the virtual system, putting the vip and the related models &lt;br /&gt;
in a 'PENDING_*' state. Subsequent GET operations will eventually reflect the current status of the virtual appliance itself.&lt;br /&gt;
&lt;br /&gt;
=== State Synchronization ===&lt;br /&gt;
&lt;br /&gt;
To keep consistency between the heleos state and the Neutron state, a poller has been defined within:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/poller.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The poller has a configurable polling interval (default: 60 sec, 0 for no polling) and will make sure that the states between the two &amp;quot;worlds&amp;quot; are consistent&lt;br /&gt;
(some times fixing issues, some times just setting the actual state within the Neutron Model).&lt;br /&gt;
&lt;br /&gt;
This approach has been preferred instead of the &amp;quot;sync on GET&amp;quot; to avoid long waiting times on multiple GET operations. &lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
The configuration file is stored in '/etc/neutron/services/loadbalancer/embrane/heleos-conf.ini', this section explains the meaning of each field (example are provided in the configuration class itself).&lt;br /&gt;
*'''esm_mgmt''': management address of the ESM, the Embrane heleos module that is installed separately and which will actually provision the load balancers inside the cloud environment;&lt;br /&gt;
*'''admin_username''': admin username for authenticating against the ESM api;&lt;br /&gt;
*'''admin_password''': admin password for authenticating against the ESM api;&lt;br /&gt;
*'''lb_image''': ID of the heleos load balancer image stored inside the ESM;&lt;br /&gt;
*'''*_id''': a series of product specific resources that can be specified inside the plugin, or alternatively, from the product itself.&lt;br /&gt;
*'''l2_support''': mandatory when the core plugin is NOT Embrane's, is the path to the plugin support as explained in the sections above.&lt;br /&gt;
*'''sync_interval''': defines the polling interval for state synchronization, defaults to 60 seconds, set to 0 or less if no polling is required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;etc/neutron/neutron.conf example:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[DEFAULT]&lt;br /&gt;
...&lt;br /&gt;
service_plugins = neutron.services.loadbalancer.plugin.LoadBalancerPlugin&lt;br /&gt;
...&lt;br /&gt;
[service_providers]&lt;br /&gt;
...&lt;br /&gt;
service_provider=LOADBALANCER:Embrane:neutron.services.loadbalancer.drivers.embrane.driver.EmbraneLbaas:default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: Any mandatory parameter which is not overridden by this configuration file will be red from the existing Embrane's L3 plugin configuration files (if any).&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron/LBaaS/EmbraneDriver&amp;diff=34265</id>
		<title>Neutron/LBaaS/EmbraneDriver</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron/LBaaS/EmbraneDriver&amp;diff=34265"/>
				<updated>2013-10-28T20:38:42Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: This page covers Embrane's LBaaS Driver description and its implementation details.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Embrane [[Neutron]] LBaaS Driver =&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
&lt;br /&gt;
The present blueprint aims at the implementation of a Neutron LBaaS driver which allows users to provision heleos Load Balancers using Neutron LBaaS framework.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Cloud service providers who choose to adopt [[OpenStack]] and [[Neutron]] for their cloud orchestration, will also be able to provide load balancing through the Embrane heleos appliances still using the API and workflows they are comfortable with. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation==&lt;br /&gt;
&lt;br /&gt;
The new added files are the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/__init__.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/agent/__init__.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/agent/lb_operations.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/config.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/constants.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/db.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/driver.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/models.py&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/poller.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Provisioning ===&lt;br /&gt;
&lt;br /&gt;
While using the Embrane Neutron LBaaS driver, any operation which doesn't involve an active VIP model object will be simply managed and written in the DB, without changing the current network state.&lt;br /&gt;
Whenever a VIP is associated to a pool, the heleos platform will create a Load Balancer appliance, taking care of establishing connectivity between it and the pool members, and configuring all the requested parameters.&lt;br /&gt;
&lt;br /&gt;
=== Using existing plugins for L2 connectivity ===&lt;br /&gt;
The Embrane LBaaS driver and the core L2 plugin share information about the network implementation, which will be used by heleos  to provide connectivity between the Load Balancer appliance and the existing pool members.&lt;br /&gt;
This can be done in 2 ways:&lt;br /&gt;
&lt;br /&gt;
'''Using [[Neutron/EmbraneNeutronPlugin|Embrane's L3 Neutron Plugin]]'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will automatically share the information with the Embrane's LBaaS driver, without any need for further configuration.&lt;br /&gt;
&lt;br /&gt;
'''Plugin Support'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the driver is used over any other core plugin implementation, the user shall configure &amp;quot;l2_support&amp;quot; from /etc/neutron/services/loadbalancer/embrane/heleos-conf.ini&lt;br /&gt;
An L2 support is a module which, given a core plugin, returns all the information about the specific network implementation (e.g. VLAN id).&lt;br /&gt;
A list of the available supports can be found in neutron/plugins/embrane/l2_base&amp;lt;br /&amp;gt;&lt;br /&gt;
At the time this wiki page was written, the support includes:&lt;br /&gt;
&lt;br /&gt;
*'''neutron.plugins.embrane.l2_base.openvswitch.openvswitch_support.OpenvswitchSupport'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''-Instructions to build a new L2 plugin Support-'''&lt;br /&gt;
	&lt;br /&gt;
see examples from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron.plugins.embrane.l2_base.openvswitch.openvswitch_support.OpenvswitchSupport&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To build a new L2 support for the Embrane's Neutron plugin, you must first implement the specific l2base.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a new package under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron.plugins.embrane.l2base&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And name it with the specific plugin technology. Create a python module, and a class which extends support_base.SupportBase, implementing all its abstract methods.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
@abstractmethod&lt;br /&gt;
def retrieve_utif_info(self, context, neutron_port=None, network=None):&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the contract is fulfilled configure /etc/neutron/services/loadbalancer/embrane/heleos-conf.ini as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[heleoslb]&lt;br /&gt;
l2_support=neutron.plugins.embrane.l2_base.new_vendor.new_module.NewClass&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Asynchronous Calls===&lt;br /&gt;
&lt;br /&gt;
To  avoid too much wait time on long operations, the calls to the Embrane LBaaS driver will be executed asynchronously and by a different thread &amp;quot;per VIP&amp;quot;. &lt;br /&gt;
This means that each request will be sent to the dispatcher (' neutron/services/loadbalancer/drivers/embrane/agent/dispatcher.py') which will serve each Load Balancer using a different thread, &lt;br /&gt;
in which all the operations will be queued and executed sequentially, while the available database information on the specific resource will be returned to the user ([[Nova]] style). &lt;br /&gt;
Moreover, the LB models state attributes are used to tell the user when a lb is busy with an operation:&lt;br /&gt;
&lt;br /&gt;
'''Table 1. Status Values '''&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| '''Name''' &lt;br /&gt;
|-&lt;br /&gt;
| ACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_CREATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_UPDATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_DELETE &lt;br /&gt;
|-&lt;br /&gt;
| INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| ERROR &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So when the model is changed (via POST, PUT or DELETE for example) the call may return before the actual operation is executed on the virtual system, putting the vip and the related models &lt;br /&gt;
in a 'PENDING_*' state. Subsequent GET operations will eventually reflect the current status of the virtual appliance itself.&lt;br /&gt;
&lt;br /&gt;
=== State Synchronization ===&lt;br /&gt;
&lt;br /&gt;
To keep consistency between the heleos state and the Neutron state, a poller has been defined within:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 neutron/services/loadbalancer/drivers/embrane/poller.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The poller has a configurable polling interval (default: 60 sec, 0 for no polling) and will make sure that the states between the two &amp;quot;worlds&amp;quot; are consistent&lt;br /&gt;
(some times fixing issues, some times just setting the actual state within the Neutron Model).&lt;br /&gt;
&lt;br /&gt;
This approach has been preferred instead of the &amp;quot;sync on GET&amp;quot; to avoid long waiting times on multiple GET operations. &lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
The configuration file is stored in '/etc/neutron/services/loadbalancer/embrane/heleos-conf.ini', this section explains the meaning of each field (example are provided in the configuration class itself).&lt;br /&gt;
*'''esm_mgmt''': management address of the ESM, the Embrane heleos module that is installed separately and which will actually provision the routers inside the cloud environment;&lt;br /&gt;
*'''admin_username''': admin username for authenticating against the ESM api;&lt;br /&gt;
*'''admin_password''': admin password for authenticating against the ESM api;&lt;br /&gt;
*'''lb_image''': ID of the router image stored inside the ESM, which will be used to create the routers;&lt;br /&gt;
*'''*_id''': a series of product specific resources that can be specified inside the plugin, or alternatively, from the product itself.&lt;br /&gt;
*'''l2_support''': mandatory when the core plugin is NOT Embrane's, is the path to the plugin support as explained in the sections above.&lt;br /&gt;
*'''sync_interval''': defines the polling interval for state synchronization, defaults to 60 seconds, set to 0 or less if no polling is required.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;etc/neutron/neutron.conf example:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
[DEFAULT]&lt;br /&gt;
...&lt;br /&gt;
service_plugins = neutron.services.loadbalancer.plugin.LoadBalancerPlugin&lt;br /&gt;
...&lt;br /&gt;
[service_providers]&lt;br /&gt;
...&lt;br /&gt;
service_provider=LOADBALANCER:Embrane:neutron.services.loadbalancer.drivers.embrane.driver.EmbraneLbaas:default&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: Any mandatory parameter which is not overridden by this configuration file will be red from the existing Embrane's L3 plugin configuration files (if any).&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=29219</id>
		<title>Neutron/EmbraneNeutronPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=29219"/>
				<updated>2013-08-30T20:32:27Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Embrane [[Neutron]] Plugin =&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
&lt;br /&gt;
The present blueprint aims at the implementation of a Neutron plugins which allows users to interface Neutron with Embrane's heleos platform.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Cloud service providers who choose to adopt [[OpenStack]] and [[Neutron]] for their cloud orchestration, will also be able to use Embrane's heleos platform with the API and workflows set they are comfortable with. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the Embrane's plugin, the users can achieve any level of L2 isolation using the existing plugins (when supported), while leveraging L3 connectivity through Embrane's provisioning system, which can rapidly provide per tenant &amp;quot;core routers&amp;quot; in a pool of dedicated/shared physical hosts. These routers are configurable through both Neutron itself or their own REST APIs.&lt;br /&gt;
 &lt;br /&gt;
== Network Overview==&lt;br /&gt;
[TBD]&lt;br /&gt;
&lt;br /&gt;
== Implementation==&lt;br /&gt;
&lt;br /&gt;
This session discusses the plugin implementation, with special focus to the plugin specific features and configurations.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The plugin file list is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/EmbraneInit.py&lt;br /&gt;
neutron/plugins/embrane/__init__.py&lt;br /&gt;
neutron/plugins/embrane/agent/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/dispatcher.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/routerOperations.py	&lt;br /&gt;
neutron/plugins/embrane/l2base/__init__.py		&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/__init__.py&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_base.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_exceptions.py		&lt;br /&gt;
neutron/plugins/embrane/plugin.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally, more packages are defined:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/api/*	&lt;br /&gt;
neutron/plugins/embrane/embranerest/*	&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files inside these packages are backend-specific, and represent the set of tools used to interact with the Embrane's platform. They are a dependency for the plugin and may be distributed separately at first.&lt;br /&gt;
&lt;br /&gt;
===Supported feature===&lt;br /&gt;
The plugin supports the following features:&lt;br /&gt;
&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_router.html Router];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/extraroute-ext.html ExtraRoute];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_floatingip.html FloatingIp].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using existing plugins for L2 connectivity ===&lt;br /&gt;
The Embrane Neutron Plugin main goal is of course to interface OpenStack (specifically Neutron) with heleos, which provides L3-7 network services for cloud environments.&lt;br /&gt;
For this reason, the Embrane Plugin lends the leveraging of L2 connectivity to an existing Plugin chosen at configuration time. &lt;br /&gt;
The Embrane Plugin and the L2 plugin share information about the network implementation, which will be used to implement L3.&lt;br /&gt;
So any time a request is sent to Neutron, it will be directed to the Embrane Plugin if is part of the API set showed in the previous section, to the L2 plugin otherwise.&lt;br /&gt;
&lt;br /&gt;
To achieve this, there are 2 main techniques that have been used:&lt;br /&gt;
&lt;br /&gt;
'''Plugin Inheritance'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 'neutron/plugins/embrane/plugins/*' (where the actual plugins resides) each plugin class (i.e. EmbraneOvsPlugin) is created using the base Embrane plugin (neutron/plugins/embrane/plugin.py.EmbranePlugin) and the specific L2 plugin as bases. This will ensure, provided that everything is done correctly, that the L2 networks will be provided by an existing L2 plugin, while L3 connectivity will be managed by Embrane's plugin. More details on how to create a specific Embrane plugin are provided below.&lt;br /&gt;
&lt;br /&gt;
'''Plugin-in-Plugin'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to get all this to work, the 2 plugins (Embrane's and L2) need to share some information about the actual network implementation. At the present state, only plugins which implement network isolation through VLANs can be used together with Embrane's plugin. Support for different L2 isolation will be added in the future.&lt;br /&gt;
This &amp;quot;information sharing&amp;quot; is implemented through a plugin &amp;quot;inside the plugin&amp;quot;, which means that for each L2 plugin that is to be supported, it's mandatory to create a new package inside 'neutron/plugins/embrane/l2base/' and a class that inherits from 'neutron/plugins/embrane/l2base/support_base.py'.&lt;br /&gt;
This abstract class only defines one simple method, which shall be implemented by the support class in order to fulfill the contract.&lt;br /&gt;
&lt;br /&gt;
'''-Instructions to build a new Embrane plugin from a different base-'''&lt;br /&gt;
	&lt;br /&gt;
see examples from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron.plugins.embrane.plugins.embrane_fake_plugin.EmbraneFakePlugin&lt;br /&gt;
neutron.plugins.embrane.plugins.embrane_ovs_plugin.EmbraneOvsPlugin&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To build a new L2 support for the Embrane's Neutron plugin, you must first implement the specific l2base.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a new package under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron.plugins.embrane.l2base&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And name it with the specific plugin technology. Create a python module, and a class which extends support_base.SupportBase, implementing all its abstract methods.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
@abstractmethod&lt;br /&gt;
def retrieve_utif_info(self, context, neutron_port=None, network=None):&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of support class can be found in 'neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py'.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once the contract is fulfilled (see examples and comments in the code for more info) create a new module under:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron.plugins.embrane.plugins&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Named referencing the specific plugin technology (see existing examples). Inside the module define a class built as follows:&lt;br /&gt;
of the plugin following the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
class EmbraneNewPlugin(base.EmbranePlugin, l2.NewL2Plugin):&lt;br /&gt;
    _plugin_support = support.NewPluginSupport&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        '''First run plugin specific initialization, then Embrane's.'''&lt;br /&gt;
        self.supported_extension_aliases += [&amp;quot;extraroute&amp;quot;, &amp;quot;router&amp;quot;] #IF NEEDED&lt;br /&gt;
        l2.NewL2Plugin.__init__(self)&lt;br /&gt;
        self._run_embrane_config()&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: The base order is very important!!! EmbranePlugin shall always be the first base of the built plugin, so the L3 requests can be correctly resolved (MRO)&amp;lt;br /&amp;gt;&lt;br /&gt;
NOTE2: The plugin needs certain bases and extensions:&amp;lt;br /&amp;gt;&lt;br /&gt;
*REQUIRED_EXTENSIONS = [&amp;quot;extraroute&amp;quot;, &amp;quot;router&amp;quot;]&lt;br /&gt;
*REQUIRED_BASES = (ExtraRoute_db_mixin,)&lt;br /&gt;
Add them if needed (i.e. the L2 plugin doesn't natively support them).&lt;br /&gt;
&lt;br /&gt;
=== Asynchronous Calls===&lt;br /&gt;
&lt;br /&gt;
To  avoid too much wait time on long operations, the calls to the Embrane Plugin will be executed asynchronously and by a different thread &amp;quot;per Router&amp;quot;. This means that each request will be sent to the dispatcher ('neutron/plugins/embrane/agent/dispatcher.py') which will serve each Router using a different thread, in which all the operations will be queued and executed sequentially, while the available database information on the specific resource will be returned to the user ([[Nova]] style). Moreover, Router state attribute is used to tell the user when a Router is busy with an operation:&lt;br /&gt;
&lt;br /&gt;
'''Table 1. Status Values '''&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| '''Name''' &lt;br /&gt;
|-&lt;br /&gt;
| ACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_CREATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_UPDATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_DELETE &lt;br /&gt;
|-&lt;br /&gt;
| INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| ERROR &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So when the model is changed (via POST, PUT or DELETE for example) the call may return before the actual operation is executed on the virtual system, putting the router in a 'PENDING_*' state. Subsequent GETs shall always reflect the current status of the virtual appliance itself.&lt;br /&gt;
When a Router is in a given state, only a subset of operations can be executed on it.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
The configuration file is stored in 'etc/neutron/plugins/embrane/heleos_conf.ini', this section explains the meaning of each field (example are provided in the configuration class itself).&lt;br /&gt;
*'''esm_mgmt''': management address of the ESM, the Embrane module that is installed separately and which will actually provision the routers inside the cloud environent;&lt;br /&gt;
*'''admin_username''': admin username for authenticating against the ESM;&lt;br /&gt;
*'''admin_password''': admin password for authenticating against the ESM;&lt;br /&gt;
*'''router_image''': ID to the router image stored inside the ESM, which will be used to create the routers;&lt;br /&gt;
*'''*_id''': a series of resources product specific that can be specified inside the plugin, or alternatively, from the product itself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
etc/neutron/neutron.conf example:&amp;lt;br /&amp;gt;&lt;br /&gt;
*'''core_plugin =''' neutron.plugins.embrane.plugins.embrane_ovs_plugin.EmbraneOvsPlugin&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=27444</id>
		<title>Neutron/EmbraneNeutronPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=27444"/>
				<updated>2013-08-02T23:49:13Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: /* Implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Embrane [[Neutron]] Plugin =&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
&lt;br /&gt;
The present blueprint aims at the implementation of a Neutron plugins which allows users to interface Neutron with Embrane's heleos platform.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Cloud service providers who choose to adopt [[OpenStack]] and [[Neutron]] for their cloud orchestration, will also be able to use Embrane's heleos platform with the API and workflows set they are comfortable with. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the Embrane's plugin, the users can achieve any level of L2 isolation using the existing plugins (when supported), while leveraging L3 connectivity through Embrane's provisioning system, which can rapidly provide per tenant &amp;quot;core routers&amp;quot; in a pool of dedicated/shared physical hosts. These routers are configurable through both Neutron itself or their own REST APIs.&lt;br /&gt;
 &lt;br /&gt;
== Network Overview==&lt;br /&gt;
[TBD]&lt;br /&gt;
&lt;br /&gt;
== Implementation==&lt;br /&gt;
&lt;br /&gt;
This session discusses the plugin implementation, with special focus to the plugin specific features and configurations.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The plugin file list is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/EmbraneInit.py&lt;br /&gt;
neutron/plugins/embrane/__init__.py&lt;br /&gt;
neutron/plugins/embrane/agent/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/dispatcher.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/routerOperations.py	&lt;br /&gt;
neutron/plugins/embrane/l2base/__init__.py		&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/__init__.py&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_base.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_exceptions.py		&lt;br /&gt;
neutron/plugins/embrane/plugin.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally, more packages are defined:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/api/*	&lt;br /&gt;
neutron/plugins/embrane/embranerest/*	&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files inside these packages are backend-specific, and represent the set of tools used to interact with the Embrane's platform. They are a dependency for the plugin and may be distributed separately at first.&lt;br /&gt;
&lt;br /&gt;
===Supported feature===&lt;br /&gt;
The plugin supports the following features:&lt;br /&gt;
&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_router.html Router];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/extraroute-ext.html ExtraRoute];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_floatingip.html FloatingIp].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using existing plugins for L2 connectivity ===&lt;br /&gt;
The Embrane Neutron Plugin main goal is of course to interface OpenStack (specifically Neutron) with heleos, which provides L3-7 network services for cloud environments.&lt;br /&gt;
For this reason, the Embrane Plugin lends the leveraging of L2 connectivity to an existing Plugin chosen at configuration time. &lt;br /&gt;
The Embrane Plugin and the L2 plugin share information about the network implementation, which will be used to implement L3.&lt;br /&gt;
So any time a request is sent to Neutron, it will be directed to the Embrane Plugin if is part of the API set showed in the previous section, to the L2 plugin otherwise.&lt;br /&gt;
&lt;br /&gt;
To achieve this, there are 2 main techniques that have been used:&lt;br /&gt;
&lt;br /&gt;
'''Plugin Inheritance'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 'neutron/plugins/embrane/plugin.py' (plugin main module) the main class 'EmbranePlugin' is created at runtime starting from class '__EmbranePlugin'. This is done looking at the configuration file, assuring that the specified L2 plugin is a valid one, and creating a new class which attribute and methods (in general, the full dict) coincides with '__EmbranePlugin', but also inherits from the configured L2 plugin, from which 'EmbranePlugin' will get all the implemented methods overriding everything related with L3 connectivity.&lt;br /&gt;
Also, all the necessary inheritances are set unless already present on the base L2 plugin.&lt;br /&gt;
&lt;br /&gt;
'''Plugin-in-Plugin'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to get all this to work, the 2 plugins (Embrane's and L2) need to share some information about the actual network implementation. At the present state, only plugins which implements network isolation through VLANs can be used together with Embrane's plugin. Support for different L2 isolation will be added in the future.&lt;br /&gt;
This &amp;quot;information sharing&amp;quot; is implemented through a &amp;quot;Plugin inside the Plugin&amp;quot;, which means that for each L2 plugin that is to be supported, it's mandatory to create a new package inside 'neutron/plugins/embrane/l2base/' and a class that inherits from 'neutron/plugins/embrane/l2base/support_base.py'.&lt;br /&gt;
This abstract class only defines one simple method, which shall be implemented by the support class in order to fulfill the contract.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
@abstractmethod&lt;br /&gt;
def retrieve_utif_info(self, context, neutron_port=None, network=None):&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of support class can be found in 'neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py'.&lt;br /&gt;
&lt;br /&gt;
=== Asynchronous Calls===&lt;br /&gt;
&lt;br /&gt;
To  avoid too much wait time on long operations, the calls to the Embrane Plugin will be executed asynchronously and by a different thread &amp;quot;per Router&amp;quot;. This means that each request will be sent to the dispatcher ('neutron/plugins/embrane/agent/dispatcher.py') which will serve each Router using a different thread, in which all the operations will be queued and executed sequentially, while the available database information on the specific resource will be returned to the user ([[Nova]] style). Moreover, Router state attribute is used to tell the user when a Router is busy with an operation:&lt;br /&gt;
&lt;br /&gt;
'''Table 1. Status Values '''&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| '''Name''' &lt;br /&gt;
|-&lt;br /&gt;
| ACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_CREATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_UPDATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_DELETE &lt;br /&gt;
|-&lt;br /&gt;
| INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| ERROR &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So when the model is changed (via POST, PUT or DELETE for example) the call may return before the actual operation is executed on the virtual system, putting the router in a 'PENDING_*' state. Subsequent GETs shall always reflect the current status of the virtual appliance itself.&lt;br /&gt;
When a Router is in a given state, only a subset of operations can be executed on it.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
The configuration file is stored in 'etc/neutron/plugins/embrane/heleos_conf.ini', this section explains the meaning of each field (example are provided in the configuration class itself).&lt;br /&gt;
*'''l2_plugin''': path to one of the existing L2 plugins which will work together with the Embrane's plugin;&lt;br /&gt;
*'''l2_support''': path to one of the existing L2 support class (see the section above);&lt;br /&gt;
*'''esm_mgmt''': management address of the ESM, the Embrane module that is installed separately and which will actually provision the routers inside the cloud environent;&lt;br /&gt;
*'''admin_username''': admin username for authenticating against the ESM;&lt;br /&gt;
*'''admin_password''': admin password for authenticating against the ESM;&lt;br /&gt;
*'''router_image''': ID to the router image stored inside the ESM, which will be used to create the routers;&lt;br /&gt;
*'''*_id''': a series of resources product specific that can be specified inside the plugin, or alternatively, from the product itself.&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=27443</id>
		<title>Neutron/EmbraneNeutronPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=27443"/>
				<updated>2013-08-02T21:35:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: /* Network Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Embrane [[Neutron]] Plugin =&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
&lt;br /&gt;
The present blueprint aims at the implementation of a Neutron plugins which allows users to interface Neutron with Embrane's heleos platform.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Cloud service providers who choose to adopt [[OpenStack]] and [[Neutron]] for their cloud orchestration, will also be able to use Embrane's heleos platform with the API and workflows set they are comfortable with. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the Embrane's plugin, the users can achieve any level of L2 isolation using the existing plugins (when supported), while leveraging L3 connectivity through Embrane's provisioning system, which can rapidly provide per tenant &amp;quot;core routers&amp;quot; in a pool of dedicated/shared physical hosts. These routers are configurable through both Neutron itself or their own REST APIs.&lt;br /&gt;
 &lt;br /&gt;
== Network Overview==&lt;br /&gt;
[TBD]&lt;br /&gt;
&lt;br /&gt;
== Implementation==&lt;br /&gt;
&lt;br /&gt;
This session discusses the plugin implementation, with special focus to the plugin specific features and configurations.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The plugin file list is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/EmbraneInit.py&lt;br /&gt;
neutron/plugins/embrane/__init__.py&lt;br /&gt;
neutron/plugins/embrane/agent/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/dispatcher.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/routerOperations.py	&lt;br /&gt;
neutron/plugins/embrane/l2base/__init__.py		&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/__init__.py&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_base.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_exceptions.py		&lt;br /&gt;
neutron/plugins/embrane/plugin.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally, three more packages are defined:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/api/*&lt;br /&gt;
neutron/plugins/embrane/common/*	&lt;br /&gt;
neutron/plugins/embrane/embranerest/*	&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files inside these packages are backend-specific, and represent the set of tools used to interact with the Embrane's platform. They are a dependency for the plugin and may be distributed separately at first.&lt;br /&gt;
&lt;br /&gt;
===Supported feature===&lt;br /&gt;
The plugin supports the following features:&lt;br /&gt;
&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_router.html Router];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/extraroute-ext.html ExtraRoute];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_floatingip.html FloatingIp].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using existing plugins for L2 connectivity ===&lt;br /&gt;
The Embrane Neutron Plugin main goal is of course to interface OpenStack (specifically Neutron) with heleos, which provides L3-7 network services for cloud environments.&lt;br /&gt;
For this reason, the Embrane Plugin lends the leveraging of L2 connectivity to an existing Plugin chosen at configuration time. &lt;br /&gt;
The Embrane Plugin and the L2 plugin share information about the network implementation, which will be used to implement L3.&lt;br /&gt;
So any time a request is sent to Neutron, it will be directed to the Embrane Plugin if is part of the API set showed in the previous section, to the L2 plugin otherwise.&lt;br /&gt;
&lt;br /&gt;
To achieve this, there are 2 main techniques that have been used:&lt;br /&gt;
&lt;br /&gt;
'''Plugin Inheritance'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 'neutron/plugins/embrane/plugin.py' (plugin main module) the main class 'EmbranePlugin' is created at runtime starting from class '__EmbranePlugin'. This is done looking at the configuration file, assuring that the specified L2 plugin is a valid one, and creating a new class which attribute and methods (in general, the full dict) coincides with '__EmbranePlugin', but also inherits from the configured L2 plugin, from which 'EmbranePlugin' will get all the implemented methods overriding everything related with L3 connectivity.&lt;br /&gt;
Also, all the necessary inheritances are set unless already present on the base L2 plugin.&lt;br /&gt;
&lt;br /&gt;
'''Plugin-in-Plugin'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to get all this to work, the 2 plugins (Embrane's and L2) need to share some information about the actual network implementation. At the present state, only plugins which implements network isolation through VLANs can be used together with Embrane's plugin. Support for different L2 isolation will be added in the future.&lt;br /&gt;
This &amp;quot;information sharing&amp;quot; is implemented through a &amp;quot;Plugin inside the Plugin&amp;quot;, which means that for each L2 plugin that is to be supported, it's mandatory to create a new package inside 'neutron/plugins/embrane/l2base/' and a class that inherits from 'neutron/plugins/embrane/l2base/support_base.py'.&lt;br /&gt;
This abstract class only defines one simple method, which shall be implemented by the support class in order to fulfill the contract.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
@abstractmethod&lt;br /&gt;
def retrieve_utif_info(self, context, neutron_port=None, network=None):&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of support class can be found in 'neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py'.&lt;br /&gt;
&lt;br /&gt;
=== Asynchronous Calls===&lt;br /&gt;
&lt;br /&gt;
To  avoid too much wait time on long operations, the calls to the Embrane Plugin will be executed asynchronously and by a different thread &amp;quot;per Router&amp;quot;. This means that each request will be sent to the dispatcher ('neutron/plugins/embrane/agent/dispatcher.py') which will serve each Router using a different thread, in which all the operations will be queued and executed sequentially, while the available database information on the specific resource will be returned to the user ([[Nova]] style). Moreover, Router state attribute is used to tell the user when a Router is busy with an operation:&lt;br /&gt;
&lt;br /&gt;
'''Table 1. Status Values '''&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| '''Name''' &lt;br /&gt;
|-&lt;br /&gt;
| ACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_CREATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_UPDATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_DELETE &lt;br /&gt;
|-&lt;br /&gt;
| INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| ERROR &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So when the model is changed (via POST, PUT or DELETE for example) the call may return before the actual operation is executed on the virtual system, putting the router in a 'PENDING_*' state. Subsequent GETs shall always reflect the current status of the virtual appliance itself.&lt;br /&gt;
When a Router is in a given state, only a subset of operations can be executed on it.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
The configuration file is stored in 'etc/neutron/plugins/embrane/heleos_conf.ini', this section explains the meaning of each field (example are provided in the configuration class itself).&lt;br /&gt;
*'''l2_plugin''': path to one of the existing L2 plugins which will work together with the Embrane's plugin;&lt;br /&gt;
*'''l2_support''': path to one of the existing L2 support class (see the section above);&lt;br /&gt;
*'''esm_mgmt''': management address of the ESM, the Embrane module that is installed separately and which will actually provision the routers inside the cloud environent;&lt;br /&gt;
*'''admin_username''': admin username for authenticating against the ESM;&lt;br /&gt;
*'''admin_password''': admin password for authenticating against the ESM;&lt;br /&gt;
*'''router_image''': ID to the router image stored inside the ESM, which will be used to create the routers;&lt;br /&gt;
*'''*_id''': a series of resources product specific that can be specified inside the plugin, or alternatively, from the product itself.&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	<entry>
		<id>https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=27442</id>
		<title>Neutron/EmbraneNeutronPlugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.openstack.org/w/index.php?title=Neutron/EmbraneNeutronPlugin&amp;diff=27442"/>
				<updated>2013-08-02T21:34:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ivar Lazzaro: Created page with &amp;quot;= Embrane Neutron Plugin =  ==Scope==  The present blueprint aims at the implementation of a Neutron plugins which allows users to interface Neutron with Embrane's heleos ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Embrane [[Neutron]] Plugin =&lt;br /&gt;
&lt;br /&gt;
==Scope==&lt;br /&gt;
&lt;br /&gt;
The present blueprint aims at the implementation of a Neutron plugins which allows users to interface Neutron with Embrane's heleos platform.&lt;br /&gt;
&lt;br /&gt;
==Use Cases==&lt;br /&gt;
&lt;br /&gt;
Cloud service providers who choose to adopt [[OpenStack]] and [[Neutron]] for their cloud orchestration, will also be able to use Embrane's heleos platform with the API and workflows set they are comfortable with. &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using the Embrane's plugin, the users can achieve any level of L2 isolation using the existing plugins (when supported), while leveraging L3 connectivity through Embrane's provisioning system, which can rapidly provide per tenant &amp;quot;core routers&amp;quot; in a pool of dedicated/shared physical hosts. These routers are configurable through both Neutron itself or their own REST APIs.&lt;br /&gt;
 &lt;br /&gt;
== Network Overview==&lt;br /&gt;
&lt;br /&gt;
In order to work, the Embrane's Plugin requires Embrane's heleos platform to be in place.&lt;br /&gt;
The platform controller, called ESM, will use a pool of compute resources (which can be dedicated, or shared with the OpenStack environment) to provision virtual network services (in this specific case, routers).&lt;br /&gt;
&lt;br /&gt;
This means that, for example, every time a tenant requests a Router creation to the plugin, the latter will ask to the ESM to spawn a virtual network service inside the specific hardware pool, and to configure it as a Router.&lt;br /&gt;
Then the tenant may ask to attach a Router interface to an existing network; In this case the plugin will gather all the information needed about the specified L2 netwotk, and communicate them to the ESM which will make the structural and configuration changes on the Router accordingly (e.g. If a gateway interface is set in the router, the plugin will both ask to the ESM to place a new interface, and to the Router itself to configure the default gateway inside the specified subnet).&lt;br /&gt;
&lt;br /&gt;
== Implementation==&lt;br /&gt;
&lt;br /&gt;
This session discusses the plugin implementation, with special focus to the plugin specific features and configurations.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The plugin file list is the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/EmbraneInit.py&lt;br /&gt;
neutron/plugins/embrane/__init__.py&lt;br /&gt;
neutron/plugins/embrane/agent/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/dispatcher.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/__init__.py	&lt;br /&gt;
neutron/plugins/embrane/agent/operations/routerOperations.py	&lt;br /&gt;
neutron/plugins/embrane/l2base/__init__.py		&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/__init__.py&lt;br /&gt;
neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_base.py&lt;br /&gt;
neutron/plugins/embrane/l2base/support_exceptions.py		&lt;br /&gt;
neutron/plugins/embrane/plugin.py&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Additionally, three more packages are defined:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
neutron/plugins/embrane/api/*&lt;br /&gt;
neutron/plugins/embrane/common/*	&lt;br /&gt;
neutron/plugins/embrane/embranerest/*	&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The files inside these packages are backend-specific, and represent the set of tools used to interact with the Embrane's platform. They are a dependency for the plugin and may be distributed separately at first.&lt;br /&gt;
&lt;br /&gt;
===Supported feature===&lt;br /&gt;
The plugin supports the following features:&lt;br /&gt;
&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_router.html Router];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/extraroute-ext.html ExtraRoute];&lt;br /&gt;
*[http://docs.openstack.org/api/openstack-network/2.0/content/router_ext_ops_floatingip.html FloatingIp].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using existing plugins for L2 connectivity ===&lt;br /&gt;
The Embrane Neutron Plugin main goal is of course to interface OpenStack (specifically Neutron) with heleos, which provides L3-7 network services for cloud environments.&lt;br /&gt;
For this reason, the Embrane Plugin lends the leveraging of L2 connectivity to an existing Plugin chosen at configuration time. &lt;br /&gt;
The Embrane Plugin and the L2 plugin share information about the network implementation, which will be used to implement L3.&lt;br /&gt;
So any time a request is sent to Neutron, it will be directed to the Embrane Plugin if is part of the API set showed in the previous section, to the L2 plugin otherwise.&lt;br /&gt;
&lt;br /&gt;
To achieve this, there are 2 main techniques that have been used:&lt;br /&gt;
&lt;br /&gt;
'''Plugin Inheritance'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In 'neutron/plugins/embrane/plugin.py' (plugin main module) the main class 'EmbranePlugin' is created at runtime starting from class '__EmbranePlugin'. This is done looking at the configuration file, assuring that the specified L2 plugin is a valid one, and creating a new class which attribute and methods (in general, the full dict) coincides with '__EmbranePlugin', but also inherits from the configured L2 plugin, from which 'EmbranePlugin' will get all the implemented methods overriding everything related with L3 connectivity.&lt;br /&gt;
Also, all the necessary inheritances are set unless already present on the base L2 plugin.&lt;br /&gt;
&lt;br /&gt;
'''Plugin-in-Plugin'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to get all this to work, the 2 plugins (Embrane's and L2) need to share some information about the actual network implementation. At the present state, only plugins which implements network isolation through VLANs can be used together with Embrane's plugin. Support for different L2 isolation will be added in the future.&lt;br /&gt;
This &amp;quot;information sharing&amp;quot; is implemented through a &amp;quot;Plugin inside the Plugin&amp;quot;, which means that for each L2 plugin that is to be supported, it's mandatory to create a new package inside 'neutron/plugins/embrane/l2base/' and a class that inherits from 'neutron/plugins/embrane/l2base/support_base.py'.&lt;br /&gt;
This abstract class only defines one simple method, which shall be implemented by the support class in order to fulfill the contract.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;&lt;br /&gt;
@abstractmethod&lt;br /&gt;
def retrieve_utif_info(self, context, neutron_port=None, network=None):&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of support class can be found in 'neutron/plugins/embrane/l2base/openvswitch/openvswitch_support.py'.&lt;br /&gt;
&lt;br /&gt;
=== Asynchronous Calls===&lt;br /&gt;
&lt;br /&gt;
To  avoid too much wait time on long operations, the calls to the Embrane Plugin will be executed asynchronously and by a different thread &amp;quot;per Router&amp;quot;. This means that each request will be sent to the dispatcher ('neutron/plugins/embrane/agent/dispatcher.py') which will serve each Router using a different thread, in which all the operations will be queued and executed sequentially, while the available database information on the specific resource will be returned to the user ([[Nova]] style). Moreover, Router state attribute is used to tell the user when a Router is busy with an operation:&lt;br /&gt;
&lt;br /&gt;
'''Table 1. Status Values '''&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| '''Name''' &lt;br /&gt;
|-&lt;br /&gt;
| ACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_CREATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_UPDATE &lt;br /&gt;
|-&lt;br /&gt;
| PENDING_DELETE &lt;br /&gt;
|-&lt;br /&gt;
| INACTIVE &lt;br /&gt;
|-&lt;br /&gt;
| ERROR &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So when the model is changed (via POST, PUT or DELETE for example) the call may return before the actual operation is executed on the virtual system, putting the router in a 'PENDING_*' state. Subsequent GETs shall always reflect the current status of the virtual appliance itself.&lt;br /&gt;
When a Router is in a given state, only a subset of operations can be executed on it.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
The configuration file is stored in 'etc/neutron/plugins/embrane/heleos_conf.ini', this section explains the meaning of each field (example are provided in the configuration class itself).&lt;br /&gt;
*'''l2_plugin''': path to one of the existing L2 plugins which will work together with the Embrane's plugin;&lt;br /&gt;
*'''l2_support''': path to one of the existing L2 support class (see the section above);&lt;br /&gt;
*'''esm_mgmt''': management address of the ESM, the Embrane module that is installed separately and which will actually provision the routers inside the cloud environent;&lt;br /&gt;
*'''admin_username''': admin username for authenticating against the ESM;&lt;br /&gt;
*'''admin_password''': admin password for authenticating against the ESM;&lt;br /&gt;
*'''router_image''': ID to the router image stored inside the ESM, which will be used to create the routers;&lt;br /&gt;
*'''*_id''': a series of resources product specific that can be specified inside the plugin, or alternatively, from the product itself.&lt;/div&gt;</summary>
		<author><name>Ivar Lazzaro</name></author>	</entry>

	</feed>