Remove bridges and associated flow rules when removing k8s nodes

Change-Id: Iab54503a4bb75874f69e8e1623bb11c66cad9eee
(cherry picked from commit dc1df642f320123f8b31d6f2a62e7ac6498c87d0)
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sHostService.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sHostService.java
index cf7b77f..57c2598 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sHostService.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sHostService.java
@@ -65,4 +65,12 @@
      * @return kubernetes host
      */
     K8sHost hostByTunBridge(DeviceId deviceId);
+
+    /**
+     * Returns the host with the specified router bridge device ID.
+     *
+     * @param deviceId router bridge's device ID
+     * @return kubernetes host
+     */
+    K8sHost hostByRouterBridge(DeviceId deviceId);
 }
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeEvent.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeEvent.java
index e9209184..efa1d2f 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeEvent.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeEvent.java
@@ -50,7 +50,12 @@
         /**
          * Signifies that the node state is incomplete.
          */
-        K8S_NODE_INCOMPLETE
+        K8S_NODE_INCOMPLETE,
+
+        /**
+         * Signifies that the node state is off-boarded.
+         */
+        K8S_NODE_OFF_BOARDED
     }
 
     /**
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java
index 0ef7302..3ad369f 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeHandler.java
@@ -75,4 +75,11 @@
      * @param k8sNode kubernetes node
      */
     void processPostOnBoardState(K8sNode k8sNode);
+
+    /**
+     * Processes the given node for off boarded state.
+     *
+     * @param k8sNode kubernetes node
+     */
+    void processOffBoardedState(K8sNode k8sNode);
 }
diff --git a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java
index 3311ac6..9cc68e2 100644
--- a/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java
+++ b/apps/k8s-node/api/src/main/java/org/onosproject/k8snode/api/K8sNodeState.java
@@ -117,6 +117,20 @@
         public K8sNodeState nextState() {
             return INIT;
         }
+    },
+    /**
+     * Indicates node is removed.
+     */
+    OFF_BOARDED {
+        @Override
+        public void process(K8sNodeHandler handler, K8sNode node) {
+            handler.processOffBoardedState(node);
+        }
+
+        @Override
+        public K8sNodeState nextState() {
+            return OFF_BOARDED;
+        }
     };
 
     /**