You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mu...@apache.org on 2012/07/12 02:15:14 UTC

[1/3] git commit: Phase 1 of Nicira integration

Updated Branches:
  refs/heads/master 8b7b838c8 -> 79c7da07a


Phase 1 of Nicira integration


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/79c7da07
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/79c7da07
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/79c7da07

Branch: refs/heads/master
Commit: 79c7da07abd4294f150851aa0c2d06a28564c5a9
Parents: 8b7b838
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Wed Jul 11 16:14:28 2012 -0700
Committer: Murali Reddy <Mu...@citrix.com>
Committed: Wed Jul 11 17:16:06 2012 -0700

----------------------------------------------------------------------
 api/src/com/cloud/agent/api/to/NicTO.java          |   11 +
 .../com/cloud/agent/api/to/VirtualMachineTO.java   |   11 +
 api/src/com/cloud/api/ApiConstants.java            |    4 +
 api/src/com/cloud/host/Host.java                   |    3 +-
 api/src/com/cloud/network/Network.java             |    2 +
 api/src/com/cloud/network/Networks.java            |    1 +
 api/src/com/cloud/network/PhysicalNetwork.java     |    3 +-
 build/build-cloud-plugins.xml                      |   10 +-
 build/package.xml                                  |    1 +
 client/tomcatconf/components.xml.in                |    7 +-
 .../tomcatconf/nicira-nvp_commands.properties.in   |   12 +
 cloud.spec                                         |    1 +
 .../xen/resource/CitrixResourceBase.java           |   12 +-
 plugins/network-elements/nicira-nvp/.classpath     |   12 +
 plugins/network-elements/nicira-nvp/.project       |   17 +
 .../nicira-nvp/README.NiciraIntegration            |   68 ++
 plugins/network-elements/nicira-nvp/build.xml      |  129 ++++
 .../cloud/agent/api/CreateLogicalSwitchAnswer.java |   20 +
 .../agent/api/CreateLogicalSwitchCommand.java      |   38 ++
 .../agent/api/CreateLogicalSwitchPortAnswer.java   |   20 +
 .../agent/api/CreateLogicalSwitchPortCommand.java  |   42 ++
 .../cloud/agent/api/DeleteLogicalSwitchAnswer.java |   14 +
 .../agent/api/DeleteLogicalSwitchCommand.java      |   19 +
 .../agent/api/DeleteLogicalSwitchPortAnswer.java   |   14 +
 .../agent/api/DeleteLogicalSwitchPortCommand.java  |   25 +
 .../cloud/agent/api/StartupNiciraNvpCommand.java   |   11 +
 .../cloud/api/commands/AddNiciraNvpDeviceCmd.java  |  110 ++++
 .../api/commands/DeleteNiciraNvpDeviceCmd.java     |   76 +++
 .../commands/ListNiciraNvpDeviceNetworksCmd.java   |   85 +++
 .../api/commands/ListNiciraNvpDevicesCmd.java      |   90 +++
 .../api/response/NiciraNvpDeviceResponse.java      |   37 ++
 .../src/com/cloud/network/NiciraNvpDeviceVO.java   |   79 +++
 .../com/cloud/network/NiciraNvpNicMappingVO.java   |   65 ++
 .../src/com/cloud/network/dao/NiciraNvpDao.java    |   16 +
 .../com/cloud/network/dao/NiciraNvpDaoImpl.java    |   32 +
 .../cloud/network/dao/NiciraNvpNicMappingDao.java  |   13 +
 .../network/dao/NiciraNvpNicMappingDaoImpl.java    |   30 +
 .../cloud/network/element/NiciraNvpElement.java    |  502 +++++++++++++++
 .../network/element/NiciraNvpElementService.java   |   28 +
 .../network/guru/NiciraNvpGuestNetworkGuru.java    |  257 ++++++++
 .../src/com/cloud/network/nicira/Attachment.java   |   22 +
 .../com/cloud/network/nicira/LogicalSwitch.java    |   99 +++
 .../cloud/network/nicira/LogicalSwitchPort.java    |  118 ++++
 .../src/com/cloud/network/nicira/NiciraNvpApi.java |  413 ++++++++++++
 .../network/nicira/NiciraNvpApiException.java      |   20 +
 .../com/cloud/network/nicira/NiciraNvpList.java    |   25 +
 .../src/com/cloud/network/nicira/NiciraNvpTag.java |   47 ++
 .../cloud/network/nicira/TransportZoneBinding.java |   47 ++
 .../com/cloud/network/nicira/VifAttachment.java    |   43 ++
 .../cloud/network/resource/NiciraNvpResource.java  |  240 +++++++
 .../cloud/network/guru/OvsGuestNetworkGuru.java    |   28 +
 server/src/com/cloud/host/dao/HostDaoImpl.java     |    4 +-
 .../com/cloud/hypervisor/HypervisorGuruBase.java   |   15 +
 .../network/ExternalNetworkDeviceManager.java      |    2 +
 .../src/com/cloud/network/NetworkManagerImpl.java  |    5 +-
 .../network/guru/ExternalGuestNetworkGuru.java     |   30 +-
 .../com/cloud/network/guru/GuestNetworkGuru.java   |   53 ++-
 server/src/com/cloud/server/StatsCollector.java    |    1 +
 setup/db/create-schema.sql                         |   23 +
 ui/scripts/ui-custom/zoneWizard.js                 |   13 +-
 wscript_configure                                  |    2 +-
 61 files changed, 3155 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/api/src/com/cloud/agent/api/to/NicTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/NicTO.java b/api/src/com/cloud/agent/api/to/NicTO.java
index b65c61e..79a43d2 100644
--- a/api/src/com/cloud/agent/api/to/NicTO.java
+++ b/api/src/com/cloud/agent/api/to/NicTO.java
@@ -21,6 +21,7 @@ public class NicTO extends NetworkTO {
     Integer networkRateMbps;
     Integer networkRateMulticastMbps;
     boolean defaultNic;
+    String uuid;
 
     public NicTO() {
         super();
@@ -55,6 +56,16 @@ public class NicTO extends NetworkTO {
     }
     
     @Override
+    public String getUuid() {
+        return uuid;
+    }
+    
+    @Override
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+    
+    @Override
     public String toString() {
         return new StringBuilder("[Nic:").append(type).append("-").append(ip).append("-").append(broadcastUri).append("]").toString();
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
index 42d9162..a93c242 100644
--- a/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
+++ b/api/src/com/cloud/agent/api/to/VirtualMachineTO.java
@@ -42,6 +42,7 @@ public class VirtualMachineTO {
     String vncPassword;
     String vncAddr;
     Map<String, String> params;
+    String uuid;
 
     VolumeTO[] disks;
     NicTO[] nics;
@@ -208,4 +209,14 @@ public class VirtualMachineTO {
     public void setDetails(Map<String, String> params) {
     	this.params = params;
     }
+
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+    
+    
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/api/src/com/cloud/api/ApiConstants.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/ApiConstants.java b/api/src/com/cloud/api/ApiConstants.java
index 00ec392..e410576 100755
--- a/api/src/com/cloud/api/ApiConstants.java
+++ b/api/src/com/cloud/api/ApiConstants.java
@@ -361,6 +361,10 @@ public class ApiConstants {
     public static final String RESOURCE_IDS = "resourceids";
     public static final String RESOURCE_ID = "resourceid";
     public static final String CUSTOMER = "customer";
+    public static final String NICIRA_NVP_DEVICE_ID = "nvpdeviceid";
+    public static final String NICIRA_NVP_TRANSPORT_ZONE_UUID = "transportzoneuuid";
+    public static final String NICIRA_NVP_DEVICE_NAME = "niciradevicename";
+
     
     public enum HostDetails {
         all, capacity, events, stats, min;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/api/src/com/cloud/host/Host.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/host/Host.java b/api/src/com/cloud/host/Host.java
index 0c9d06d..1bac0d2 100755
--- a/api/src/com/cloud/host/Host.java
+++ b/api/src/com/cloud/host/Host.java
@@ -41,7 +41,8 @@ public interface Host extends StateObject<Status> {
 
         ExternalDhcp(false),
         SecondaryStorageVM(true),
-        LocalSecondaryStorage(false);
+        LocalSecondaryStorage(false),
+        L2Networking(false);
         boolean _virtual;
         private Type(boolean virtual) {
             _virtual = virtual;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/api/src/com/cloud/network/Network.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/Network.java b/api/src/com/cloud/network/Network.java
index 0443a0f..459b05b 100644
--- a/api/src/com/cloud/network/Network.java
+++ b/api/src/com/cloud/network/Network.java
@@ -52,6 +52,7 @@ public interface Network extends ControlledEntity {
         public static final Service StaticNat = new Service("StaticNat", Capability.ElasticIp);
         public static final Service PortForwarding = new Service("PortForwarding");
         public static final Service SecurityGroup = new Service("SecurityGroup");
+        public static final Service Connectivity = new Service("Connectivity");
 
         private String name;
         private Capability[] caps;
@@ -114,6 +115,7 @@ public interface Network extends ControlledEntity {
         public static final Provider ElasticLoadBalancerVm = new Provider("ElasticLoadBalancerVm", false);
         public static final Provider SecurityGroupProvider = new Provider("SecurityGroupProvider", false);
         public static final Provider None = new Provider("None", false);
+        public static final Provider NiciraNvp = new Provider("NiciraNvp", true);
 
         private String name;
         private boolean isExternal;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/api/src/com/cloud/network/Networks.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/Networks.java b/api/src/com/cloud/network/Networks.java
index 84135b8..b96eaa2 100755
--- a/api/src/com/cloud/network/Networks.java
+++ b/api/src/com/cloud/network/Networks.java
@@ -61,6 +61,7 @@ public class Networks {
         LinkLocal(null, null),
         Vnet("vnet", Long.class),
         Storage("storage", Integer.class),
+        Lswitch("lswitch", String.class),
         UnDecided(null, null);
 
         private String scheme;

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/api/src/com/cloud/network/PhysicalNetwork.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/PhysicalNetwork.java b/api/src/com/cloud/network/PhysicalNetwork.java
index e54fe00..be4b1d0 100644
--- a/api/src/com/cloud/network/PhysicalNetwork.java
+++ b/api/src/com/cloud/network/PhysicalNetwork.java
@@ -31,7 +31,8 @@ public interface PhysicalNetwork {
     public enum IsolationMethod {
         VLAN,
         L3,
-        GRE;
+        GRE,
+        STT;
     }
 
     public enum BroadcastDomainRange {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/build/build-cloud-plugins.xml
----------------------------------------------------------------------
diff --git a/build/build-cloud-plugins.xml b/build/build-cloud-plugins.xml
index 61b0e62..c16474d 100755
--- a/build/build-cloud-plugins.xml
+++ b/build/build-cloud-plugins.xml
@@ -279,8 +279,8 @@
 
   <!-- ===================== Network Elements ===================== -->
 
-  <target name="compile-network-elements" depends="compile-netscaler, compile-f5, compile-srx, compile-ovs, compile-elb" description="Compile all network elements"/>
-  <target name="build-network-elements" depends="build-netscaler, build-f5, build-srx, build-ovs, build-elb" description="build all network elements"/>
+  <target name="compile-network-elements" depends="compile-netscaler, compile-f5, compile-srx, compile-ovs, compile-elb, compile-nicira-nvp" description="Compile all network elements"/>
+  <target name="build-network-elements" depends="build-netscaler, build-f5, build-srx, build-ovs, build-elb, build-nicira-nvp" description="build all network elements"/>
  
   <target name="compile-netscaler" depends="-init, compile-server" description="Compile NetScaler plugin">
   	<ant antfile="${base.dir}/plugins/network-elements/netscaler/build.xml" target="build"/>
@@ -301,6 +301,12 @@
   	<ant antfile="${base.dir}/plugins/network-elements/ovs/build.xml" target="build"/>
   </target>
   <target name="build-ovs" depends="compile-ovs"/>
+    
+  <target name="compile-nicira-nvp" depends="-init, compile-server" description="Compile Nicira NVP plugin">
+      <ant antfile="${base.dir}/plugins/network-elements/nicira-nvp/build.xml" target="build"/>
+  </target>
+  <target name="build-nicira-nvp" depends="compile-nicira-nvp"/>
+    
 
   <target name="compile-elb" depends="-init, compile-server" description="Compile ELB plugin">
   	<ant antfile="${base.dir}/plugins/network-elements/elastic-loadbalancer/build.xml" target="build"/>

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/build/package.xml
----------------------------------------------------------------------
diff --git a/build/package.xml b/build/package.xml
index 2b5a74b..d61c698 100755
--- a/build/package.xml
+++ b/build/package.xml
@@ -225,6 +225,7 @@
         <include name="${core.jar}" />
         <include name="${api.jar}" />
         <include name="${vmware-base.jar}" />
+          <include name="${vmware.jar}" />
       </zipfileset>
       <zipfileset dir="${console-proxy.dist.dir}" filemode="555"/>
       <zipfileset dir="${scripts.dir}/storage/secondary" prefix="scripts/storage/secondary" filemode="555">

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/client/tomcatconf/components.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/components.xml.in b/client/tomcatconf/components.xml.in
index f36355d..16d7b19 100755
--- a/client/tomcatconf/components.xml.in
+++ b/client/tomcatconf/components.xml.in
@@ -70,7 +70,7 @@
                  However, above case barely happens.
             -->
 
-            <adapter name="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru"/>
+            <adapter name="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru"/>            
             <adapter name="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru"/>
             <adapter name="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru"/>
             <adapter name="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru"/>
@@ -78,6 +78,7 @@
             <adapter name="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru"/>
             <adapter name="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru"/>
             <adapter name="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru"/>
+            <adapter name="NiciraNvpGuestNetworkGuru" class="com.cloud.network.guru.NiciraNvpGuestNetworkGuru"/>
         </adapters>
         <adapters key="com.cloud.cluster.ClusterServiceAdapter">
             <adapter name="ClusterService" class="com.cloud.cluster.ClusterServiceServletAdapter"/>
@@ -142,6 +143,7 @@
             <adapter name="BareMetal" class="com.cloud.network.element.BareMetalElement"/>
             <adapter name="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement"/>
             <adapter name="CiscoNexus1000vVSM" class="com.cloud.network.element.CiscoNexusVSMElement"/>
+            <adapter name="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement"/>
         </adapters>
         <adapters key="com.cloud.cluster.agentlb.AgentLoadBalancerPlanner">
             <adapter name="ClusterBasedAgentLbPlanner" class="com.cloud.cluster.agentlb.ClusterBasedAgentLoadBalancerPlanner"/>
@@ -165,10 +167,13 @@
         <pluggableservice name="F5ExternalLoadBalancerElementService" key="com.cloud.network.element.F5ExternalLoadBalancerElementService" class="com.cloud.network.element.F5ExternalLoadBalancerElement"/>
         <pluggableservice name="JuniperSRXFirewallElementService" key="com.cloud.network.element.JuniperSRXFirewallElementService" class="com.cloud.network.element.JuniperSRXExternalFirewallElement"/>
         <pluggableservice name="CiscoNexusVSMElementService" key="com.coud.network.element.CiscoNexusVSMElementService" class="com.cloud.network.element.CiscoNexusVSMElement"/>
+        <pluggableservice name="NiciraNvpElementService" key="com.coud.network.element.NiciraNvpElementService" class="com.cloud.network.element.NiciraNvpElement"/>
         <dao name="NetScalerPodDao" class="com.cloud.network.dao.NetScalerPodDaoImpl" singleton="false"/>
         <dao name="CiscoNexusVSMDeviceDao" class="com.cloud.network.dao.CiscoNexusVSMDeviceDaoImpl" singleton="false"/>
         <dao name="OvsTunnelInterfaceDao" class="com.cloud.network.ovs.dao.OvsTunnelInterfaceDaoImpl" singleton="false"/>
         <dao name="OvsTunnelAccountDao" class="com.cloud.network.ovs.dao.OvsTunnelNetworkDaoImpl" singleton="false"/>
+        <dao name="NiciraNvpDao" class="com.cloud.network.dao.NiciraNvpDaoImpl" singleton="false"/>
+        <dao name="NiciraNvpNicMappingDao" class="com.cloud.network.dao.NiciraNvpNicMappingDaoImpl" singleton="false"/>
         <dao name="NetappPool" class="com.cloud.netapp.dao.PoolDaoImpl" singleton="false"/>
         <dao name="NetappVolume" class="com.cloud.netapp.dao.VolumeDaoImpl" singleton="false"/>
         <dao name="NetappLun" class="com.cloud.netapp.dao.LunDaoImpl" singleton="false"/>

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/client/tomcatconf/nicira-nvp_commands.properties.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/nicira-nvp_commands.properties.in b/client/tomcatconf/nicira-nvp_commands.properties.in
new file mode 100644
index 0000000..8e749d6
--- /dev/null
+++ b/client/tomcatconf/nicira-nvp_commands.properties.in
@@ -0,0 +1,12 @@
+### bitmap of permissions at the end of each classname, 1 = ADMIN, 2 = RESOURCE_DOMAIN_ADMIN, 4 = DOMAIN_ADMIN, 8 = USER
+### Please standardize naming conventions to camel-case (even for acronyms).
+
+#### nicira nvp commands
+
+addNiciraNvpDevice = com.cloud.api.commands.AddNiciraNvpDeviceCmd;1
+deleteNiciraNvpDevice = com.cloud.api.commands.DeleteNiciraNvpDeviceCmd;1
+listNiciraNvpDevices = com.cloud.api.commands.ListNiciraNvpDevicesCmd;1
+listNiciraNvpDeviceNetworks = com.cloud.api.commands.ListNiciraNvpDeviceNetworksCmd;1
+
+# Not implemented (yet)
+#configureNiciraNvpDevice = com.cloud.api.commands.ConfigureNiciraNvpDeviceCmd;1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/cloud.spec
----------------------------------------------------------------------
diff --git a/cloud.spec b/cloud.spec
index 773a729..7233f01 100644
--- a/cloud.spec
+++ b/cloud.spec
@@ -427,6 +427,7 @@ fi
 %{_javadir}/%{name}-user-authenticator-plaintext.jar
 %{_javadir}/%{name}-vmware.jar
 %{_javadir}/%{name}-xen.jar
+%{_javadir}/%{name}-plugin-nicira-nvp.jar
 %{_javadir}/%{name}-plugin-elb.jar
 %{_javadir}/%{name}-plugin-netapp.jar
 %config(noreplace) %{_sysconfdir}/%{name}/server/*

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index 496aeb3..c81d461 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -751,12 +751,17 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         		long vlan = Long.parseLong(broadcastUri.getHost());
         		return enableVlanNetwork(conn, vlan, network);
         	}
+        } else if (nic.getBroadcastType() == BroadcastDomainType.Lswitch) {
+            // Nicira Logical Switch
+            return network.getNetwork();
         }
 
         throw new CloudRuntimeException("Unable to support this type of network broadcast domain: " + nic.getBroadcastUri());
     }
 
     protected VIF createVif(Connection conn, String vmName, VM vm, NicTO nic) throws XmlRpcException, XenAPIException {
+        assert(nic.getUuid() != null) : "Nic should have a uuid value";
+        
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Creating VIF for " + vmName + " on nic " + nic);
         }
@@ -765,7 +770,12 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
         vifr.VM = vm;
         vifr.device = Integer.toString(nic.getDeviceId());
         vifr.MAC = nic.getMac();
-
+        
+        // Nicira needs these IDs to find the NIC 
+        vifr.otherConfig = new HashMap<String, String>();
+        vifr.otherConfig.put("nicira-iface-id", nic.getUuid());
+        vifr.otherConfig.put("nicira-vm-id", vm.getUuid(conn));
+        
         vifr.network = getNetwork(conn, nic);
 
         if (nic.getNetworkRateMbps() != null && nic.getNetworkRateMbps().intValue() != -1) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/.classpath
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/.classpath b/plugins/network-elements/nicira-nvp/.classpath
new file mode 100644
index 0000000..edbcfa2
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/.classpath
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+    <classpathentry kind="src" path="src"/>
+    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_31"/>
+    <classpathentry combineaccessrules="false" kind="src" path="/agent"/>
+    <classpathentry combineaccessrules="false" kind="src" path="/core"/>
+    <classpathentry combineaccessrules="false" kind="src" path="/deps"/>
+    <classpathentry combineaccessrules="false" kind="src" path="/server"/>
+    <classpathentry combineaccessrules="false" kind="src" path="/utils"/>
+    <classpathentry combineaccessrules="false" kind="src" path="/api"/>
+    <classpathentry kind="output" path="bin"/>
+</classpath>

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/.project
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/.project b/plugins/network-elements/nicira-nvp/.project
new file mode 100644
index 0000000..15d5c67
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+    <name>nicira-nvp</name>
+    <comment></comment>
+    <projects>
+    </projects>
+    <buildSpec>
+        <buildCommand>
+            <name>org.eclipse.jdt.core.javabuilder</name>
+            <arguments>
+            </arguments>
+        </buildCommand>
+    </buildSpec>
+    <natures>
+        <nature>org.eclipse.jdt.core.javanature</nature>
+    </natures>
+</projectDescription>

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/README.NiciraIntegration
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/README.NiciraIntegration b/plugins/network-elements/nicira-nvp/README.NiciraIntegration
new file mode 100644
index 0000000..4ab74cd
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/README.NiciraIntegration
@@ -0,0 +1,68 @@
+Nicira Network Virtualization Platform (NVP) integration code is contributed 
+by Nicira and Schuberg Philis and copyright is donated to the Apache Software
+Foundation.
+
+Authors
+    Somik Behera <sb...@nicira.com>
+    Hugo Trippaers <ht...@schubergphilis.com>
+    
+== New API Calls 
+
+The following API calls are added to CloudStack to support the integrations with
+the Nicira NVP platform. Please see the API documentation of CloudStack for 
+parameters and return values.
+
+ * addNiciraNvpDevice
+ * deleteNiciraNvpDevice        
+ * listNiciraNvpDevices
+ * listNiciraNvpDeviceNetworks
+
+== How to enable the Nicira NVP integration.
+
+When configuring a zone create a new physical network for "Guest" traffic and 
+select "STT" as the isolation type. Set the Xen traffic label for "Guest" 
+traffic to the label of the integration bridge (refer to the Nicira 
+Documentation for setting up the integration bridge). Note that this requires 
+all traffic types to have their traffic labels set.
+
+These steps are specified by the API calls as there is currently no GUI 
+available.
+
+1. addNetworkServiceProvider
+    name="NiciraNvp", physicalnetworkid=<see above>, 
+    servicelist="Connectivity"
+2. updateNetworkServiceProvider
+    id=<id from step1>, state="Enabled"
+3. addNiciraNvpDevice
+    physicalnetworkid=<see step 1>, 
+    hostname=<hostname or IP of the controller>
+    username=<admin username>
+    password=<admin password>
+    transportzoneuuid=<transport zone uuid>
+
+== How to use the Nicira integration
+
+When creating a guest network make sure it is created in the physical network 
+with the isolation type set to "STT". When the first virtual machine is 
+launched in this network the NiciraNvpNetworkGuru will configure a logical 
+switch on the NVP Controller. During the startup of a virtual machine the 
+NiciraNvpElement will create a logical port for any NICs in the guest networks
+and attach the port to the existing logical swith.
+
+== Debugging/Troubleshooting
+
+All elements created on the NVP controller have tags with the name of the 
+account, this can be used to search the items using the NVP manager. The NVP 
+uuid of the logical switch is also stored in the BroadcastUri of the 
+corresponding Guest network in an lswitch uri scheme. The CloudStack uuid of 
+the NIC is used to make the Vif attachement on the logical switchport.
+
+The following classes should be set to log level debug when troubleshooting.
+    com.cloud.network 
+        (Most NiciraNvp related objects live in this package and subpackages)
+    org.apache.commons.httpclient 
+        (used by NiciraNvpApi to make calls to the SDN Controller)
+    httpclient.wire
+        (wirelevel http tracing of httpclient)
+    
+Please report any findings to the developer mailing list.

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/build.xml
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/build.xml b/plugins/network-elements/nicira-nvp/build.xml
new file mode 100644
index 0000000..2d84c5c
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/build.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+
+<project name="Cloud Stack Nicira NVP network element" default="help" basedir=".">
+  <description>
+        Cloud Stack ant build file
+    </description>
+
+  <dirname property="nicira-nvp.base.dir" file="${ant.file.Cloud Stack Nicira NVP network element}/"/>
+  <!-- This directory must be set -->
+  <property name="top.dir" location="${nicira-nvp.base.dir}/../../.."/>
+  <property name="build.dir" location="${top.dir}/build"/>
+    
+    <echo message="build.dir=${build.dir}; top.dir=${top.dir}; nicira-nvp.base.dir=${nicira-nvp.base.dir}"/>
+
+  <!-- Import anything that the user wants to set-->
+  <!-- Import properties files and environment variables here -->
+
+  <property environment="env" />
+
+  <condition property="build-cloud.properties.file" value="${build.dir}/override/build-cloud.properties" else="${build.dir}/build-cloud.properties">
+    <available file="${build.dir}/override/build-cloud.properties" />
+  </condition>
+
+  <condition property="cloud.properties.file" value="${build.dir}/override/cloud.properties" else="${build.dir}/cloud.properties">
+    <available file="${build.dir}/override/cloud.properties" />
+  </condition>
+
+  <condition property="override.file" value="${build.dir}/override/replace.properties" else="${build.dir}/replace.properties">
+    <available file="${build.dir}/override/replace.properties" />
+  </condition>
+
+  <echo message="Using build parameters from ${build-cloud.properties.file}" />
+  <property file="${build-cloud.properties.file}" />
+
+  <echo message="Using company info from ${cloud.properties.file}" />
+  <property file="${cloud.properties.file}" />
+
+  <echo message="Using override file from ${override.file}" />
+  <property file="${override.file}" />
+
+  <property file="${build.dir}/build.number" />
+
+  <!-- In case these didn't get defined in the build-cloud.properties -->
+  <property name="branding.name" value="default" />
+  <property name="deprecation" value="off" />
+  <property name="target.compat.version" value="1.6" />
+  <property name="source.compat.version" value="1.6" />
+  <property name="debug" value="true" />
+  <property name="debuglevel" value="lines,source"/>
+
+  <echo message="target.dir=${target.dir}; top.dir=${top.dir}"/>
+  <!-- directories for build and distribution -->
+  <property name="target.dir" location="${top.dir}/target" />
+  <property name="classes.dir" location="${target.dir}/classes" />
+  <property name="jar.dir" location="${target.dir}/jar" />
+  <property name="dep.cache.dir" location="${target.dir}/dep-cache" />
+  <property name="build.log" location="${target.dir}/ant_verbose.txt" />
+
+  <property name="deps.dir" location="${top.dir}/deps" />
+  
+  <property name="cloud-plugin-nicira-nvp.jar" value="cloud-plugin-nicira-nvp.jar" />
+    
+  <import file="${build.dir}/build-common.xml"/>
+
+  <echo message="target.dir=${target.dir}; top.dir=${top.dir}"/>
+    
+  <!-- This section needs to be replaced by some kind of dependency library-->
+  <path id="deps.classpath">
+    <!--filelist files="${deps.classpath}" /-->
+    <fileset dir="${deps.dir}" erroronmissingdir="false">
+      <include name="*.jar" />
+    </fileset>
+  </path>
+    
+  <path id="cloudstack.classpath">
+      <fileset dir="${jar.dir}">
+        <include name="*.jar"/>
+    </fileset>
+  </path>
+    
+  <path id="nicira-nvp.classpath">
+    <path refid="deps.classpath"/>
+      <path refid="cloudstack.classpath"/>
+  </path>
+    
+  <!-- This section needs to be replaced by some kind of dependency library-->
+
+  <target name="deploy-nicira-nvp" >
+  </target>
+
+  <target name="init" description="Initialize binaries directory">
+      <mkdir dir="${classes.dir}/${cloud-plugin-nicira-nvp.jar}"/>
+      <mkdir dir="${jar.dir}"/>
+  </target>
+
+  <target name="compile-nicira-nvp" depends="init" description="Compile Nicira Nvp">
+    <compile-java jar.name="${cloud-plugin-nicira-nvp.jar}" top.dir="${nicira-nvp.base.dir}" classpath="nicira-nvp.classpath" />
+  </target>
+
+  <target name="clean-nicira-nvp">
+    <delete dir="${classes.dir}/${cloud-plugin-nicira-nvp.jar}"/>
+  </target>
+    
+  <target name="build" depends="compile-nicira-nvp"/>
+  <target name="clean" depends="clean-nicira-nvp"/>
+
+  <target name="help" description="help">
+    <echo level="info" message="This is the build file for Nicira Nvp"/>
+    <echo level="info" message="You can do a build by doing ant build or clean by doing ant clean" />
+  </target>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchAnswer.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchAnswer.java
new file mode 100644
index 0000000..c9a2f8c
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchAnswer.java
@@ -0,0 +1,20 @@
+package com.cloud.agent.api;
+
+public class CreateLogicalSwitchAnswer extends Answer {
+    private String _logicalSwitchUuid;
+
+    public CreateLogicalSwitchAnswer(Command command, boolean success,
+            String details, String logicalSwitchUuid) {
+        super(command, success, details);
+        this._logicalSwitchUuid = logicalSwitchUuid;
+    }
+    
+    public CreateLogicalSwitchAnswer(Command command, Exception e) {
+        super(command, e);
+    }
+
+    public String getLogicalSwitchUuid() {
+        return _logicalSwitchUuid;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchCommand.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchCommand.java
new file mode 100644
index 0000000..acc347d
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchCommand.java
@@ -0,0 +1,38 @@
+package com.cloud.agent.api;
+
+public class CreateLogicalSwitchCommand extends Command {
+    
+    private String _transportUuid;
+    private String _transportType;
+    private String _name;
+    private String _ownerName;
+
+    public CreateLogicalSwitchCommand(String transportUuid, String transportType, String name, String ownerName) {
+        this._transportUuid = transportUuid;
+        this._transportType = transportType;
+        this._name = name;
+        this._ownerName = ownerName;
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+
+    public String getTransportUuid() {
+        return _transportUuid;
+    }
+
+    public String getTransportType() {
+        return _transportType;
+    }
+
+    public String getName() {
+        return _name;
+    }
+
+    public String getOwnerName() {
+        return _ownerName;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortAnswer.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortAnswer.java
new file mode 100644
index 0000000..88522af
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortAnswer.java
@@ -0,0 +1,20 @@
+package com.cloud.agent.api;
+
+public class CreateLogicalSwitchPortAnswer extends Answer {
+    private String _logicalSwitchPortUuid;
+
+    public CreateLogicalSwitchPortAnswer(Command command, boolean success,
+            String details, String localSwitchPortUuid) {
+        super(command, success, details);
+        this._logicalSwitchPortUuid = localSwitchPortUuid;
+    }
+    
+    public String getLogicalSwitchPortUuid() {
+        return _logicalSwitchPortUuid;
+    }
+
+    public CreateLogicalSwitchPortAnswer(Command command, Exception e) {
+        super(command, e);
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortCommand.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortCommand.java
new file mode 100644
index 0000000..af6f529
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/CreateLogicalSwitchPortCommand.java
@@ -0,0 +1,42 @@
+package com.cloud.agent.api;
+
+public class CreateLogicalSwitchPortCommand extends Command {
+    private String _logicalSwitchUuid;
+    private String _attachmentUuid;
+    private String _ownerName;
+    private String _nicName;
+    
+    public CreateLogicalSwitchPortCommand(String logicalSwitchUuid, String attachmentUuid, String ownerName, String nicName) {
+        this._logicalSwitchUuid = logicalSwitchUuid;
+        this._attachmentUuid = attachmentUuid;
+        this._ownerName = ownerName;
+        this._nicName = nicName;
+    }
+    
+    
+    public String getLogicalSwitchUuid() {
+        return _logicalSwitchUuid;
+    }
+
+
+    public String getAttachmentUuid() {
+        return _attachmentUuid;
+    }
+
+
+    public String getOwnerName() {
+        return _ownerName;
+    }
+
+
+    public String getNicName() {
+        return _nicName;
+    }
+
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchAnswer.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchAnswer.java
new file mode 100644
index 0000000..cec44bc
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchAnswer.java
@@ -0,0 +1,14 @@
+package com.cloud.agent.api;
+
+public class DeleteLogicalSwitchAnswer extends Answer {
+
+    public DeleteLogicalSwitchAnswer(Command command, boolean success,
+            String details) {
+        super(command, success, details);
+    }
+
+    public DeleteLogicalSwitchAnswer(Command command, Exception e) {
+        super(command, e);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchCommand.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchCommand.java
new file mode 100644
index 0000000..04c7630
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchCommand.java
@@ -0,0 +1,19 @@
+package com.cloud.agent.api;
+
+public class DeleteLogicalSwitchCommand extends Command {
+    
+    private String _logicalSwitchUuid;
+    
+    public DeleteLogicalSwitchCommand(String logicalSwitchUuid) {
+        this._logicalSwitchUuid = logicalSwitchUuid;
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+
+    public String getLogicalSwitchUuid() {
+        return _logicalSwitchUuid;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortAnswer.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortAnswer.java
new file mode 100644
index 0000000..008d44c
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortAnswer.java
@@ -0,0 +1,14 @@
+package com.cloud.agent.api;
+
+public class DeleteLogicalSwitchPortAnswer extends Answer {
+
+    public DeleteLogicalSwitchPortAnswer(Command command, boolean success,
+            String details) {
+        super(command, success, details);
+    }
+
+    public DeleteLogicalSwitchPortAnswer(Command command, Exception e) {
+        super(command, e);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortCommand.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortCommand.java
new file mode 100644
index 0000000..b3a7d64
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/DeleteLogicalSwitchPortCommand.java
@@ -0,0 +1,25 @@
+package com.cloud.agent.api;
+
+public class DeleteLogicalSwitchPortCommand extends Command {
+    private String _logicalSwitchUuid;
+    private String _logicalSwithPortUuid;
+    
+    public DeleteLogicalSwitchPortCommand(String logicalSwitchUuid, String logicalSwitchPortUuid) {
+        this._logicalSwitchUuid = logicalSwitchUuid;
+        this._logicalSwithPortUuid = logicalSwitchPortUuid;
+    }
+    
+    public String getLogicalSwitchUuid() {
+        return _logicalSwitchUuid;
+    }
+    
+    public String getLogicalSwitchPortUuid() {
+        return _logicalSwithPortUuid;
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/StartupNiciraNvpCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/StartupNiciraNvpCommand.java b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/StartupNiciraNvpCommand.java
new file mode 100644
index 0000000..a57c2fd
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/agent/api/StartupNiciraNvpCommand.java
@@ -0,0 +1,11 @@
+package com.cloud.agent.api;
+
+import com.cloud.host.Host;
+
+public class StartupNiciraNvpCommand extends StartupCommand {
+
+    public StartupNiciraNvpCommand() {
+        super(Host.Type.L2Networking);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java
new file mode 100644
index 0000000..e32d7d2
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/AddNiciraNvpDeviceCmd.java
@@ -0,0 +1,110 @@
+package com.cloud.api.commands;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.api.BaseAsyncCmd;
+import com.cloud.api.BaseCmd;
+import com.cloud.api.IdentityMapper;
+import com.cloud.api.Implementation;
+import com.cloud.api.Parameter;
+import com.cloud.api.PlugService;
+import com.cloud.api.ServerApiException;
+import com.cloud.api.BaseCmd.CommandType;
+import com.cloud.api.response.NiciraNvpDeviceResponse;
+import com.cloud.event.EventTypes;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.NetworkRuleConflictException;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.ExternalLoadBalancerDeviceVO;
+import com.cloud.network.NiciraNvpDeviceVO;
+import com.cloud.network.element.NiciraNvpElementService;
+import com.cloud.user.UserContext;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+@Implementation(responseObject=NiciraNvpDeviceResponse.class, description="Adds a Nicira NVP device")
+public class AddNiciraNvpDeviceCmd extends BaseCmd {
+    private static final Logger s_logger = Logger.getLogger(AddNiciraNvpDeviceCmd.class.getName());
+    private static final String s_name = "addniciranvpdevice";
+    @PlugService NiciraNvpElementService _niciraNvpElementService;
+    
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @IdentityMapper(entityTableName="physical_network")
+    @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, required=true, description="the Physical Network ID")
+    private Long physicalNetworkId;
+
+    @Parameter(name=ApiConstants.HOST_NAME, type=CommandType.STRING, required = true, description="Hostname of ip address of the Nicira NVP Controller.")
+    private String host;
+
+    @Parameter(name=ApiConstants.USERNAME, type=CommandType.STRING, required = true, description="Credentials to access the Nicira Controller API")
+    private String username;
+    
+    @Parameter(name=ApiConstants.PASSWORD, type=CommandType.STRING, required = true, description="Credentials to access the Nicira Controller API")
+    private String password;
+    
+    @Parameter(name=ApiConstants.NICIRA_NVP_TRANSPORT_ZONE_UUID, type=CommandType.STRING, required = true, description="The Transportzone UUID configured on the Nicira Controller")
+    private String transportzoneuuid;
+    
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getPhysicalNetworkId() {
+        return physicalNetworkId;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+    
+    public String getTransportzoneUuid() {
+        return transportzoneuuid;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException {
+        try {
+            NiciraNvpDeviceVO niciraNvpDeviceVO = _niciraNvpElementService.addNiciraNvpDevice(this);
+            if (niciraNvpDeviceVO != null) {
+                NiciraNvpDeviceResponse response = _niciraNvpElementService.createNiciraNvpDeviceResponse(niciraNvpDeviceVO);
+                response.setObjectName("niciranvpdevice");
+                response.setResponseName(getCommandName());
+                this.setResponseObject(response);
+            } else {
+                throw new ServerApiException(BaseAsyncCmd.INTERNAL_ERROR, "Failed to add Nicira NVP device due to internal error.");
+            }
+        }  catch (InvalidParameterValueException invalidParamExcp) {
+            throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage());
+        } catch (CloudRuntimeException runtimeExcp) {
+            throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage());
+        }
+    }
+ 
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        return UserContext.current().getCaller().getId();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java
new file mode 100644
index 0000000..181a747
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/DeleteNiciraNvpDeviceCmd.java
@@ -0,0 +1,76 @@
+package com.cloud.api.commands;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.api.BaseCmd;
+import com.cloud.api.IdentityMapper;
+import com.cloud.api.Implementation;
+import com.cloud.api.Parameter;
+import com.cloud.api.PlugService;
+import com.cloud.api.ServerApiException;
+import com.cloud.api.response.SuccessResponse;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.element.NiciraNvpElementService;
+import com.cloud.user.UserContext;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+@Implementation(responseObject=SuccessResponse.class, description=" delete a nicira nvp device")
+public class DeleteNiciraNvpDeviceCmd extends BaseCmd {
+    private static final Logger s_logger = Logger.getLogger(DeleteNiciraNvpDeviceCmd.class.getName());
+    private static final String s_name = "addniciranvpdevice";
+    @PlugService NiciraNvpElementService _niciraNvpElementService;
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @IdentityMapper(entityTableName="external_nicira_nvp_devices")
+    @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.LONG, required=true, description="Nicira device ID")
+    private Long niciraNvpDeviceId;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getNiciraNvpDeviceId() {
+        return niciraNvpDeviceId;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException {
+        try {
+            boolean result = _niciraNvpElementService.deleteNiciraNvpDevice(this);
+            if (result) {
+                SuccessResponse response = new SuccessResponse(getCommandName());
+                response.setResponseName(getCommandName());
+                this.setResponseObject(response);
+            } else {
+                throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "Failed to delete Nicira device.");
+            }
+        }  catch (InvalidParameterValueException invalidParamExcp) {
+            throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage());
+        } catch (CloudRuntimeException runtimeExcp) {
+            throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage());
+        }
+    }
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        return UserContext.current().getCaller().getId();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java
new file mode 100644
index 0000000..b4c1f88
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDeviceNetworksCmd.java
@@ -0,0 +1,85 @@
+package com.cloud.api.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.api.BaseCmd;
+import com.cloud.api.BaseListCmd;
+import com.cloud.api.IdentityMapper;
+import com.cloud.api.Implementation;
+import com.cloud.api.Parameter;
+import com.cloud.api.PlugService;
+import com.cloud.api.ServerApiException;
+import com.cloud.api.BaseCmd.CommandType;
+import com.cloud.api.response.ListResponse;
+import com.cloud.api.response.NetworkResponse;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.NetworkRuleConflictException;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.element.NiciraNvpElementService;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+@Implementation(responseObject=NetworkResponse.class, description="lists network that are using a nicira nvp device")
+public class ListNiciraNvpDeviceNetworksCmd extends BaseListCmd {
+
+    public static final Logger s_logger = Logger.getLogger(ListNiciraNvpDeviceNetworksCmd.class.getName());
+    private static final String s_name = "listniciranvpdevicenetworks";
+    @PlugService NiciraNvpElementService _niciraNvpElementService;
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @IdentityMapper(entityTableName="external_nicira_nvp_devices")
+    @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.LONG, required = true, description="nicira nvp device ID")
+    private Long niciraNvpDeviceId;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getNiciraNvpDeviceId() {
+        return niciraNvpDeviceId;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException {
+        try {
+            List<? extends Network> networks  = _niciraNvpElementService.listNiciraNvpDeviceNetworks(this);
+            ListResponse<NetworkResponse> response = new ListResponse<NetworkResponse>();
+            List<NetworkResponse> networkResponses = new ArrayList<NetworkResponse>();
+
+            if (networks != null && !networks.isEmpty()) {
+                for (Network network : networks) {
+                    NetworkResponse networkResponse = _responseGenerator.createNetworkResponse(network);
+                    networkResponses.add(networkResponse);
+                }
+            }
+
+            response.setResponses(networkResponses);
+            response.setResponseName(getCommandName());
+            this.setResponseObject(response);
+        }  catch (InvalidParameterValueException invalidParamExcp) {
+            throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage());
+        } catch (CloudRuntimeException runtimeExcp) {
+            throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage());
+        }
+    }
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java
new file mode 100644
index 0000000..a521f0e
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/commands/ListNiciraNvpDevicesCmd.java
@@ -0,0 +1,90 @@
+package com.cloud.api.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.api.BaseCmd;
+import com.cloud.api.BaseListCmd;
+import com.cloud.api.IdentityMapper;
+import com.cloud.api.Implementation;
+import com.cloud.api.Parameter;
+import com.cloud.api.PlugService;
+import com.cloud.api.ServerApiException;
+import com.cloud.api.response.ListResponse;
+import com.cloud.api.response.NiciraNvpDeviceResponse;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.NiciraNvpDeviceVO;
+import com.cloud.network.element.NiciraNvpElementService;
+import com.cloud.utils.exception.CloudRuntimeException;
+
+@Implementation(responseObject=NiciraNvpDeviceResponse.class, description="Lists Nicira NVP devices")
+public class ListNiciraNvpDevicesCmd extends BaseListCmd {
+    private static final Logger s_logger = Logger.getLogger(ListNiciraNvpDevicesCmd.class.getName());
+    private static final String s_name = "listniciranvpdevices";
+    @PlugService NiciraNvpElementService _niciraNvpElementService;
+
+   /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @IdentityMapper(entityTableName="physical_network")
+    @Parameter(name=ApiConstants.PHYSICAL_NETWORK_ID, type=CommandType.LONG, description="the Physical Network ID")
+    private Long physicalNetworkId;
+
+    @IdentityMapper(entityTableName="external_nicira_nvp_devices")
+    @Parameter(name=ApiConstants.NICIRA_NVP_DEVICE_ID, type=CommandType.LONG,  description="nicira nvp device ID")
+    private Long niciraNvpDeviceId;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getNiciraNvpDeviceId() {
+        return niciraNvpDeviceId;
+    }
+
+    public Long getPhysicalNetworkId() {
+        return physicalNetworkId;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException {
+        try {
+            List<NiciraNvpDeviceVO> niciraDevices = _niciraNvpElementService.listNiciraNvpDevices(this);
+            ListResponse<NiciraNvpDeviceResponse> response = new ListResponse<NiciraNvpDeviceResponse>();
+            List<NiciraNvpDeviceResponse> niciraDevicesResponse = new ArrayList<NiciraNvpDeviceResponse>();
+
+            if (niciraDevices != null && !niciraDevices.isEmpty()) {
+                for (NiciraNvpDeviceVO niciraDeviceVO : niciraDevices) {
+                    NiciraNvpDeviceResponse niciraDeviceResponse = _niciraNvpElementService.createNiciraNvpDeviceResponse(niciraDeviceVO);
+                    niciraDevicesResponse.add(niciraDeviceResponse);
+                }
+            }
+
+            response.setResponses(niciraDevicesResponse);
+            response.setResponseName(getCommandName());
+            this.setResponseObject(response);
+        }  catch (InvalidParameterValueException invalidParamExcp) {
+            throw new ServerApiException(BaseCmd.PARAM_ERROR, invalidParamExcp.getMessage());
+        } catch (CloudRuntimeException runtimeExcp) {
+            throw new ServerApiException(BaseCmd.INTERNAL_ERROR, runtimeExcp.getMessage());
+        }
+    }
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java
new file mode 100644
index 0000000..e134bed
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/api/response/NiciraNvpDeviceResponse.java
@@ -0,0 +1,37 @@
+package com.cloud.api.response;
+
+import com.cloud.api.ApiConstants;
+import com.cloud.serializer.Param;
+import com.cloud.utils.IdentityProxy;
+import com.google.gson.annotations.SerializedName;
+
+public class NiciraNvpDeviceResponse extends BaseResponse {
+    @SerializedName(ApiConstants.NICIRA_NVP_DEVICE_ID) @Param(description="device id of the Nicire Nvp")
+    private IdentityProxy id = new IdentityProxy("external_nicira_nvp_devices");
+    
+    @SerializedName(ApiConstants.PHYSICAL_NETWORK_ID) @Param(description="the physical network to which this Nirica Nvp belongs to")
+    private IdentityProxy physicalNetworkId = new IdentityProxy("physical_network");
+    
+    @SerializedName(ApiConstants.PROVIDER) @Param(description="name of the provider")
+    private String providerName;
+    
+    @SerializedName(ApiConstants.NICIRA_NVP_DEVICE_NAME) @Param(description="device name")
+    private String deviceName;
+
+    public void setId(long nvpDeviceId) {
+        this.id.setValue(nvpDeviceId);
+    }
+
+    public void setPhysicalNetworkId(long physicalNetworkId) {
+        this.physicalNetworkId.setValue(physicalNetworkId);
+    }
+
+    public void setProviderName(String providerName) {
+        this.providerName = providerName;
+    }
+
+    public void setDeviceName(String deviceName) {
+        this.deviceName = deviceName;
+    }     
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java
new file mode 100644
index 0000000..550479b
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpDeviceVO.java
@@ -0,0 +1,79 @@
+package com.cloud.network;
+
+import java.util.UUID;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="external_nicira_nvp_devices")
+public class NiciraNvpDeviceVO {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+    
+    @Column(name="uuid")
+    private String uuid;
+    
+    @Column(name="host_id")
+    private long hostId;
+    
+    @Column(name="physical_network_id")
+    private long physicalNetworkId;
+    
+    @Column(name="provider_name")
+    private String providerName;
+    
+    @Column(name="device_name")
+    private String deviceName;
+
+    
+    public NiciraNvpDeviceVO() {
+        this.uuid = UUID.randomUUID().toString();
+    }
+
+    public NiciraNvpDeviceVO(long hostId, long physicalNetworkId,
+            String providerName, String deviceName) {
+        super();
+        this.hostId = hostId;
+        this.physicalNetworkId = physicalNetworkId;
+        this.providerName = providerName;
+        this.deviceName = deviceName;
+        this.uuid = UUID.randomUUID().toString();
+    }
+
+    public long getId() {
+        return id;
+    }
+    
+    public String getUuid() {
+        return uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public long getPhysicalNetworkId() {
+        return physicalNetworkId;
+    }
+
+    public long getHostId() {
+        return hostId;
+    }
+
+    public String getProviderName() {
+        return providerName;
+    }
+
+    public String getDeviceName() {
+        return deviceName;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpNicMappingVO.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpNicMappingVO.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpNicMappingVO.java
new file mode 100644
index 0000000..2b5f8ba
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/NiciraNvpNicMappingVO.java
@@ -0,0 +1,65 @@
+package com.cloud.network;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="nicira_nvp_nic_map")
+public class NiciraNvpNicMappingVO {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="logicalswitch")
+    private String logicalSwitchUuid;
+    
+    @Column(name="logicalswitchport")
+    private String logicalSwitchPortUuid;
+    
+    @Column(name="nic")
+    private String nicUuid;
+    
+    public NiciraNvpNicMappingVO () {    
+    }
+    
+    public NiciraNvpNicMappingVO (String logicalSwitchUuid, String logicalSwitchPortUuid, String nicUuid) {
+        this.logicalSwitchUuid = logicalSwitchUuid;
+        this.logicalSwitchPortUuid = logicalSwitchPortUuid;
+        this.nicUuid = nicUuid;
+    }
+
+    public String getLogicalSwitchUuid() {
+        return logicalSwitchUuid;
+    }
+
+    public void setLogicalSwitchUuid(String logicalSwitchUuid) {
+        this.logicalSwitchUuid = logicalSwitchUuid;
+    }
+
+    public String getLogicalSwitchPortUuid() {
+        return logicalSwitchPortUuid;
+    }
+
+    public void setLogicalSwitchPortUuid(String logicalSwitchPortUuid) {
+        this.logicalSwitchPortUuid = logicalSwitchPortUuid;
+    }
+
+    public String getNicUuid() {
+        return nicUuid;
+    }
+
+    public void setNicUuid(String nicUuid) {
+        this.nicUuid = nicUuid;
+    }
+
+    public long getId() {
+        return id;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDao.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDao.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDao.java
new file mode 100644
index 0000000..fddb75e
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDao.java
@@ -0,0 +1,16 @@
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import com.cloud.network.NiciraNvpDeviceVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface NiciraNvpDao extends GenericDao<NiciraNvpDeviceVO, Long>{
+    /**
+     * list all the nicira nvp devices added in to this physical network
+     * @param physicalNetworkId physical Network Id
+     * @return list of NiciraNvpDeviceVO for this physical network.
+     */
+    List<NiciraNvpDeviceVO> listByPhysicalNetwork(long physicalNetworkId);
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDaoImpl.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDaoImpl.java
new file mode 100644
index 0000000..916d1ff
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpDaoImpl.java
@@ -0,0 +1,32 @@
+package com.cloud.network.dao;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import com.cloud.network.NiciraNvpDeviceVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Local(value=NiciraNvpDao.class)
+public class NiciraNvpDaoImpl extends GenericDaoBase<NiciraNvpDeviceVO, Long>
+        implements NiciraNvpDao {
+    
+    protected final SearchBuilder<NiciraNvpDeviceVO> physicalNetworkIdSearch;
+    
+    public NiciraNvpDaoImpl() {
+        physicalNetworkIdSearch = createSearchBuilder();
+        physicalNetworkIdSearch.and("physicalNetworkId", physicalNetworkIdSearch.entity().getPhysicalNetworkId(), Op.EQ);
+        physicalNetworkIdSearch.done();
+    }
+
+    @Override
+    public List<NiciraNvpDeviceVO> listByPhysicalNetwork(long physicalNetworkId) {
+        SearchCriteria<NiciraNvpDeviceVO> sc = physicalNetworkIdSearch.create();
+        sc.setParameters("physicalNetworkId", physicalNetworkId);
+        return search(sc, null);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDao.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDao.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDao.java
new file mode 100644
index 0000000..a51f521
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDao.java
@@ -0,0 +1,13 @@
+package com.cloud.network.dao;
+
+import com.cloud.network.NiciraNvpNicMappingVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface NiciraNvpNicMappingDao extends GenericDao<NiciraNvpNicMappingVO, Long> {
+
+    /** find the mapping for a nic 
+     * @param nicUuid the Uuid of a nic attached to a logical switch port
+     * @return NiciraNvpNicMapping for this nic uuid or null if it does not exist
+     */
+    public NiciraNvpNicMappingVO findByNicUuid(String nicUuid);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/79c7da07/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDaoImpl.java b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDaoImpl.java
new file mode 100644
index 0000000..b3223d3
--- /dev/null
+++ b/plugins/network-elements/nicira-nvp/src/com/cloud/network/dao/NiciraNvpNicMappingDaoImpl.java
@@ -0,0 +1,30 @@
+package com.cloud.network.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.network.NiciraNvpNicMappingVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.SearchCriteria.Op;
+
+@Local(value=NiciraNvpNicMappingDao.class)
+public class NiciraNvpNicMappingDaoImpl extends
+        GenericDaoBase<NiciraNvpNicMappingVO, Long> implements NiciraNvpNicMappingDao {
+
+    protected final SearchBuilder<NiciraNvpNicMappingVO> nicSearch;
+    
+    public NiciraNvpNicMappingDaoImpl() {
+        nicSearch = createSearchBuilder();
+        nicSearch.and("nicUuid", nicSearch.entity().getNicUuid(), Op.EQ);
+        nicSearch.done();
+    }
+    
+    @Override
+    public NiciraNvpNicMappingVO findByNicUuid(String nicUuid) {
+        SearchCriteria<NiciraNvpNicMappingVO> sc = nicSearch.create();
+        sc.setParameters("nicUuid", nicUuid);
+        return findOneBy(sc);
+    }
+
+}