package org.batfish.representation.aws_vpcs; import java.io.Serializable; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.batfish.common.BatfishLogger; import org.batfish.datamodel.Ip; import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; public class NetworkInterface implements AwsVpcEntity, Serializable { private static final long serialVersionUID = 1L; private final Ip _associationPublicIp; private final String _attachmentInstanceId; private final List<String> _groups; private final Map<Ip, Ip> _ipAddressAssociations; private final String _networkInterfaceId; private final String _subnetId; private final String _vpcId; public NetworkInterface(JSONObject jObj, BatfishLogger logger) throws JSONException { _groups = new LinkedList<>(); _ipAddressAssociations = new HashMap<>(); _networkInterfaceId = jObj.getString(JSON_KEY_NETWORK_INTERFACE_ID); // logger.debugf("doing network interface %s\n", _networkInterfaceId); _subnetId = jObj.getString(JSON_KEY_SUBNET_ID); _vpcId = jObj.getString(JSON_KEY_VPC_ID); JSONArray groups = jObj.getJSONArray(JSON_KEY_GROUPS); for (int index = 0; index < groups.length(); index++) { JSONObject childObject = groups.getJSONObject(index); _groups.add(childObject.getString(JSON_KEY_GROUP_ID)); } JSONArray privateIpAddresses = jObj .getJSONArray(JSON_KEY_PRIVATE_IP_ADDRESSES); initIpAddressAssociations(privateIpAddresses, logger); if (jObj.has(JSON_KEY_ASSOCIATION)) { JSONObject assocJson = jObj.getJSONObject(JSON_KEY_ASSOCIATION); _associationPublicIp = new Ip(assocJson.getString(JSON_KEY_PUBLIC_IP)); } else { _associationPublicIp = null; } if (jObj.has(JSON_KEY_ATTACHMENT)) { JSONObject attachJson = jObj.getJSONObject(JSON_KEY_ATTACHMENT); _attachmentInstanceId = Utils.tryGetString(attachJson, JSON_KEY_INSTANCE_ID); if (!attachJson.getString(JSON_KEY_STATUS).equals("attached")) { throw new JSONException("network interface " + _networkInterfaceId + " is not attached"); } } else { _attachmentInstanceId = null; } } public Ip getAssociationPublicIp() { return _associationPublicIp; } public String getAttachmentInstanceId() { return _attachmentInstanceId; } public List<String> getGroups() { return _groups; } @Override public String getId() { return _networkInterfaceId; } public Map<Ip, Ip> getIpAddressAssociations() { return _ipAddressAssociations; } public String getNetworkInterfaceId() { return _networkInterfaceId; } public String getSubnetId() { return _subnetId; } public String getVpcId() { return _vpcId; } private void initIpAddressAssociations(JSONArray associations, BatfishLogger logger) throws JSONException { for (int index = 0; index < associations.length(); index++) { JSONObject childObject = associations.getJSONObject(index); Ip privateIpAddress = new Ip( childObject.getString(JSON_KEY_PRIVATE_IP_ADDRESS)); Ip publicIpAddress = null; if (childObject.has(JSON_KEY_ASSOCIATION)) { JSONObject assocJson = childObject .getJSONObject(JSON_KEY_ASSOCIATION); publicIpAddress = new Ip(assocJson.getString(JSON_KEY_PUBLIC_IP)); } _ipAddressAssociations.put(privateIpAddress, publicIpAddress); } } }