Example usage for org.apache.commons.net.util SubnetUtils SubnetUtils

List of usage examples for org.apache.commons.net.util SubnetUtils SubnetUtils

Introduction

In this page you can find the example usage for org.apache.commons.net.util SubnetUtils SubnetUtils.

Prototype

public SubnetUtils(String cidrNotation) 

Source Link

Document

Constructor that takes a CIDR-notation string, e.g.

Usage

From source file:com.vmware.photon.controller.api.backend.workflows.AssignFloatingIpToVmWorkflowServiceTest.java

private static DhcpSubnetService.State createDhcpRootSubnetServiceInCloudStore(TestEnvironment testEnvironment)
        throws Throwable {
    String cidr = "192.168.1.0/24";
    SubnetUtils subnetUtils = new SubnetUtils(cidr);
    SubnetUtils.SubnetInfo subnetInfo = subnetUtils.getInfo();

    DhcpSubnetService.State state = new DhcpSubnetService.State();
    state.cidr = cidr;//  w w  w .  ja va2 s  . co  m
    state.lowIp = IpHelper.ipStringToLong(subnetInfo.getLowAddress());
    state.highIp = IpHelper.ipStringToLong(subnetInfo.getHighAddress());
    state.isFloatingIpSubnet = true;
    state.documentSelfLink = DhcpSubnetService.FLOATING_IP_SUBNET_SINGLETON_LINK;
    state.subnetId = ServiceUtils.getIDFromDocumentSelfLink(state.documentSelfLink);
    Operation result = testEnvironment.sendPostAndWait(DhcpSubnetService.FACTORY_LINK, state);
    return result.getBody(DhcpSubnetService.State.class);
}

From source file:eu.smartenit.sdn.floodlight090.dtm.DTM.java

public synchronized Map<NetworkAddressIPv4, Short> getProactiveOutOfPortNumber() {
    logger.debug("getOutOfPortNumberProactiveWithoutReference() begin");
    if (configData == null) {
        throw new IllegalArgumentException("DTM has not been configured yet");
    }//from  ww  w .  j  a  va2  s .  c  o  m

    if (cVectorMap.isEmpty()) {
        throw new IllegalArgumentException("Compensation vector empty");
    }

    for (VectorValue cVectorValue : compensationVector.getVectorValues()) {
        if (cVectorValue.getValue() >= 0) {
            String subnet = cVectorValue.getTunnelEndPrefix().getPrefix() + "/"
                    + Integer.toString(cVectorValue.getTunnelEndPrefix().getPrefixLength());
            SubnetUtils utils = new SubnetUtils(subnet);
            for (ConfigDataEntry configDataEntry : configData.getEntries()) {
                for (TunnelInfo tunnelInfo : configDataEntry.getTunnels()) {
                    if (utils.getInfo()
                            .isInRange(tunnelInfo.getTunnelID().getRemoteTunnelEndAddress().getPrefix())) {
                        dcPrefixOutOfPortMap.put(configDataEntry.getRemoteDcPrefix(),
                                (short) tunnelInfo.getDaRouterOfPortNumber());
                    }
                }
            }
        }
    }
    logger.debug("getOutOfPortNumberProactiveWithoutReference() end");

    return dcPrefixOutOfPortMap;
}

From source file:com.cloud.network.element.BigSwitchBcfElement.java

@Override
public boolean applyNetworkACLs(Network network, List<? extends NetworkACLItem> rules)
        throws ResourceUnavailableException {
    SubnetUtils utils;//from   ww  w  . j av a 2s .c om
    String cidr = null;
    List<String> cidrList;
    for (NetworkACLItem r : rules) {
        if (r.getState() == NetworkACLItem.State.Revoke) {
            continue;
        }
        cidrList = r.getSourceCidrList();
        if (cidrList != null) {
            if (cidrList.size() > 1 || !r.getSourcePortEnd().equals(r.getSourcePortStart())) {
                throw new ResourceUnavailableException("One CIDR and one port only please.", Network.class,
                        network.getId());
            } else {
                cidr = cidrList.get(0);
            }
        }
        if (cidr == null || cidr.equalsIgnoreCase("0.0.0.0/0")) {
            cidr = "";
        } else {
            utils = new SubnetUtils(cidr);
            if (!utils.getInfo().getNetworkAddress().equals(utils.getInfo().getAddress())) {
                throw new ResourceUnavailableException("Invalid CIDR in Network ACL rule.", Network.class,
                        network.getId());
            }
        }
    }
    updateBcfRouter(network);
    return true;
}

From source file:eu.smartenit.sdn.floodlight090.dtm.DTM.java

/**
 * Returns output port of switch for a new flow.
 *
 * @return output port number//from  w w  w  .j  a  va 2 s.  co  m
 */
public synchronized short getReactiveWithReferenceOutOfPortNumber() {
    logger.debug("getOutOfPortNumberReactiveWithReference() begin");
    if (configData == null) {
        throw new IllegalArgumentException("DTM has not been configured yet");
    }

    if (rVectorMap.isEmpty() || cVectorMap.isEmpty()) {
        throw new IllegalArgumentException("Vectors not set");
    }

    OFPacketIn pi = getOFPacketIn();
    String piDestAddr = intToStringIp(
            new OFMatch().loadFromPacket(pi.getPacketData(), pi.getInPort()).getNetworkDestination());

    logger.debug("Network dest = " + intToStringIp(
            new OFMatch().loadFromPacket(pi.getPacketData(), pi.getInPort()).getNetworkDestination()));

    short[] selectedDaRouterOfPortNumber = null;
    for (ConfigDataEntry entry : configData.getEntries()) {
        String subnet = entry.getRemoteDcPrefix().getPrefix() + "/"
                + Integer.toString(entry.getRemoteDcPrefix().getPrefixLength());
        SubnetUtils utils = new SubnetUtils(subnet);
        if (utils.getInfo().isInRange(piDestAddr)) {
            selectedDaRouterOfPortNumber = new short[] {
                    (short) entry.getTunnels().get(0).getDaRouterOfPortNumber(),
                    (short) entry.getTunnels().get(1).getDaRouterOfPortNumber() };
            logger.debug("IP " + piDestAddr + " in range " + subnet);
        }
    }

    if (selectedDaRouterOfPortNumber == null) {
        logger.debug("Destination host unreachable! Wrong IP address: " + piDestAddr);
        logger.debug("getOutOfPortNumberReactiveWithReference() end");
        return 0;
    }

    logger.debug("Selected DA router ports: " + Arrays.toString(selectedDaRouterOfPortNumber));

    double[] C = { daRouterCVectorMap.get(selectedDaRouterOfPortNumber[0]),
            daRouterCVectorMap.get(selectedDaRouterOfPortNumber[1]), };

    double[] R = { daRouterRVectorMap.get(selectedDaRouterOfPortNumber[0]),
            daRouterRVectorMap.get(selectedDaRouterOfPortNumber[1]), };

    if (daRouterCompenstatingToTunnelMap.get(selectedDaRouterOfPortNumber[0]) > 0) {
        compensatingToTunnel = 1;
    } else if (daRouterCompenstatingToTunnelMap.get(selectedDaRouterOfPortNumber[1]) > 0) {
        compensatingToTunnel = 2;
    } else {
        compensatingToTunnel = 0;
    }

    double[] normalizedR = { R[0] / (R[0] + R[1]), R[1] / (R[0] + R[1]) };
    double[] invNormalizedR = { normalizedR[1], normalizedR[0] };
    double[] traffic = new double[LINK_COUNT];
    double trafficDCDC = 0;
    for (int i = 0; i < LINK_COUNT; i++) {
        traffic[i] = transmittedBytesMap.get(selectedDaRouterOfPortNumber[i])
                - transmittedBytesStartMap.get(selectedDaRouterOfPortNumber[i]);
        trafficDCDC += traffic[i];
    }
    int tunnel;
    if (compensatingToTunnel != 0) { // compensate == true
        int ti = compensatingToTunnel - 1;
        if (traffic[ti] < C[ti] / invNormalizedR[ti]) {
            tunnel = compensatingToTunnel;
            logger.debug("Compensating to tunnel " + tunnel);
        } else {
            resetTransmittedBytesStart(selectedDaRouterOfPortNumber[0]);
            resetTransmittedBytesStart(selectedDaRouterOfPortNumber[1]);
            if (compensatingToTunnel == 1) {
                tunnel = 2;
            } else {
                tunnel = 1;
            }
            logger.debug("Turning off compensation, sending flow to tunnel " + tunnel);
            compensatingToTunnel = 0; // compensate = false
            daRouterCompenstatingToTunnelMap.put(selectedDaRouterOfPortNumber[0], (short) 0);
            daRouterCompenstatingToTunnelMap.put(selectedDaRouterOfPortNumber[1], (short) 0);
        }
    } else {
        if (traffic[0] / trafficDCDC <= normalizedR[0]) {
            tunnel = 1;
        } else {
            tunnel = 2;
        }
        logger.debug("Not compensating, sending flow to tunnel " + tunnel);
    }
    // change tunnel to DA Router port number
    if (tunnel == 1) {
        daRouterOfPortNumber = selectedDaRouterOfPortNumber[0];
    } else if (tunnel == 2) {
        daRouterOfPortNumber = selectedDaRouterOfPortNumber[1];
    } else {
        daRouterOfPortNumber = 0; //drop flow
    }
    logger.debug("Summary:");
    logger.debug("\t C: " + Arrays.toString(C));
    logger.debug("\t normalizedR: " + Arrays.toString(normalizedR));
    logger.debug("\t transmittedBytesStart: " + transmittedBytesStartMap.toString());
    logger.debug("\t transmittedBytes: " + transmittedBytesMap.toString());
    logger.debug("\t traffic: " + Arrays.toString(traffic) + ", trafficDAB: " + trafficDCDC);
    logger.debug("\t OFPortNumber: " + daRouterOfPortNumber);
    logger.debug("getOutOfPortNumberReactiveWithReference() end");
    return (short) daRouterOfPortNumber;
}

From source file:com.cloud.network.element.BigSwitchBcfElement.java

@Override
public boolean applyFWRules(Network network, List<? extends FirewallRule> rules)
        throws ResourceUnavailableException {
    SubnetUtils utils;//from   www  .  j  av  a  2s .co  m
    String cidr = null;
    List<String> cidrList;
    for (FirewallRule r : rules) {
        if (r.getState() == FirewallRule.State.Revoke) {
            continue;
        }
        cidrList = r.getSourceCidrList();
        if (cidrList != null) {
            if (cidrList.size() > 1 || !r.getSourcePortEnd().equals(r.getSourcePortStart())) {
                throw new ResourceUnavailableException("One CIDR and one port only please.", Network.class,
                        network.getId());
            } else {
                cidr = cidrList.get(0);
            }
        }
        if (cidr == null || cidr.equalsIgnoreCase("0.0.0.0/0")) {
            cidr = "";
        } else {
            utils = new SubnetUtils(cidr);
            if (!utils.getInfo().getNetworkAddress().equals(utils.getInfo().getAddress())) {
                throw new ResourceUnavailableException("Invalid CIDR in Firewall rule.", Network.class,
                        network.getId());
            }
        }
    }
    updateBcfRouter(network);
    return true;
}

From source file:com.buaa.cfs.utils.NetUtils.java

/**
 * @return true if the given string is a subnet specified using CIDR notation, false otherwise
 *///from   w w  w.  j  a  v a  2  s.c o m
public static boolean isValidSubnet(String subnet) {
    try {
        new SubnetUtils(subnet);
        return true;
    } catch (IllegalArgumentException iae) {
        return false;
    }
}

From source file:com.buaa.cfs.utils.NetUtils.java

/**
 * Return an InetAddress for each interface that matches the given subnet specified using CIDR notation.
 *
 * @param subnet              subnet specified using CIDR notation
 * @param returnSubinterfaces whether to return IPs associated with subinterfaces
 *
 * @throws IllegalArgumentException if subnet is invalid
 *//*from   w w w.ja  v a2  s.  c o  m*/
public static List<InetAddress> getIPs(String subnet, boolean returnSubinterfaces) {
    List<InetAddress> addrs = new ArrayList<InetAddress>();
    SubnetInfo subnetInfo = new SubnetUtils(subnet).getInfo();
    Enumeration<NetworkInterface> nifs;

    try {
        nifs = NetworkInterface.getNetworkInterfaces();
    } catch (SocketException e) {
        LOG.error("Unable to get host interfaces", e);
        return addrs;
    }

    while (nifs.hasMoreElements()) {
        NetworkInterface nif = nifs.nextElement();
        // NB: adding addresses even if the nif is not up
        addMatchingAddrs(nif, subnetInfo, addrs);

        if (!returnSubinterfaces) {
            continue;
        }
        Enumeration<NetworkInterface> subNifs = nif.getSubInterfaces();
        while (subNifs.hasMoreElements()) {
            addMatchingAddrs(subNifs.nextElement(), subnetInfo, addrs);
        }
    }
    return addrs;
}

From source file:eu.smartenit.sdn.floodlight090.dtm.DTM.java

public synchronized short getReactiveWithoutReferenceOutOfPortNumber() {
    logger.debug("getOutOfPortNumberReactiveWithoutReference() begin");
    if (configData == null) {
        throw new IllegalArgumentException("DTM has not been configured yet");
    }/*from www.  j  ava  2 s  .c  om*/

    if (cVectorMap.isEmpty()) {
        throw new IllegalArgumentException("Compensation vector empty");
    }

    OFPacketIn pi = getOFPacketIn();
    String piDestAddr = intToStringIp(
            new OFMatch().loadFromPacket(pi.getPacketData(), pi.getInPort()).getNetworkDestination());

    logger.debug("Network dest = " + intToStringIp(
            new OFMatch().loadFromPacket(pi.getPacketData(), pi.getInPort()).getNetworkDestination()));

    short[] selectedDaRouterOfPortNumber = null;
    for (ConfigDataEntry entry : configData.getEntries()) {
        String subnet = entry.getRemoteDcPrefix().getPrefix() + "/"
                + Integer.toString(entry.getRemoteDcPrefix().getPrefixLength());
        SubnetUtils utils = new SubnetUtils(subnet);
        if (utils.getInfo().isInRange(piDestAddr)) {
            selectedDaRouterOfPortNumber = new short[] {
                    (short) entry.getTunnels().get(0).getDaRouterOfPortNumber(),
                    (short) entry.getTunnels().get(1).getDaRouterOfPortNumber() };
            logger.debug("IP " + piDestAddr + " in range " + subnet);
        }
    }

    if (selectedDaRouterOfPortNumber == null) {
        logger.debug("Destination host unreachable! Wrong IP address: " + piDestAddr);
        logger.debug("getOutOfPortNumberReactiveWithoutReference");
        return 0;
    }

    logger.debug("Selected DA router ports: " + Arrays.toString(selectedDaRouterOfPortNumber));

    double[] C = { daRouterCVectorMap.get(selectedDaRouterOfPortNumber[0]),
            daRouterCVectorMap.get(selectedDaRouterOfPortNumber[1]), };

    if (C[0] >= 0) {
        daRouterOfPortNumber = selectedDaRouterOfPortNumber[0];
    } else if (C[1] >= 0) {
        daRouterOfPortNumber = selectedDaRouterOfPortNumber[1];
    } else {
        daRouterOfPortNumber = 0;
    }

    logger.debug("Summary:");
    logger.debug("\t OFPortNumber: " + daRouterOfPortNumber);
    logger.debug("getOutOfPortNumberReactiveWithoutReference() end");
    return (short) daRouterOfPortNumber;
}

From source file:com.topsec.tsm.sim.asset.web.AssetListController.java

/**
 * ?/*  ww  w  .jav a 2 s . c  o m*/
 * @param networkAddressParam ?
 * @param nodeId ??
 * @param netmask ?
 * @return
 */
@RequestMapping("assetDiscover")
@ResponseBody
public Object assetDiscover(
        @RequestParam(value = "networkAddress", required = false) String networkAddressParam,
        @RequestParam(value = "netmask", defaultValue = "24") int netmask,
        @RequestParam(value = "scanNodeId", required = false) String nodeId,
        @RequestParam(value = "rescan", defaultValue = "false") boolean rescan) {
    Result result = new Result();
    try {
        //???127.0.0.1::1ip??
        if (StringUtil.isBlank(networkAddressParam)
                || networkAddressParam.equals(IpAddress.getLocalIp().getLocalhostAddress())) {
            networkAddressParam = IpAddress.getLocalIpv4Address().toString();
        }
        Node scanNode = nodeMgr.getChildOrSelf(nodeId, NodeDefinition.NODE_TYPE_COLLECTOR);
        SubnetUtils subnetUtils = new SubnetUtils(networkAddressParam + "/" + netmask);
        String networkAddress = subnetUtils.getInfo().getNetworkAddress();
        int assetCount = subnetUtils.getInfo().getAddressCount();
        if (assetCount > MAX_SCAN_HOST_COUNT) {//????
            result.buildError("????(" + MAX_SCAN_HOST_COUNT
                    + ")?????");
            return result;
        }
        if (rescan) {//???
            dcvAssetManager.removeSubnet(new SubNet(scanNode.getIp(), networkAddress, netmask));
        }
        JSONObject data = new JSONObject();
        JSONArray assetsJson = new JSONArray();
        SubNet subnet = dcvAssetManager.getSubNet(scanNode.getIp(), networkAddress, netmask);
        if (subnet == null) {
            result = sendDiscoverCommand(scanNode, networkAddress, netmask, assetCount);
        } else {
            if (ObjectUtils.isNotEmpty(subnet.getAssets())) {
                Node manageNode = nodeMgr.getAuditorOrAgentByIp(subnet.getScanHost());
                for (AssetObject asset : subnet.getAssets()) {
                    JSONObject assetJson = FastJsonUtil.toJSON(asset, "scanNodeId=nodeId", "ip", "mac",
                            "assGroup.groupId=groupId", "assGroup.groupName=groupName");
                    assetJson.put("nodeId", manageNode == null ? nodeMgr.getKernelAuditor(false).getNodeId()
                            : manageNode.getNodeId());
                    assetsJson.add(assetJson);
                }
            }
            result.build(true);
        }
        data.put("rows", assetsJson);
        data.put("total", assetsJson.size());
        data.put("progress", subnet == null ? 0 : subnet.getProgress());
        result.setResult(data);
    } catch (Exception e) {
        logger.error("assetlist/assetDiscover", e);
        result.buildError("?");
    }
    return result;
}

From source file:com.infinities.skyport.openstack.nova.os.compute.SkyportNovaServer.java

/**
 * @param server//from ww w.ja v  a 2 s .c  o  m
 * @param nets
 * @param ipv6
 * @param ipv4
 * @return
 * @throws InternalException
 * @throws JSONException
 * @throws CloudException
 */
private NovaStyleVirtualMachine toNovaStyleVirtualMachine(JSONObject server, Iterable<IpAddress> ipv4,
        Iterable<IpAddress> ipv6, Iterable<VLAN> networks)
        throws InternalException, JSONException, CloudException {
    if (server == null) {
        return null;
    }
    NovaStyleVirtualMachine vm = new NovaStyleVirtualMachine();
    String description = null;

    // vm.setCurrentState(VmState.RUNNING);
    vm.setArchitecture(Architecture.I64);
    vm.setClonable(false);
    vm.setCreationTimestamp(-1L);
    vm.setImagable(false);
    vm.setLastBootTimestamp(-1L);
    vm.setLastPauseTimestamp(-1L);
    vm.setPausable(false);
    vm.setPersistent(true);
    vm.setPlatform(Platform.UNKNOWN);
    vm.setRebootable(true);
    vm.setProviderOwnerId(novaServer.getTenantId());

    if (novaServer.getCloudProvider().equals(OpenStackProvider.RACKSPACE)) {
        vm.setPersistent(false);
    }

    if (server.has("id")) {
        vm.setProviderVirtualMachineId(server.getString("id"));
    } else
        return null;
    if (server.has("name")) {
        vm.setName(server.getString("name"));
    }
    if (server.has("description") && !server.isNull("description")) {
        description = server.getString("description");
    }
    if (server.has("kernel_id")) {
        vm.setProviderKernelImageId(server.getString("kernel_id"));
    }
    if (server.has("ramdisk_id")) {
        vm.setProviderRamdiskImageId(server.getString("ramdisk_id"));
    }
    JSONObject md = (server.has("metadata") && !server.isNull("metadata")) ? server.getJSONObject("metadata")
            : null;

    Map<String, String> map = new HashMap<String, String>();
    boolean imaging = false;

    if (md != null) {
        if (md.has("org.dasein.description") && vm.getDescription() == null) {
            description = md.getString("org.dasein.description");
        } else if (md.has("Server Label")) {
            description = md.getString("Server Label");
        }
        if (md.has("org.dasein.platform")) {
            try {
                vm.setPlatform(Platform.valueOf(md.getString("org.dasein.platform")));
            } catch (Throwable ignore) {
                // ignore
            }
        }
        String[] keys = JSONObject.getNames(md);

        if (keys != null) {
            for (String key : keys) {
                String value = md.getString(key);

                if (value != null) {
                    map.put(key, value);
                }
            }
        }
    }
    if (server.has("OS-EXT-STS:task_state") && !server.isNull("OS-EXT-STS:task_state")) {
        String t = server.getString("OS-EXT-STS:task_state");

        map.put("OS-EXT-STS:task_state", t);
        imaging = t.equalsIgnoreCase("image_snapshot");
    }
    if (description == null) {
        if (vm.getName() == null) {
            vm.setName(vm.getProviderVirtualMachineId());
        }
        vm.setDescription(vm.getName());
    } else {
        vm.setDescription(description);
    }
    if (server.has("hostId")) {
        map.put("host", server.getString("hostId"));
    }
    vm.setTags(map);
    if (server.has("image") && !server.isNull("image")) {
        try {
            JSONObject img = server.getJSONObject("image");

            if (img.has("id")) {
                vm.setProviderMachineImageId(img.getString("id"));
            }
        } catch (JSONException ex) {
            logger.error("Unable to parse the image object");
            try {
                server.getString("image");
                logger.error(
                        "Image object has been returned as a string from cloud " + server.getString("image"));
            } catch (JSONException ignore) {
            }
        }
    }
    if (server.has("flavor")) {
        JSONObject f = server.getJSONObject("flavor");

        if (f.has("id")) {
            vm.setProductId(f.getString("id"));
        }
    } else if (server.has("flavorId")) {
        vm.setProductId(server.getString("flavorId"));
    }
    if (server.has("adminPass")) {
        vm.setRootPassword(server.getString("adminPass"));
    }
    if (server.has("key_name")) {
        vm.setProviderShellKeyIds(server.getString("key_name"));
    }
    if (server.has("status")) {
        String s = server.getString("status").toLowerCase();

        if (s.equals("active")) {
            vm.setCurrentState(VmState.RUNNING);
        } else if (s.startsWith("build")) {
            vm.setCurrentState(VmState.PENDING);
        } else if (s.equals("deleted")) {
            vm.setCurrentState(VmState.TERMINATED);
        } else if (s.equals("suspended")) {
            vm.setCurrentState(VmState.SUSPENDED);
        } else if (s.equalsIgnoreCase("paused")) {
            vm.setCurrentState(VmState.PAUSED);
        } else if (s.equalsIgnoreCase("stopped") || s.equalsIgnoreCase("shutoff")) {
            vm.setCurrentState(VmState.STOPPED);
        } else if (s.equalsIgnoreCase("stopping")) {
            vm.setCurrentState(VmState.STOPPING);
        } else if (s.equalsIgnoreCase("pausing")) {
            vm.setCurrentState(VmState.PAUSING);
        } else if (s.equalsIgnoreCase("suspending")) {
            vm.setCurrentState(VmState.SUSPENDING);
        } else if (s.equals("error")) {
            vm.setCurrentState(VmState.ERROR);
        } else if (s.equals("reboot") || s.equals("hard_reboot")) {
            vm.setCurrentState(VmState.REBOOTING);
        } else {
            logger.warn("toVirtualMachine(): Unknown server state: " + s);
            vm.setCurrentState(VmState.PENDING);
        }
    }
    if (vm.getCurrentState() == null && imaging) {
        vm.setCurrentState(VmState.PENDING);
    }
    if (server.has("created")) {
        vm.setCreationTimestamp(NovaOpenStack.parseTimestamp(server.getString("created")));
    }
    if (server.has("addresses")) {
        JSONObject addrs = server.getJSONObject("addresses");
        String[] names = JSONObject.getNames(addrs);

        if (names != null && names.length > 0) {
            List<SkyportRawAddress> pub = new ArrayList<SkyportRawAddress>();
            List<SkyportRawAddress> priv = new ArrayList<SkyportRawAddress>();

            for (String name : names) {
                JSONArray arr = addrs.getJSONArray(name);

                String subnet = null;
                for (int i = 0; i < arr.length(); i++) {
                    SkyportRawAddress addr = null;
                    String type = null;

                    if (novaServer.getMinorVersion() == 0 && novaServer.getMajorVersion() == 1) {
                        addr = new SkyportRawAddress(arr.getString(i).trim(), IPVersion.IPV4, name);
                    } else {
                        JSONObject a = arr.getJSONObject(i);
                        type = a.optString("OS-EXT-IPS:type");

                        if (a.has("version") && a.getInt("version") == 4 && a.has("addr")) {
                            subnet = a.getString("addr");
                            addr = new SkyportRawAddress(a.getString("addr"), IPVersion.IPV4, name);
                        } else if (a.has("version") && a.getInt("version") == 6 && a.has("addr")) {
                            subnet = a.getString("addr");
                            addr = new SkyportRawAddress(a.getString("addr"), IPVersion.IPV6, name);
                        }
                    }
                    if (addr != null) {
                        if ("public".equalsIgnoreCase(name) || "internet".equalsIgnoreCase(name)) {
                            pub.add(addr);
                        } else if ("floating".equalsIgnoreCase(type)) {
                            pub.add(addr);
                        } else if ("fixed".equalsIgnoreCase(type)) {
                            priv.add(addr);
                        } else if (addr.isPublicIpAddress()) {
                            pub.add(addr);
                        } else {
                            priv.add(addr);
                        }
                    }
                }
                if (vm.getProviderVlanId() == null) { // &&
                    // !name.equals("public")
                    // &&
                    // !name.equals("private")
                    // &&
                    // !name.equals("nova_fixed")
                    // ) {
                    for (VLAN network : networks) {
                        if (network.getName().equals(name)) {
                            vm.setProviderVlanId(network.getProviderVlanId());
                            // get subnet
                            NetworkServices services = novaServer.getNovaOpenStack().getNetworkServices();
                            VLANSupport support = services.getVlanSupport();
                            Iterable<Subnet> subnets = support.listSubnets(network.getProviderVlanId());
                            for (Subnet sub : subnets) {
                                try {
                                    SubnetUtils utils = new SubnetUtils(sub.getCidr());

                                    if (utils.getInfo().isInRange(subnet)) {
                                        vm.setProviderSubnetId(sub.getProviderSubnetId());
                                        break;
                                    }
                                } catch (IllegalArgumentException arg) {
                                    logger.warn("Couldn't match against an invalid CIDR: " + sub.getCidr());
                                    continue;
                                }
                            }
                            break;
                        }
                    }
                }
            }
            vm.setPublicAddresses(pub.toArray(new SkyportRawAddress[pub.size()]));
            vm.setPrivateAddresses(priv.toArray(new SkyportRawAddress[priv.size()]));
        }
        SkyportRawAddress[] raw = vm.getPublicAddresses();

        if (raw != null) {
            for (SkyportRawAddress addr : vm.getPublicAddresses()) {
                if (addr.getVersion().equals(IPVersion.IPV4)) {
                    for (IpAddress a : ipv4) {
                        if (a.getRawAddress().getIpAddress().equals(addr.getIpAddress())) {
                            vm.setProviderAssignedIpAddressId(a.getProviderIpAddressId());
                            break;
                        }
                    }
                } else if (addr.getVersion().equals(IPVersion.IPV6)) {
                    for (IpAddress a : ipv6) {
                        if (a.getRawAddress().getIpAddress().equals(addr.getIpAddress())) {
                            vm.setProviderAssignedIpAddressId(a.getProviderIpAddressId());
                            break;
                        }
                    }
                }
            }
        }
        if (vm.getProviderAssignedIpAddressId() == null) {
            for (IpAddress addr : ipv4) {
                String serverId = addr.getServerId();

                if (serverId != null && serverId.equals(vm.getProviderVirtualMachineId())) {
                    vm.setProviderAssignedIpAddressId(addr.getProviderIpAddressId());
                    break;
                }
            }
            if (vm.getProviderAssignedIpAddressId() == null) {
                for (IpAddress addr : ipv6) {
                    String serverId = addr.getServerId();

                    if (serverId != null && addr.getServerId().equals(vm.getProviderVirtualMachineId())) {
                        vm.setProviderAssignedIpAddressId(addr.getProviderIpAddressId());
                        break;
                    }
                }
            }
        }
        if (vm.getProviderAssignedIpAddressId() == null) {
            for (IpAddress addr : ipv6) {
                if (addr.getServerId().equals(vm.getProviderVirtualMachineId())) {
                    vm.setProviderAssignedIpAddressId(addr.getProviderIpAddressId());
                    break;
                }
            }
        }
    }
    vm.setProviderRegionId(novaServer.getRegionId());
    vm.setProviderDataCenterId(vm.getProviderRegionId() + "-a");
    vm.setTerminationTimestamp(-1L);
    if (vm.getName() == null) {
        vm.setName(vm.getProviderVirtualMachineId());
    }
    if (vm.getDescription() == null) {
        vm.setDescription(vm.getName());
    }

    if (Platform.UNKNOWN.equals(vm.getPlatform())) {
        vm.setPlatform(
                novaServer.getPlatform(vm.getName(), vm.getDescription(), vm.getProviderMachineImageId()));
    }
    vm.setImagable(vm.getCurrentState() == null);
    vm.setRebootable(vm.getCurrentState() == null);

    if (novaServer.getCloudProvider().equals(OpenStackProvider.RACKSPACE)) {
        // Rackspace does not support the concept for firewalls in servers
        vm.setProviderFirewallIds(null);
    } else {
        Iterable<String> fwIds = novaServer.listFirewalls(vm.getProviderVirtualMachineId(), server);
        int count = Iterators.size(fwIds.iterator());

        String[] ids = new String[count];
        int i = 0;

        for (String id : fwIds) {
            ids[i++] = id;
        }
        vm.setProviderFirewallIds(ids);
    }
    return vm;
}