public IpMappingBuilder(IpMapping base) { if (base.getKey() == null) { this._key = new IpMappingKey( base.getInternalIp() ); this._internalIp = base.getInternalIp(); } else { this._key = base.getKey(); this._internalIp = _key.getInternalIp(); } this._externalIp = base.getExternalIp(); this._label = base.getLabel(); if (base instanceof IpMappingImpl) { IpMappingImpl impl = (IpMappingImpl) base; if (!impl.augmentation.isEmpty()) { this.augmentation = new HashMap<>(impl.augmentation); } } else if (base instanceof AugmentationHolder) { @SuppressWarnings("unchecked") AugmentationHolder<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.floating.ip.info.router.ports.ports.IpMapping> casted =(AugmentationHolder<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.floating.ip.info.router.ports.ports.IpMapping>) base; if (!casted.augmentations().isEmpty()) { this.augmentation = new HashMap<>(casted.augmentations()); } } }
private boolean validateIpMapping(IpMapping mapping) { return getInetAddress(mapping.getInternalIp()) != null && getInetAddress(mapping.getExternalIp()) != null; }
private long getOperationalIpMapping(String routerId, String interfaceName, String internalIp) { InstanceIdentifier<IpMapping> ipMappingIdentifier = NatUtil.getIpMappingIdentifier(routerId, interfaceName, internalIp); Optional<IpMapping> ipMapping = NatUtil.read(dataBroker, LogicalDatastoreType.OPERATIONAL, ipMappingIdentifier); if(ipMapping.isPresent()) { return ipMapping.get().getLabel(); } return NatConstants.INVALID_ID; }
removeDNATTblEntry(dpnId, mapping.getInternalIp(), mapping.getExternalIp(), routerId); if(vpnId < 0) { LOG.error("No VPN associated with ext nw {}. Unable to delete SNAT table entry for fixed ip {}", extNwId, mapping.getInternalIp()); return; removeSNATTblEntry(dpnId, mapping.getInternalIp(), routerId, mapping.getExternalIp(), vpnId); long label = getOperationalIpMapping(routerName, interfaceName, mapping.getInternalIp()); if(label < 0) { LOG.error("Could not retrieve label for prefix {} in router {}", mapping.getInternalIp(), routerId); return; floatingIPHandler.onRemoveFloatingIp(dpnId, routerName, extNwId, mapping.getExternalIp(), mapping.getInternalIp(), (int) label); removeOperationalDS(routerName, interfaceName, mapping.getInternalIp(), mapping.getExternalIp());
if (!Objects.equals(_externalIp, other.getExternalIp())) { return false; if (!Objects.equals(_internalIp, other.getInternalIp())) { return false; if (!Objects.equals(_key, other.getKey())) { return false; if (!Objects.equals(_label, other.getLabel())) { return false; if (!e.getValue().equals(other.getAugmentation(e.getKey()))) { return false;
if(vpnId < 0) { LOG.error("No VPN associated with Ext nw {}. Unable to create SNAT table entry for fixed ip {}", extNwId, mapping.getInternalIp()); return; createDNATTblEntry(dpnId, mapping.getInternalIp(), mapping.getExternalIp(), routerId, vpnId, associatedVpnId); createSNATTblEntry(dpnId, mapping.getInternalIp(), mapping.getExternalIp(), vpnId, routerId, associatedVpnId); floatingIPHandler.onAddFloatingIp(dpnId, routerName, extNwId, interfaceName, mapping.getExternalIp(), mapping .getInternalIp());
void handleDNATConfigurationForRouterAssociation(String routerName, String vpnName, String externalNetwork) { InstanceIdentifier<RouterPorts> routerPortsId = NatUtil.getRouterPortsId(routerName); Optional<RouterPorts> optRouterPorts = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, routerPortsId); if(!optRouterPorts.isPresent()) { LOG.debug("Could not read Router Ports data object with id: {} to handle associate vpn {}", routerName, vpnName); return; } Uuid networkId = Uuid.getDefaultInstance(externalNetwork); RouterPorts routerPorts = optRouterPorts.get(); List<Ports> interfaces = routerPorts.getPorts(); Map<String, BigInteger> portToDpnMap = new HashMap<>(); for(Ports port : interfaces) { String portName = port.getPortName(); BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); if(dpnId.equals(BigInteger.ZERO)) { LOG.debug("DPN not found for {}, skip handling of router {} association with vpn", portName, routerName, vpnName); continue; } portToDpnMap.put(portName, dpnId); List<IpMapping> ipMapping = port.getIpMapping(); for(IpMapping ipMap : ipMapping) { String externalIp = ipMap.getExternalIp(); //remove all NAT related entries with routerName //floatingIpListener.removeNATOnlyFlowEntries(dpnId, portName, routerName, null, ipMap.getInternalIp(), externalIp); //Create NAT entries with VPN Id LOG.debug("Updating DNAT flows with VPN metadata {} ", vpnName); floatingIpListener.createNATOnlyFlowEntries(dpnId, portName, routerName, vpnName, networkId, ipMap.getInternalIp(), externalIp); } } }
void handleDNATConfigurationForRouterDisassociation(String routerName, String vpnName, String externalNetwork) { InstanceIdentifier<RouterPorts> routerPortsId = NatUtil.getRouterPortsId(routerName); Optional<RouterPorts> optRouterPorts = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, routerPortsId); if(!optRouterPorts.isPresent()) { LOG.debug("Could not read Router Ports data object with id: {} to handle disassociate vpn {}", routerName, vpnName); return; } Uuid networkId = Uuid.getDefaultInstance(externalNetwork); RouterPorts routerPorts = optRouterPorts.get(); List<Ports> interfaces = routerPorts.getPorts(); for(Ports port : interfaces) { String portName = port.getPortName(); BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); if(dpnId.equals(BigInteger.ZERO)) { LOG.debug("DPN not found for {}, skip handling of router {} association with vpn", portName, routerName, vpnName); continue; } List<IpMapping> ipMapping = port.getIpMapping(); for(IpMapping ipMap : ipMapping) { String externalIp = ipMap.getExternalIp(); //remove all NAT related entries with routerName //floatingIpListener.removeNATOnlyFlowEntries(dpnId, portName, routerName, vpnName, ipMap.getInternalIp(), externalIp); //Create NAT entries with VPN Id floatingIpListener.createNATOnlyFlowEntries(dpnId, portName, routerName, null, networkId, ipMap.getInternalIp(), externalIp); } } }
private void disassociateExternalNetworkFromVPN(Networks network, String vpnName) { List<Uuid> routerIds = network.getRouterIds(); //long vpnId = NatUtil.getVpnId(dataBroker, vpnName); for(Uuid routerId : routerIds) { //long router = NatUtil.getVpnId(dataBroker, routerId.getValue()); InstanceIdentifier<RouterPorts> routerPortsId = NatUtil.getRouterPortsId(routerId.getValue()); Optional<RouterPorts> optRouterPorts = MDSALUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, routerPortsId); if(!optRouterPorts.isPresent()) { LOG.debug("Could not read Router Ports data object with id: {} to handle disassociate ext nw {}", routerId, network.getId()); continue; } RouterPorts routerPorts = optRouterPorts.get(); List<Ports> interfaces = routerPorts.getPorts(); for(Ports port : interfaces) { String portName = port.getPortName(); BigInteger dpnId = NatUtil.getDpnForInterface(interfaceManager, portName); if(dpnId.equals(BigInteger.ZERO)) { LOG.debug("DPN not found for {}, skip handling of ext nw {} disassociation", portName, network.getId()); continue; } List<IpMapping> ipMapping = port.getIpMapping(); for(IpMapping ipMap : ipMapping) { String externalIp = ipMap.getExternalIp(); floatingIpListener.removeNATFlowEntries(dpnId, portName, vpnName, routerId.getValue(), network.getId(), ipMap.getInternalIp(), externalIp); } } } }
String externalIp = ipMap.getExternalIp(); floatingIpListener.createNATFlowEntries(dpnId, portName, routerId.getValue(), network.getId(), ipMap.getInternalIp(), externalIp);