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); } } }