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 7910500..6a18194 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
@@ -33,6 +33,8 @@
 import static org.onosproject.k8snode.api.Constants.GRE_TUNNEL;
 import static org.onosproject.k8snode.api.Constants.INTEGRATION_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_EXTERNAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.INTEGRATION_TO_LOCAL_BRIDGE;
+import static org.onosproject.k8snode.api.Constants.LOCAL_TO_INTEGRATION_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.PHYSICAL_EXTERNAL_BRIDGE;
 import static org.onosproject.k8snode.api.Constants.VXLAN_TUNNEL;
 import static org.onosproject.net.AnnotationKeys.PORT_NAME;
@@ -48,6 +50,7 @@
     private final Type type;
     private final DeviceId intgBridge;
     private final DeviceId extBridge;
+    private final DeviceId localBridge;
     private final IpAddress managementIp;
     private final IpAddress dataIp;
     private final K8sNodeState state;
@@ -68,6 +71,7 @@
      * @param type              node type
      * @param intgBridge        integration bridge
      * @param extBridge         external bridge
+     * @param localBridge       local bridge
      * @param extIntf           external interface
      * @param managementIp      management IP address
      * @param dataIp            data IP address
@@ -78,15 +82,16 @@
      * @param podCidr           POD CIDR
      */
     protected DefaultK8sNode(String hostname, Type type, DeviceId intgBridge,
-                             DeviceId extBridge, String extIntf,
-                             IpAddress managementIp, IpAddress dataIp,
-                             K8sNodeState state, IpAddress extBridgeIp,
-                             IpAddress extGatewayIp, MacAddress extGatewayMac,
-                             String podCidr) {
+                             DeviceId extBridge, DeviceId localBridge,
+                             String extIntf, IpAddress managementIp,
+                             IpAddress dataIp, K8sNodeState state,
+                             IpAddress extBridgeIp, IpAddress extGatewayIp,
+                             MacAddress extGatewayMac, String podCidr) {
         this.hostname = hostname;
         this.type = type;
         this.intgBridge = intgBridge;
         this.extBridge = extBridge;
+        this.localBridge = localBridge;
         this.extIntf = extIntf;
         this.managementIp = managementIp;
         this.dataIp = dataIp;
@@ -123,6 +128,11 @@
     }
 
     @Override
+    public DeviceId localBridge() {
+        return localBridge;
+    }
+
+    @Override
     public String extIntf() {
         return extIntf;
     }
@@ -134,6 +144,7 @@
                 .type(type)
                 .intgBridge(deviceId)
                 .extBridge(extBridge)
+                .localBridge(localBridge)
                 .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
@@ -152,6 +163,26 @@
                 .type(type)
                 .intgBridge(intgBridge)
                 .extBridge(deviceId)
+                .localBridge(localBridge)
+                .extIntf(extIntf)
+                .managementIp(managementIp)
+                .dataIp(dataIp)
+                .state(state)
+                .extBridgeIp(extBridgeIp)
+                .extGatewayIp(extGatewayIp)
+                .extGatewayMac(extGatewayMac)
+                .podCidr(podCidr)
+                .build();
+    }
+
+    @Override
+    public K8sNode updateLocalBridge(DeviceId deviceId) {
+        return new Builder()
+                .hostname(hostname)
+                .type(type)
+                .intgBridge(intgBridge)
+                .extBridge(extBridge)
+                .localBridge(deviceId)
                 .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
@@ -190,6 +221,7 @@
                 .type(type)
                 .intgBridge(intgBridge)
                 .extBridge(extBridge)
+                .localBridge(localBridge)
                 .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
@@ -208,6 +240,7 @@
                 .type(type)
                 .intgBridge(intgBridge)
                 .extBridge(extBridge)
+                .localBridge(localBridge)
                 .extIntf(extIntf)
                 .managementIp(managementIp)
                 .dataIp(dataIp)
@@ -245,6 +278,16 @@
     }
 
     @Override
+    public PortNumber intgToLocalPatchPortNum() {
+        return portNumber(intgBridge, INTEGRATION_TO_LOCAL_BRIDGE);
+    }
+
+    @Override
+    public PortNumber localToIntgPatchPortNumber() {
+        return portNumber(localBridge, LOCAL_TO_INTEGRATION_BRIDGE);
+    }
+
+    @Override
     public PortNumber extToIntgPatchPortNum() {
         return portNumber(extBridge, PHYSICAL_EXTERNAL_BRIDGE);
     }
@@ -296,6 +339,7 @@
                     type == that.type &&
                     intgBridge.equals(that.intgBridge) &&
                     extBridge.equals(that.extBridge) &&
+                    localBridge.equals(that.localBridge) &&
                     extIntf.equals(that.extIntf) &&
                     managementIp.equals(that.managementIp) &&
                     dataIp.equals(that.dataIp) &&
@@ -310,8 +354,8 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(hostname, type, intgBridge, extBridge, extIntf,
-                            managementIp, dataIp, state, extBridgeIp,
+        return Objects.hash(hostname, type, intgBridge, extBridge, localBridge,
+                            extIntf, managementIp, dataIp, state, extBridgeIp,
                             extGatewayIp, extGatewayMac, podCidr);
     }
 
@@ -322,6 +366,7 @@
                 .add("type", type)
                 .add("intgBridge", intgBridge)
                 .add("extBridge", extBridge)
+                .add("localBridge", localBridge)
                 .add("extIntf", extIntf)
                 .add("managementIp", managementIp)
                 .add("dataIp", dataIp)
@@ -381,6 +426,7 @@
                 .type(node.type())
                 .intgBridge(node.intgBridge())
                 .extBridge(node.extBridge())
+                .localBridge(node.localBridge())
                 .extIntf(node.extIntf())
                 .managementIp(node.managementIp())
                 .dataIp(node.dataIp())
@@ -397,6 +443,7 @@
         private Type type;
         private DeviceId intgBridge;
         private DeviceId extBridge;
+        private DeviceId localBridge;
         private IpAddress managementIp;
         private IpAddress dataIp;
         private K8sNodeState state;
@@ -422,6 +469,7 @@
                     type,
                     intgBridge,
                     extBridge,
+                    localBridge,
                     extIntf,
                     managementIp,
                     dataIp,
@@ -457,6 +505,12 @@
         }
 
         @Override
+        public Builder localBridge(DeviceId deviceId) {
+            this.localBridge = deviceId;
+            return this;
+        }
+
+        @Override
         public Builder extIntf(String intf) {
             this.extIntf = intf;
             return this;
