Split tunneling behavior into a separated tunnel bridge

Change-Id: I4de5f21ac9eaf286479f619c960a2319b597a819
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
index 56039b5..4e430a3 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/DefaultK8sNode.java
@@ -396,6 +396,16 @@
     }
 
     @Override
+    public PortNumber intgToTunPortNum() {
+        return portNumber(intgBridge, intgToTunPatchPortName());
+    }
+
+    @Override
+    public PortNumber tunToIntgPortNum() {
+        return portNumber(tunBridge, tunToIntgPatchPortName());
+    }
+
+    @Override
     public PortNumber extBridgePortNum() {
         if (this.extIntf == null) {
             return null;
@@ -519,6 +529,15 @@
     }
 
     @Override
+    public String tunBridgePortName() {
+        if (mode == PASSTHROUGH) {
+            return TUNNEL_BRIDGE + "-" + uniqueString(5);
+        } else {
+            return TUNNEL_BRIDGE;
+        }
+    }
+
+    @Override
     public String intgToExtPatchPortName() {
         if (mode == PASSTHROUGH) {
             return INTEGRATION_TO_EXTERNAL_BRIDGE + "-" + uniqueString(5);
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
index 8931b45..e443880 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNode.java
@@ -287,6 +287,13 @@
     String localBridgePortName();
 
     /**
+     * Returns tunnel bridge port name.
+     *
+     * @return tunnel bridge port name
+     */
+    String tunBridgePortName();
+
+    /**
      * Returns integration to external patch port name.
      *
      * @return integration to external patch port name
@@ -385,6 +392,20 @@
     PortNumber extToIntgPatchPortNum();
 
     /**
+     * Returns the integration to tunnel patch port number.
+     *
+     * @return patch port number
+     */
+    PortNumber intgToTunPortNum();
+
+    /**
+     * Returns the tunnel to integration patch port number.
+     *
+     * @return patch port number
+     */
+    PortNumber tunToIntgPortNum();
+
+    /**
      * Returns the external bridge to router port number.
      *
      * @return port number, null if the port does not exist
diff --git a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java
index 2060712..de8f38c 100644
--- a/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java
+++ b/apps/k8s-node/app/src/main/java/org/onosproject/k8snode/cli/K8sNodeCheckCommand.java
@@ -68,11 +68,6 @@
             printPortState(deviceService, node.intgBridge(), node.intgBridgePortName());
             printPortState(deviceService, node.intgBridge(), node.intgToExtPatchPortName());
             printPortState(deviceService, node.intgBridge(), node.intgToLocalPatchPortName());
-            if (node.dataIp() != null) {
-                printPortState(deviceService, node.intgBridge(), node.vxlanPortName());
-                printPortState(deviceService, node.intgBridge(), node.grePortName());
-                printPortState(deviceService, node.intgBridge(), node.genevePortName());
-            }
         } else {
             print("%s %s=%s is not available",
                     MSG_ERROR,
@@ -80,6 +75,7 @@
                     node.intgBridge());
         }
 
+        print("");
         print("[External Bridge Status]");
         Device extBridge = deviceService.getDevice(node.extBridge());
         if (extBridge != null) {
@@ -89,7 +85,6 @@
                     extBridge.id(),
                     deviceService.isAvailable(extBridge.id()),
                     extBridge.annotations());
-            printPortState(deviceService, node.extBridge(), node.extBridgePortName());
             printPortState(deviceService, node.extBridge(), node.extToIntgPatchPortName());
         } else {
             print("%s %s=%s is not available",
@@ -98,6 +93,7 @@
                     node.extBridge());
         }
 
+        print("");
         print("[Local Bridge Status]");
         Device localBridge = deviceService.getDevice(node.localBridge());
         if (localBridge != null) {
@@ -107,9 +103,27 @@
                     localBridge.id(),
                     deviceService.isAvailable(localBridge.id()),
                     localBridge.annotations());
-            printPortState(deviceService, node.localBridge(), node.localBridgePortName());
             printPortState(deviceService, node.localBridge(), node.localToIntgPatchPortName());
         }
+
+        print("");
+        print("[Tunnel Bridge Status]");
+        Device tunBridge = deviceService.getDevice(node.tunBridge());
+        if (tunBridge != null) {
+            print("%s %s=%s available=%s %s",
+                    deviceService.isAvailable(tunBridge.id()) ? MSG_OK : MSG_ERROR,
+                    node.tunBridgeName(),
+                    tunBridge.id(),
+                    deviceService.isAvailable(tunBridge.id()),
+                    tunBridge.annotations());
+            printPortState(deviceService, node.tunBridge(), node.tunToIntgPatchPortName());
+
+            if (node.dataIp() != null) {
+                printPortState(deviceService, node.tunBridge(), node.vxlanPortName());
+                printPortState(deviceService, node.tunBridge(), node.grePortName());
+                printPortState(deviceService, node.tunBridge(), node.genevePortName());
+            }
+        }
     }
 
     private void printPortState(DeviceService deviceService,