adding applyStaticRoutes method to the network topology/visitor. it will be used by the VPC virtual net manager appliance.
Conflicts: server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/51df3aa0 Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/51df3aa0 Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/51df3aa0 Branch: refs/heads/vpc-refactor Commit: 51df3aa0f2ee364651c095b40521481563044817 Parents: a515d6c Author: Wilder Rodrigues <wrodrig...@schubergphilis.com> Authored: Tue Aug 19 15:10:10 2014 +0200 Committer: Wilder Rodrigues <wrodrig...@schubergphilis.com> Committed: Fri Oct 3 06:21:27 2014 +0200 ---------------------------------------------------------------------- .../cloud/network/router/NetworkHelperImpl.java | 6 +- .../VirtualNetworkApplianceManagerImpl.java | 2 +- .../network/router/VirtualNetworkStatus.java | 26 +++++++++ .../cloud/network/router/VirtualNwStatus.java | 26 --------- .../network/router/VpcNetworkHelperImpl.java | 2 +- .../com/cloud/network/rules/RuleApplier.java | 7 --- .../cloud/network/rules/StaticRoutesRules.java | 61 ++++++++++++++++++++ .../rules/VirtualNetworkApplianceFactory.java | 3 +- .../topology/AdvancedNetworkTopology.java | 8 +++ .../topology/AdvancedNetworkVisitor.java | 7 +++ .../network/topology/BasicNetworkTopology.java | 6 ++ .../network/topology/BasicNetworkVisitor.java | 6 ++ .../network/topology/NetworkTopology.java | 3 + .../topology/NetworkTopologyVisitor.java | 2 + 14 files changed, 125 insertions(+), 40 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 bcebcd7..bf4c7af 100644 --- a/server/src/com/cloud/network/router/NetworkHelperImpl.java +++ b/server/src/com/cloud/network/router/NetworkHelperImpl.java @@ -580,7 +580,7 @@ public class NetworkHelperImpl implements NetworkHelper { Long vpcId = routerDeploymentDefinition.getVpc() != null ? routerDeploymentDefinition.getVpc().getId() : null; router = new DomainRouterVO(id, routerOffering.getId(), routerDeploymentDefinition.getVirtualProvider().getId(), - VirtualMachineName.getRouterName(id, VirtualNwStatus.instance), template.getId(), template.getHypervisorType(), + VirtualMachineName.getRouterName(id, VirtualNetworkStatus.instance), template.getId(), template.getHypervisorType(), template.getGuestOSId(), owner.getDomainId(), owner.getId(), routerDeploymentDefinition.isRedundant(), 0, false, RedundantState.UNKNOWN, offerHA, false, vpcId); @@ -774,7 +774,7 @@ public class NetworkHelperImpl implements NetworkHelper { s_logger.debug("Adding nic for Virtual Router in Control network "); List<? extends NetworkOffering> offerings = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemControlNetwork); NetworkOffering controlOffering = offerings.get(0); - Network controlConfig = _networkMgr.setupNetwork(VirtualNwStatus.account, controlOffering, routerDeploymentDefinition.getPlan(), + Network controlConfig = _networkMgr.setupNetwork(VirtualNetworkStatus.account, controlOffering, routerDeploymentDefinition.getPlan(), null, null, false).get(0); networks.put(controlConfig, new ArrayList<NicProfile>()); //3) Public network @@ -803,7 +803,7 @@ public class NetworkHelperImpl implements NetworkHelper { defaultNic.setDeviceId(2); } final NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); - final List<? extends Network> publicNetworks = _networkMgr.setupNetwork(VirtualNwStatus.account, publicOffering, + final List<? extends Network> publicNetworks = _networkMgr.setupNetwork(VirtualNetworkStatus.account, publicOffering, routerDeploymentDefinition.getPlan(), null, null, false); final String publicIp = defaultNic.getIp4Address(); // We want to use the identical MAC address for RvR on public interface if possible http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 a798ef5..db1c9e6 100644 --- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java +++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java @@ -655,7 +655,7 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V throw new ConfigurationException(msg); } - VirtualNwStatus.account = _accountMgr.getSystemAccount(); + VirtualNetworkStatus.account = _accountMgr.getSystemAccount(); final String aggregationRange = configs.get("usage.stats.job.aggregation.range"); _usageAggregationRange = NumbersUtil.parseInt(aggregationRange, 1440); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/server/src/com/cloud/network/router/VirtualNetworkStatus.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNetworkStatus.java b/server/src/com/cloud/network/router/VirtualNetworkStatus.java new file mode 100644 index 0000000..dd77f5d --- /dev/null +++ b/server/src/com/cloud/network/router/VirtualNetworkStatus.java @@ -0,0 +1,26 @@ +// 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.router; + +import com.cloud.user.Account; + +public class VirtualNetworkStatus { + + public static String instance = ""; + + public static Account account = null; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/server/src/com/cloud/network/router/VirtualNwStatus.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VirtualNwStatus.java b/server/src/com/cloud/network/router/VirtualNwStatus.java deleted file mode 100644 index b0a1b48..0000000 --- a/server/src/com/cloud/network/router/VirtualNwStatus.java +++ /dev/null @@ -1,26 +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.router; - -import com.cloud.user.Account; - -public class VirtualNwStatus { - - public static String instance = ""; - - public static Account account = null; -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/server/src/com/cloud/network/router/VpcNetworkHelperImpl.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/router/VpcNetworkHelperImpl.java b/server/src/com/cloud/network/router/VpcNetworkHelperImpl.java index 2e5d696..64ee2b0 100644 --- a/server/src/com/cloud/network/router/VpcNetworkHelperImpl.java +++ b/server/src/com/cloud/network/router/VpcNetworkHelperImpl.java @@ -187,7 +187,7 @@ public class VpcNetworkHelperImpl extends NetworkHelperImpl implements VpcNetwor publicNic.setIsolationUri(IsolationType.Vlan.toUri(publicIp.getVlanTag())); NetworkOffering publicOffering = _networkModel.getSystemAccountNetworkOfferings(NetworkOffering.SystemPublicNetwork).get(0); if (publicNetwork == null) { - List<? extends Network> publicNetworks = _networkMgr.setupNetwork(VirtualNwStatus.account, + List<? extends Network> publicNetworks = _networkMgr.setupNetwork(VirtualNetworkStatus.account, publicOffering, vpcRouterDeploymentDefinition.getPlan(), null, null, false); publicNetwork = publicNetworks.get(0); } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/server/src/com/cloud/network/rules/RuleApplier.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/rules/RuleApplier.java b/server/src/com/cloud/network/rules/RuleApplier.java index 04a13e4..84ad5230 100644 --- a/server/src/com/cloud/network/rules/RuleApplier.java +++ b/server/src/com/cloud/network/rules/RuleApplier.java @@ -39,7 +39,6 @@ import com.cloud.network.dao.NetworkDao; import com.cloud.network.lb.LoadBalancingRulesManager; import com.cloud.network.router.NetworkHelper; import com.cloud.network.router.RouterControlHelper; -import com.cloud.network.router.VirtualNetworkApplianceManager; import com.cloud.network.router.VirtualRouter; import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.dao.VpcDao; @@ -58,8 +57,6 @@ import com.cloud.vm.dao.UserVmDao; public abstract class RuleApplier { - protected VirtualNetworkApplianceManager _applianceManager; - protected NetworkModel _networkModel; protected LoadBalancingRulesManager _lbMgr; @@ -126,10 +123,6 @@ public abstract class RuleApplier { return _router; } - public VirtualNetworkApplianceManager getApplianceManager() { - return _applianceManager; - } - public void createVmDataCommand(final VirtualRouter router, final UserVm vm, final NicVO nic, final String publicKey, final Commands cmds) { final String serviceOffering = _serviceOfferingDao.findByIdIncludingRemoved(vm.getId(), vm.getServiceOfferingId()).getDisplayText(); final String zoneName = _dcDao.findById(router.getDataCenterId()).getName(); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/server/src/com/cloud/network/rules/StaticRoutesRules.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/network/rules/StaticRoutesRules.java b/server/src/com/cloud/network/rules/StaticRoutesRules.java new file mode 100644 index 0000000..f7c4de9 --- /dev/null +++ b/server/src/com/cloud/network/rules/StaticRoutesRules.java @@ -0,0 +1,61 @@ +// 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.agent.api.routing.NetworkElementCommand; +import com.cloud.agent.api.routing.SetStaticRouteCommand; +import com.cloud.agent.manager.Commands; +import com.cloud.dc.DataCenterVO; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.network.router.VirtualRouter; +import com.cloud.network.vpc.StaticRouteProfile; +import com.cloud.vm.DomainRouterVO; + +public class StaticRoutesRules extends RuleApplier { + + private final List<StaticRouteProfile> staticRoutes; + + public StaticRoutesRules(final List<StaticRouteProfile> staticRoutes) { + super(null); + this.staticRoutes = staticRoutes; + } + + public List<StaticRouteProfile> getStaticRoutes() { + return staticRoutes; + } + + @Override + public boolean accept(final NetworkTopologyVisitor visitor, final VirtualRouter router) throws ResourceUnavailableException { + _router = router; + + return visitor.visit(this); + } + + public void createStaticRouteCommands(final List<StaticRouteProfile> staticRoutes, final DomainRouterVO router, final Commands cmds) { + SetStaticRouteCommand cmd = new SetStaticRouteCommand(staticRoutes); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, _networkHelper.getRouterControlIp(router.getId())); + cmd.setAccessDetail(NetworkElementCommand.ROUTER_NAME, router.getInstanceName()); + DataCenterVO dcVo = _dcDao.findById(router.getDataCenterId()); + cmd.setAccessDetail(NetworkElementCommand.ZONE_NETWORK_TYPE, dcVo.getNetworkType().toString()); + cmds.addCommand(cmd); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 c545975..4815cbf 100644 --- a/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java +++ b/server/src/com/cloud/network/rules/VirtualNetworkApplianceFactory.java @@ -170,6 +170,7 @@ public class VirtualNetworkApplianceFactory { applier._networkOfferingDao = _networkOfferingDao; applier._routerDao = _routerDao; applier._routerControlHelper = _routerControlHelper; + applier._networkHelper = _networkHelper; } public IpAssociationRules createIpAssociationRules(final Network network, final List<? extends PublicIpAddress> ipAddresses) { @@ -274,8 +275,6 @@ public class VirtualNetworkApplianceFactory { initBeans(networkAclsRules); - networkAclsRules._networkHelper = _networkHelper; - return networkAclsRules; } http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 e4fd0e9..bea28cf 100644 --- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java +++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkTopology.java @@ -44,6 +44,7 @@ import com.cloud.network.rules.RuleApplierWrapper; import com.cloud.network.rules.UserdataPwdRules; import com.cloud.network.rules.VpcIpAssociationRules; import com.cloud.network.vpc.NetworkACLItem; +import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.VirtualMachine.State; @@ -59,6 +60,13 @@ public class AdvancedNetworkTopology extends BasicNetworkTopology { protected AdvancedNetworkVisitor _advancedVisitor; @Override + public boolean applyStaticRoutes(final List<StaticRouteProfile> staticRoutes, + final List<DomainRouterVO> routers) throws ResourceUnavailableException { + // TODO Auto-generated method stub + return super.applyStaticRoutes(staticRoutes, routers); + } + + @Override public boolean setupDhcpForPvlan(final boolean isAddPvlan, final DomainRouterVO router, final Long hostId, final NicProfile nic) throws ResourceUnavailableException { if (!nic.getBroadCastUri().getScheme().equals("pvlan")) { http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 df8afb2..d1e5175 100644 --- a/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java +++ b/server/src/org/apache/cloudstack/network/topology/AdvancedNetworkVisitor.java @@ -37,6 +37,7 @@ import com.cloud.network.rules.DhcpSubNetRules; import com.cloud.network.rules.NetworkAclsRules; import com.cloud.network.rules.NicPlugInOutRules; import com.cloud.network.rules.PrivateGatewayRules; +import com.cloud.network.rules.StaticRoutesRules; import com.cloud.network.rules.UserdataPwdRules; import com.cloud.network.rules.VpcIpAssociationRules; import com.cloud.network.vpc.NetworkACLItem; @@ -160,4 +161,10 @@ public class AdvancedNetworkVisitor extends BasicNetworkVisitor { return _networkGeneralHelper.sendCommandsToRouter(router, cmds); } + + @Override + public boolean visit(final StaticRoutesRules staticRoutesRules) throws ResourceUnavailableException { + + return false; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 b91707f..dd0cd15 100644 --- a/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java +++ b/server/src/org/apache/cloudstack/network/topology/BasicNetworkTopology.java @@ -59,6 +59,7 @@ import com.cloud.network.rules.UserdataToRouterRules; import com.cloud.network.rules.VirtualNetworkApplianceFactory; import com.cloud.network.rules.VpnRules; import com.cloud.network.vpc.NetworkACLItem; +import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; @@ -108,6 +109,11 @@ public class BasicNetworkTopology implements NetworkTopology { } @Override + public boolean applyStaticRoutes(final List<StaticRouteProfile> staticRoutes, final List<DomainRouterVO> routers) throws ResourceUnavailableException { + throw new CloudRuntimeException("applyStaticRoutes not implemented in Basic Network Topology."); + } + + @Override public boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final List<? extends VirtualRouter> routers, final boolean isPrivateGateway) throws ResourceUnavailableException { throw new CloudRuntimeException("applyNetworkACLs not implemented in Basic Network Topology."); http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 5cdb7d5..817fad7 100644 --- a/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java +++ b/server/src/org/apache/cloudstack/network/topology/BasicNetworkVisitor.java @@ -50,6 +50,7 @@ import com.cloud.network.rules.SshKeyToRouterRules; import com.cloud.network.rules.StaticNat; import com.cloud.network.rules.StaticNatRule; import com.cloud.network.rules.StaticNatRules; +import com.cloud.network.rules.StaticRoutesRules; import com.cloud.network.rules.UserdataPwdRules; import com.cloud.network.rules.UserdataToRouterRules; import com.cloud.network.rules.VpcIpAssociationRules; @@ -271,4 +272,9 @@ public class BasicNetworkVisitor extends NetworkTopologyVisitor { public boolean visit(final PrivateGatewayRules userdata) throws ResourceUnavailableException { throw new CloudRuntimeException("PrivateGatewayRules not implemented in Basic Network Topology."); } + + @Override + public boolean visit(final StaticRoutesRules staticRoutesRules) throws ResourceUnavailableException { + throw new CloudRuntimeException("StaticRoutesRules not implemented in Basic Network Topology."); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 5a501f7..3975878 100644 --- a/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java +++ b/server/src/org/apache/cloudstack/network/topology/NetworkTopology.java @@ -32,6 +32,7 @@ import com.cloud.network.rules.RuleApplier; import com.cloud.network.rules.RuleApplierWrapper; import com.cloud.network.rules.StaticNat; import com.cloud.network.vpc.NetworkACLItem; +import com.cloud.network.vpc.StaticRouteProfile; import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.VirtualMachineProfile; @@ -55,6 +56,8 @@ public interface NetworkTopology { boolean applyNetworkACLs(final Network network, final List<? extends NetworkACLItem> rules, final List<? extends VirtualRouter> routers, final boolean isPrivateGateway) throws ResourceUnavailableException; + boolean applyStaticRoutes(final List<StaticRouteProfile> staticRoutes, final List<DomainRouterVO> routers) throws ResourceUnavailableException; + // ====== USER FOR GUEST NETWORK AND VCP ====== // boolean applyDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile profile, final DeployDestination dest, final List<DomainRouterVO> routers) http://git-wip-us.apache.org/repos/asf/cloudstack/blob/51df3aa0/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 32dcc89..c4f3af5 100644 --- a/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java +++ b/server/src/org/apache/cloudstack/network/topology/NetworkTopologyVisitor.java @@ -29,6 +29,7 @@ import com.cloud.network.rules.PasswordToRouterRules; import com.cloud.network.rules.PrivateGatewayRules; import com.cloud.network.rules.SshKeyToRouterRules; import com.cloud.network.rules.StaticNatRules; +import com.cloud.network.rules.StaticRoutesRules; import com.cloud.network.rules.UserdataPwdRules; import com.cloud.network.rules.UserdataToRouterRules; import com.cloud.network.rules.VpcIpAssociationRules; @@ -73,4 +74,5 @@ public abstract class NetworkTopologyVisitor { public abstract boolean visit(DhcpSubNetRules subnet) throws ResourceUnavailableException; public abstract boolean visit(NicPlugInOutRules nicPlugInOutRules) throws ResourceUnavailableException; + public abstract boolean visit(StaticRoutesRules staticRoutesRules) throws ResourceUnavailableException; } \ No newline at end of file