NPE for IPv6 Internet UC 01/83201/16
authorNishchya Gupta <nishchyag@altencalsoftlabs.com>
Tue, 23 Jul 2019 08:37:42 +0000 (14:07 +0530)
committerKarthikeyan Krishnan <karthikeyangceb007@gmail.com>
Fri, 25 Sep 2020 03:47:39 +0000 (03:47 +0000)
Issue:
========
NPE exception was preventing NAT (IPv4 External UC)
related DS and flows clean-up.

Solution:
==========
Added proper check if external/internet VPN-ID information
was absent in the external-network, we should not invoke
to remove the V6 internet flows though there is no IPv6
subnet is attached to the external router.

Change-Id: Id3d96638d77dcbb8ba9015c2f7bae42219672713
Signed-off-by: Nishchya Gupta <nishchyag@altencalsoftlabs.com>
natservice/impl/src/main/java/org/opendaylight/netvirt/natservice/internal/RouterDpnChangeListener.java
neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/NeutronvpnManager.java

index bd29f595052c8ddde94c3aaba3531e453ded5818..7aa0454f98e46d2565294937ce83b176690440dc 100644 (file)
@@ -188,8 +188,11 @@ public class RouterDpnChangeListener extends AbstractAsyncDataTreeChangeListener
                                 /* install V6 internet default fallback rule in FIB_TABLE if router
                                  * is having V6 subnet
                                  */
-                                nvpnManager.programV6InternetFallbackFlow(new Uuid(routerUuid),
-                                        NatUtil.getVpnIdfromNetworkId(dataBroker, networkId), NwConstants.ADD_FLOW);
+                                Uuid internetVpnId = NatUtil.getVpnIdfromNetworkId(dataBroker, networkId);
+                                if (internetVpnId != null) {
+                                    nvpnManager.programV6InternetFallbackFlow(new Uuid(routerUuid),
+                                            internetVpnId, NwConstants.ADD_FLOW);
+                                }
                                 if (router.isEnableSnat()) {
                                     LOG.info("add : SNAT enabled for router {}", routerUuid);
                                     if (extNwProvType == null) {
@@ -284,8 +287,11 @@ public class RouterDpnChangeListener extends AbstractAsyncDataTreeChangeListener
                                 /* remove V6 internet default fallback rule in FIB_TABLE if router
                                  * is having V6 subnet
                                  */
-                                nvpnManager.programV6InternetFallbackFlow(new Uuid(routerUuid),
-                                        NatUtil.getVpnIdfromNetworkId(dataBroker, networkId), NwConstants.DEL_FLOW);
+                                Uuid internetVpnId = NatUtil.getVpnIdfromNetworkId(dataBroker, networkId);
+                                if (internetVpnId != null) {
+                                    nvpnManager.programV6InternetFallbackFlow(new Uuid(routerUuid), internetVpnId,
+                                            NwConstants.DEL_FLOW);
+                                }
                                 if (router.isEnableSnat()) {
                                     ProviderTypes extNwProvType = NatEvpnUtil.getExtNwProvTypeFromRouterName(dataBroker,
                                         routerUuid, networkId);
index af3dc8d9919ecfee6bf646858be09d0a5d2ba8ec..072abf2c0e44521726e99a317f76496a311eb04a 100644 (file)
@@ -1846,8 +1846,7 @@ public class NeutronvpnManager implements NeutronvpnService, AutoCloseable, Even
         Uuid networkUuid = neutronvpnUtils.getSubnetmap(subnet).getNetworkId();
         Network network = neutronvpnUtils.getNeutronNetwork(networkUuid);
         boolean netIsExternal = NeutronvpnUtils.getIsExternal(network);
-        Uuid vpnExtUuid = netIsExternal ? null
-                : neutronvpnUtils.getInternetvpnUuidBoundToSubnetRouter(subnet);
+        Uuid vpnExtUuid = netIsExternal ? neutronvpnUtils.getInternetvpnUuidBoundToSubnetRouter(subnet) : null;
         Subnetmap sn = updateSubnetNode(subnet, null, newVpnId, vpnExtUuid);
         if (sn == null) {
             LOG.error("Updating subnet {} with newVpn {} failed", subnet.getValue(), newVpnId.getValue());