package org.opennaas.extensions.router.model.utils; import java.io.IOException; import java.net.Inet4Address; import java.net.InetAddress; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.List; import org.opennaas.core.resources.capability.CapabilityException; import org.opennaas.extensions.router.model.ComputerSystem; import org.opennaas.extensions.router.model.IPProtocolEndpoint; import org.opennaas.extensions.router.model.LogicalDevice; 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.System; import org.opennaas.extensions.router.model.VRRPGroup; import org.opennaas.extensions.router.model.VRRPProtocolEndpoint; public class ModelHelper { public static List<NetworkPort> getInterfaces(System system) { List<NetworkPort> ports = new ArrayList<NetworkPort>(); for (LogicalDevice dev : system.getLogicalDevices()) { if (dev instanceof NetworkPort) { ports.add((NetworkPort) dev); } } return ports; } public static long ipv4StringToLong(String ip) throws IOException { // transform String ([0..255].[0..255].[0..255].[0..255]) into long InetAddress address = Inet4Address.getByName(ip); ByteBuffer bb = ByteBuffer.wrap(address.getAddress()); long ipLong; if (address.getAddress().length > 4) { ipLong = bb.getLong();// reads 8 bytes and creates a long } else { ipLong = bb.getInt(); // reads 4 bytes and creates an int } return ipLong; } public static String ipv4LongToString(long ip) throws IOException { // transform long into String ([0..255].[0..255].[0..255].[0..255]) ByteBuffer bb = ByteBuffer.allocate(8).putLong(ip); byte[] bytes = new byte[4]; bb.position(4); bb.get(bytes, 0, 4); // read 4 bytes starting at position 4. InetAddress address = Inet4Address.getByAddress(bytes); return address.getHostAddress(); } public static VRRPGroup copyVRRPConfiguration(VRRPGroup vrrpGroup) { VRRPGroup copy = copyVRRPGroup(vrrpGroup); for (ProtocolEndpoint protocolEndpoint : vrrpGroup.getProtocolEndpoint()) { // copy VRRPProtocolEndpoint VRRPProtocolEndpoint vrrpProtocolEndpoint = copyVRRPProtocolEndpoint((VRRPProtocolEndpoint) protocolEndpoint); copy.addProtocolEndpoint(vrrpProtocolEndpoint); // IPProtocolEndpoint copy IPProtocolEndpoint ipProtocolEndpoint = (IPProtocolEndpoint) protocolEndpoint.getBindedProtocolEndpoints().get(0); IPProtocolEndpoint ipCopy = copyIPProtocolEndpoint(ipProtocolEndpoint); vrrpProtocolEndpoint.bindServiceAccessPoint(ipCopy); // NetworkPort copy NetworkPort networkPort = (NetworkPort) ipProtocolEndpoint.getLogicalPorts().get(0); NetworkPort netCopy = copyNetworkPort(networkPort); netCopy.addProtocolEndpoint(ipCopy); } return copy; } public static VRRPGroup copyVRRPGroup(VRRPGroup vrrpGroup) { VRRPGroup copy = new VRRPGroup(); copy.setVrrpName(vrrpGroup.getVrrpName()); copy.setVirtualIPAddress(vrrpGroup.getVirtualIPAddress()); copy.setVirtualLinkAddress(vrrpGroup.getVirtualLinkAddress()); return copy; } public static NetworkPort copyNetworkPort(NetworkPort networkPort) { NetworkPort netCopy = new NetworkPort(); netCopy.setName(networkPort.getName()); netCopy.setPortNumber(networkPort.getPortNumber()); return netCopy; } public static IPProtocolEndpoint copyIPProtocolEndpoint(IPProtocolEndpoint ipProtocolEndpoint) { IPProtocolEndpoint copy = new IPProtocolEndpoint(); copy.setProtocolIFType(ipProtocolEndpoint.getProtocolIFType()); if (ipProtocolEndpoint.getProtocolIFType().equals(ProtocolIFType.IPV4)) { copy.setIPv4Address(ipProtocolEndpoint.getIPv4Address()); copy.setSubnetMask(ipProtocolEndpoint.getSubnetMask()); } else if (ipProtocolEndpoint.getProtocolIFType().equals(ProtocolIFType.IPV6)) { copy.setIPv6Address(ipProtocolEndpoint.getIPv6Address()); copy.setPrefixLength(ipProtocolEndpoint.getPrefixLength()); } else { copy.setIPv4Address(ipProtocolEndpoint.getIPv4Address()); copy.setSubnetMask(ipProtocolEndpoint.getSubnetMask()); copy.setIPv6Address(ipProtocolEndpoint.getIPv6Address()); copy.setPrefixLength(ipProtocolEndpoint.getPrefixLength()); } return copy; } public static VRRPProtocolEndpoint copyVRRPProtocolEndpoint(VRRPProtocolEndpoint pE) { VRRPProtocolEndpoint copy = new VRRPProtocolEndpoint(); copy.setPriority(pE.getPriority()); copy.setProtocolIFType(pE.getProtocolIFType()); return copy; } public static VRRPGroup getVRRPGroupByName(ComputerSystem model, int groupId) throws CapabilityException { List<VRRPGroup> vrrpGroupsList = model.getAllHostedServicesByType(new VRRPGroup()); for (VRRPGroup candidate : vrrpGroupsList) if (candidate.getVrrpName() == groupId) return candidate; return null; } }