/**
*
*/
package org.opennaas.extensions.vcpe.capability.builder.builders.helpers;
import java.util.List;
import org.opennaas.core.resources.IResource;
import org.opennaas.core.resources.ResourceException;
import org.opennaas.extensions.router.capability.vrrp.IVRRPCapability;
import org.opennaas.extensions.router.capability.vrrp.VRRPCapability;
import org.opennaas.extensions.router.model.IPProtocolEndpoint;
import org.opennaas.extensions.router.model.NetworkPort;
import org.opennaas.extensions.router.model.ProtocolEndpoint;
import org.opennaas.extensions.router.model.ProtocolEndpoint.ProtocolIFType;
import org.opennaas.extensions.router.model.VRRPGroup;
import org.opennaas.extensions.router.model.VRRPProtocolEndpoint;
import org.opennaas.extensions.router.model.utils.IPUtilsHelper;
import org.opennaas.extensions.vcpe.capability.VCPEToRouterModelTranslator;
import org.opennaas.extensions.vcpe.model.Interface;
import org.opennaas.extensions.vcpe.model.Router;
import org.opennaas.extensions.vcpe.model.VCPENetworkModel;
import org.opennaas.extensions.vcpe.model.VRRP;
/**
* @author Jordi
*/
public class VRRPHelper extends GenericHelper {
/**
* Configure VRRP
*
* @param resource
* @param model
* @throws ResourceException
*/
public static void configureVRRP(IResource resource, VCPENetworkModel model) throws ResourceException {
// obtain VRRP from VCPENetworkModel
VRRP vrrp = model.getVrrp();
// create VRRPGroup and VRRPProtocolEndpoint's
VRRPGroup vrrpGroup = new VRRPGroup();
// set VRRPGroup parameters
vrrpGroup.setVrrpName(vrrp.getGroup());
vrrpGroup.setVirtualIPAddress(vrrp.getVirtualIPAddress());
// obtain CIM model NetworkPort's (router interfaces)
NetworkPort masterNetworkPort = VCPEToRouterModelTranslator.vCPEInterfaceToNetworkPort(vrrp.getMasterInterface(), model);
NetworkPort backupNetworkPort = VCPEToRouterModelTranslator.vCPEInterfaceToNetworkPort(vrrp.getBackupInterface(), model);
// configure both VRRPProtocolEndpoint's
configureVRRPProtocolEndpoint(vrrp.getPriorityMaster(), vrrp.getMasterInterface(), vrrp.getMasterRouter(), vrrpGroup, masterNetworkPort);
configureVRRPProtocolEndpoint(vrrp.getPriorityBackup(), vrrp.getBackupInterface(), vrrp.getBackupRouter(), vrrpGroup, backupNetworkPort);
}
/**
* Unconfigure VRRP
*
* @param resource
* @param model
* @throws ResourceException
*/
public void unconfigureVRRP(IResource resource, VCPENetworkModel model) throws ResourceException {
// TODO
}
/**
* @param vrrpPriority
* @param iface
* @param router
* @param vrrgrGroup
* @param networkPort
* @throws ResourceException
*/
private static void configureVRRPProtocolEndpoint(int vrrpPriority, Interface iface, Router router, VRRPGroup vrrgrGroup, NetworkPort networkPort)
throws ResourceException {
// create VRRPProtocolEndpoint
VRRPProtocolEndpoint vrrpProtocolEndpoint = new VRRPProtocolEndpoint();
vrrpProtocolEndpoint.setProtocolIFType(ProtocolIFType.IPV4);
// set VRRPProtocolEndpoint' parameters
vrrpProtocolEndpoint.setPriority(vrrpPriority);
// link CIM VRRP model elements
vrrpProtocolEndpoint.setService(vrrgrGroup);
// link VRRP CIM model elements to CIM model elements
// obtain router interface
if (networkPort.getName().equals(iface.getPhysicalInterfaceName()) &&
networkPort.getPortNumber() == (iface.getPort())) {
// obtain master interface IP address
List<ProtocolEndpoint> ipAddresses = networkPort.getProtocolEndpoint();
for (ProtocolEndpoint protocolEndpoint : ipAddresses) {
if (protocolEndpoint instanceof IPProtocolEndpoint &&
(((IPProtocolEndpoint) protocolEndpoint).getIPv4Address() + "/" + IPUtilsHelper
.parseLongToShortIpv4NetMask(((IPProtocolEndpoint) protocolEndpoint).getSubnetMask())).equals(iface.getIpAddress())) {
// link VRRPProtocolEndpoint with IPProtocolEndpoint
vrrpProtocolEndpoint.bindServiceAccessPoint(protocolEndpoint);
}
}
}
// obtain VRRPCapability and apply the configuration to interface
IResource routerResource = getResourceManager().getResource(getResourceManager().getIdentifierFromResourceName("router", router.getName()));
IVRRPCapability vrrpCapability = (IVRRPCapability) routerResource.getCapabilityByInterface(VRRPCapability.class);
vrrpCapability.configureVRRP(vrrpProtocolEndpoint);
}
}