+ LOG.debug("associateExternalNetworkWithVPN : got primarySwitch as dpnId{} ", dpnId);
+ if (dpnId == null || dpnId.equals(Uint64.ZERO)) {
+ LOG.warn("associateExternalNetworkWithVPN : primary napt Switch not found for router {} on dpn: {}",
+ routerId, dpnId);
+ return;
+ }
+ final Uint64 finalDpnId = dpnId;
+ coordinator.enqueueJob(NatConstants.NAT_DJC_PREFIX + routerId.getValue(),
+ () -> Collections.singletonList(txRunner.callWithNewReadWriteTransactionAndSubmit(CONFIGURATION,
+ confTx -> {
+ Uint32 routerIdentifier = NatUtil.getVpnId(dataBroker, routerId.getValue());
+ InstanceIdentifierBuilder<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice
+ .rev160111.intext.ip.map.IpMapping> idBuilder =
+ InstanceIdentifier.builder(IntextIpMap.class)
+ .child(org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111
+ .intext.ip.map.IpMapping.class,
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111
+ .intext.ip.map.IpMappingKey(routerIdentifier));
+ InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice
+ .rev160111.intext.ip.map.IpMapping> id = idBuilder.build();
+ Optional<org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111
+ .intext.ip.map.IpMapping> ipMapping = MDSALUtil.read(dataBroker,
+ LogicalDatastoreType.OPERATIONAL, id);
+ if (ipMapping.isPresent()) {
+ for (IpMap ipMap : ipMapping.get().nonnullIpMap().values()) {
+ String externalIp = ipMap.getExternalIp();
+ LOG.debug(
+ "associateExternalNetworkWithVPN : Calling advToBgpAndInstallFibAndTsFlows "
+ + "for dpnId {},vpnName {} and externalIp {}", finalDpnId, vpnName,
+ externalIp);
+ if (natMode == NatMode.Controller) {
+ externalRouterListener.advToBgpAndInstallFibAndTsFlows(finalDpnId,
+ NwConstants.INBOUND_NAPT_TABLE, vpnName, routerIdentifier,
+ routerId.getValue(), externalIp, network.getId(),
+ null /* external-router */, confTx);
+ }
+ }
+ } else {
+ LOG.warn("associateExternalNetworkWithVPN: No ipMapping present fot the routerId {}",
+ routerId);
+ }
+
+ Uint32 vpnId = NatUtil.getVpnId(dataBroker, vpnName);
+ // Install 47 entry to point to 21
+ if (natMode == NatMode.Controller) {
+ externalRouterListener.installNaptPfibEntriesForExternalSubnets(routerId.getValue(),
+ finalDpnId, confTx);
+ if (vpnId.longValue() != -1) {
+ LOG.debug("associateExternalNetworkWithVPN : Calling externalRouterListener "
+ + "installNaptPfibEntry for dpnId {} and vpnId {}", finalDpnId, vpnId);
+ externalRouterListener.installNaptPfibEntry(finalDpnId, vpnId, confTx);
+ }
+ }
+ })), NatConstants.NAT_DJC_MAX_RETRIES);