Disable Stateful SNAT when the related parameter is set to false.

Change-Id: I93cda2325ed27f773002d073ce30f9b4b234aa91
(cherry picked from commit f81088c2ce9bf126a7e7ff32ba85c048c4cda551)
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
index c341037..8323f98 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtRoutingSnatHandler.java
@@ -173,11 +173,17 @@
     }
 
     private void initGatewayNodeSnatForRouter(KubevirtRouter router, boolean install) {
-        KubevirtNode electedGw = gatewayNodeForSpecifiedRouter(kubevirtNodeService, router);
+        if (router.electedGateway() == null) {
+            log.warn("Fail to initialize gateway node snat for router {} " +
+                    "because there's no gateway assigned to it", router.name());
+            return;
+        }
+
+        KubevirtNode electedGw = kubevirtNodeService.node(router.electedGateway());
 
         if (electedGw == null) {
             log.warn("Fail to initialize gateway node snat for router {} " +
-                    "there's no gateway assigned to it", router.name());
+                    "because there's no gateway assigned to it", router.name());
             return;
         }
 
@@ -185,7 +191,7 @@
 
         if (routerSnatIp == null) {
             log.warn("Fail to initialize gateway node snat for router {} " +
-                    "there's no gateway snat ip assigned to it", router.name());
+                    "because there's no gateway snat ip assigned to it", router.name());
             return;
         }
 
@@ -425,6 +431,7 @@
                 case KUBEVIRT_ROUTER_CREATED:
                     eventExecutor.execute(() -> processRouterCreation(event.subject()));
                     break;
+                case KUBEVIRT_SNAT_STATUS_DISABLED:
                 case KUBEVIRT_ROUTER_REMOVED:
                     eventExecutor.execute(() -> processRouterDeletion(event.subject()));
                     break;
@@ -544,6 +551,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             router.internal()
                     .stream()
                     .filter(networkId -> kubevirtNetworkService.network(networkId) != null)
@@ -570,6 +581,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             router.internal()
                     .stream()
                     .filter(networkId -> kubevirtNetworkService.network(networkId) != null)
@@ -598,6 +613,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             attachedInternalNetworks.forEach(networkId -> {
                 String routerSnatIp = router.external().keySet().stream().findAny().orElse(null);
                 if (routerSnatIp == null) {
@@ -621,6 +640,10 @@
                 return;
             }
 
+            if (!router.enableSnat()) {
+                return;
+            }
+
             detachedInternalNetworks.forEach(networkId -> {
                 String routerSnatIp = router.external().keySet().stream().findAny().orElse(null);
                 if (routerSnatIp == null) {
@@ -646,7 +669,7 @@
             if (!isRelevantHelper()) {
                 return;
             }
-            if (router.enableSnat() && !router.external().isEmpty() && router.peerRouter() != null) {
+            if (!router.external().isEmpty() && router.peerRouter() != null) {
                 initGatewayNodeSnatForRouter(router, false);
             }
         }