Applying the latest chances from the VPC Refactor branch onto the new one.

We will keep this branch as clean as possible to avoid problems with merge.

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

Branch: refs/heads/master
Commit: c81b3380dffa06a7134845ea97438619018b520f
Parents: 3ac2e22
Author: Wilder Rodrigues <wrodrig...@schubergphilis.com>
Authored: Mon Sep 29 16:14:34 2014 +0200
Committer: wilderrodrigues <wrodrig...@schubergphilis.com>
Committed: Tue Oct 14 15:08:13 2014 +0200

----------------------------------------------------------------------
 .../network/element/VirtualRouterElement.java   |  10 +-
 .../network/router/CommandSetupHelper.java      |  19 +-
 .../cloud/network/router/NetworkHelperImpl.java |  64 ++---
 .../VpcVirtualNetworkApplianceManager.java      |  13 +-
 .../com/cloud/network/rules/BasicVpnRules.java  |  48 ++++
 .../com/cloud/network/rules/DhcpEntryRules.java |   8 +-
 .../com/cloud/network/rules/DhcpPvlanRules.java |  67 ++++++
 .../src/com/cloud/network/rules/DhcpRules.java  |  67 ------
 .../cloud/network/rules/LoadBalancingRules.java |   3 +-
 .../rules/VirtualNetworkApplianceFactory.java   |   8 +-
 .../src/com/cloud/network/rules/VpnRules.java   |  48 ----
 .../topology/AdvancedNetworkTopology.java       |  22 +-
 .../topology/AdvancedNetworkVisitor.java        |  25 +-
 .../network/topology/BasicNetworkTopology.java  |  32 ++-
 .../network/topology/BasicNetworkVisitor.java   |  50 +++-
 .../network/topology/NetworkTopology.java       |  23 +-
 .../topology/NetworkTopologyVisitor.java        |  33 +--
 .../deployment/RouterDeploymentDefinition.java  | 232 +++++++++----------
 .../RouterDeploymentDefinitionBuilder.java      |  17 +-
 .../VpcRouterDeploymentDefinition.java          |  46 ++--
 .../VirtualNetworkApplianceManagerImplTest.java |  59 -----
 .../MockVpcVirtualNetworkApplianceManager.java  |  16 +-
 22 files changed, 387 insertions(+), 523 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/element/VirtualRouterElement.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/element/VirtualRouterElement.java 
b/server/src/com/cloud/network/element/VirtualRouterElement.java
index 83153fa..546aab4 100755
--- a/server/src/com/cloud/network/element/VirtualRouterElement.java
+++ b/server/src/com/cloud/network/element/VirtualRouterElement.java
@@ -717,11 +717,14 @@ public class VirtualRouterElement extends AdapterBase 
implements VirtualRouterEl
 
         VirtualMachineProfile uservm = vm;
 
+        DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
+        NetworkTopology networkTopology = 
networkTopologyContext.retrieveNetworkTopology(dcVO);
+
         // If any router is running then send save password command otherwise
         // save the password in DB
         for (VirtualRouter router : routers) {
             if (router.getState() == State.Running) {
-                return _routerMgr.savePasswordToRouter(network, nic, uservm, 
routers);
+                return networkTopology.savePasswordToRouter(network, nic, 
uservm, routers);
             }
         }
         String password = (String) 
uservm.getParameter(VirtualMachineProfile.Param.VmPassword);
@@ -735,10 +738,7 @@ public class VirtualRouterElement extends AdapterBase 
implements VirtualRouterEl
         userVmVO.setUpdateParameters(true);
         _userVmDao.update(userVmVO.getId(), userVmVO);
 
-        DataCenterVO dcVO = _dcDao.findById(network.getDataCenterId());
-        NetworkTopology networkTopology = 
networkTopologyContext.retrieveNetworkTopology(dcVO);
-
-        return networkTopology.savePasswordToRouter(network, nic, uservm, 
routers);
+        return true;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/router/CommandSetupHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/CommandSetupHelper.java 
b/server/src/com/cloud/network/router/CommandSetupHelper.java
index df5ad48..7ef04ad 100644
--- a/server/src/com/cloud/network/router/CommandSetupHelper.java
+++ b/server/src/com/cloud/network/router/CommandSetupHelper.java
@@ -107,6 +107,8 @@ import com.cloud.offering.NetworkOffering;
 import com.cloud.offerings.NetworkOfferingVO;
 import com.cloud.offerings.dao.NetworkOfferingDao;
 import com.cloud.service.dao.ServiceOfferingDao;
+import com.cloud.storage.GuestOSVO;
+import com.cloud.storage.dao.GuestOSDao;
 import com.cloud.user.Account;
 import com.cloud.uservm.UserVm;
 import com.cloud.utils.Pair;
@@ -173,6 +175,8 @@ public class CommandSetupHelper {
     private VlanDao _vlanDao;
     @Inject
     private IPAddressDao _ipAddressDao;
+    @Inject
+    private GuestOSDao _guestOSDao;
 
     @Inject
     private RouterControlHelper _routerControlHelper;
@@ -216,12 +220,17 @@ public class CommandSetupHelper {
     public void createDhcpEntryCommand(final VirtualRouter router, final 
UserVm vm, final NicVO nic, final Commands cmds) {
         final DhcpEntryCommand dhcpCommand = new 
DhcpEntryCommand(nic.getMacAddress(), nic.getIp4Address(), vm.getHostName(), 
nic.getIp6Address(),
                 _networkModel.getExecuteInSeqNtwkElmtCmd());
-        final DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
-        final Nic defaultNic = findGatewayIp(vm.getId());
-        String gatewayIp = defaultNic.getGateway();
-        if (gatewayIp != null && !gatewayIp.equals(nic.getGateway())) {
-            gatewayIp = "0.0.0.0";
+
+        String gatewayIp = nic.getGateway();
+        if (!nic.isDefaultNic()) {
+            GuestOSVO guestOS = _guestOSDao.findById(vm.getGuestOSId());
+            if (guestOS == null || 
!guestOS.getDisplayName().toLowerCase().contains("windows")) {
+                gatewayIp = "0.0.0.0";
+            }
         }
+
+        final DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId());
+
         dhcpCommand.setDefaultRouter(gatewayIp);
         dhcpCommand.setIp6Gateway(nic.getIp6Gateway());
         String ipaddress = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/router/NetworkHelperImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/NetworkHelperImpl.java 
b/server/src/com/cloud/network/router/NetworkHelperImpl.java
index 5acad2c..d2b160f 100644
--- a/server/src/com/cloud/network/router/NetworkHelperImpl.java
+++ b/server/src/com/cloud/network/router/NetworkHelperImpl.java
@@ -174,7 +174,7 @@ public class NetworkHelperImpl implements NetworkHelper {
             throw new AgentUnavailableException("Unable to send commands to 
virtual router ", router.getHostId(), e);
         }
 
-        if (answers == null || answers.length != cmds.size()) {
+        if ((answers == null) || (answers.length != cmds.size())) {
             return false;
         }
 
@@ -195,7 +195,7 @@ public class NetworkHelperImpl implements NetworkHelper {
         if (connectedRouters.isEmpty() || disconnectedRouters.isEmpty()) {
             return;
         }
-        if (connectedRouters.size() != 1 || disconnectedRouters.size() != 1) {
+        if ((connectedRouters.size() != 1) || (disconnectedRouters.size() != 
1)) {
             s_logger.warn("How many redundant routers do we have?? ");
             return;
         }
@@ -240,12 +240,6 @@ public class NetworkHelperImpl implements NetworkHelper {
         }
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see 
com.cloud.network.router.NetworkHelper#getRealPriority(com.cloud.vm.
-     * DomainRouterVO)
-     */
     @Override
     public int getRealPriority(final DomainRouterVO router) {
         int priority = router.getPriority();
@@ -255,14 +249,6 @@ public class NetworkHelperImpl implements NetworkHelper {
         return priority;
     }
 
-    // @Override
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * com.cloud.network.router.NetworkHelper#getNicTO(com.cloud.network.router
-     * .VirtualRouter, java.lang.Long, java.lang.String)
-     */
     @Override
     public NicTO getNicTO(final VirtualRouter router, final Long networkId, 
final String broadcastUri) {
         NicProfile nicProfile = _networkModel.getNicProfile(router, networkId, 
broadcastUri);
@@ -270,13 +256,6 @@ public class NetworkHelperImpl implements NetworkHelper {
         return _itMgr.toNicTO(nicProfile, router.getHypervisorType());
     }
 
-    // @Override
-    /*
-     * (non-Javadoc)
-     * 
-     * @see com.cloud.network.router.NetworkHelper#destroyRouter(long,
-     * com.cloud.user.Account, java.lang.Long)
-     */
     @Override
     public VirtualRouter destroyRouter(final long routerId, final Account 
caller, final Long callerUserId) throws ResourceUnavailableException, 
ConcurrentOperationException {
 
@@ -296,14 +275,6 @@ public class NetworkHelperImpl implements NetworkHelper {
         return router;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * 
com.cloud.network.router.NetworkHelper#checkRouterVersion(com.cloud.network
-     * .router.VirtualRouter)
-     */
-    // @Override
     @Override
     public boolean checkRouterVersion(final VirtualRouter router) {
         if 
(!VirtualNetworkApplianceManagerImpl.routerVersionCheckEnabled.value()) {
@@ -370,16 +341,16 @@ public class NetworkHelperImpl implements NetworkHelper {
 
     @Override
     public List<DomainRouterVO> startRouters(final RouterDeploymentDefinition 
routerDeploymentDefinition) throws StorageUnavailableException, 
InsufficientCapacityException,
-            ConcurrentOperationException, ResourceUnavailableException {
+    ConcurrentOperationException, ResourceUnavailableException {
 
         List<DomainRouterVO> runningRouters = new ArrayList<DomainRouterVO>();
 
         for (DomainRouterVO router : routerDeploymentDefinition.getRouters()) {
             boolean skip = false;
             final State state = router.getState();
-            if (router.getHostId() != null && state != State.Running) {
+            if ((router.getHostId() != null) && (state != State.Running)) {
                 final HostVO host = _hostDao.findById(router.getHostId());
-                if (host == null || host.getState() != Status.Up) {
+                if ((host == null) || (host.getState() != Status.Up)) {
                     skip = true;
                 }
             }
@@ -399,7 +370,7 @@ public class NetworkHelperImpl implements NetworkHelper {
     public DomainRouterVO startVirtualRouter(final DomainRouterVO router, 
final User user, final Account caller, final Map<Param, Object> params)
             throws StorageUnavailableException, InsufficientCapacityException, 
ConcurrentOperationException, ResourceUnavailableException {
 
-        if (router.getRole() != Role.VIRTUAL_ROUTER || 
!router.getIsRedundantRouter()) {
+        if ((router.getRole() != Role.VIRTUAL_ROUTER) || 
!router.getIsRedundantRouter()) {
             return start(router, user, caller, params, null);
         }
 
@@ -429,7 +400,7 @@ public class NetworkHelperImpl implements NetworkHelper {
         if (networkIds.size() != 0) {
             final List<DomainRouterVO> routerList = 
_routerDao.findByNetwork(networkIds.get(0));
             for (final DomainRouterVO rrouter : routerList) {
-                if (rrouter.getHostId() != null && 
rrouter.getIsRedundantRouter() && rrouter.getState() == State.Running) {
+                if ((rrouter.getHostId() != null) && 
rrouter.getIsRedundantRouter() && (rrouter.getState() == State.Running)) {
                     if (routerToBeAvoid != null) {
                         throw new ResourceUnavailableException("Try to start 
router " + router.getInstanceName() + "(" + router.getId() + ")"
                                 + ", but there are already two redundant 
routers with IP " + router.getPublicIpAddress() + ", they are " + 
rrouter.getInstanceName() + "("
@@ -452,7 +423,7 @@ public class NetworkHelperImpl implements NetworkHelper {
         
avoids[1].addCluster(_hostDao.findById(routerToBeAvoid.getHostId()).getClusterId());
         avoids[2] = new ExcludeList();
         final List<VolumeVO> volumes = 
_volumeDao.findByInstanceAndType(routerToBeAvoid.getId(), Volume.Type.ROOT);
-        if (volumes != null && volumes.size() != 0) {
+        if ((volumes != null) && (volumes.size() != 0)) {
             avoids[2].addPool(volumes.get(0).getPoolId());
         }
         avoids[2].addHost(routerToBeAvoid.getHostId());
@@ -499,7 +470,7 @@ public class NetworkHelperImpl implements NetworkHelper {
 
     @Override
     public DomainRouterVO deployRouter(final RouterDeploymentDefinition 
routerDeploymentDefinition, final boolean startRouter) throws 
InsufficientAddressCapacityException,
-            InsufficientServerCapacityException, 
InsufficientCapacityException, StorageUnavailableException, 
ResourceUnavailableException {
+    InsufficientServerCapacityException, InsufficientCapacityException, 
StorageUnavailableException, ResourceUnavailableException {
 
         final ServiceOfferingVO routerOffering = 
_serviceOfferingDao.findById(routerDeploymentDefinition.getOfferingId());
         final Account owner = routerDeploymentDefinition.getOwner();
@@ -553,7 +524,7 @@ public class NetworkHelperImpl implements NetworkHelper {
                 _itMgr.allocate(router.getInstanceName(), template, 
routerOffering, networks, routerDeploymentDefinition.getPlan(), null);
                 router = _routerDao.findById(router.getId());
             } catch (final InsufficientCapacityException ex) {
-                if (allocateRetry < 2 && iter.hasNext()) {
+                if ((allocateRetry < 2) && iter.hasNext()) {
                     s_logger.debug("Failed to allocate the VR with hypervisor 
type " + hType + ", retrying one more time");
                     continue;
                 } else {
@@ -568,7 +539,7 @@ public class NetworkHelperImpl implements NetworkHelper {
                     router = startVirtualRouter(router, 
_accountMgr.getSystemUser(), _accountMgr.getSystemAccount(), 
routerDeploymentDefinition.getParams());
                     break;
                 } catch (final InsufficientCapacityException ex) {
-                    if (startRetry < 2 && iter.hasNext()) {
+                    if ((startRetry < 2) && iter.hasNext()) {
                         s_logger.debug("Failed to start the VR  " + router + " 
with hypervisor type " + hType + ", " + "destroying it and recreating one more 
time");
                         // destroy the router
                         destroyRouter(router.getId(), 
_accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM), User.UID_SYSTEM);
@@ -637,12 +608,12 @@ public class NetworkHelperImpl implements NetworkHelper {
     protected HypervisorType getClusterToStartDomainRouterForOvm(final long 
podId) {
         final List<ClusterVO> clusters = _clusterDao.listByPodId(podId);
         for (final ClusterVO cv : clusters) {
-            if (cv.getHypervisorType() == HypervisorType.Ovm || 
cv.getHypervisorType() == HypervisorType.BareMetal) {
+            if ((cv.getHypervisorType() == HypervisorType.Ovm) || 
(cv.getHypervisorType() == HypervisorType.BareMetal)) {
                 continue;
             }
 
             final List<HostVO> hosts = 
_resourceMgr.listAllHostsInCluster(cv.getId());
-            if (hosts == null || hosts.isEmpty()) {
+            if ((hosts == null) || hosts.isEmpty()) {
                 continue;
             }
 
@@ -674,13 +645,14 @@ public class NetworkHelperImpl implements NetworkHelper {
             if (!routerDeploymentDefinition.isPublicNetwork()) {
                 final Nic placeholder = 
_networkModel.getPlaceholderNicForRouter(routerDeploymentDefinition.getGuestNetwork(),
 routerDeploymentDefinition.getPodId());
                 if (routerDeploymentDefinition.getGuestNetwork().getCidr() != 
null) {
-                    if (placeholder != null && placeholder.getIp4Address() != 
null) {
+                    if ((placeholder != null) && (placeholder.getIp4Address() 
!= null)) {
                         s_logger.debug("Requesting ipv4 address " + 
placeholder.getIp4Address() + " stored in placeholder nic for the network "
                                 + 
routerDeploymentDefinition.getGuestNetwork());
                         defaultNetworkStartIp = placeholder.getIp4Address();
                     } else {
                         final String startIp = 
_networkModel.getStartIpAddress(routerDeploymentDefinition.getGuestNetwork().getId());
-                        if (startIp != null && 
_ipAddressDao.findByIpAndSourceNetworkId(routerDeploymentDefinition.getGuestNetwork().getId(),
 startIp).getAllocatedTime() == null) {
+                        if ((startIp != null)
+                                && 
(_ipAddressDao.findByIpAndSourceNetworkId(routerDeploymentDefinition.getGuestNetwork().getId(),
 startIp).getAllocatedTime() == null)) {
                             defaultNetworkStartIp = startIp;
                         } else if (s_logger.isDebugEnabled()) {
                             s_logger.debug("First ipv4 " + startIp + " in 
network id=" + routerDeploymentDefinition.getGuestNetwork().getId()
@@ -690,13 +662,13 @@ public class NetworkHelperImpl implements NetworkHelper {
                 }
 
                 if (routerDeploymentDefinition.getGuestNetwork().getIp6Cidr() 
!= null) {
-                    if (placeholder != null && placeholder.getIp6Address() != 
null) {
+                    if ((placeholder != null) && (placeholder.getIp6Address() 
!= null)) {
                         s_logger.debug("Requesting ipv6 address " + 
placeholder.getIp6Address() + " stored in placeholder nic for the network "
                                 + 
routerDeploymentDefinition.getGuestNetwork());
                         defaultNetworkStartIpv6 = placeholder.getIp6Address();
                     } else {
                         final String startIpv6 = 
_networkModel.getStartIpv6Address(routerDeploymentDefinition.getGuestNetwork().getId());
-                        if (startIpv6 != null && 
_ipv6Dao.findByNetworkIdAndIp(routerDeploymentDefinition.getGuestNetwork().getId(),
 startIpv6) == null) {
+                        if ((startIpv6 != null) && 
(_ipv6Dao.findByNetworkIdAndIp(routerDeploymentDefinition.getGuestNetwork().getId(),
 startIpv6) == null)) {
                             defaultNetworkStartIpv6 = startIpv6;
                         } else if (s_logger.isDebugEnabled()) {
                             s_logger.debug("First ipv6 " + startIpv6 + " in 
network id=" + routerDeploymentDefinition.getGuestNetwork().getId()

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java 
b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
index 5785263..c6181e9 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManager.java
@@ -23,9 +23,7 @@ import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.RemoteAccessVpn;
 import com.cloud.network.Site2SiteVpnConnection;
 import com.cloud.network.VpcVirtualNetworkApplianceService;
-import com.cloud.network.VpnUser;
 import com.cloud.network.vpc.PrivateGateway;
-import com.cloud.network.vpc.StaticRouteProfile;
 import com.cloud.vm.DomainRouterVO;
 
 public interface VpcVirtualNetworkApplianceManager extends 
VirtualNetworkApplianceManager, VpcVirtualNetworkApplianceService {
@@ -76,13 +74,4 @@ public interface VpcVirtualNetworkApplianceManager extends 
VirtualNetworkApplian
      * @throws ResourceUnavailableException
      */
     boolean stopRemoteAccessVpn(RemoteAccessVpn vpn, VirtualRouter router) 
throws ResourceUnavailableException;
-
-    /**
-     * @param vpn
-     * @param users
-     * @param routers
-     * @return
-     * @throws ResourceUnavailableException
-     */
-    String[] applyVpnUsers(RemoteAccessVpn vpn, List<? extends VpnUser> users, 
VirtualRouter router) throws ResourceUnavailableException;
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/rules/BasicVpnRules.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/BasicVpnRules.java 
b/server/src/com/cloud/network/rules/BasicVpnRules.java
new file mode 100644
index 0000000..1b86822
--- /dev/null
+++ b/server/src/com/cloud/network/rules/BasicVpnRules.java
@@ -0,0 +1,48 @@
+// 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.
+
+package com.cloud.network.rules;
+
+import java.util.List;
+
+import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
+
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.VpnUser;
+import com.cloud.network.router.VirtualRouter;
+
+public class BasicVpnRules extends RuleApplier {
+
+    private final List<? extends VpnUser> _users;
+
+    public BasicVpnRules(final Network network, final List<? extends VpnUser> 
users) {
+        super(network);
+        _users = users;
+    }
+
+    @Override
+    public boolean accept(final NetworkTopologyVisitor visitor, final 
VirtualRouter router) throws ResourceUnavailableException {
+        _router = router;
+
+        return visitor.visit(this);
+    }
+
+    public List<? extends VpnUser> getUsers() {
+        return _users;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/rules/DhcpEntryRules.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/DhcpEntryRules.java 
b/server/src/com/cloud/network/rules/DhcpEntryRules.java
index 991813c..c4a91f4 100644
--- a/server/src/com/cloud/network/rules/DhcpEntryRules.java
+++ b/server/src/com/cloud/network/rules/DhcpEntryRules.java
@@ -62,8 +62,12 @@ public class DhcpEntryRules extends RuleApplier {
         return visitor.visit(this);
     }
 
-    public NicProfile getNic() {
-        return _nic;
+    public VirtualMachineProfile getProfile() {
+        return _profile;
+    }
+
+    public DeployDestination getDestination() {
+        return _destination;
     }
 
     public NicVO getNicVo() {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/rules/DhcpPvlanRules.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/DhcpPvlanRules.java 
b/server/src/com/cloud/network/rules/DhcpPvlanRules.java
new file mode 100644
index 0000000..c326aa8
--- /dev/null
+++ b/server/src/com/cloud/network/rules/DhcpPvlanRules.java
@@ -0,0 +1,67 @@
+// 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.
+
+package com.cloud.network.rules;
+
+import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
+
+import com.cloud.agent.api.PvlanSetupCommand;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.Network;
+import com.cloud.network.NetworkModel;
+import com.cloud.network.dao.NetworkDao;
+import com.cloud.network.router.VirtualRouter;
+import com.cloud.vm.NicProfile;
+
+public class DhcpPvlanRules extends RuleApplier {
+
+    private final boolean _isAddPvlan;
+    private final NicProfile _nic;
+
+    private PvlanSetupCommand _setupCommand;
+
+    public DhcpPvlanRules(final boolean isAddPvlan, final NicProfile nic) {
+        super(null);
+
+        _isAddPvlan = isAddPvlan;
+        _nic = nic;
+    }
+
+    @Override
+    public boolean accept(final NetworkTopologyVisitor visitor, final 
VirtualRouter router) throws ResourceUnavailableException {
+        _router = router;
+
+        String op = "add";
+        if (!_isAddPvlan) {
+            op = "delete";
+        }
+
+        NetworkDao networkDao = 
visitor.getVirtualNetworkApplianceFactory().getNetworkDao();
+        final Network network = networkDao.findById(_nic.getNetworkId());
+
+        NetworkModel networkModel = 
visitor.getVirtualNetworkApplianceFactory().getNetworkModel();
+        final String networkTag = 
networkModel.getNetworkTag(_router.getHypervisorType(), network);
+
+        _setupCommand = PvlanSetupCommand.createDhcpSetup(op, 
_nic.getBroadCastUri(), networkTag, _router.getInstanceName(), 
_nic.getMacAddress(), _nic.getIp4Address());
+
+        return visitor.visit(this);
+    }
+
+    public PvlanSetupCommand getSetupCommand() {
+        return _setupCommand;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/rules/DhcpRules.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/DhcpRules.java 
b/server/src/com/cloud/network/rules/DhcpRules.java
deleted file mode 100644
index 5e8cf9e..0000000
--- a/server/src/com/cloud/network/rules/DhcpRules.java
+++ /dev/null
@@ -1,67 +0,0 @@
-// 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.
-
-package com.cloud.network.rules;
-
-import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
-
-import com.cloud.agent.api.PvlanSetupCommand;
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.Network;
-import com.cloud.network.NetworkModel;
-import com.cloud.network.dao.NetworkDao;
-import com.cloud.network.router.VirtualRouter;
-import com.cloud.vm.NicProfile;
-
-public class DhcpRules extends RuleApplier {
-
-    private final boolean _isAddPvlan;
-    private final NicProfile _nic;
-
-    private PvlanSetupCommand _setupCommand;
-
-    public DhcpPvlanRules(final boolean isAddPvlan, final NicProfile nic) {
-        super(null);
-
-        _isAddPvlan = isAddPvlan;
-        _nic = nic;
-    }
-
-    @Override
-    public boolean accept(final NetworkTopologyVisitor visitor, final 
VirtualRouter router) throws ResourceUnavailableException {
-        _router = router;
-
-        String op = "add";
-        if (!_isAddPvlan) {
-            op = "delete";
-        }
-
-        NetworkDao networkDao = 
visitor.getVirtualNetworkApplianceFactory().getNetworkDao();
-        final Network network = networkDao.findById(_nic.getNetworkId());
-
-        NetworkModel networkModel = 
visitor.getVirtualNetworkApplianceFactory().getNetworkModel();
-        final String networkTag = 
networkModel.getNetworkTag(_router.getHypervisorType(), network);
-
-        _setupCommand = PvlanSetupCommand.createDhcpSetup(op, 
_nic.getBroadCastUri(), networkTag, _router.getInstanceName(), 
_nic.getMacAddress(), _nic.getIp4Address());
-
-        return visitor.visit(this);
-    }
-
-    public PvlanSetupCommand getSetupCommand() {
-        return _setupCommand;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/rules/LoadBalancingRules.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/LoadBalancingRules.java 
b/server/src/com/cloud/network/rules/LoadBalancingRules.java
index 62c8b3b..ad9e013 100644
--- a/server/src/com/cloud/network/rules/LoadBalancingRules.java
+++ b/server/src/com/cloud/network/rules/LoadBalancingRules.java
@@ -53,8 +53,7 @@ public class LoadBalancingRules extends RuleApplier {
         // For load balancer we have to resend all lb rules for the network
         final List<LoadBalancerVO> lbs = 
loadBalancerDao.listByNetworkIdAndScheme(_network.getId(), Scheme.Public);
 
-        // We are cleaning it before because all the rules have to be sent to
-        // the router.
+        // We are cleaning it before because all the rules have to be sent to 
the router.
         _rules.clear();
 
         LoadBalancingRulesManager lbMgr = 
visitor.getVirtualNetworkApplianceFactory().getLbMgr();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
----------------------------------------------------------------------
diff --git 
a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java 
b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
index e775fb1..34400ea 100644
--- a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
+++ b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java
@@ -18,6 +18,9 @@ package com.cloud.network.rules;
 
 import javax.inject.Inject;
 
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
 import com.cloud.dc.dao.DataCenterDao;
 import com.cloud.dc.dao.HostPodDao;
 import com.cloud.dc.dao.VlanDao;
@@ -80,8 +83,11 @@ public class VirtualNetworkApplianceFactory {
     private IpAddressManager _ipAddrMgr;
     @Inject
     private NetworkACLManager _networkACLMgr;
-    @Inject
+
+    @Autowired
+    @Qualifier("networkHelper")
     private NetworkHelper _networkHelper;
+
     @Inject
     private NicProfileHelper _nicProfileHelper;
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/com/cloud/network/rules/VpnRules.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/rules/VpnRules.java 
b/server/src/com/cloud/network/rules/VpnRules.java
deleted file mode 100644
index f42465b..0000000
--- a/server/src/com/cloud/network/rules/VpnRules.java
+++ /dev/null
@@ -1,48 +0,0 @@
-// 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.
-
-package com.cloud.network.rules;
-
-import java.util.List;
-
-import org.apache.cloudstack.network.topology.NetworkTopologyVisitor;
-
-import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.Network;
-import com.cloud.network.VpnUser;
-import com.cloud.network.router.VirtualRouter;
-
-public class VpnRules extends RuleApplier {
-
-    private final List<? extends VpnUser> _users;
-
-    public VpnRules(final Network network, final List<? extends VpnUser> 
users) {
-        super(network);
-        _users = users;
-    }
-
-    @Override
-    public boolean accept(final NetworkTopologyVisitor visitor, final 
VirtualRouter router) throws ResourceUnavailableException {
-        _router = router;
-
-        return visitor.visit(this);
-    }
-
-    public List<? extends VpnUser> getUsers() {
-        return _users;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
 
b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
index b9e3ad6..f35af42 100644
--- 
a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
+++ 
b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java
@@ -35,7 +35,7 @@ import com.cloud.network.VpnUser;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.rules.AdvancedVpnRules;
 import com.cloud.network.rules.DhcpEntryRules;
-import com.cloud.network.rules.DhcpSubNetRules;
+import com.cloud.network.rules.DhcpPvlanRules;
 import com.cloud.network.rules.NetworkAclsRules;
 import com.cloud.network.rules.NicPlugInOutRules;
 import com.cloud.network.rules.PrivateGatewayRules;
@@ -90,6 +90,8 @@ public class AdvancedNetworkTopology extends 
BasicNetworkTopology {
     @Override
     public boolean applyStaticRoutes(final List<StaticRouteProfile> 
staticRoutes, final List<DomainRouterVO> routers) throws 
ResourceUnavailableException {
 
+        s_logger.debug("APPLYING STATIC ROUTES RULES");
+
         if (staticRoutes == null || staticRoutes.isEmpty()) {
             s_logger.debug("No static routes to apply");
             return true;
@@ -130,24 +132,6 @@ public class AdvancedNetworkTopology extends 
BasicNetworkTopology {
     }
 
     @Override
-    public boolean configDhcpForSubnet(final Network network, final NicProfile 
nic, final VirtualMachineProfile profile, final DeployDestination dest,
-            final List<DomainRouterVO> routers) throws 
ResourceUnavailableException {
-
-        s_logger.debug("CONFIG DHCP FOR SUBNETS RULES");
-
-        // Asuming we have only one router per network For Now.
-        final DomainRouterVO router = routers.get(0);
-        if (router.getState() != State.Running) {
-            s_logger.warn("Failed to configure dhcp: router not in running 
state");
-            throw new ResourceUnavailableException("Unable to assign ip 
addresses, domR is not in right state " + router.getState(), DataCenter.class, 
network.getDataCenterId());
-        }
-
-        DhcpSubNetRules subNetRules = new DhcpSubNetRules(network, nic, 
profile);
-
-        return subNetRules.accept(_advancedVisitor, router);
-    }
-
-    @Override
     public boolean setupPrivateGateway(final PrivateGateway gateway, final 
VirtualRouter router) throws ConcurrentOperationException, 
ResourceUnavailableException {
         s_logger.debug("SETUP PRIVATE GATEWAY RULES");
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java 
b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
index 0e265a3..8ee3010 100644
--- 
a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
+++ 
b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java
@@ -26,7 +26,6 @@ import org.springframework.stereotype.Component;
 
 import com.cloud.agent.api.Command;
 import com.cloud.agent.api.PvlanSetupCommand;
-import com.cloud.agent.api.routing.IpAliasTO;
 import com.cloud.agent.manager.Commands;
 import com.cloud.dc.DataCenter;
 import com.cloud.exception.ResourceUnavailableException;
@@ -36,7 +35,7 @@ import com.cloud.network.VpnUser;
 import com.cloud.network.router.VirtualRouter;
 import com.cloud.network.rules.AdvancedVpnRules;
 import com.cloud.network.rules.DhcpEntryRules;
-import com.cloud.network.rules.DhcpSubNetRules;
+import com.cloud.network.rules.DhcpPvlanRules;
 import com.cloud.network.rules.NetworkAclsRules;
 import com.cloud.network.rules.NicPlugInOutRules;
 import com.cloud.network.rules.PrivateGatewayRules;
@@ -53,7 +52,6 @@ import com.cloud.vm.NicVO;
 import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.VirtualMachineProfile;
-import com.cloud.vm.dao.NicIpAliasVO;
 
 @Component
 public class AdvancedNetworkVisitor extends BasicNetworkVisitor {
@@ -191,27 +189,6 @@ public class AdvancedNetworkVisitor extends 
BasicNetworkVisitor {
     }
 
     @Override
-    public boolean visit(final DhcpSubNetRules subnet) throws 
ResourceUnavailableException {
-        final VirtualRouter router = subnet.getRouter();
-        final Network network = subnet.getNetwork();
-        final NicIpAliasVO nicAlias = subnet.getNicAlias();
-        final String routerAliasIp = subnet.getRouterAliasIp();
-
-        final Commands cmds = new Commands(Command.OnError.Stop);
-
-        final List<IpAliasTO> ipaliasTo = new ArrayList<IpAliasTO>();
-        ipaliasTo.add(new IpAliasTO(routerAliasIp, nicAlias.getNetmask(), 
nicAlias.getAliasCount().toString()));
-
-        _commandSetupHelper.createIpAlias(router, ipaliasTo, 
nicAlias.getNetworkId(), cmds);
-
-        // also add the required configuration to the dnsmasq for supporting
-        // dhcp and dns on the new ip.
-        _commandSetupHelper.configDnsMasq(router, network, cmds);
-
-        return _networkGeneralHelper.sendCommandsToRouter(router, cmds);
-    }
-
-    @Override
     public boolean visit(final StaticRoutesRules staticRoutesRules) throws 
ResourceUnavailableException {
         final VirtualRouter router = staticRoutesRules.getRouter();
         List<StaticRouteProfile> staticRoutes = 
staticRoutesRules.getStaticRoutes();

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java 
b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
index d35e7f3..23aefb5 100644
--- 
a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
+++ 
b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java
@@ -45,7 +45,9 @@ import com.cloud.network.VpnUser;
 import com.cloud.network.lb.LoadBalancingRule;
 import com.cloud.network.router.NetworkHelper;
 import com.cloud.network.router.VirtualRouter;
+import com.cloud.network.rules.BasicVpnRules;
 import com.cloud.network.rules.DhcpEntryRules;
+import com.cloud.network.rules.DhcpSubNetRules;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.rules.FirewallRules;
 import com.cloud.network.rules.IpAssociationRules;
@@ -58,18 +60,15 @@ import com.cloud.network.rules.StaticNat;
 import com.cloud.network.rules.StaticNatRules;
 import com.cloud.network.rules.UserdataPwdRules;
 import com.cloud.network.rules.UserdataToRouterRules;
-import com.cloud.network.rules.VpnRules;
 import com.cloud.network.vpc.NetworkACLItem;
 import com.cloud.network.vpc.PrivateGateway;
 import com.cloud.network.vpc.StaticRouteProfile;
 import com.cloud.utils.exception.CloudRuntimeException;
 import com.cloud.vm.DomainRouterVO;
 import com.cloud.vm.NicProfile;
-import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachine;
 import com.cloud.vm.VirtualMachine.State;
 import com.cloud.vm.VirtualMachineProfile;
-import com.cloud.vm.dao.UserVmDao;
 
 @Component
 public class BasicNetworkTopology implements NetworkTopology {
@@ -90,14 +89,6 @@ public class BasicNetworkTopology implements NetworkTopology 
{
     @Qualifier("networkHelper")
     protected NetworkHelper _networkHelper;
 
-    @Inject
-    protected UserVmDao _userVmDao;
-
-    @Override
-    public StringBuilder createGuestBootLoadArgs(final NicProfile guestNic, 
final String defaultDns1, final String defaultDns2, final DomainRouterVO 
router) {
-        return null;
-    }
-
     @Override
     public NetworkTopologyVisitor getVisitor() {
         return _basicVisitor;
@@ -133,7 +124,18 @@ public class BasicNetworkTopology implements 
NetworkTopology {
     public boolean configDhcpForSubnet(final Network network, final NicProfile 
nic, final VirtualMachineProfile profile, final DeployDestination dest,
             final List<DomainRouterVO> routers) throws 
ResourceUnavailableException {
 
-        throw new CloudRuntimeException("configDhcpForSubnet not implemented 
in Basic Network Topology.");
+        s_logger.debug("CONFIG DHCP FOR SUBNETS RULES");
+
+        // Assuming we have only one router per network For Now.
+        final DomainRouterVO router = routers.get(0);
+        if (router.getState() != State.Running) {
+            s_logger.warn("Failed to configure dhcp: router not in running 
state");
+            throw new ResourceUnavailableException("Unable to assign ip 
addresses, domR is not in right state " + router.getState(), DataCenter.class, 
network.getDataCenterId());
+        }
+
+        DhcpSubNetRules subNetRules = new DhcpSubNetRules(network, nic, 
profile);
+
+        return subNetRules.accept(_basicVisitor, router);
     }
 
     @Override
@@ -270,7 +272,7 @@ public class BasicNetworkTopology implements 
NetworkTopology {
             throw new ResourceUnavailableException("Unable to assign ip 
addresses, domR doesn't exist for network " + network.getId(), 
DataCenter.class, network.getDataCenterId());
         }
 
-        s_logger.debug("APPLYING VPN RULES");
+        s_logger.debug("APPLYING BASIC VPN RULES");
 
         BasicVpnRules vpnRules = new BasicVpnRules(network, users);
         boolean agentResults = true;
@@ -282,8 +284,6 @@ public class BasicNetworkTopology implements 
NetworkTopology {
                         network.getDataCenterId());
             }
 
-            VpnRules vpnRules = 
_virtualNetworkApplianceFactory.createVpnRules(network, users);
-
             // Currently we receive just one answer from the agent. In the
             // future we have to parse individual answers and set
             // results accordingly
@@ -307,8 +307,6 @@ public class BasicNetworkTopology implements 
NetworkTopology {
     public boolean savePasswordToRouter(final Network network, final 
NicProfile nic, final VirtualMachineProfile profile, final List<? extends 
VirtualRouter> routers)
             throws ResourceUnavailableException {
 
-        _userVmDao.loadDetails((UserVmVO) profile.getVirtualMachine());
-
         s_logger.debug("SAVE PASSWORD TO ROUTE RULES");
 
         final String typeString = "save password entry";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java 
b/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
index db0b6e5..53ddebb 100644
--- a/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
+++ b/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java
@@ -17,14 +17,18 @@
 
 package org.apache.cloudstack.network.topology;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.inject.Inject;
 
 import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
 import com.cloud.agent.api.Command;
+import com.cloud.agent.api.routing.IpAliasTO;
 import com.cloud.agent.manager.Commands;
 import com.cloud.deploy.DeployDestination;
 import com.cloud.exception.ResourceUnavailableException;
@@ -35,7 +39,10 @@ import com.cloud.network.lb.LoadBalancingRule;
 import com.cloud.network.router.CommandSetupHelper;
 import com.cloud.network.router.NetworkHelper;
 import com.cloud.network.router.VirtualRouter;
+import com.cloud.network.rules.AdvancedVpnRules;
+import com.cloud.network.rules.BasicVpnRules;
 import com.cloud.network.rules.DhcpEntryRules;
+import com.cloud.network.rules.DhcpPvlanRules;
 import com.cloud.network.rules.DhcpSubNetRules;
 import com.cloud.network.rules.FirewallRule;
 import com.cloud.network.rules.FirewallRule.Purpose;
@@ -62,17 +69,15 @@ import com.cloud.vm.DomainRouterVO;
 import com.cloud.vm.NicVO;
 import com.cloud.vm.UserVmVO;
 import com.cloud.vm.VirtualMachineProfile;
+import com.cloud.vm.dao.NicIpAliasVO;
 
 @Component
 public class BasicNetworkVisitor extends NetworkTopologyVisitor {
 
     private static final Logger s_logger = 
Logger.getLogger(BasicNetworkVisitor.class);
 
-    public BasicNetworkVisitor(final NetworkTopology networkTopology) {
-        super(networkTopology);
-    }
-
-    @Inject
+    @Autowired
+    @Qualifier("networkHelper")
     protected NetworkHelper _networkGeneralHelper;
 
     @Inject
@@ -257,13 +262,29 @@ public class BasicNetworkVisitor extends 
NetworkTopologyVisitor {
     }
 
     @Override
-    public boolean visit(final DhcpPvlanRules vpn) throws 
ResourceUnavailableException {
-        throw new CloudRuntimeException("DhcpPvlanRules not implemented in 
Basic Network Topology.");
+    public boolean visit(final DhcpSubNetRules subnet) throws 
ResourceUnavailableException {
+        final VirtualRouter router = subnet.getRouter();
+        final Network network = subnet.getNetwork();
+        final NicIpAliasVO nicAlias = subnet.getNicAlias();
+        final String routerAliasIp = subnet.getRouterAliasIp();
+
+        final Commands cmds = new Commands(Command.OnError.Stop);
+
+        final List<IpAliasTO> ipaliasTo = new ArrayList<IpAliasTO>();
+        ipaliasTo.add(new IpAliasTO(routerAliasIp, nicAlias.getNetmask(), 
nicAlias.getAliasCount().toString()));
+
+        _commandSetupHelper.createIpAlias(router, ipaliasTo, 
nicAlias.getNetworkId(), cmds);
+
+        // also add the required configuration to the dnsmasq for supporting
+        // dhcp and dns on the new ip.
+        _commandSetupHelper.configDnsMasq(router, network, cmds);
+
+        return _networkGeneralHelper.sendCommandsToRouter(router, cmds);
     }
 
     @Override
-    public boolean visit(final DhcpSubNetRules vpn) throws 
ResourceUnavailableException {
-        throw new CloudRuntimeException("DhcpSubNetRules not implemented in 
Basic Network Topology.");
+    public boolean visit(final DhcpPvlanRules dhcpRules) throws 
ResourceUnavailableException {
+        throw new CloudRuntimeException("DhcpPvlanRules not implemented in 
Basic Network Topology.");
     }
 
     @Override
@@ -272,17 +293,17 @@ public class BasicNetworkVisitor extends 
NetworkTopologyVisitor {
     }
 
     @Override
-    public boolean visit(final NetworkAclsRules nat) throws 
ResourceUnavailableException {
+    public boolean visit(final NetworkAclsRules aclsRules) throws 
ResourceUnavailableException {
         throw new CloudRuntimeException("NetworkAclsRules not implemented in 
Basic Network Topology.");
     }
 
     @Override
-    public boolean visit(final VpcIpAssociationRules nat) throws 
ResourceUnavailableException {
+    public boolean visit(final VpcIpAssociationRules ipRules) throws 
ResourceUnavailableException {
         throw new CloudRuntimeException("VpcIpAssociationRules not implemented 
in Basic Network Topology.");
     }
 
     @Override
-    public boolean visit(final PrivateGatewayRules userdata) throws 
ResourceUnavailableException {
+    public boolean visit(final PrivateGatewayRules pvtGatewayRules) throws 
ResourceUnavailableException {
         throw new CloudRuntimeException("PrivateGatewayRules not implemented 
in Basic Network Topology.");
     }
 
@@ -290,4 +311,9 @@ public class BasicNetworkVisitor extends 
NetworkTopologyVisitor {
     public boolean visit(final StaticRoutesRules staticRoutesRules) throws 
ResourceUnavailableException {
         throw new CloudRuntimeException("StaticRoutesRules not implemented in 
Basic Network Topology.");
     }
+
+    @Override
+    public boolean visit(final AdvancedVpnRules vpnRules) throws 
ResourceUnavailableException {
+        throw new CloudRuntimeException("AdvancedVpnRules not implemented in 
Basic Network Topology.");
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java 
b/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
index 2129b42..6e42ad3 100644
--- a/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
+++ b/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java
@@ -19,12 +19,12 @@ package org.apache.cloudstack.network.topology;
 
 import java.util.List;
 
-import com.cloud.dc.DataCenter;
 import com.cloud.deploy.DeployDestination;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.ResourceUnavailableException;
 import com.cloud.network.Network;
 import com.cloud.network.PublicIpAddress;
+import com.cloud.network.RemoteAccessVpn;
 import com.cloud.network.VpnUser;
 import com.cloud.network.lb.LoadBalancingRule;
 import com.cloud.network.router.VirtualRouter;
@@ -41,23 +41,9 @@ import com.cloud.vm.VirtualMachineProfile;
 
 public interface NetworkTopology {
 
-<<<<<<< HEAD
-<<<<<<< HEAD
-    StringBuilder createGuestBootLoadArgs(final NicProfile guestNic, final 
String defaultDns1, final String defaultDns2, DomainRouterVO router);
-
-    String retrieveGuestDhcpRange(final NicProfile guestNic, final Network 
guestNetwork, final DataCenter dc);
-
-    NicProfile retrieveControlNic(final VirtualMachineProfile profile);
-
-
-    // ====== USER FOR VPC ONLY ====== //
-=======
-=======
     NetworkTopologyVisitor getVisitor();
 
->>>>>>> 06c77f1... refactor all private methods in the virtual router 
appliance and VPC appliance
     // ====== USED FOR VPC ONLY ====== //
->>>>>>> 0b8b22f... adding setupPrivateGateway to new style;
 
     boolean setupDhcpForPvlan(final boolean add, final DomainRouterVO router, 
final Long hostId, final NicProfile nic) throws ResourceUnavailableException;
 
@@ -68,17 +54,10 @@ public interface NetworkTopology {
             throws ResourceUnavailableException;
 
     boolean applyStaticRoutes(final List<StaticRouteProfile> staticRoutes, 
final List<DomainRouterVO> routers) throws ResourceUnavailableException;
-<<<<<<< HEAD
-<<<<<<< HEAD
-=======
-    
-=======
 
->>>>>>> 5e11fba... fixing check style issues
     boolean setupPrivateGateway(final PrivateGateway gateway, final 
VirtualRouter router) throws ConcurrentOperationException, 
ResourceUnavailableException;
 
     String[] applyVpnUsers(final RemoteAccessVpn vpn, final List<? extends 
VpnUser> users, final VirtualRouter router) throws ResourceUnavailableException;
->>>>>>> 0b8b22f... adding setupPrivateGateway to new style;
 
     // ====== USED FOR GUEST NETWORK AND VCP ====== //
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java 
b/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
index 621ec8a..7c57d06 100644
--- 
a/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
+++ 
b/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java
@@ -18,7 +18,10 @@
 package org.apache.cloudstack.network.topology;
 
 import com.cloud.exception.ResourceUnavailableException;
-import com.cloud.network.rules.DhcpRules;
+import com.cloud.network.rules.AdvancedVpnRules;
+import com.cloud.network.rules.BasicVpnRules;
+import com.cloud.network.rules.DhcpEntryRules;
+import com.cloud.network.rules.DhcpPvlanRules;
 import com.cloud.network.rules.DhcpSubNetRules;
 import com.cloud.network.rules.FirewallRules;
 import com.cloud.network.rules.IpAssociationRules;
@@ -34,43 +37,27 @@ import com.cloud.network.rules.UserdataPwdRules;
 import com.cloud.network.rules.UserdataToRouterRules;
 import com.cloud.network.rules.VirtualNetworkApplianceFactory;
 import com.cloud.network.rules.VpcIpAssociationRules;
-import com.cloud.network.rules.VpnRules;
 
 public abstract class NetworkTopologyVisitor {
 
     public abstract VirtualNetworkApplianceFactory 
getVirtualNetworkApplianceFactory();
 
     public abstract boolean visit(StaticNatRules nat) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(LoadBalancingRules loadbalancing) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(FirewallRules firewall) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(IpAssociationRules ipAddresses) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(UserdataPwdRules userdata) throws 
ResourceUnavailableException;
-
-    public abstract boolean visit(DhcpRules dhcp) throws 
ResourceUnavailableException;
-
+    public abstract boolean visit(DhcpEntryRules dhcp) throws 
ResourceUnavailableException;
     public abstract boolean visit(SshKeyToRouterRules ssh) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(PasswordToRouterRules pwd) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(NetworkAclsRules acl) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(VpcIpAssociationRules vpcIp) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(UserdataToRouterRules userdata) throws 
ResourceUnavailableException;
-
-    public abstract boolean visit(VpnRules userdata) throws 
ResourceUnavailableException;
-
-    public abstract boolean visit(PrivateGatewayRules userdata) throws 
ResourceUnavailableException;
-
-    public abstract boolean visit(DhcpPvlanRules vpn) throws 
ResourceUnavailableException;
-
-    public abstract boolean visit(DhcpSubNetRules subnet) throws 
ResourceUnavailableException;
-
+    public abstract boolean visit(BasicVpnRules vpnRules) throws 
ResourceUnavailableException;
+    public abstract boolean visit(AdvancedVpnRules vpnRules) throws 
ResourceUnavailableException;
+    public abstract boolean visit(PrivateGatewayRules pvtGatewayRules) throws 
ResourceUnavailableException;
+    public abstract boolean visit(DhcpPvlanRules dhcpRules) throws 
ResourceUnavailableException;
+    public abstract boolean visit(DhcpSubNetRules dhcpRules) throws 
ResourceUnavailableException;
     public abstract boolean visit(NicPlugInOutRules nicPlugInOutRules) throws 
ResourceUnavailableException;
-
     public abstract boolean visit(StaticRoutesRules staticRoutesRules) throws 
ResourceUnavailableException;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
 
b/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
index 3342004..7728f61 100644
--- 
a/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
+++ 
b/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinition.java
@@ -100,7 +100,8 @@ public class RouterDeploymentDefinition {
     protected boolean isPublicNetwork;
     protected PublicIp sourceNatIp;
 
-    protected RouterDeploymentDefinition(final Network guestNetwork, final 
DeployDestination dest, final Account owner, final Map<Param, Object> params, 
final boolean isRedundant) {
+    protected RouterDeploymentDefinition(final Network guestNetwork, final 
DeployDestination dest,
+            final Account owner, final Map<Param, Object> params, final 
boolean isRedundant) {
 
         this.guestNetwork = guestNetwork;
         this.dest = dest;
@@ -110,105 +111,98 @@ public class RouterDeploymentDefinition {
     }
 
     public Long getOfferingId() {
-        return offeringId;
+        return this.offeringId;
     }
 
     public Vpc getVpc() {
         return null;
     }
-
     public Network getGuestNetwork() {
         return guestNetwork;
     }
-
     public DeployDestination getDest() {
         return dest;
     }
-
     public Account getOwner() {
         return owner;
     }
-
     public Map<Param, Object> getParams() {
         return params;
     }
-
     public boolean isRedundant() {
         return isRedundant;
     }
-
     public DeploymentPlan getPlan() {
         return plan;
     }
-
     public boolean isVpcRouter() {
         return false;
     }
-
     public Pod getPod() {
         return dest.getPod();
     }
-
     public Long getPodId() {
         return dest.getPod() == null ? null : dest.getPod().getId();
     }
-
     public List<DomainRouterVO> getRouters() {
         return routers;
     }
 
     public VirtualRouterProvider getVirtualProvider() {
-        return vrProvider;
+        return this.vrProvider;
     }
 
     public boolean isBasic() {
-        return dest.getDataCenter().getNetworkType() == NetworkType.Basic;
+        return this.dest.getDataCenter().getNetworkType() == NetworkType.Basic;
     }
 
     public boolean isPublicNetwork() {
-        return isPublicNetwork;
+        return this.isPublicNetwork;
     }
 
     public PublicIp getSourceNatIP() {
-        return sourceNatIp;
+        return this.sourceNatIp;
     }
 
     protected void generateDeploymentPlan() {
-        final long dcId = dest.getDataCenter().getId();
+        final long dcId = this.dest.getDataCenter().getId();
         Long podId = null;
-        if (isBasic()) {
-            if (dest.getPod() == null) {
+        if (this.isBasic()) {
+            if (this.dest.getPod() == null) {
                 throw new CloudRuntimeException("Pod id is expected in 
deployment destination");
             }
-            podId = dest.getPod().getId();
+            podId = this.dest.getPod().getId();
         }
-        plan = new DataCenterDeployment(dcId, podId, null, null, null, null);
+        this.plan = new DataCenterDeployment(dcId, podId, null, null, null, 
null);
     }
 
-    public List<DomainRouterVO> deployVirtualRouter() throws 
InsufficientCapacityException, ConcurrentOperationException, 
ResourceUnavailableException {
+    public List<DomainRouterVO> deployVirtualRouter()
+            throws InsufficientCapacityException,
+            ConcurrentOperationException, ResourceUnavailableException {
 
-        findOrDeployVirtualRouter();
+        this.findOrDeployVirtualRouter();
 
         return nwHelper.startRouters(this);
     }
 
     @DB
-    protected void findOrDeployVirtualRouter() throws 
ConcurrentOperationException, InsufficientCapacityException, 
ResourceUnavailableException {
+    protected void findOrDeployVirtualRouter()
+            throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceUnavailableException {
 
         try {
-            lock();
-            checkPreconditions();
+            this.lock();
+            this.checkPreconditions();
             // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods
             final List<DeployDestination> destinations = findDestinations();
 
             for (final DeployDestination destination : destinations) {
-                dest = destination;
-                planDeploymentRouters();
-                generateDeploymentPlan();
-                executeDeployment();
+                this.dest = destination;
+                this.planDeploymentRouters();
+                this.generateDeploymentPlan();
+                this.executeDeployment();
             }
         } finally {
-            unlock();
+            this.unlock();
         }
     }
 
@@ -217,25 +211,30 @@ public class RouterDeploymentDefinition {
         if (lock == null) {
             throw new ConcurrentOperationException("Unable to lock network " + 
guestNetwork.getId());
         }
-        tableLockId = lock.getId();
+        this.tableLockId = lock.getId();
     }
 
     protected void unlock() {
-        if (tableLockId != null) {
-            networkDao.releaseFromLockTable(tableLockId);
+        if (this.tableLockId != null) {
+            networkDao.releaseFromLockTable(this.tableLockId);
             if (logger.isDebugEnabled()) {
-                logger.debug("Lock is released for network id " + tableLockId 
+ " as a part of router startup in " + dest);
+                logger.debug("Lock is released for network id " + 
this.tableLockId
+                        + " as a part of router startup in " + dest);
             }
         }
     }
 
     protected void checkPreconditions() throws ResourceUnavailableException {
-        if (guestNetwork.getState() != Network.State.Implemented && 
guestNetwork.getState() != Network.State.Setup && guestNetwork.getState() != 
Network.State.Implementing) {
-            throw new ResourceUnavailableException("Network is not yet fully 
implemented: " + guestNetwork, Network.class, guestNetwork.getId());
+        if (guestNetwork.getState() != Network.State.Implemented &&
+                guestNetwork.getState() != Network.State.Setup &&
+                guestNetwork.getState() != Network.State.Implementing) {
+            throw new ResourceUnavailableException("Network is not yet fully 
implemented: " + guestNetwork,
+                    Network.class, this.guestNetwork.getId());
         }
 
         if (guestNetwork.getTrafficType() != TrafficType.Guest) {
-            throw new ResourceUnavailableException("Network is not type Guest 
as expected: " + guestNetwork, Network.class, guestNetwork.getId());
+            throw new ResourceUnavailableException("Network is not type Guest 
as expected: " + guestNetwork,
+                    Network.class, this.guestNetwork.getId());
         }
     }
 
@@ -243,11 +242,9 @@ public class RouterDeploymentDefinition {
         // dest has pod=null, for Basic Zone findOrDeployVRs for all Pods
         final List<DeployDestination> destinations = new 
ArrayList<DeployDestination>();
 
-        // for basic zone, if 'dest' has pod set to null then this is network
-        // restart scenario otherwise it is a vm deployment scenario
-        if (isBasic() && dest.getPod() == null) {
-            // Find all pods in the data center with running or starting user
-            // vms
+        // for basic zone, if 'dest' has pod set to null then this is network 
restart scenario otherwise it is a vm deployment scenario
+        if (this.isBasic() && dest.getPod() == null) {
+            // Find all pods in the data center with running or starting user 
vms
             final long dcId = dest.getDataCenter().getId();
             final List<HostPodVO> pods = 
listByDataCenterIdVMTypeAndStates(dcId, VirtualMachine.Type.User, 
VirtualMachine.State.Starting, VirtualMachine.State.Running);
 
@@ -258,19 +255,15 @@ public class RouterDeploymentDefinition {
                 final List<DomainRouterVO> virtualRouters = 
routerDao.listByPodIdAndStates(podId, VirtualMachine.State.Starting, 
VirtualMachine.State.Running);
 
                 if (virtualRouters.size() > 1) {
-                    // FIXME Find or create a better and more specific 
exception
-                    // for this
+                    // FIXME Find or create a better and more specific 
exception for this
                     throw new CloudRuntimeException("Pod can have utmost one 
VR in Basic Zone, please check!");
                 }
 
-                // Add virtualRouters to the routers, this avoids the situation
-                // when
-                // all routers are skipped and VirtualRouterElement throws
-                // exception
-                routers.addAll(virtualRouters);
+                // Add virtualRouters to the routers, this avoids the 
situation when
+                // all routers are skipped and VirtualRouterElement throws 
exception
+                this.routers.addAll(virtualRouters);
 
-                // If List size is one, we already have a starting or running
-                // VR, skip deployment
+                // If List size is one, we already have a starting or running 
VR, skip deployment
                 if (virtualRouters.size() == 1) {
                     logger.debug("Skipping VR deployment: Found a running or 
starting VR in Pod " + pod.getName() + " id=" + podId);
                     continue;
@@ -287,43 +280,43 @@ public class RouterDeploymentDefinition {
 
     protected int getNumberOfRoutersToDeploy() {
         // TODO Are we sure this makes sense? Somebody said 5 was too many?
-        if (routers.size() >= 5) {
+        if (this.routers.size() >= 5) {
             logger.error("Too many redundant routers!");
         }
 
-        // If old network is redundant but new is single router, then
-        // routers.size() = 2 but routerCount = 1
+        // If old network is redundant but new is single router, then 
routers.size() = 2 but routerCount = 1
         int routersExpected = 1;
-        if (isRedundant) {
+        if (this.isRedundant) {
             routersExpected = 2;
         }
-        return routersExpected < routers.size() ? 0 : routersExpected - 
routers.size();
+        return routersExpected < this.routers.size() ?
+                0 : routersExpected - this.routers.size();
     }
 
     protected void setupAccountOwner() {
         if (networkModel.isNetworkSystem(guestNetwork) || 
guestNetwork.getGuestType() == Network.GuestType.Shared) {
-            owner = accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM);
+            this.owner = accountMgr.getAccount(Account.ACCOUNT_ID_SYSTEM);
         }
     }
 
     /**
-     * It executes last pending tasks to prepare the deployment and checks the
-     * deployment can proceed. If it can't it return false
-     * 
+     * It executes last pending tasks to prepare the deployment and checks the 
deployment
+     * can proceed. If it can't it return false
+     *
      * @return if the deployment can proceed
      */
     protected boolean prepareDeployment() {
-        setupAccountOwner();
+        this.setupAccountOwner();
 
         // Check if public network has to be set on VR
-        isPublicNetwork = 
networkModel.isProviderSupportServiceInNetwork(guestNetwork.getId(), 
Service.SourceNat, Provider.VirtualRouter);
+        this.isPublicNetwork = networkModel.isProviderSupportServiceInNetwork(
+                        guestNetwork.getId(), Service.SourceNat, 
Provider.VirtualRouter);
 
         boolean canProceed = true;
-        if (isRedundant && !isPublicNetwork) {
-            // TODO Shouldn't be this throw an exception instead of log error
-            // and empty list of routers
+        if (this.isRedundant && !this.isPublicNetwork) {
+            // TODO Shouldn't be this throw an exception instead of log error 
and empty list of routers
             logger.error("Didn't support redundant virtual router without 
public network!");
-            routers = new ArrayList<>();
+            this.routers = new ArrayList<>();
             canProceed = false;
         }
 
@@ -331,39 +324,39 @@ public class RouterDeploymentDefinition {
     }
 
     /**
-     * Executes preparation and deployment of the routers. After this method
-     * ends, {@link this#routers} should have all of the deployed routers ready
-     * for start, and no more.
-     * 
+     * Executes preparation and deployment of the routers. After this method 
ends, {@link this#routers}
+     * should have all of the deployed routers ready for start, and no more.
+     *
      * @throws ConcurrentOperationException
      * @throws InsufficientCapacityException
      * @throws ResourceUnavailableException
      */
-    protected void executeDeployment() throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceUnavailableException {
+    protected void executeDeployment()
+            throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceUnavailableException {
 
-        // Check current redundant routers, if possible(all routers are
-        // stopped), reset the priority
-        setupPriorityOfRedundantRouter();
+        //Check current redundant routers, if possible(all routers are 
stopped), reset the priority
+        this.setupPriorityOfRedundantRouter();
 
-        if (getNumberOfRoutersToDeploy() > 0 && prepareDeployment()) {
-            findVirtualProvider();
-            findOfferingId();
-            findSourceNatIP();
-            deployAllVirtualRouters();
+        if (this.getNumberOfRoutersToDeploy() > 0 && this.prepareDeployment()) 
{
+            this.findVirtualProvider();
+            this.findOfferingId();
+            this.findSourceNatIP();
+            this.deployAllVirtualRouters();
         }
     }
 
     protected void findSourceNatIP() throws 
InsufficientAddressCapacityException, ConcurrentOperationException {
-        sourceNatIp = null;
-        if (isPublicNetwork) {
-            sourceNatIp = 
ipAddrMgr.assignSourceNatIpAddressToGuestNetwork(owner, guestNetwork);
+        this.sourceNatIp = null;
+        if (this.isPublicNetwork) {
+            this.sourceNatIp = 
this.ipAddrMgr.assignSourceNatIpAddressToGuestNetwork(
+                    this.owner,this.guestNetwork);
         }
     }
 
     protected void findOfferingId() {
         Long networkOfferingId = 
networkOfferingDao.findById(guestNetwork.getNetworkOfferingId()).getServiceOfferingId();
         if (networkOfferingId != null) {
-            offeringId = networkOfferingId;
+            this.offeringId = networkOfferingId;
         }
     }
 
@@ -371,44 +364,42 @@ public class RouterDeploymentDefinition {
         // Check if providers are supported in the physical networks
         final Type type = Type.VirtualRouter;
         final Long physicalNetworkId = 
networkModel.getPhysicalNetworkId(guestNetwork);
-        final PhysicalNetworkServiceProvider provider = 
physicalProviderDao.findByServiceProvider(physicalNetworkId, type.toString());
+        final PhysicalNetworkServiceProvider provider =
+                physicalProviderDao.findByServiceProvider(physicalNetworkId, 
type.toString());
 
         if (provider == null) {
-            throw new CloudRuntimeException(String.format("Cannot find service 
provider %s  in physical network %s", type.toString(), physicalNetworkId));
+            throw new CloudRuntimeException(
+                    String.format("Cannot find service provider %s  in 
physical network %s",
+                            type.toString(), physicalNetworkId));
         }
 
-        vrProvider = vrProviderDao.findByNspIdAndType(provider.getId(), type);
-        if (vrProvider == null) {
-            throw new CloudRuntimeException(String.format("Cannot find virtual 
router provider %s as service provider %s", type.toString(), provider.getId()));
+        this.vrProvider = vrProviderDao.findByNspIdAndType(provider.getId(), 
type);
+        if (this.vrProvider == null) {
+            throw new CloudRuntimeException(
+                    String.format("Cannot find virtual router provider %s as 
service provider %s",
+                            type.toString(), provider.getId()));
         }
     }
 
-    protected void deployAllVirtualRouters() throws 
ConcurrentOperationException, InsufficientCapacityException, 
ResourceUnavailableException {
+    protected void deployAllVirtualRouters()
+            throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceUnavailableException {
 
-<<<<<<< HEAD
-        int routersToDeploy = getNumberOfRoutersToDeploy();
-        for (int i = 0; i < routersToDeploy; i++) {
-            // Don't start the router as we are holding the network lock that
-            // needs to be released at the end of router allocation
-            DomainRouterVO router = nwHelper.deployRouter(this, false, null);
-=======
         int routersToDeploy = this.getNumberOfRoutersToDeploy();
         for(int i = 0; i < routersToDeploy; i++) {
             // Don't start the router as we are holding the network lock that 
needs to be released at the end of router allocation
             DomainRouterVO router = this.nwHelper.deployRouter(this, false);
->>>>>>> 2e8879f... Refactor hypervisor retrieval from VpcNwHelper and NwHelper
 
             if (router != null) {
-                routerDao.addRouterToGuestNetwork(router, guestNetwork);
-                routers.add(router);
+                this.routerDao.addRouterToGuestNetwork(router, 
this.guestNetwork);
+                this.routers.add(router);
             }
         }
     }
 
     /**
-     * Lists all pods given a Data Center Id, a {@link VirtualMachine.Type} and
-     * a list of {@link VirtualMachine.State}
-     * 
+     * Lists all pods given a Data Center Id, a {@link VirtualMachine.Type} 
and a list of
+     * {@link VirtualMachine.State}
+     *
      * @param id
      * @param type
      * @param states
@@ -428,27 +419,28 @@ public class RouterDeploymentDefinition {
         final SearchCriteria<HostPodVO> sc = podIdSearch.create();
         sc.setParameters("dc", id);
         sc.setJoinParameters("vmInstanceSearch", "type", type);
-        sc.setJoinParameters("vmInstanceSearch", "states", (Object[]) states);
+        sc.setJoinParameters("vmInstanceSearch", "states", (Object[])states);
         return podDao.search(sc, null);
     }
 
     protected void planDeploymentRouters() {
-        if (isBasic()) {
-            routers = 
routerDao.listByNetworkAndPodAndRole(guestNetwork.getId(), getPodId(), 
Role.VIRTUAL_ROUTER);
+        if (this.isBasic()) {
+            this.routers = 
routerDao.listByNetworkAndPodAndRole(this.guestNetwork.getId(),
+                    this.getPodId(), Role.VIRTUAL_ROUTER);
         } else {
-            routers = routerDao.listByNetworkAndRole(guestNetwork.getId(), 
Role.VIRTUAL_ROUTER);
+            this.routers = 
routerDao.listByNetworkAndRole(this.guestNetwork.getId(),
+                    Role.VIRTUAL_ROUTER);
         }
     }
 
     /**
-     * Routers need reset if at least one of the routers is not redundant or
-     * stopped.
-     * 
+     * Routers need reset if at least one of the routers is not redundant or 
stopped.
+     *
      * @return
      */
     protected boolean routersNeedReset() {
         boolean needReset = true;
-        for (final DomainRouterVO router : routers) {
+        for (final DomainRouterVO router : this.routers) {
             if (!router.getIsRedundantRouter() || router.getState() != 
VirtualMachine.State.Stopped) {
                 needReset = false;
                 break;
@@ -459,18 +451,18 @@ public class RouterDeploymentDefinition {
     }
 
     /**
-     * Only for redundant deployment and if any routers needed reset, we shall
-     * reset all routers priorities
+     * Only for redundant deployment and if any routers needed reset, we shall 
reset all
+     * routers priorities
      */
     protected void setupPriorityOfRedundantRouter() {
-        if (isRedundant && routersNeedReset()) {
-            for (final DomainRouterVO router : routers) {
-                // getUpdatedPriority() would update the value later
-                router.setPriority(0);
-                router.setIsPriorityBumpUp(false);
-                routerDao.update(router.getId(), router);
+            if (this.isRedundant && this.routersNeedReset()) {
+                for (final DomainRouterVO router : this.routers) {
+                    // getUpdatedPriority() would update the value later
+                    router.setPriority(0);
+                    router.setIsPriorityBumpUp(false);
+                    routerDao.update(router.getId(), router);
+                }
             }
-        }
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
 
b/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
index 6534b91..b78535e 100644
--- 
a/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
+++ 
b/server/src/org/cloud/network/router/deployment/RouterDeploymentDefinitionBuilder.java
@@ -23,6 +23,8 @@ import java.util.Map;
 import javax.inject.Inject;
 
 import 
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 
 import com.cloud.dc.dao.HostPodDao;
 import com.cloud.dc.dao.VlanDao;
@@ -92,9 +94,11 @@ public class RouterDeploymentDefinitionBuilder {
     @Inject
     private VlanDao vlanDao;
 
-    @Inject
+    @Autowired
+    @Qualifier("networkHelper")
     protected NetworkHelper nwHelper;
-    @Inject
+    @Autowired
+    @Qualifier("vpcNetworkHelper")
     protected VpcNetworkHelperImpl vpcNwHelper;
 
     protected Long offeringId;
@@ -107,7 +111,8 @@ public class RouterDeploymentDefinitionBuilder {
         return new IntermediateStateBuilder(this);
     }
 
-    protected RouterDeploymentDefinition injectDependencies(final 
RouterDeploymentDefinition routerDeploymentDefinition) {
+    protected RouterDeploymentDefinition injectDependencies(
+            final RouterDeploymentDefinition routerDeploymentDefinition) {
 
         routerDeploymentDefinition.networkDao = networkDao;
         routerDeploymentDefinition.routerDao = routerDao;
@@ -134,7 +139,8 @@ public class RouterDeploymentDefinitionBuilder {
         return routerDeploymentDefinition;
     }
 
-    protected void injectVpcDependencies(final VpcRouterDeploymentDefinition 
routerDeploymentDefinition) {
+    protected void injectVpcDependencies(
+            final VpcRouterDeploymentDefinition routerDeploymentDefinition) {
 
         routerDeploymentDefinition.vpcDao = vpcDao;
         routerDeploymentDefinition.vpcOffDao = vpcOffDao;
@@ -207,4 +213,5 @@ public class RouterDeploymentDefinitionBuilder {
             return builder.injectDependencies(routerDeploymentDefinition);
         }
     }
-}
\ No newline at end of file
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c81b3380/server/src/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
----------------------------------------------------------------------
diff --git 
a/server/src/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
 
b/server/src/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
index acd764b..b72c69d 100644
--- 
a/server/src/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
+++ 
b/server/src/org/cloud/network/router/deployment/VpcRouterDeploymentDefinition.java
@@ -53,7 +53,9 @@ public class VpcRouterDeploymentDefinition extends 
RouterDeploymentDefinition {
 
     protected Vpc vpc;
 
-    protected VpcRouterDeploymentDefinition(final Vpc vpc, final 
DeployDestination dest, final Account owner, final Map<Param, Object> params, 
final boolean isRedundant) {
+
+    protected VpcRouterDeploymentDefinition(final Vpc vpc, final 
DeployDestination dest, final Account owner,
+            final Map<Param, Object> params, final boolean isRedundant) {
 
         super(null, dest, owner, params, isRedundant);
 
@@ -62,7 +64,7 @@ public class VpcRouterDeploymentDefinition extends 
RouterDeploymentDefinition {
 
     @Override
     public Vpc getVpc() {
-        return vpc;
+        return this.vpc;
     }
 
     @Override
@@ -81,15 +83,16 @@ public class VpcRouterDeploymentDefinition extends 
RouterDeploymentDefinition {
         if (vpcLock == null) {
             throw new ConcurrentOperationException("Unable to lock vpc " + 
vpc.getId());
         }
-        tableLockId = vpcLock.getId();
+        this.tableLockId = vpcLock.getId();
     }
 
     @Override
     protected void unlock() {
-        if (tableLockId != null) {
-            vpcDao.releaseFromLockTable(tableLockId);
+        if (this.tableLockId != null) {
+            vpcDao.releaseFromLockTable(this.tableLockId);
             if (logger.isDebugEnabled()) {
-                logger.debug("Lock is released for vpc id " + tableLockId + " 
as a part of router startup in " + dest);
+                logger.debug("Lock is released for vpc id " + this.tableLockId
+                        + " as a part of router startup in " + dest);
             }
         }
     }
@@ -102,19 +105,19 @@ public class VpcRouterDeploymentDefinition extends 
RouterDeploymentDefinition {
     @Override
     protected List<DeployDestination> findDestinations() {
         final List<DeployDestination> destinations = new ArrayList<>();
-        destinations.add(dest);
+        destinations.add(this.dest);
         return destinations;
     }
 
     @Override
     protected int getNumberOfRoutersToDeploy() {
-        // TODO Should we make our changes here in order to enable Redundant
-        // Router for VPC?
-        return routers.isEmpty() ? 1 : 0;
+        // TODO Should we make our changes here in order to enable Redundant 
Router for VPC?
+        return this.routers.isEmpty() ? 1 : 0;
     }
 
     /**
      * @see RouterDeploymentDefinition#prepareDeployment()
+     *
      * @return if the deployment can proceed
      */
     @Override
@@ -125,13 +128,12 @@ public class VpcRouterDeploymentDefinition extends 
RouterDeploymentDefinition {
     @Override
     protected void setupPriorityOfRedundantRouter() {
         // Nothing to do for now
-        // TODO Shouldn't we add this behavior once Redundant Router works for
-        // Vpc too
+        // TODO Shouldn't we add this behavior once Redundant Router works for 
Vpc too
     }
 
     @Override
     protected void findSourceNatIP() throws 
InsufficientAddressCapacityException, ConcurrentOperationException {
-        sourceNatIp = vpcMgr.assignSourceNatIpAddressToVpc(owner, vpc);
+        this.sourceNatIp = vpcMgr.assignSourceNatIpAddressToVpc(this.owner, 
vpc);
     }
 
     @Override
@@ -143,8 +145,8 @@ public class VpcRouterDeploymentDefinition extends 
RouterDeploymentDefinition {
             if (provider == null) {
                 throw new CloudRuntimeException("Cannot find service provider 
" + Type.VPCVirtualRouter.toString() + " in physical network " + pNtwk.getId());
             }
-            vrProvider = vrProviderDao.findByNspIdAndType(provider.getId(), 
Type.VPCVirtualRouter);
-            if (vrProvider != null) {
+            this.vrProvider = 
vrProviderDao.findByNspIdAndType(provider.getId(), Type.VPCVirtualRouter);
+            if (this.vrProvider != null) {
                 break;
             }
         }
@@ -154,28 +156,28 @@ public class VpcRouterDeploymentDefinition extends 
RouterDeploymentDefinition {
     protected void findOfferingId() {
         Long vpcOfferingId = 
vpcOffDao.findById(vpc.getVpcOfferingId()).getServiceOfferingId();
         if (vpcOfferingId != null) {
-            offeringId = vpcOfferingId;
+            this.offeringId = vpcOfferingId;
         }
     }
 
     @Override
-    protected void deployAllVirtualRouters() throws 
ConcurrentOperationException, InsufficientCapacityException, 
ResourceUnavailableException {
+    protected void deployAllVirtualRouters()
+            throws ConcurrentOperationException, 
InsufficientCapacityException, ResourceUnavailableException {
 
-        DomainRouterVO router = nwHelper.deployRouter(this, true);
+        DomainRouterVO router = this.nwHelper.deployRouter(this, true);
 
         if (router != null) {
-            routers.add(router);
+            this.routers.add(router);
         }
     }
 
     @Override
     protected void planDeploymentRouters() {
-        routers = routerDao.listByVpcId(vpc.getId());
+        this.routers = this.routerDao.listByVpcId(this.vpc.getId());
     }
 
     @Override
     protected void generateDeploymentPlan() {
-        final long dcId = dest.getDataCenter().getId();
-        plan = new DataCenterDeployment(dcId);
+        this.plan = new 
DataCenterDeployment(this.dest.getDataCenter().getId());
     }
 }

Reply via email to