package org.opennaas.extensions.router.capability.vrrp.shell; import org.apache.felix.gogo.commands.Argument; import org.apache.felix.gogo.commands.Command; import org.opennaas.core.resources.IResource; import org.opennaas.core.resources.ResourceException; import org.opennaas.core.resources.command.CommandException; import org.opennaas.core.resources.shell.GenericKarafCommand; import org.opennaas.extensions.router.capability.vrrp.IVRRPCapability; import org.opennaas.extensions.router.model.IPProtocolEndpoint; import org.opennaas.extensions.router.model.NetworkPort; 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; /** * @author Julio Carlos Barrera */ @Command(scope = "vrrp", name = "unconfigure", description = "Unconfigure VRRP in given IP Address in an interface of a router") public class UnconfigureVRRPCommand extends GenericKarafCommand { @Argument(index = 0, name = "resourceType:resourceName", description = "Name of the router to unconfigure VRRP", required = true, multiValued = false) private String resourceId; @Argument(index = 1, name = "interfaceName", description = "Name of the interface in the router", required = true, multiValued = false) private String interfaceName; @Argument(index = 2, name = "interfaceIPAddress", description = "IP address of the interface in the router", required = true, multiValued = false) private String interfaceIPAddress; @Argument(index = 3, name = "vrrpGroupId", description = "The VRRP group ID", required = true, multiValued = false) private int vrrpGroupId; @Override protected Object doExecute() throws Exception { printInitCommand("Unconfigure VRRP"); try { IResource router = getResourceFromFriendlyName(resourceId); IVRRPCapability vrrpCapability = (IVRRPCapability) router.getCapabilityByInterface(IVRRPCapability.class); VRRPProtocolEndpoint vrrpProtocolEndpoint = new VRRPProtocolEndpoint(); VRRPGroup vrrpGroup = new VRRPGroup(); vrrpGroup.setVrrpName(vrrpGroupId); NetworkPort netPort = buildNetworkPort(); IPProtocolEndpoint ipProtocolEndpoint = buildIPProtocolEndpoint(); ipProtocolEndpoint.addLogiaclPort(netPort); vrrpProtocolEndpoint.bindServiceAccessPoint(ipProtocolEndpoint); vrrpProtocolEndpoint.setProtocolIFType(ipProtocolEndpoint.getProtocolIFType()); vrrpProtocolEndpoint.setService(vrrpGroup); vrrpCapability.unconfigureVRRP(vrrpProtocolEndpoint); printEndCommand(); return null; } catch (ResourceException e) { printError(e); printEndCommand(); return -1; } catch (Exception e) { printError("Error unconfiguring VRRP."); printError(e); printEndCommand(); return -1; } } private NetworkPort buildNetworkPort() throws Exception { NetworkPort netPort = new NetworkPort(); String[] argsInterface = splitInterfaces(interfaceName); String interfaceName = argsInterface[0]; int port = Integer.parseInt(argsInterface[1]); netPort.setName(interfaceName); netPort.setPortNumber(port); return netPort; } private IPProtocolEndpoint buildIPProtocolEndpoint() throws CommandException { IPProtocolEndpoint pE = new IPProtocolEndpoint(); if (IPUtilsHelper.isIPv4ValidAddress(interfaceIPAddress)) { String address = IPUtilsHelper.getAddressFromIP(interfaceIPAddress); String mask = IPUtilsHelper.getPrefixFromIp(interfaceIPAddress); pE.setIPv4Address(address); pE.setSubnetMask(IPUtilsHelper.parseShortToLongIpv4NetMask(mask)); pE.setProtocolIFType(ProtocolIFType.IPV4); } else if (IPUtilsHelper.isIPv6ValidAddress(interfaceIPAddress)) { String address = IPUtilsHelper.getAddressFromIP(interfaceIPAddress); String prefix = IPUtilsHelper.getPrefixFromIp(interfaceIPAddress); pE.setIPv6Address(address); pE.setPrefixLength(Short.valueOf(prefix)); pE.setProtocolIFType(ProtocolIFType.IPV6); } else throw new CommandException("Invalid IP format."); return pE; } }