diff --git a/src/main/java/org/onosproject/cordvtn/CordVtn.java b/src/main/java/org/onosproject/cordvtn/CordVtn.java
index 1a56b42..107f3e7 100644
--- a/src/main/java/org/onosproject/cordvtn/CordVtn.java
+++ b/src/main/java/org/onosproject/cordvtn/CordVtn.java
@@ -105,9 +105,13 @@
             .register(KryoNamespaces.API)
             .register(CordVtnNode.class)
             .register(NodeState.class);
+
     private static final String DEFAULT_BRIDGE = "br-int";
     private static final String VPORT_PREFIX = "tap";
     private static final String DEFAULT_TUNNEL = "vxlan";
+    private static final String OK = "OK";
+    private static final String NO = "NO";
+
     private static final Map<String, String> DEFAULT_TUNNEL_OPTIONS = new HashMap<String, String>() {
         {
             put("key", "flow");
@@ -213,6 +217,8 @@
             }
         };
 
+        // TODO Add physical port add state
+
         public abstract void process(CordVtn cordVtn, CordVtnNode node);
     }
 
@@ -307,6 +313,27 @@
     }
 
     @Override
+    public String checkNodeInitState(CordVtnNode node) {
+        checkNotNull(node);
+
+        NodeState state = getNodeState(node);
+        if (state == null) {
+            log.warn("Failed to get init state of {}", node.hostname());
+            return null;
+        }
+
+        String result = String.format(
+                "Integration bridge created/connected : %s (%s)%n" +
+                        "VXLAN interface created : %s%n" +
+                        "Physical interface added : %s (%s)",
+                checkIntegrationBridge(node) ? OK : NO, DEFAULT_BRIDGE,
+                checkTunnelInterface(node) ? OK : NO,
+                checkPhyInterface(node) ? OK : NO, node.phyPortName());
+
+        return result;
+    }
+
+    @Override
     public void createServiceDependency(CordServiceId tServiceId, CordServiceId pServiceId) {
         CordService tService = getCordService(tServiceId);
         CordService pService = getCordService(pServiceId);
@@ -374,7 +401,12 @@
         checkNotNull(node);
 
         if (checkIntegrationBridge(node) && checkTunnelInterface(node)) {
-            return NodeState.COMPLETE;
+            // TODO add physical port add state
+            if (checkPhyInterface(node)) {
+                return NodeState.COMPLETE;
+            } else {
+                return NodeState.INCOMPLETE;
+            }
         } else if (checkIntegrationBridge(node)) {
             return NodeState.BRIDGE_CREATED;
         } else if (getOvsdbConnectionState(node)) {
@@ -488,6 +520,16 @@
     }
 
     /**
+     * Returns port name.
+     *
+     * @param port port
+     * @return port name
+     */
+    private String getPortName(Port port) {
+        return port.annotations().value("portName");
+    }
+
+    /**
      * Returns OVSDB client for a given node.
      *
      * @param node cordvtn node
@@ -520,6 +562,7 @@
                     ControllerInfo ctrlInfo = new ControllerInfo(controller.ip(), OFPORT, "tcp");
                     controllers.add(ctrlInfo);
                 });
+
         String dpid = node.intBrId().toString().substring(DPID_BEGIN);
 
         try {
@@ -545,9 +588,11 @@
         for (String key : DEFAULT_TUNNEL_OPTIONS.keySet()) {
             optionBuilder.set(key, DEFAULT_TUNNEL_OPTIONS.get(key));
         }
-        TunnelDescription description =
-                new DefaultTunnelDescription(null, null, VXLAN, TunnelName.tunnelName(DEFAULT_TUNNEL),
-                                             optionBuilder.build());
+
+        TunnelDescription description = new DefaultTunnelDescription(
+                null, null, VXLAN, TunnelName.tunnelName(DEFAULT_TUNNEL),
+                optionBuilder.build());
+
         try {
             DriverHandler handler = driverService.createHandler(node.ovsdbId());
             TunnelConfig tunnelConfig =  handler.behaviour(TunnelConfig.class);
@@ -578,7 +623,26 @@
         try {
             deviceService.getPorts(node.intBrId())
                     .stream()
-                    .filter(p -> p.annotations().value("portName").contains(DEFAULT_TUNNEL)
+                    .filter(p -> getPortName(p).contains(DEFAULT_TUNNEL)
+                            && p.isEnabled())
+                    .findAny().get();
+            return true;
+        } catch (NoSuchElementException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Checks if physical interface exists.
+     *
+     * @param node cordvtn node
+     * @return true if the interface exists, false otherwise
+     */
+    private boolean checkPhyInterface(CordVtnNode node) {
+        try {
+            deviceService.getPorts(node.intBrId())
+                    .stream()
+                    .filter(p -> getPortName(p).contains(node.phyPortName())
                             && p.isEnabled())
                     .findAny().get();
             return true;
@@ -596,7 +660,7 @@
     private PortNumber getTunnelPort(DeviceId bridgeId) {
         try {
             return deviceService.getPorts(bridgeId).stream()
-                    .filter(p -> p.annotations().value("portName").contains(DEFAULT_TUNNEL)
+                    .filter(p -> getPortName(p).contains(DEFAULT_TUNNEL)
                             && p.isEnabled())
                     .findFirst().get().number();
         } catch (NoSuchElementException e) {
@@ -613,8 +677,7 @@
     private Ip4Address getRemoteIp(DeviceId bridgeId) {
         CordVtnNode node = getNodeByBridgeId(bridgeId);
         if (node != null) {
-            // TODO get data plane IP for tunneling
-            return node.ovsdbIp().getIp4Address();
+            return node.localIp().getIp4Address();
         } else {
             return null;
         }
@@ -712,7 +775,7 @@
     private boolean isVm(Host host) {
         Port port = deviceService.getPort(host.location().deviceId(),
                                           host.location().port());
-        return port.annotations().value("portName").contains(VPORT_PREFIX);
+        return getPortName(port).contains(VPORT_PREFIX);
     }
 
     /**
@@ -866,41 +929,48 @@
 
         /**
          * Handles port added situation.
-         * If the added port is tunnel port, proceed remaining node initialization.
-         * Otherwise, do nothing.
+         * If the added port is tunnel or physical port, proceed remaining node
+         * initialization. Otherwise, do nothing.
          *
          * @param port port
          */
         public void portAdded(Port port) {
-            // TODO add host by updating network config
-            if (!port.annotations().value("portName").contains(DEFAULT_TUNNEL)) {
+            CordVtnNode node = getNodeByBridgeId((DeviceId) port.element().id());
+            if (node == null) {
                 return;
             }
 
-            CordVtnNode node = getNodeByBridgeId((DeviceId) port.element().id());
-            if (node != null) {
-                setNodeState(node, checkNodeState(node));
+            // TODO add host by updating network config
+            String portName = getPortName(port);
+            if (!portName.contains(DEFAULT_TUNNEL) && !portName.equals(node.phyPortName())) {
+                return;
             }
+
+            log.info("Port {} is added to {}", portName, node.hostname());
+            setNodeState(node, checkNodeState(node));
         }
 
         /**
          * Handles port removed situation.
-         * If the removed port is tunnel port, proceed remaining node initialization.
-         * Others, do nothing.
+         * If the removed port is tunnel or physical port, proceed remaining node
+         * initialization.Others, do nothing.
          *
          * @param port port
          */
         public void portRemoved(Port port) {
-            // TODO remove host by updating network config
-            if (!port.annotations().value("portName").contains(DEFAULT_TUNNEL)) {
+            CordVtnNode node = getNodeByBridgeId((DeviceId) port.element().id());
+            if (node == null) {
                 return;
             }
 
-            CordVtnNode node = getNodeByBridgeId((DeviceId) port.element().id());
-            if (node != null) {
-                log.info("Tunnel interface is removed from {}", node.hostname());
-                setNodeState(node, NodeState.INCOMPLETE);
+            // TODO remove host by updating network config
+            String portName = getPortName(port);
+            if (!portName.contains(DEFAULT_TUNNEL) && !portName.equals(node.phyPortName())) {
+                return;
             }
+
+            log.info("Port {} is removed from {}", portName, node.hostname());
+            setNodeState(node, NodeState.INCOMPLETE);
         }
     }
 
