Enhance the RM logic for Kubevirt Networking App in case of virtual network.

Change-Id: I9b38ea0d76ce269cb03bc8a0f7d1883ddb92f51c
(cherry picked from commit d77b4ccb6cd06da7019980add8188b9021f6fcc5)
diff --git a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java
index cdeffbe..04ac0c8 100644
--- a/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java
+++ b/apps/kubevirt-networking/api/src/main/java/org/onosproject/kubevirtnetworking/api/Constants.java
@@ -67,6 +67,7 @@
     // flow rule priority
     public static final int PRIORITY_ICMP_RULE = 43000;
     public static final int PRIORITY_FORWARDING_RULE = 30000;
+    public static final int PRIORITY_FLOATING_GATEWAY_TUN_BRIDGE_RULE = 32000;
     public static final int PRIORITY_DHCP_RULE = 42000;
     public static final int PRIORITY_ARP_GATEWAY_RULE = 41000;
     public static final int PRIORITY_ARP_DEFAULT_RULE = 40000;
diff --git a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
index 419672f..cf8a877 100644
--- a/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
+++ b/apps/kubevirt-networking/app/src/main/java/org/onosproject/kubevirtnetworking/impl/KubevirtFloatingIpHandler.java
@@ -67,15 +67,14 @@
 import static org.onosproject.kubevirtnetworking.api.Constants.GW_ENTRY_TABLE;
 import static org.onosproject.kubevirtnetworking.api.Constants.KUBEVIRT_NETWORKING_APP_ID;
 import static org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_ARP_GATEWAY_RULE;
+import static org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_FLOATING_GATEWAY_TUN_BRIDGE_RULE;
 import static org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_FLOATING_IP_RULE;
-import static org.onosproject.kubevirtnetworking.api.Constants.PRIORITY_FORWARDING_RULE;
 import static org.onosproject.kubevirtnetworking.api.Constants.TUNNEL_DEFAULT_TABLE;
 import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.GENEVE;
 import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.GRE;
 import static org.onosproject.kubevirtnetworking.api.KubevirtNetwork.Type.VXLAN;
 import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.buildGarpPacket;
 import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.externalPatchPortNum;
-import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.gatewayNodeForSpecifiedRouter;
 import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.getRouterMacAddress;
 import static org.onosproject.kubevirtnetworking.util.KubevirtNetworkingUtil.tunnelPort;
 import static org.onosproject.kubevirtnetworking.util.RulePopulatorUtil.buildExtension;
@@ -166,7 +165,8 @@
 
         KubevirtNetwork kubevirtNetwork = kubevirtNetworkService.network(kubevirtPort.networkId());
         if (kubevirtNetwork.type() == VXLAN || kubevirtNetwork.type() == GENEVE || kubevirtNetwork.type() == GRE) {
-            setFloatingIpDownstreamRulesToGatewayTunBridge(router, floatingIp, kubevirtNetwork, kubevirtPort, install);
+            setFloatingIpDownstreamRulesToGatewayTunBridge(floatingIp,
+                    electedGw, kubevirtNetwork, kubevirtPort, install);
         }
 
         setFloatingIpArpResponseRules(router, floatingIp, kubevirtPort, electedGw, install);
@@ -288,19 +288,11 @@
                 install);
     }
 
-    private void setFloatingIpDownstreamRulesToGatewayTunBridge(KubevirtRouter router,
-                                                                KubevirtFloatingIp floatingIp,
+    private void setFloatingIpDownstreamRulesToGatewayTunBridge(KubevirtFloatingIp floatingIp,
+                                                                KubevirtNode electedGw,
                                                                 KubevirtNetwork network,
                                                                 KubevirtPort port,
                                                                 boolean install) {
-        KubevirtNode electedGw = gatewayNodeForSpecifiedRouter(kubevirtNodeService, router);
-
-        if (electedGw == null) {
-            log.warn("Failed to install floating Ip rules for floating ip {} " +
-                    "because there's no gateway assigned to it", floatingIp.floatingIp());
-            return;
-        }
-
         KubevirtNode workerNode = kubevirtNodeService.node(port.deviceId());
         if (workerNode == null) {
             log.warn("Failed to install floating Ip rules for floating ip {} " +
@@ -333,7 +325,7 @@
                 electedGw.tunBridge(),
                 sBuilder.build(),
                 tBuilder.build(),
-                PRIORITY_FORWARDING_RULE,
+                PRIORITY_FLOATING_GATEWAY_TUN_BRIDGE_RULE,
                 TUNNEL_DEFAULT_TABLE,
                 install);
     }
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 5e0aa64..6e46179 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
@@ -319,19 +319,13 @@
                 install);
 
         if (network.type() == VXLAN || network.type() == GENEVE || network.type() == GRE) {
-            setDownStreamRulesToGatewayTunBridge(router, network, kubevirtPort, install);
+            setDownStreamRulesToGatewayTunBridge(network, gatewayNode, kubevirtPort, install);
         }
     }
 
-    private void setDownStreamRulesToGatewayTunBridge(KubevirtRouter router,
-                                                      KubevirtNetwork network,
+    private void setDownStreamRulesToGatewayTunBridge(KubevirtNetwork network,
+                                                      KubevirtNode electedGw,
                                                       KubevirtPort port, boolean install) {
-        KubevirtNode electedGw = gatewayNodeForSpecifiedRouter(kubevirtNodeService, router);
-
-        if (electedGw == null) {
-            return;
-        }
-
         KubevirtNode workerNode = kubevirtNodeService.node(port.deviceId());
         if (workerNode == null) {
             return;