/** * */ package org.opennaas.extensions.vcpe.capability.builder.builders.helpers; import java.util.List; import org.opennaas.core.resources.IResource; import org.opennaas.core.resources.IResourceIdentifier; import org.opennaas.core.resources.ResourceException; import org.opennaas.core.resources.capability.ICapabilityLifecycle.State; import org.opennaas.core.resources.protocol.IProtocolSessionManager; import org.opennaas.core.resources.protocol.ProtocolException; import org.opennaas.core.resources.protocol.ProtocolSessionContext; import org.opennaas.extensions.router.capability.chassis.ChassisCapability; import org.opennaas.extensions.router.capability.chassis.IChassisCapability; import org.opennaas.extensions.router.model.ComputerSystem; import org.opennaas.extensions.vcpe.capability.VCPEToRouterModelTranslator; import org.opennaas.extensions.vcpe.model.Router; import org.opennaas.extensions.vcpe.model.VCPENetworkModel; /** * @author Jordi */ public class LogicalRouterHelper extends GenericHelper { /** * Create a Logical Router * * @param phy * @param lr * @param model * @throws ResourceException */ public static void createLR(Router phy, Router lr, VCPENetworkModel model) throws ResourceException { IResource phyResource = getResourceManager().getResource( getResourceManager().getIdentifierFromResourceName("router", phy.getName())); ComputerSystem lrModel = VCPEToRouterModelTranslator.vCPERouterToRouterWithoutIfaces(lr, model); IChassisCapability lrCapability = (IChassisCapability) phyResource.getCapabilityByInterface(ChassisCapability.class); lrCapability.createLogicalRouter(lrModel); } /** * Remove a Logical Router * * @param phy * @param lr * @param model * @throws ResourceException */ public static void removeLR(Router phy, Router lr, VCPENetworkModel model) throws ResourceException { IResource phyResource = getResourceManager().getResource( getResourceManager().getIdentifierFromResourceName("router", phy.getName())); // remove LR from phyRouter config ComputerSystem lrModel = VCPEToRouterModelTranslator.vCPERouterToRouter(lr, model); IChassisCapability lrCapability = (IChassisCapability) phyResource.getCapabilityByInterface(ChassisCapability.class); lrCapability.deleteLogicalRouter(lrModel); } /** * @param router * @throws ResourceException */ public static void removeLRFromRM(Router router) throws ResourceException { IResourceIdentifier lrId = getResourceManager().getIdentifierFromResourceName("router", router.getName()); IResource lrResource = getResourceManager().getResource(lrId); if (lrResource.getState().equals(State.ACTIVE)) { getResourceManager().stopResource(lrId); } getResourceManager().removeResource(lrId); } /** * @param physical * @param logical * @throws ProtocolException * @throws ResourceException */ public static void copyContextPhysicaltoLogical(Router physical, Router logical) throws ProtocolException, ResourceException { IProtocolSessionManager phyPSM = getProtocolManager().getProtocolSessionManager( getResourceManager().getIdentifierFromResourceName("router", physical.getName()).getId()); IProtocolSessionManager logPSM = getProtocolManager().getProtocolSessionManager( getResourceManager().getIdentifierFromResourceName("router", logical.getName()).getId()); List<ProtocolSessionContext> phyContexts = phyPSM.getRegisteredContexts(); for (ProtocolSessionContext context : phyContexts) { logPSM.registerContext(context.clone()); } } }