You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/07/27 23:01:31 UTC
[6/50] [abbrv] VPC: added vif info to ipassoc command
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/110903a9/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
index 2560aec..03aeed8 100644
--- a/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VpcVirtualNetworkApplianceManagerImpl.java
@@ -285,7 +285,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
return true;
}
- boolean result = setupVpcGuestNetwork(network, router, false, _networkMgr.getNicProfile(router, network.getId()));
+ boolean result = setupVpcGuestNetwork(network, router, false, _networkMgr.getNicProfile(router, network.getId(), null));
if (!result) {
s_logger.warn("Failed to destroy guest network config " + network + " on router " + router);
return false;
@@ -438,7 +438,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
String networkDomain = network.getNetworkDomain();
String dhcpRange = getGuestDhcpRange(guestNic, network, _configMgr.getZone(network.getDataCenterId()));
- NicProfile nicProfile = _networkMgr.getNicProfile(router, nic.getNetworkId());
+ NicProfile nicProfile = _networkMgr.getNicProfile(router, nic.getNetworkId(), null);
SetupGuestNetworkCommand setupCmd = new SetupGuestNetworkCommand(dhcpRange, networkDomain, false, null,
defaultDns1, defaultDns2, add, _itMgr.toNicTO(nicProfile, router.getHypervisorType()));
@@ -455,7 +455,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
}
private void createVpcAssociatePublicIPCommands(final VirtualRouter router, final List<? extends PublicIpAddress> ips,
- Commands cmds) {
+ Commands cmds, Map<String, String> vlanMacAddress) {
Pair<IpAddressTO, Long> sourceNatIpAdd = null;
Boolean addSourceNat = null;
@@ -487,9 +487,11 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
for (final PublicIpAddress ipAddr : ipAddrList) {
boolean add = (ipAddr.getState() == IpAddress.State.Releasing ? false : true);
-
+
+ String macAddress = vlanMacAddress.get(ipAddr.getVlanTag());
+
IpAddressTO ip = new IpAddressTO(ipAddr.getAccountId(), ipAddr.getAddress().addr(), add, false,
- ipAddr.isSourceNat(), ipAddr.getVlanTag(), ipAddr.getGateway(), ipAddr.getNetmask(), ipAddr.getMacAddress(),
+ ipAddr.isSourceNat(), ipAddr.getVlanTag(), ipAddr.getGateway(), ipAddr.getNetmask(), macAddress,
null, networkRate, ipAddr.isOneToOneNat());
ip.setTrafficType(network.getTrafficType());
@@ -522,8 +524,8 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
}
}
- protected NicTO getNicTO(final VirtualRouter router, Long guestNetworkId) {
- NicProfile nicProfile = _networkMgr.getNicProfile(router, guestNetworkId);
+ protected NicTO getNicTO(final VirtualRouter router, Long networkId, String broadcastUri) {
+ NicProfile nicProfile = _networkMgr.getNicProfile(router, networkId, broadcastUri);
return _itMgr.toNicTO(nicProfile, router.getHypervisorType());
}
@@ -598,12 +600,32 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
}
}
- //3) apply the ips
+ //3) apply the rules
boolean result = applyRules(network, routers, "vpc ip association", false, null, false, new RuleApplier() {
@Override
public boolean execute(Network network, VirtualRouter router) throws ResourceUnavailableException {
Commands cmds = new Commands(OnError.Continue);
- createVpcAssociatePublicIPCommands(router, ipAddress, cmds);
+ Map<String, String> vlanMacAddress = new HashMap<String, String>();
+ for (PublicIpAddress ipAddr : ipAddress) {
+
+ String broadcastURI = BroadcastDomainType.Vlan.toUri(ipAddr.getVlanTag()).toString();
+ Nic nic = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(ipAddr.getNetworkId(),
+ router.getId(), broadcastURI);
+
+ String macAddress = null;
+ if (nic == null) {
+ if (ipAddr.getState() != IpAddress.State.Releasing) {
+ throw new CloudRuntimeException("Unable to find the nic in network " + ipAddr.getNetworkId() +
+ " to apply the ip address " + ipAddr + " for");
+ }
+ macAddress = ipAddr.getMacAddress();
+ } else {
+ macAddress = nic.getMacAddress();
+ }
+
+ vlanMacAddress.put(ipAddr.getVlanTag(), macAddress);
+ }
+ createVpcAssociatePublicIPCommands(router, ipAddress, cmds, vlanMacAddress);
return sendCommandsToRouter(router, cmds);
}
});
@@ -690,8 +712,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
}
}
-
- SetNetworkACLCommand cmd = new SetNetworkACLCommand(rulesTO, getNicTO(router, guestNetworkId));
+ SetNetworkACLCommand cmd = new SetNetworkACLCommand(rulesTO, getNicTO(router, guestNetworkId, null));
cmd.setAccessDetail(NetworkElementCommand.ROUTER_IP, getRouterControlIp(router.getId()));
cmd.setAccessDetail(NetworkElementCommand.ROUTER_GUEST_IP, getRouterIpInNetwork(guestNetworkId, router.getId()));
cmd.setAccessDetail(NetworkElementCommand.GUEST_VLAN_TAG, guestVlan);
@@ -720,16 +741,21 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
finalizeSshAndVersionAndNetworkUsageOnStart(cmds, profile, router, controlNic);
//2) FORM PLUG NIC COMMANDS
- Map<Nic, Network> guestNics = new HashMap<Nic, Network>();
- Map<Nic, Network> publicNics = new HashMap<Nic, Network>();
+ List<Pair<Nic, Network>> guestNics = new ArrayList<Pair<Nic, Network>>();
+ List<Pair<Nic, Network>> publicNics = new ArrayList<Pair<Nic, Network>>();
+ Map<String, String> vlanMacAddress = new HashMap<String, String>();
List<? extends Nic> routerNics = _nicDao.listByVmId(profile.getId());
for (Nic routerNic : routerNics) {
Network network = _networkMgr.getNetwork(routerNic.getNetworkId());
if (network.getTrafficType() == TrafficType.Guest) {
- guestNics.put(routerNic, network);
+ Pair<Nic, Network> guestNic = new Pair<Nic, Network>(routerNic, network);
+ guestNics.add(guestNic);
} else if (network.getTrafficType() == TrafficType.Public) {
- publicNics.put(routerNic, network);
+ Pair<Nic, Network> publicNic = new Pair<Nic, Network>(routerNic, network);
+ publicNics.add(publicNic);
+ String vlanTag = routerNic.getBroadcastUri().getHost();
+ vlanMacAddress.put(vlanTag, routerNic.getMacAddress());
}
}
@@ -737,8 +763,9 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
try {
//add VPC router to public networks
List<PublicIp> sourceNat = new ArrayList<PublicIp>(1);
- for (Nic publicNic : publicNics.keySet()) {
- Network publicNtwk = publicNics.get(publicNic);
+ for (Pair<Nic, Network> nicNtwk : publicNics) {
+ Nic publicNic = nicNtwk.first();
+ Network publicNtwk = nicNtwk.second();
IPAddressVO userIp = _ipAddressDao.findByIpAndSourceNetworkId(publicNtwk.getId(),
publicNic.getIp4Address());
@@ -756,32 +783,33 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
}
}
- PlugNicCommand plugNicCmd = new PlugNicCommand(_itMgr.toVmTO(profile), getNicTO(router, publicNic.getNetworkId()));
+ PlugNicCommand plugNicCmd = new PlugNicCommand(_itMgr.toVmTO(profile), getNicTO(router, publicNic.getNetworkId(), publicNic.getBroadcastUri().toString()));
cmds.addCommand(plugNicCmd);
}
// create ip assoc for source nat
if (!sourceNat.isEmpty()) {
- createVpcAssociatePublicIPCommands(router, sourceNat, cmds);
+ createVpcAssociatePublicIPCommands(router, sourceNat, cmds, vlanMacAddress);
}
//add VPC router to guest networks
- for (Nic nic : guestNics.keySet()) {
+ for (Pair<Nic, Network> nicNtwk : guestNics) {
+ Nic guestNic = nicNtwk.first();
//plug guest nic
- PlugNicCommand plugNicCmd = new PlugNicCommand(_itMgr.toVmTO(profile), getNicTO(router, nic.getNetworkId()));
+ PlugNicCommand plugNicCmd = new PlugNicCommand(_itMgr.toVmTO(profile), getNicTO(router, guestNic.getNetworkId(), null));
cmds.addCommand(plugNicCmd);
- if (!_networkMgr.isPrivateGateway(nic)) {
+ if (!_networkMgr.isPrivateGateway(guestNic)) {
//set guest network
VirtualMachine vm = _vmDao.findById(router.getId());
- NicProfile nicProfile = _networkMgr.getNicProfile(vm, nic.getNetworkId());
+ NicProfile nicProfile = _networkMgr.getNicProfile(vm, guestNic.getNetworkId(), null);
SetupGuestNetworkCommand setupCmd = createSetupGuestNetworkCommand(router, true, nicProfile);
cmds.addCommand(setupCmd);
} else {
//set private network
- PrivateIpVO ipVO = _privateIpDao.findByIpAndSourceNetworkId(nic.getNetworkId(), nic.getIp4Address());
- Network network = _networkDao.findById(nic.getNetworkId());
+ PrivateIpVO ipVO = _privateIpDao.findByIpAndSourceNetworkId(guestNic.getNetworkId(), guestNic.getIp4Address());
+ Network network = _networkDao.findById(guestNic.getNetworkId());
String vlanTag = network.getBroadcastUri().getHost();
String netmask = NetUtils.getCidrNetmask(network.getCidr());
PrivateIpAddress ip = new PrivateIpAddress(ipVO, vlanTag, network.getGateway(), netmask, ipVO.getMacAddress());
@@ -834,13 +862,14 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
throw new CloudRuntimeException("Cannot find related provider of virtual router provider: " + vrProvider.getType().toString());
}
- for (Nic nic : guestNics.keySet()) {
+ for (Pair<Nic, Network> nicNtwk : guestNics) {
+ Nic guestNic = nicNtwk.first();
if (reprogramGuestNtwks) {
- finalizeIpAssocForNetwork(cmds, router, provider, nic.getNetworkId());
- finalizeNetworkRulesForNetwork(cmds, router, provider, nic.getNetworkId());
+ finalizeIpAssocForNetwork(cmds, router, provider, guestNic.getNetworkId(), vlanMacAddress);
+ finalizeNetworkRulesForNetwork(cmds, router, provider, guestNic.getNetworkId());
}
- finalizeUserDataAndDhcpOnStart(cmds, router, provider, nic.getNetworkId());
+ finalizeUserDataAndDhcpOnStart(cmds, router, provider, guestNic.getNetworkId());
}
return true;
@@ -949,7 +978,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
Network privateNetwork = _networkMgr.getNetwork(gateway.getNetworkId());
s_logger.debug("Releasing private ip for gateway " + gateway + " from " + router);
- boolean result = setupVpcPrivateNetwork(router, false, _networkMgr.getNicProfile(router, privateNetwork.getId()));
+ boolean result = setupVpcPrivateNetwork(router, false, _networkMgr.getNicProfile(router, privateNetwork.getId(), null));
if (!result) {
s_logger.warn("Failed to release private ip for gateway " + gateway + " on router " + router);
return false;
@@ -964,10 +993,10 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
@Override
protected void finalizeIpAssocForNetwork(Commands cmds, VirtualRouter router, Provider provider,
- Long guestNetworkId) {
+ Long guestNetworkId, Map<String, String> vlanMacAddress) {
if (router.getVpcId() == null) {
- super.finalizeIpAssocForNetwork(cmds, router, provider, guestNetworkId);
+ super.finalizeIpAssocForNetwork(cmds, router, provider, guestNetworkId, vlanMacAddress);
return;
}
@@ -976,7 +1005,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
if (publicIps != null && !publicIps.isEmpty()) {
s_logger.debug("Found " + publicIps.size() + " ip(s) to apply as a part of domR " + router + " start.");
// Re-apply public ip addresses - should come before PF/LB/VPN
- createVpcAssociatePublicIPCommands(router, publicIps, cmds);
+ createVpcAssociatePublicIPCommands(router, publicIps, cmds, vlanMacAddress);
}
}
@@ -1262,7 +1291,7 @@ public class VpcVirtualNetworkApplianceManagerImpl extends VirtualNetworkApplian
if (ip.getState() == IpAddress.State.Allocated || ip.getState() == IpAddress.State.Allocating) {
//nic has to be plugged only when there are no nics for this vlan tag exist on VR
- Nic nic = _nicDao.findByInstanceIdNetworkIdAndBroadcastUri(publicNtwkId, router.getId(),
+ Nic nic = _nicDao.findByNetworkIdInstanceIdAndBroadcastUri(publicNtwkId, router.getId(),
broadcastUri.toString());
if ((nic == null && nicsToPlug.get(ip.getVlanTag()) == null) || nicsToUnplug.get(ip.getVlanTag()) != null) {