VPC: added vpc_id to private_ip_address table to indicate which vpc the ip 
belongs to

Conflicts:

        server/src/com/cloud/network/NetworkManagerImpl.java
        server/src/com/cloud/network/vpc/VpcManager.java
        server/src/com/cloud/vm/VirtualMachineManagerImpl.java
        server/test/com/cloud/network/MockNetworkManagerImpl.java


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

Branch: refs/heads/vpc
Commit: 21519070fcd4289c897a355c6d576a7d28e3e1dd
Parents: d52c6e2
Author: Alena Prokharchyk <[email protected]>
Authored: Mon Jul 9 12:59:40 2012 -0700
Committer: Alena Prokharchyk <[email protected]>
Committed: Mon Jul 9 18:23:35 2012 -0700

----------------------------------------------------------------------
 .../api/commands/CreatePrivateNetworkCmd.java      |    2 +-
 api/src/com/cloud/api/commands/CreateVPCCmd.java   |    2 +-
 api/src/com/cloud/network/NetworkService.java      |    3 +-
 api/src/com/cloud/network/vpc/VpcService.java      |    3 +-
 api/src/com/cloud/vm/NicProfile.java               |    1 +
 server/src/com/cloud/network/NetworkManager.java   |   17 ++++
 .../src/com/cloud/network/NetworkManagerImpl.java  |   60 +++++++++++++-
 .../com/cloud/network/guru/PrivateNetworkGuru.java |    7 +-
 .../router/VirtualNetworkApplianceManagerImpl.java |   14 +--
 .../VpcVirtualNetworkApplianceManagerImpl.java     |   63 +++++++++++++--
 .../com/cloud/network/vpc/Dao/PrivateIpDao.java    |   11 +++-
 .../cloud/network/vpc/Dao/PrivateIpDaoImpl.java    |   19 ++++-
 .../com/cloud/network/vpc/Dao/VpcGatewayDao.java   |    2 +-
 .../cloud/network/vpc/Dao/VpcGatewayDaoImpl.java   |    2 +-
 server/src/com/cloud/network/vpc/PrivateIpVO.java  |   10 ++-
 server/src/com/cloud/network/vpc/VpcManager.java   |   13 +++
 .../src/com/cloud/network/vpc/VpcManagerImpl.java  |   19 +++--
 .../com/cloud/vm/VirtualMachineManagerImpl.java    |   33 +-------
 .../com/cloud/network/MockNetworkManagerImpl.java  |   57 +++++++++----
 setup/db/create-schema.sql                         |    2 +
 20 files changed, 251 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java 
b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java
index 276c1fb..1a6ce09 100644
--- a/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java
+++ b/api/src/com/cloud/api/commands/CreatePrivateNetworkCmd.java
@@ -139,7 +139,7 @@ public class CreatePrivateNetworkCmd extends 
BaseAsyncCreateCmd {
         Network result = null;
         try {
             result = _networkService.createPrivateNetwork(getNetworkName(), 
getDisplayText(), getPhysicalNetworkId(), getVlan(),
-                    getStartIp(), getEndIp(), getGateway(), getNetmask(), 
getEntityOwnerId());
+                    getStartIp(), getEndIp(), getGateway(), getNetmask(), 
getEntityOwnerId(), null);
         } catch (InsufficientCapacityException ex){
             s_logger.info(ex);
             s_logger.trace(ex);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/api/src/com/cloud/api/commands/CreateVPCCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/CreateVPCCmd.java 
b/api/src/com/cloud/api/commands/CreateVPCCmd.java
index 7d35aa3..d29c730 100644
--- a/api/src/com/cloud/api/commands/CreateVPCCmd.java
+++ b/api/src/com/cloud/api/commands/CreateVPCCmd.java
@@ -118,7 +118,7 @@ public class CreateVPCCmd extends BaseAsyncCreateCmd{
     public void execute() {
         Vpc vpc = null;
         try {
-             if (_vpcService.startVpc(this.getEntityId())) {
+             if (_vpcService.startVpc(this.getEntityId(), true)) {
                  vpc = _vpcService.getVpc(getEntityId());
              }
         } catch (ResourceUnavailableException ex) {

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/api/src/com/cloud/network/NetworkService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/NetworkService.java 
b/api/src/com/cloud/network/NetworkService.java
index be54e84..6a60ebf 100755
--- a/api/src/com/cloud/network/NetworkService.java
+++ b/api/src/com/cloud/network/NetworkService.java
@@ -160,13 +160,14 @@ public interface NetworkService {
      * @param gateway
      * @param netmask
      * @param networkOwnerId
+     * @param vpcId TODO
      * @return
      * @throws InsufficientCapacityException 
      * @throws ConcurrentOperationException 
      * @throws ResourceAllocationException 
      */
     Network createPrivateNetwork(String networkName, String displayText, long 
physicalNetworkId, String vlan,
-            String startIp, String endIP, String gateway, String netmask, long 
networkOwnerId) 
+            String startIp, String endIP, String gateway, String netmask, long 
networkOwnerId, Long vpcId) 
                     throws ResourceAllocationException, 
ConcurrentOperationException, InsufficientCapacityException;
     /**
      * @param network

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/api/src/com/cloud/network/vpc/VpcService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpc/VpcService.java 
b/api/src/com/cloud/network/vpc/VpcService.java
index 8585226..f5be917 100644
--- a/api/src/com/cloud/network/vpc/VpcService.java
+++ b/api/src/com/cloud/network/vpc/VpcService.java
@@ -114,12 +114,13 @@ public interface VpcService {
 
     /**
      * @param vpcId
+     * @param destroyOnFailure TODO
      * @return
      * @throws InsufficientCapacityException 
      * @throws ResourceUnavailableException 
      * @throws ConcurrentOperationException 
      */
-    boolean startVpc(long vpcId) throws ConcurrentOperationException, 
ResourceUnavailableException, InsufficientCapacityException;
+    boolean startVpc(long vpcId, boolean destroyOnFailure) throws 
ConcurrentOperationException, ResourceUnavailableException, 
InsufficientCapacityException;
 
     /**
      * @param vpcId

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/api/src/com/cloud/vm/NicProfile.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/vm/NicProfile.java 
b/api/src/com/cloud/vm/NicProfile.java
index 67753c6..2eda387 100644
--- a/api/src/com/cloud/vm/NicProfile.java
+++ b/api/src/com/cloud/vm/NicProfile.java
@@ -298,4 +298,5 @@ public class NicProfile {
     public String toString() {
         return new 
StringBuilder("NicProfile[").append(id).append("-").append(vmId).append("-").append(reservationId).toString();
     }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/NetworkManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManager.java 
b/server/src/com/cloud/network/NetworkManager.java
index 70aaa4a..0e62439 100755
--- a/server/src/com/cloud/network/NetworkManager.java
+++ b/server/src/com/cloud/network/NetworkManager.java
@@ -61,6 +61,7 @@ import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.VirtualMachineProfileImpl;
 
 /**
  * NetworkManager manages the network for the different end users.
@@ -468,6 +469,22 @@ public interface NetworkManager extends NetworkService {
      * @return
      */
     boolean isPrivateGateway(Nic guestNic);
+
+
+    /**
+     * @param network
+     * @param requested
+     * @param context
+     * @param vmProfile
+     * @return
+     * @throws InsufficientVirtualNetworkCapcityException
+     * @throws InsufficientAddressCapacityException
+     * @throws ConcurrentOperationException
+     * @throws InsufficientCapacityException
+     * @throws ResourceUnavailableException
+     */
+    NicProfile allocateAndPrepareNic(Network network, NicProfile requested, 
ReservationContext context, VirtualMachineProfileImpl<VMInstanceVO> vmProfile) 
throws InsufficientVirtualNetworkCapcityException,
+            InsufficientAddressCapacityException, 
ConcurrentOperationException, InsufficientCapacityException, 
ResourceUnavailableException;
     
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/NetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java 
b/server/src/com/cloud/network/NetworkManagerImpl.java
index 0c6e5cb..86258fa 100755
--- a/server/src/com/cloud/network/NetworkManagerImpl.java
+++ b/server/src/com/cloud/network/NetworkManagerImpl.java
@@ -99,6 +99,7 @@ import com.cloud.exception.PermissionDeniedException;
 import com.cloud.exception.ResourceAllocationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.exception.UnsupportedServiceException;
+import com.cloud.host.Host;
 import com.cloud.host.HostVO;
 import com.cloud.host.Status;
 import com.cloud.host.dao.HostDao;
@@ -212,6 +213,7 @@ import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachine.Type;
 import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.VirtualMachineProfileImpl;
 import com.cloud.vm.dao.DomainRouterDao;
 import com.cloud.vm.dao.NicDao;
 import com.cloud.vm.dao.UserVmDao;
@@ -7256,7 +7258,7 @@ public class NetworkManagerImpl implements 
NetworkManager, NetworkService, Manag
 
     @Override @DB
     public Network createPrivateNetwork(String networkName, String 
displayText, long physicalNetworkId, 
-            String vlan, String startIp, String endIp, String gateway, String 
netmask, long networkOwnerId) 
+            String vlan, String startIp, String endIp, String gateway, String 
netmask, long networkOwnerId, Long vpcId) 
                     throws ResourceAllocationException, 
ConcurrentOperationException, InsufficientCapacityException {
         
         Account owner = _accountMgr.getAccount(networkOwnerId);
@@ -7323,8 +7325,8 @@ public class NetworkManagerImpl implements 
NetworkManager, NetworkService, Manag
         Long mac = dc.getMacAddress();
         Long nextMac = mac + 1;
         dc.setMacAddress(nextMac);
-        
-        privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac);
+
+        privateIp = new PrivateIpVO(startIp, privateNetwork.getId(), nextMac, 
vpcId);
         _privateIpDao.persist(privateIp);
         
         _dcDao.update(dc.getId(), dc);
@@ -7369,4 +7371,56 @@ public class NetworkManagerImpl implements 
NetworkManager, NetworkService, Manag
         }
         return true;
     }
+    
+    @Override
+    public NicProfile allocateAndPrepareNic(Network network, NicProfile 
requested, ReservationContext context,
+            VirtualMachineProfileImpl<VMInstanceVO> vmProfile)
+            throws InsufficientVirtualNetworkCapcityException, 
InsufficientAddressCapacityException, 
+            ConcurrentOperationException, InsufficientCapacityException, 
ResourceUnavailableException {
+        
+        VirtualMachine vm = vmProfile.getVirtualMachine();
+        NetworkVO networkVO = _networksDao.findById(network.getId());
+        DataCenter dc = _configMgr.getZone(network.getDataCenterId());
+        Host host = _hostDao.findById(vm.getHostId()); 
+        DeployDestination dest = new DeployDestination(dc, null, null, host);
+        
+        NicProfile nic = null;
+        String broadcastUri = null;
+        if (requested != null && requested.getBroadCastUri() != null) {
+            broadcastUri = requested.getBroadCastUri().toString();
+            NicVO nicVO = 
_nicDao.findByInstanceIdNetworkIdAndBroadcastUri(network.getId(), vm.getId(), 
broadcastUri);
+            if (nicVO != null) {
+                nic = getNicProfile(vm, network.getId());
+            }
+        } else {
+            NicVO nicVO = 
_nicDao.findByInstanceIdAndNetworkId(network.getId(), vm.getId());
+            if (nicVO != null) {
+                nic = getNicProfile(vm, network.getId());
+            }
+        }
+        
+        //1) allocate nic (if needed)
+        if (nic == null) {
+            s_logger.debug("Allocating nic for the " + vm + " in network " + 
network);
+            int deviceId = _nicDao.countNics(vm.getId());
+            
+            nic = allocateNic(requested, network, false, 
+                    deviceId, vmProfile).first();
+            
+            if (nic == null) {
+                throw new CloudRuntimeException("Failed to allocate nic for vm 
" + vm + " in network " + network);
+            }
+            
+            s_logger.debug("Nic is allocated successfully for vm " + vm + " in 
network " + network);
+            
+            
+            
+            s_logger.debug("Nic is prepared successfully for vm " + vm + " in 
network " + network);
+        }
+        
+        //2) prepare nic
+        nic = prepareNic(vmProfile, dest, context, nic.getId(), networkVO);
+        
+        return nic;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/guru/PrivateNetworkGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java 
b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java
index ab07874..0546f23 100644
--- a/server/src/com/cloud/network/guru/PrivateNetworkGuru.java
+++ b/server/src/com/cloud/network/guru/PrivateNetworkGuru.java
@@ -101,7 +101,7 @@ public class PrivateNetworkGuru extends AdapterBase 
implements NetworkGuru {
             return null;
         }
 
-        NetworkVO network = new NetworkVO(offering.getTrafficType(), 
Mode.Dhcp, BroadcastDomainType.Vlan, offering.getId(),
+        NetworkVO network = new NetworkVO(offering.getTrafficType(), 
Mode.Static, BroadcastDomainType.Vlan, offering.getId(),
                 State.Allocated, plan.getDataCenterId(), 
plan.getPhysicalNetworkId());
         if (userSpecified != null) {
             if ((userSpecified.getCidr() == null && userSpecified.getGateway() 
!= null) || 
@@ -175,10 +175,9 @@ public class PrivateNetworkGuru extends AdapterBase 
implements NetworkGuru {
     
     
     protected void getIp(NicProfile nic, DataCenter dc, Network network)
-            throws InsufficientVirtualNetworkCapcityException,
-    InsufficientAddressCapacityException {
+            throws 
InsufficientVirtualNetworkCapcityException,InsufficientAddressCapacityException 
{
         if (nic.getIp4Address() == null) {
-            PrivateIpVO ipVO = 
_privateIpDao.allocateIpAddress(network.getDataCenterId(), network.getId());
+            PrivateIpVO ipVO = 
_privateIpDao.allocateIpAddress(network.getDataCenterId(), network.getId(), 
null);
             String vlanTag = network.getBroadcastUri().getHost();
             String netmask = NetUtils.getCidrNetmask(network.getCidr());
             PrivateIpAddress ip = new PrivateIpAddress(ipVO, vlanTag, 
network.getGateway(), netmask, ipVO.getMacAddress());

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index b003342..16ef4cc 100755
--- 
a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1281,8 +1281,10 @@ public class VirtualNetworkApplianceManagerImpl 
implements VirtualNetworkApplian
             //3) deploy virtual router(s)
             int count = routerCount - routers.size();
             for (int i = 0; i < count; i++) {
+                List<Pair<NetworkVO, NicProfile>> networks = 
createRouterNetworks(owner, isRedundant, plan, guestNetwork,
+                        new Pair<Boolean, PublicIp>(publicNetwork, 
sourceNatIp));
                 DomainRouterVO router = deployRouter(owner, dest, plan, 
params, isRedundant, vrProvider, offeringId,
-                        null, publicNetwork, guestNetwork, new Pair<Boolean, 
PublicIp>(publicNetwork, sourceNatIp));
+                        null, networks);
                 //add router to router network map
                 if (!_routerDao.isRouterPartOfGuestNetwork(router.getId(), 
network.getId())) {
                     DomainRouterVO routerVO = 
_routerDao.findById(router.getId());
@@ -1300,7 +1302,7 @@ public class VirtualNetworkApplianceManagerImpl 
implements VirtualNetworkApplian
 
     protected DomainRouterVO deployRouter(Account owner, DeployDestination 
dest, DeploymentPlan plan, Map<Param, Object> params,
             boolean isRedundant, VirtualRouterProvider vrProvider, long 
svcOffId,
-            Long vpcId, boolean setupPublicNetwork, Network guestNetwork, 
Pair<Boolean, PublicIp> publicNetwork) throws ConcurrentOperationException, 
+            Long vpcId, List<Pair<NetworkVO, NicProfile>> networks) throws 
ConcurrentOperationException, 
             InsufficientAddressCapacityException, 
InsufficientServerCapacityException, InsufficientCapacityException, 
             StorageUnavailableException, ResourceUnavailableException {
         
@@ -1308,15 +1310,10 @@ public class VirtualNetworkApplianceManagerImpl 
implements VirtualNetworkApplian
         if (s_logger.isDebugEnabled()) {
             s_logger.debug("Creating the router " + id + " in datacenter "  + 
dest.getDataCenter());
         }
-        
-        //1) Create router networks
-        List<Pair<NetworkVO, NicProfile>> networks = 
createRouterNetworks(owner, isRedundant, plan, guestNetwork,
-                publicNetwork);
 
-       
         ServiceOfferingVO routerOffering = 
_serviceOfferingDao.findById(svcOffId);
 
-        //2) Router is the network element, we don't know the hypervisor type 
yet.
+        // Router is the network element, we don't know the hypervisor type 
yet.
         //Try to allocate the domR twice using diff hypervisors, and when 
failed both times, throw the exception up
         List<HypervisorType> supportedHypervisors = new 
ArrayList<HypervisorType>();
         HypervisorType defaults = 
_resourceMgr.getDefaultHypervisor(dest.getDataCenter().getId());
@@ -1480,7 +1477,6 @@ public class VirtualNetworkApplianceManagerImpl 
implements VirtualNetworkApplian
             networks.add(new Pair<NetworkVO, 
NicProfile>(publicNetworks.get(0), defaultNic));
         }
 
-        
         return networks;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
 
b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index 6f6f0d9..887f284 100644
--- 
a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ 
b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -60,6 +60,8 @@ import com.cloud.network.Network;
 import com.cloud.network.Network.Provider;
 import com.cloud.network.Network.Service;
 import com.cloud.network.NetworkService;
+import com.cloud.network.NetworkVO;
+import com.cloud.network.Networks.AddressFormat;
 import com.cloud.network.Networks.BroadcastDomainType;
 import com.cloud.network.Networks.IsolationType;
 import com.cloud.network.Networks.TrafficType;
@@ -391,10 +393,10 @@ public class VpcVirtualNetworkApplianceManagerImpl 
extends VirtualNetworkApplian
             InsufficientAddressCapacityException, 
InsufficientServerCapacityException, InsufficientCapacityException, 
             StorageUnavailableException, ResourceUnavailableException {
         
-
+        List<Pair<NetworkVO, NicProfile>> networks = 
createVpcRouterNetworks(owner, isRedundant, plan, new Pair<Boolean, 
PublicIp>(true, sourceNatIp),
+                vpcId);
         DomainRouterVO router = 
-                super.deployRouter(owner, dest, plan, params, isRedundant, 
vrProvider, svcOffId, vpcId, false, 
-                        null, new Pair<Boolean, PublicIp>(true, sourceNatIp));
+                super.deployRouter(owner, dest, plan, params, isRedundant, 
vrProvider, svcOffId, vpcId, networks);
         
         return router;
     }
@@ -792,6 +794,10 @@ public class VpcVirtualNetworkApplianceManagerImpl extends 
VirtualNetworkApplian
             }
         }
         
+       
+        
+        
+        //4) PREPARE PLUG NIC COMMANDS
         try {
             //add VPC router to public networks
             List<PublicIp> sourceNat = new ArrayList<PublicIp>(1);
@@ -853,7 +859,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends 
VirtualNetworkApplian
             return false;
         }
         
-        //3) RE-APPLY ALL STATIC ROUTE RULES
+        //5) RE-APPLY ALL STATIC ROUTE RULES
         List<? extends StaticRoute> routes = 
_staticRouteDao.listByVpcId(router.getVpcId());
         List<StaticRouteProfile> staticRouteProfiles = new 
ArrayList<StaticRouteProfile>(routes.size());
         Map<Long, VpcGateway> gatewayMap = new HashMap<Long, VpcGateway>();
@@ -872,9 +878,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends 
VirtualNetworkApplian
             createStaticRouteCommands(staticRouteProfiles, router, cmds);
         }
         
-        //4) REISSUE VPN CONNECTION
+        //6) REISSUE VPN CONNECTION
         
-        //5) REPROGRAM GUEST NETWORK
+        //7) REPROGRAM GUEST NETWORK
         boolean reprogramGuestNtwks = true;
         if (profile.getParameter(Param.ReProgramGuestNetworks) != null 
                 && (Boolean) 
profile.getParameter(Param.ReProgramGuestNetworks) == false) {
@@ -924,7 +930,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends 
VirtualNetworkApplian
         boolean result = true;
         try {
             Network network = _networkMgr.getNetwork(gateway.getNetworkId());
-            NicProfile guestNic = _itMgr.addVmToNetwork(router, network, null);
+            NicProfile requested = createPrivateNicProfile(gateway);
+            
+            NicProfile guestNic = _itMgr.addVmToNetwork(router, network, 
requested);
             
             //setup source nat
             if (guestNic != null) {
@@ -1160,4 +1168,45 @@ public class VpcVirtualNetworkApplianceManagerImpl 
extends VirtualNetworkApplian
             cmds.addCommand("IPAssocVpcCommand", cmd);
         }
     }
+    
+    
+    protected List<Pair<NetworkVO, NicProfile>> 
createVpcRouterNetworks(Account owner, boolean isRedundant, 
+            DeploymentPlan plan, Pair<Boolean, PublicIp> publicNetwork, long 
vpcId) throws ConcurrentOperationException,
+            InsufficientAddressCapacityException {
+
+        List<Pair<NetworkVO, NicProfile>> networks = new 
ArrayList<Pair<NetworkVO, NicProfile>>(4);
+        networks = super.createRouterNetworks(owner, isRedundant, plan, null, 
publicNetwork);
+        
+        //allocate nic for private gateway if needed
+        VpcGateway privateGateway = _vpcMgr.getPrivateGatewayForVpc(vpcId);
+        if (privateGateway != null) {
+            NicProfile privateNic = createPrivateNicProfile(privateGateway);
+            Network privateNetwork = 
_networkMgr.getNetwork(privateGateway.getNetworkId());
+            networks.add(new Pair<NetworkVO, NicProfile>((NetworkVO) 
privateNetwork, privateNic));
+        }
+        
+        return networks;
+    }
+
+    @DB
+    protected NicProfile createPrivateNicProfile(VpcGateway privateGateway) {
+        Network network = 
_networkMgr.getNetwork(privateGateway.getNetworkId());
+        PrivateIpVO ipVO = 
_privateIpDao.allocateIpAddress(network.getDataCenterId(), network.getId(), 
privateGateway.getIp4Address());
+        
+        NicProfile privateNic = new NicProfile();
+        String vlanTag = network.getBroadcastUri().getHost();
+        String netmask = NetUtils.getCidrNetmask(network.getCidr());
+        PrivateIpAddress ip = new PrivateIpAddress(ipVO, vlanTag, 
network.getGateway(), netmask, ipVO.getMacAddress());
+        
+        privateNic.setIp4Address(ip.getIpAddress());
+        privateNic.setGateway(ip.getGateway());
+        privateNic.setNetmask(ip.getNetmask());
+        privateNic.setIsolationUri(IsolationType.Vlan.toUri(ip.getVlanTag()));
+        privateNic.setBroadcastUri(IsolationType.Vlan.toUri(ip.getVlanTag()));
+        privateNic.setBroadcastType(BroadcastDomainType.Vlan);
+        privateNic.setFormat(AddressFormat.Ip4);
+        privateNic.setReservationId(String.valueOf(ip.getVlanTag()));
+        privateNic.setMacAddress(ip.getMacAddress());
+        return privateNic;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/vpc/Dao/PrivateIpDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/Dao/PrivateIpDao.java 
b/server/src/com/cloud/network/vpc/Dao/PrivateIpDao.java
index 4c9e87a..f4dd76e 100644
--- a/server/src/com/cloud/network/vpc/Dao/PrivateIpDao.java
+++ b/server/src/com/cloud/network/vpc/Dao/PrivateIpDao.java
@@ -22,9 +22,10 @@ public interface PrivateIpDao extends 
GenericDao<PrivateIpVO, Long>{
     /**
      * @param dcId
      * @param networkId
+     * @param requestedIp TODO
      * @return
      */
-    PrivateIpVO allocateIpAddress(long dcId, long networkId);
+    PrivateIpVO allocateIpAddress(long dcId, long networkId, String 
requestedIp);
 
     /**
      * @param ipAddress
@@ -58,5 +59,13 @@ public interface PrivateIpDao extends 
GenericDao<PrivateIpVO, Long>{
     
     int countByNetworkId(long ntwkId);
 
+    /**
+     * @param vpcId
+     * @param ip4Address
+     * @return
+     */
+    PrivateIpVO findByIpAndVpcId(long vpcId, String ip4Address);
+
+    
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/vpc/Dao/PrivateIpDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/Dao/PrivateIpDaoImpl.java 
b/server/src/com/cloud/network/vpc/Dao/PrivateIpDaoImpl.java
index f67b61a..88d5440 100644
--- a/server/src/com/cloud/network/vpc/Dao/PrivateIpDaoImpl.java
+++ b/server/src/com/cloud/network/vpc/Dao/PrivateIpDaoImpl.java
@@ -45,6 +45,7 @@ public class PrivateIpDaoImpl extends 
GenericDaoBase<PrivateIpVO, Long> implemen
         AllFieldsSearch.and("networkId", 
AllFieldsSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
         AllFieldsSearch.and("ipAddress", 
AllFieldsSearch.entity().getIpAddress(), SearchCriteria.Op.EQ);
         AllFieldsSearch.and("taken", AllFieldsSearch.entity().getTakenAt(), 
SearchCriteria.Op.EQ);
+        AllFieldsSearch.and("vpcId", AllFieldsSearch.entity().getVpcId(), 
SearchCriteria.Op.EQ);
         AllFieldsSearch.done();
         
         CountAllocatedByNetworkId = createSearchBuilder(Integer.class);
@@ -60,11 +61,15 @@ public class PrivateIpDaoImpl extends 
GenericDaoBase<PrivateIpVO, Long> implemen
     }
     
     @Override
-    public PrivateIpVO allocateIpAddress(long dcId, long networkId) {
+    public PrivateIpVO allocateIpAddress(long dcId, long networkId, String 
requestedIp) {
         SearchCriteria<PrivateIpVO> sc = AllFieldsSearch.create();
         sc.setParameters("networkId", networkId);
         sc.setParameters("taken", (Date)null);
         
+        if (requestedIp != null) {
+            sc.setParameters("ipAddress", requestedIp);
+        }
+        
         Transaction txn = Transaction.currentTxn();
         txn.start();
         PrivateIpVO  vo = lockOneRandomRow(sc, true);
@@ -93,9 +98,7 @@ public class PrivateIpDaoImpl extends 
GenericDaoBase<PrivateIpVO, Long> implemen
         update(vo, sc);
     }
 
-    /* (non-Javadoc)
-     * @see 
com.cloud.network.vpc.Dao.PrivateIpDao#findByIpAndSourceNetworkId(long, 
java.lang.String)
-     */
+
     @Override
     public PrivateIpVO findByIpAndSourceNetworkId(long networkId, String 
ip4Address) {
         SearchCriteria<PrivateIpVO> sc = AllFieldsSearch.create();
@@ -105,6 +108,14 @@ public class PrivateIpDaoImpl extends 
GenericDaoBase<PrivateIpVO, Long> implemen
     }
     
     @Override
+    public PrivateIpVO findByIpAndVpcId(long vpcId, String ip4Address) {
+        SearchCriteria<PrivateIpVO> sc = AllFieldsSearch.create();
+        sc.setParameters("ip", ip4Address);
+        sc.setParameters("vpcId", vpcId);
+        return findOneBy(sc);
+    }
+    
+    @Override
     public List<PrivateIpVO> listByNetworkId(long networkId) {
         SearchCriteria<PrivateIpVO> sc = AllFieldsSearch.create();
         sc.setParameters("networkId", networkId);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/vpc/Dao/VpcGatewayDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/Dao/VpcGatewayDao.java 
b/server/src/com/cloud/network/vpc/Dao/VpcGatewayDao.java
index cbc6f17..69666a8 100644
--- a/server/src/com/cloud/network/vpc/Dao/VpcGatewayDao.java
+++ b/server/src/com/cloud/network/vpc/Dao/VpcGatewayDao.java
@@ -17,5 +17,5 @@ import com.cloud.utils.db.GenericDao;
 
 
 public interface VpcGatewayDao extends GenericDao<VpcGatewayVO, Long>{
-    VpcGatewayVO getPrivateGateway(long vpcId);
+    VpcGatewayVO getPrivateGatewayForVpc(long vpcId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/vpc/Dao/VpcGatewayDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/Dao/VpcGatewayDaoImpl.java 
b/server/src/com/cloud/network/vpc/Dao/VpcGatewayDaoImpl.java
index 64a7580..31fd92b 100644
--- a/server/src/com/cloud/network/vpc/Dao/VpcGatewayDaoImpl.java
+++ b/server/src/com/cloud/network/vpc/Dao/VpcGatewayDaoImpl.java
@@ -36,7 +36,7 @@ public class VpcGatewayDaoImpl extends 
GenericDaoBase<VpcGatewayVO, Long> implem
 
 
     @Override
-    public VpcGatewayVO getPrivateGateway(long vpcId) {
+    public VpcGatewayVO getPrivateGatewayForVpc(long vpcId) {
         SearchCriteria<VpcGatewayVO> sc = AllFieldsSearch.create();
         sc.setParameters("vpcId", vpcId);
         sc.setParameters("type", VpcGateway.Type.Private);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/vpc/PrivateIpVO.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/PrivateIpVO.java 
b/server/src/com/cloud/network/vpc/PrivateIpVO.java
index 75dd2cd..69fcfd9 100644
--- a/server/src/com/cloud/network/vpc/PrivateIpVO.java
+++ b/server/src/com/cloud/network/vpc/PrivateIpVO.java
@@ -46,13 +46,17 @@ public class PrivateIpVO{
     @Column(name="network_id", updatable=false, nullable=false)
     private long networkId;
     
+    @Column(name="vpc_id")
+    private Long vpcId;
+    
     public PrivateIpVO() {
     } 
 
-    public PrivateIpVO(String ipAddress, long networkId, long macAddress) {
+    public PrivateIpVO(String ipAddress, long networkId, long macAddress, long 
vpcId) {
         this.ipAddress = ipAddress;
         this.networkId = networkId;
         this.macAddress = macAddress;
+        this.vpcId = vpcId;
     }
     
     public void setTakenAt(Date takenDate) {
@@ -78,4 +82,8 @@ public class PrivateIpVO{
     public long getMacAddress() {
         return macAddress;
     }
+    
+    public Long getVpcId() {
+        return vpcId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/vpc/VpcManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManager.java 
b/server/src/com/cloud/network/vpc/VpcManager.java
index bc15452..7957858 100644
--- a/server/src/com/cloud/network/vpc/VpcManager.java
+++ b/server/src/com/cloud/network/vpc/VpcManager.java
@@ -93,4 +93,17 @@ public interface VpcManager extends VpcService{
      * @return
      */
     List<DomainRouterVO> getVpcRouters(long vpcId);
+
+
+    /**
+     * @param zoneId
+     * @return
+     */
+    boolean vpcProviderEnabledInZone(long zoneId);
+
+    /**
+     * @param vpcId
+     * @return
+     */
+    VpcGateway getPrivateGatewayForVpc(long vpcId);
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java 
b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 76ea216..8f5db9a 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -766,7 +766,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
     }
     
     @Override
-    public boolean startVpc(long vpcId) throws ConcurrentOperationException, 
ResourceUnavailableException, 
+    public boolean startVpc(long vpcId, boolean destroyOnFailure) throws 
ConcurrentOperationException, ResourceUnavailableException, 
     InsufficientCapacityException {
         UserContext ctx = UserContext.current();
         Account caller = ctx.getCaller();
@@ -800,7 +800,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
             result = false;
         } finally {
             //do cleanup
-            if (!result) {
+            if (!result && destroyOnFailure) {
                 s_logger.debug("Destroying vpc " + vpc + " that failed to 
start");
                 if (destroyVpc(vpc)) {
                     s_logger.warn("Successfully destroyed vpc " + vpc + " that 
failed to start");
@@ -998,7 +998,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
         }
         
         //3) Delete private gateway
-        PrivateGateway gateway = getVpcPrivateGateway(vpcId);
+        VpcGateway gateway = getPrivateGatewayForVpc(vpcId);
         if (gateway != null) {
             s_logger.debug("Deleting private gateway " + gateway + " as a part 
of vpc " + vpcId + " resources cleanup");
             if (!deleteVpcPrivateGateway(gateway.getId())) {
@@ -1040,7 +1040,7 @@ public class VpcManagerImpl implements VpcManager, 
Manager{
             }
             
             s_logger.debug("Starting VPC " + vpc + " as a part of VPC restart 
process");
-            if (!startVpc(vpcId)) {
+            if (!startVpc(vpcId, false)) {
                 s_logger.warn("Failed to start vpc as a part of VPC " + vpc + 
" restart process");
                 restartRequired = true;
                 return false;
@@ -1096,7 +1096,7 @@ public class VpcManagerImpl implements VpcManager, 
Manager{
         }
         
         //allow only one private gateway per vpc
-        VpcGatewayVO gatewayVO = _vpcGatewayDao.getPrivateGateway(vpcId);
+        VpcGatewayVO gatewayVO = _vpcGatewayDao.getPrivateGatewayForVpc(vpcId);
         if (gatewayVO != null) {
             throw new InvalidParameterValueException("Private ip address 
already exists for vpc " + vpc);
         }
@@ -1116,7 +1116,7 @@ public class VpcManagerImpl implements VpcManager, 
Manager{
         //1) create private network
         String networkName = "vpc-" + vpc.getName() + "-privateNetwork";
         Network privateNtwk = _ntwkMgr.createPrivateNetwork(networkName, 
networkName, physicalNetworkId, 
-                vlan, ipAddress, null, gateway, netmask, gatewayOwnerId);
+                vlan, ipAddress, null, gateway, netmask, gatewayOwnerId, 
vpcId);
         
         //2) create gateway entry
         gatewayVO = new VpcGatewayVO(ipAddress, VpcGateway.Type.Private, 
vpcId, privateNtwk.getDataCenterId(),
@@ -1186,7 +1186,7 @@ public class VpcManagerImpl implements VpcManager, 
Manager{
         Transaction txn = Transaction.currentTxn();
         txn.start();
         
-        PrivateIpVO ip = 
_privateIpDao.findByIpAndSourceNetworkId(gateway.getNetworkId(), 
gateway.getIp4Address());
+        PrivateIpVO ip = _privateIpDao.findByIpAndVpcId(gateway.getVpcId(), 
gateway.getIp4Address());
         if (ip != null) {
             _privateIpDao.remove(ip.getId());
             s_logger.debug("Deleted private ip " + ip);
@@ -1527,4 +1527,9 @@ public class VpcManagerImpl implements VpcManager, 
Manager{
             }
         }
     }
+    
+    @Override
+    public VpcGateway getPrivateGatewayForVpc(long vpcId) {
+        return _vpcGatewayDao.getPrivateGatewayForVpc(vpcId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java 
b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index 43a8d6d..da2790d 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -2448,7 +2448,6 @@ public class VirtualMachineManagerImpl implements 
VirtualMachineManager, Listene
         
         s_logger.debug("Adding vm " + vm + " to network " + network);
         VMInstanceVO vmVO = _vmDao.findById(vm.getId());
-        NetworkVO networkVO = _networkDao.findById(network.getId());
         ReservationContext context = new ReservationContextImpl(null, null, 
_accountMgr.getActiveUser(User.UID_SYSTEM), 
                 _accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM));
         
@@ -2459,35 +2458,8 @@ public class VirtualMachineManagerImpl implements 
VirtualMachineManager, Listene
         Host host = _hostDao.findById(vm.getHostId()); 
         DeployDestination dest = new DeployDestination(dc, null, null, host);
         
-        NicProfile nic = null;
-        String broadcastUri = null;
-        if (requested != null && requested.getBroadCastUri() != null) {
-            broadcastUri = requested.getBroadCastUri().toString();
-            NicVO nicVO = 
_nicsDao.findByInstanceIdNetworkIdAndBroadcastUri(network.getId(), vm.getId(), 
broadcastUri);
-            if (nicVO != null) {
-                nic = _networkMgr.getNicProfile(vm, network.getId());
-            }
-        }
-        
-        if (nic == null) {
-            s_logger.debug("Allocating nic for the " + vm + " in network " + 
network);
-            //1) allocate nic and prepare nic if needed
-            int deviceId = _nicsDao.countNics(vm.getId());
-            
-            nic = _networkMgr.allocateNic(requested, network, false, 
-                    deviceId, vmProfile).first();
-            
-            if (nic == null) {
-                throw new CloudRuntimeException("Failed to allocate nic for vm 
" + vm + " in network " + network);
-            }
-            
-            s_logger.debug("Nic is allocated successfully for vm " + vm + " in 
network " + network);
-            
-            nic = _networkMgr.prepareNic(vmProfile, dest, context, 
nic.getId(), networkVO);
-            
-            s_logger.debug("Nic is prepared successfully for vm " + vm + " in 
network " + network);
-            
-        }
+        //1) allocate and prepare nic
+        NicProfile nic = _networkMgr.allocateAndPrepareNic(network, requested, 
context, vmProfile);
         
         //2) Convert vmProfile to vmTO
         HypervisorGuru hvGuru = 
_hvGuruMgr.getGuru(vmProfile.getVirtualMachine().getHypervisorType());
@@ -2509,6 +2481,7 @@ public class VirtualMachineManagerImpl implements 
VirtualMachineManager, Listene
         }
     }
 
+
     @Override
     public NicTO toNicTO(NicProfile nic, HypervisorType hypervisorType) {
         HypervisorGuru hvGuru = _hvGuruMgr.getGuru(hypervisorType);

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/server/test/com/cloud/network/MockNetworkManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkManagerImpl.java 
b/server/test/com/cloud/network/MockNetworkManagerImpl.java
index 0819a31..e245a9a 100755
--- a/server/test/com/cloud/network/MockNetworkManagerImpl.java
+++ b/server/test/com/cloud/network/MockNetworkManagerImpl.java
@@ -51,6 +51,7 @@ import com.cloud.network.Networks.TrafficType;
 import com.cloud.network.addr.PublicIp;
 import com.cloud.network.element.NetworkElement;
 import com.cloud.network.element.RemoteAccessVPNServiceProvider;
+import com.cloud.network.element.Site2SiteVpnServiceProvider;
 import com.cloud.network.element.UserDataServiceProvider;
 import com.cloud.network.guru.NetworkGuru;
 import com.cloud.network.rules.FirewallRule;
@@ -68,6 +69,7 @@ import com.cloud.vm.ReservationContext;
 import com.cloud.vm.VMInstanceVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.VirtualMachineProfileImpl;
 
 @Local(value = { NetworkManager.class, NetworkService.class })
 public class MockNetworkManagerImpl implements NetworkManager, Manager, 
NetworkService {
@@ -851,7 +853,8 @@ public class MockNetworkManagerImpl implements 
NetworkManager, Manager, NetworkS
      * @see com.cloud.network.NetworkService#updateGuestNetwork(long, 
java.lang.String, java.lang.String, com.cloud.user.Account, 
com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean)
      */
     @Override
-    public Network updateGuestNetwork(long networkId, String name, String 
displayText, Account callerAccount, User callerUser, String domainSuffix, Long 
networkOfferingId, Boolean changeCidr) {
+    public Network createPrivateNetwork(String networkName, String 
displayText, long physicalNetworkId, String vlan, String startIp, String endIP, 
String gateway, String netmask, long networkOwnerId, Long vpcId)
+            throws ResourceAllocationException, ConcurrentOperationException, 
InsufficientCapacityException {
         // TODO Auto-generated method stub
         return null;
     }
@@ -999,15 +1002,6 @@ public class MockNetworkManagerImpl implements 
NetworkManager, Manager, NetworkS
                return false;
        }
 
-    /* (non-Javadoc)
-     * @see 
com.cloud.network.NetworkService#createPrivateNetwork(java.lang.String, 
java.lang.String, long, java.lang.String, java.lang.String, java.lang.String, 
java.lang.String, java.lang.String, long)
-     */
-    @Override
-    public Network createPrivateNetwork(String networkName, String 
displayText, long physicalNetworkId, String vlan, String startIp, String endIP, 
String gateway, String netmask, long networkOwnerId)
-            throws ResourceAllocationException, ConcurrentOperationException, 
InsufficientCapacityException {
-        // TODO Auto-generated method stub
-        return null;
-    }
 
     /* (non-Javadoc)
      * @see 
com.cloud.network.NetworkManager#checkVirtualNetworkCidrOverlap(java.lang.Long, 
java.lang.String)
@@ -1090,29 +1084,58 @@ public class MockNetworkManagerImpl implements 
NetworkManager, Manager, NetworkS
         return null;
     }
 
+
     /* (non-Javadoc)
-     * @see com.cloud.network.NetworkManager#isPrivateGateway(com.cloud.vm.Nic)
+     * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, 
java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, 
java.lang.Long, java.lang.String, boolean)
      */
     @Override
-    public boolean isPrivateGateway(long nicId) {
+    public PublicIp assignPublicIpAddress(long dcId, Long podId, Account 
owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) 
throws InsufficientAddressCapacityException {
         // TODO Auto-generated method stub
-        return false;
+        return null;
     }
 
     /* (non-Javadoc)
-     * @see com.cloud.network.NetworkManager#assignPublicIpAddress(long, 
java.lang.Long, com.cloud.user.Account, com.cloud.dc.Vlan.VlanType, 
java.lang.Long, java.lang.String, boolean)
+     * @see com.cloud.network.NetworkManager#getAccountNetworkDomain(long, 
long)
      */
     @Override
-    public PublicIp assignPublicIpAddress(long dcId, Long podId, Account 
owner, VlanType type, Long networkId, String requestedIp, boolean isSystem) 
throws InsufficientAddressCapacityException {
+    public String getAccountNetworkDomain(long accountId, long zoneId) {
         // TODO Auto-generated method stub
         return null;
     }
 
     /* (non-Javadoc)
-     * @see com.cloud.network.NetworkManager#getAccountNetworkDomain(long, 
long)
+     * @see com.cloud.network.NetworkService#updateGuestNetwork(long, 
java.lang.String, java.lang.String, com.cloud.user.Account, 
com.cloud.user.User, java.lang.String, java.lang.Long, java.lang.Boolean)
      */
     @Override
-    public String getAccountNetworkDomain(long accountId, long zoneId) {
+    public Network updateGuestNetwork(long networkId, String name, String 
displayText, Account callerAccount, User callerUser, String domainSuffix, Long 
networkOfferingId, Boolean changeCidr) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see com.cloud.network.NetworkManager#getSite2SiteVpnElements()
+     */
+    @Override
+    public List<? extends Site2SiteVpnServiceProvider> 
getSite2SiteVpnElements() {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    /* (non-Javadoc)
+     * @see com.cloud.network.NetworkManager#isPrivateGateway(com.cloud.vm.Nic)
+     */
+    @Override
+    public boolean isPrivateGateway(Nic guestNic) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    /* (non-Javadoc)
+     * @see 
com.cloud.network.NetworkManager#allocateAndPrepareNic(com.cloud.network.Network,
 com.cloud.vm.NicProfile, com.cloud.vm.ReservationContext, 
com.cloud.vm.VirtualMachineProfileImpl)
+     */
+    @Override
+    public NicProfile allocateAndPrepareNic(Network network, NicProfile 
requested, ReservationContext context, VirtualMachineProfileImpl<VMInstanceVO> 
vmProfile) throws InsufficientVirtualNetworkCapcityException,
+            InsufficientAddressCapacityException, 
ConcurrentOperationException, InsufficientCapacityException, 
ResourceUnavailableException {
         // TODO Auto-generated method stub
         return null;
     }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/21519070/setup/db/create-schema.sql
----------------------------------------------------------------------
diff --git a/setup/db/create-schema.sql b/setup/db/create-schema.sql
index e369340..8037f99 100755
--- a/setup/db/create-schema.sql
+++ b/setup/db/create-schema.sql
@@ -2277,8 +2277,10 @@ CREATE TABLE `cloud`.`private_ip_address` (
   `network_id` bigint unsigned NOT NULL COMMENT 'id of the network ip belongs 
to',
   `reservation_id` char(40) COMMENT 'reservation id',
   `mac_address` varchar(17) COMMENT 'mac address',
+  `vpc_id` bigint unsigned COMMENT 'vpc this ip belongs to',
   `taken` datetime COMMENT 'Date taken',
   PRIMARY KEY (`id`),
+  CONSTRAINT `fk_private_ip_address__vpc_id` FOREIGN KEY 
`fk_private_ip_address__vpc_id`(`vpc_id`) REFERENCES `vpc`(`id`),
   CONSTRAINT `fk_private_ip_address__network_id` FOREIGN KEY (`network_id`) 
REFERENCES `networks` (`id`) ON DELETE CASCADE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 

Reply via email to