static public void configureEGWSNATPool(NeutronSubnet neutronSubnet, IfSBDoveEGWSNATPoolCRUD snatPoolDB, OpenDoveNeutronControlBlock controlBlock, OpenDoveNetwork oldODN) { Iterator<OpenDoveServiceAppliance> oDSAIterator = oldODN.getEGWs().iterator(); String ip_low = null, ip_high = null; while (oDSAIterator.hasNext()) { OpenDoveDomain d = oldODN.getScopingDomain(); OpenDoveNetwork extMCastNet = d.getExtMCastNetwork(); Integer domainID = d.getDomainId(); OpenDoveGwIpv4 egwExternalIP = oDSA.getEGWExtIP(); OpenDoveEGWSNATPool snatPool = new OpenDoveEGWSNATPool(oDSA.getUUID(), ip_low, ip_high, oldODN.getDomain_uuid(), domainID, extMCastNet.getVnid(), oldODN.getVnid(), egwExternalIP, 8000, 9000);//TODO add control for low and high snatPoolDB.addEgwSNATPool(snatPool.getUUID(), snatPool);
public OpenDoveNetwork getNetworkByName(String name) { Iterator<OpenDoveObject> i = networkMap.values().iterator(); while (i.hasNext()) { OpenDoveNetwork n = (OpenDoveNetwork) i.next(); if (n.getName().equals(name)) { return n; } } return null; }
public void neutronNetworkDeleted(NeutronNetwork network) { IfOpenDoveNetworkCRUD doveNetworkDB = OpenDoveCRUDInterfaces.getIfDoveNetworkCRU(this); // mark open dove networks for deletion // no need to release EGW and SNAT pools for networks here - before the network can be removed, // the router interface has to be removed (which tears down policies and SNAT pools) and // then the port has to be removed. Iterator<OpenDoveNetwork> i = doveNetworkDB.getNetworks().iterator(); while (i.hasNext()) { OpenDoveNetwork oDN = i.next(); if (oDN.getNeutronNetwork().equalsIgnoreCase(network.getID())) { oDN.setTombstoneFlag(true); doveNetworkDB.updateNetwork(oDN.getUUID()); } } }
public static void removeEGWSNATPool(NeutronSubnet neutronSubnet, IfSBDoveEGWSNATPoolCRUD snatPoolDB, OpenDoveNeutronControlBlock controlBlock, OpenDoveNetwork oldODN) { Iterator<OpenDoveEGWSNATPool> iterator = snatPoolDB.getEgwSNATPools().iterator(); while (iterator.hasNext()) { OpenDoveEGWSNATPool snatPool = iterator.next(); if (oldODN.networkUsesEGW(snatPool.getGatewayUUID()) && snatPool.getVnid() == oldODN.getVnid()) { snatPool.setTombstoneFlag(true); snatPoolDB.updateSNATPool(snatPool.getUUID(), snatPool); } } } }
private static void createAllowPolicy(IfSBDovePolicyCRUD dovePolicyDB, OpenDoveNetwork newODN, OpenDoveNetwork oldODN, int traffic_type) { List<OpenDovePolicy> policies = dovePolicyDB.getPolicies(); Iterator<OpenDovePolicy> policyIterator = policies.iterator(); boolean found = false; while (policyIterator.hasNext() && !found) { OpenDovePolicy policy = policyIterator.next(); if (policy.getSourceVNID() == newODN.getVnid() && policy.getDestinationVNID() == oldODN.getVnid() && policy.getPolicyAction() == 0 && policy.getTrafficType() == traffic_type) { OpenDovePolicy delta = new OpenDovePolicy(); delta.setPolicyAction(1); found = true; dovePolicyDB.updatePolicy(policy, delta); } } if (!found) { OpenDovePolicy newPolicy = new OpenDovePolicy(newODN.getVnid(), oldODN.getVnid(), newODN.getDomain_uuid(), newODN.getDomain_id(), traffic_type); newPolicy.setTombstoneFlag(false); dovePolicyDB.addPolicy(newPolicy.getUUID(), newPolicy); } }
while (doveNetworkIterator.hasNext()) { OpenDoveNetwork doveNetwork = doveNetworkIterator.next(); if (doveNetwork.getName().equalsIgnoreCase(doveNetworkName) && doveNetwork.getDomain_uuid().equalsIgnoreCase(doveDomainUUID)) { Integer vnid = doveNetwork.getVnid(); Iterator<OpenDoveServiceAppliance> egwIterator = doveNetwork.getEGWs().iterator(); while (egwIterator.hasNext()) { OpenDoveServiceAppliance egw = egwIterator.next();
private void cleanObjectReferences(OpenDoveObject o) { if (o instanceof OpenDoveDomain) { for (OpenDoveNetwork oDN: openDoveBidirectionalInterfaces.getNetworks()) { oDN.removeScopingDomain((OpenDoveDomain) o); last.setTombstoneFlag(true); openDoveBidirectionalInterfaces.updateNetwork(last.getUUID()); OpenDoveSubnet oDS = openDoveSBInterfaces.getSubnet(oDNSA.getOpenDoveNetworkSubnetUuid()); if (oDS != null) { oDS.removeNetwork(openDoveBidirectionalInterfaces.getNetworkByVnid(oDNSA.getOpenDoveNetworkVnid()).getUUID()); if (oDS.getNetworkUUIDs().size() == 0) { oDS.setTombstoneFlag(true); oDN.removeHostingSwitch((OpenDoveSwitch) o);
private OpenDoveDomain createDoveDomain(String domainName, String netUUID, IfOpenDoveDomainCRUD domainDB, IfOpenDoveNetworkCRUD doveNetworkDB) { OpenDoveDomain domain; if (!domainDB.domainExistsByName(domainName)) { // look up domain domain = new OpenDoveDomain(domainName); // if doesn't exist, create domainDB.addDomain(domain.getUUID(), domain); //create EXT MCAST network int vnid = doveNetworkDB.allocateVNID(); String networkName = "Ext_MCast_"+vnid; OpenDoveNetwork extMCastNet = new OpenDoveNetwork(networkName, vnid, domain, 1, ""); doveNetworkDB.addNetwork(extMCastNet.getUUID(), extMCastNet); /* * Set the Ext Mcast Network for the Domain Here. * This is needed for EXT-GW SNAT Pool Creation */ domain.setExtMCastNetwork(extMCastNet); } else { domain = domainDB.getDomainByName(domainName); } return domain; }
public OpenDoveNetwork getNetworkByVnid(int vnid) { Iterator<OpenDoveObject> i = networkMap.values().iterator(); while (i.hasNext()) { OpenDoveNetwork n = (OpenDoveNetwork) i.next(); if (n.getVnid() == vnid) { return n; } } return null; }
public void addNetwork(String networkUUID, OpenDoveNetwork network) { networkMap.putIfAbsent(networkUUID, network); IfOpenDoveDomainCRUD sbInterface = OpenDoveCRUDInterfaces.getIfDoveDomainCRU(this); if (sbInterface != null) { sbInterface.addNetworkToDomain(network.getDomain_uuid(), network); } }
public void deleteServiceAppliance(String saUUID) { if (doveServiceApplianceDB.containsKey(saUUID)) { OpenDoveServiceAppliance target = doveServiceApplianceDB.remove(saUUID); for (OpenDoveObject o : networkMap.values()) { OpenDoveNetwork network = (OpenDoveNetwork) o; network.removeEGW(target); } } }
public OpenDoveSubnet(NeutronSubnet neutronSubnet, OpenDoveDomain domain, NeutronNetwork neutronNetwork, OpenDoveNetwork network) { networkUUIDs = new ArrayList<String>(); uuid = java.util.UUID.randomUUID().toString(); domainUUID = domain.getUUID(); subnet = getIPNetwork(neutronSubnet.getCidr()); mask = getIPMask(neutronSubnet.getCidr()); nexthop = neutronSubnet.getGatewayIP(); if (neutronNetwork.isShared()) { subnetType = "Shared"; } else { subnetType = "Dedicated"; } // link to network networkUUIDs.add(network.getUUID()); tombstoneFlag = false; associatedOSSubnetUUID = neutronSubnet.getID(); }
network.addEGW(target);
public void neutronNetworkCreated(NeutronNetwork input) { IfNBSystemRU systemDB = OpenDoveCRUDInterfaces.getIfSystemRU(this); IfOpenDoveDomainCRUD domainDB = OpenDoveCRUDInterfaces.getIfDoveDomainCRU(this); IfOpenDoveNetworkCRUD doveNetworkDB = OpenDoveCRUDInterfaces.getIfDoveNetworkCRU(this); if (!input.isRouterExternal()) { // don't map router external networks if (input.isShared()) { // map shared network OpenDoveNeutronControlBlock controlBlock = systemDB.getSystemBlock(); //get system block if (!controlBlock.getDomainSeparation()) { //if domain separation not supported, map to shared domain OpenDoveDomain sharedDomain = createDoveDomain("SharedDomain", input.getID(), domainDB, doveNetworkDB); int vnid = doveNetworkDB.allocateVNID(); String networkName = "Neutron "+input.getID(); OpenDoveNetwork doveNetwork = new OpenDoveNetwork(networkName, vnid, sharedDomain, 0, input.getID()); doveNetworkDB.addNetwork(doveNetwork.getUUID(), doveNetwork); } } else { // map dedicated network String domainName = "Neutron "+input.getTenantID(); OpenDoveDomain domain = createDoveDomain(domainName, input.getID(), domainDB, doveNetworkDB); domain.setAssociatedOSTenantUUID(input.getTenantID()); int vnid = doveNetworkDB.allocateVNID(); String networkName = "Neutron "+input.getID(); OpenDoveNetwork doveNetwork = new OpenDoveNetwork(networkName, vnid, domain, 0, input.getID()); doveNetworkDB.addNetwork(doveNetwork.getUUID(), doveNetwork); } } }
public boolean networkExistsByVnid(int vnid) { Iterator<OpenDoveObject> i = networkMap.values().iterator(); while (i.hasNext()) { OpenDoveNetwork n = (OpenDoveNetwork) i.next(); if (n.getVnid() == vnid) { return true; } } return false; }
OpenDoveSubnet oDS = i.next(); if (oDS.getAssociatedOSSubnetUUID().equalsIgnoreCase(oldNeutronSubnet.getID()) && oDS.getDomainUUID() == oldODN.getDomain_uuid()) { IfOpenDoveServiceApplianceCRUD serviceApplianceDB = OpenDoveCRUDInterfaces.getIfDoveServiceApplianceCRUD(this); IfSBDoveGwIpv4CRUD gatewayIPDB = OpenDoveCRUDInterfaces.getIfSBDoveGwIpv4CRUD(this); OpenDoveSubnet oDS = i.next(); if (oDS.getAssociatedOSSubnetUUID().equalsIgnoreCase(neutronSubnet.getID()) && oDS.getDomainUUID() == newODN.getDomain_uuid()) { IfOpenDoveServiceApplianceCRUD serviceApplianceDB = OpenDoveCRUDInterfaces.getIfDoveServiceApplianceCRUD(this); IfSBDoveGwIpv4CRUD gatewayIPDB = OpenDoveCRUDInterfaces.getIfSBDoveGwIpv4CRUD(this); if (newODN.getDomain_uuid().equalsIgnoreCase(oldODN.getDomain_uuid())) { OpenDovePolicy.createAllowPolicies(dovePolicyDB, newODN, oldODN);
public static void tombstoneEGWs( IfOpenDoveServiceApplianceCRUD serviceApplianceDB, IfSBDoveGwIpv4CRUD gatewayIPDB, NeutronSubnet subnet, OpenDoveNetwork network) { for (OpenDoveGwIpv4 gwIP: gatewayIPDB.getGwIpv4Pool()) { if (subnet.isValidIP(gwIP.getIP())) { subnet.releaseIP(gwIP.getIP()); gwIP.setTombstoneFlag(true); gatewayIPDB.updateGwIpv4(gwIP); network.removeEGW(serviceApplianceDB.getDoveServiceAppliance(gwIP.getGWUUID())); } } } }
OpenDoveNetwork doveNetwork = new OpenDoveNetwork(networkName, vnid, domain, 0, neutronNetwork.getID()); networkDB.addNetwork(doveNetwork.getUUID(), doveNetwork);
private static void removeAllowPolicy(IfSBDovePolicyCRUD dovePolicyDB, OpenDoveNetwork newODN, OpenDoveNetwork oldODN, int traffic_type) { List<OpenDovePolicy> policies = dovePolicyDB.getPolicies(); Iterator<OpenDovePolicy> policyIterator = policies.iterator(); boolean found = false; while (policyIterator.hasNext() && !found) { OpenDovePolicy policy = policyIterator.next(); if (policy.getSourceVNID() == newODN.getVnid() && policy.getDestinationVNID() == oldODN.getVnid() && policy.getPolicyAction() == 1 && policy.getTrafficType() == traffic_type) { OpenDovePolicy delta = new OpenDovePolicy(); delta.setPolicyAction(0); found = true; dovePolicyDB.updatePolicy(policy, delta); } } }
OpenDoveSubnet oDS = i.next(); if (oDS.getAssociatedOSSubnetUUID().equalsIgnoreCase(oldNeutronSubnet.getID()) && oDS.getDomainUUID() == oldODN.getDomain_uuid()) { OpenDoveEGWSNATPool.removeEGWSNATPool(neutronSubnet, snatPoolDB, controlBlock, oldODN); for ( OpenDoveSubnet oDS: doveSubnetDB.getSubnets()) { if (oDS.getAssociatedOSSubnetUUID().equalsIgnoreCase(neutronSubnet.getID()) && oDS.getDomainUUID() == newODN.getDomain_uuid()) { OpenDoveEGWSNATPool.removeEGWSNATPool(oldNeutronSubnet, snatPoolDB, controlBlock, newODN); if (newODN.getDomain_uuid().equalsIgnoreCase(oldODN.getDomain_uuid())) { OpenDovePolicy.removeAllowPolicies(dovePolicyDB, newODN, oldODN);