diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
index 0cf78fa..924cb7c 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
@@ -15,7 +15,7 @@
  */
 package org.onosproject.openstacknode.impl;
 
-import com.google.common.collect.Maps;
+import com.google.common.collect.Lists;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -37,7 +37,6 @@
 import org.onosproject.net.Port;
 import org.onosproject.net.behaviour.BridgeConfig;
 import org.onosproject.net.behaviour.BridgeDescription;
-import org.onosproject.net.behaviour.BridgeName;
 import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.net.behaviour.DefaultBridgeDescription;
 import org.onosproject.net.behaviour.DefaultTunnelDescription;
@@ -60,7 +59,6 @@
 import org.onosproject.openstacknode.api.OpenstackPhyInterface;
 import org.onosproject.ovsdb.controller.OvsdbClientService;
 import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbInterface;
 import org.onosproject.ovsdb.controller.OvsdbPort;
 import org.onosproject.ovsdb.rfc.notation.OvsdbMap;
 import org.onosproject.ovsdb.rfc.notation.OvsdbSet;
@@ -72,7 +70,6 @@
 import java.util.Collection;
 import java.util.Dictionary;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
@@ -94,6 +91,8 @@
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.CONTROLLER;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
 import static org.onosproject.openstacknode.api.OpenstackNodeService.APP_ID;
+import static org.onosproject.openstacknode.util.OpenstackNodeUtil.addOrRemoveDpdkInterface;
+import static org.onosproject.openstacknode.util.OpenstackNodeUtil.addOrRemoveSystemInterface;
 import static org.onosproject.openstacknode.util.OpenstackNodeUtil.getBooleanProperty;
 import static org.onosproject.openstacknode.util.OpenstackNodeUtil.getConnectedClient;
 import static org.onosproject.openstacknode.util.OpenstackNodeUtil.getOvsdbClient;
@@ -111,7 +110,6 @@
     private static final String OVSDB_PORT = "ovsdbPortNum";
     private static final String AUTO_RECOVERY = "autoRecovery";
     private static final String DEFAULT_OF_PROTO = "tcp";
-    private static final String DPDK_DEVARGS = "dpdk-devargs";
     private static final int DEFAULT_OVSDB_PORT = 6640;
     private static final int DEFAULT_OFPORT = 6653;
     private static final boolean DEFAULT_AUTO_RECOVERY = true;
@@ -220,7 +218,7 @@
 
             if (osNode.type() == GATEWAY) {
                 addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE,
-                                        osNode.uplinkPort(), true);
+                                        osNode.uplinkPort(), deviceService, true);
             }
 
             if (osNode.dataIp() != null &&
@@ -228,24 +226,30 @@
                 createTunnelInterface(osNode);
             }
 
-            if (osNode.vlanIntf() != null &&
-                    !isIntfEnabled(osNode, osNode.vlanIntf())) {
-                addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE,
-                                        osNode.vlanIntf(), true);
-            }
-
             if (osNode.dpdkConfig() != null && osNode.dpdkConfig().dpdkIntfs() != null) {
-                osNode.dpdkConfig().dpdkIntfs().forEach(dpdkInterface ->
-                        addOrRemoveDpdkInterface(osNode, dpdkInterface, true));
+                osNode.dpdkConfig().dpdkIntfs().stream()
+                        .filter(dpdkInterface -> dpdkInterface.deviceName().equals(TUNNEL_BRIDGE))
+                        .forEach(dpdkInterface -> addOrRemoveDpdkInterface(
+                                osNode, dpdkInterface, ovsdbPort, ovsdbController, true));
+
+                osNode.dpdkConfig().dpdkIntfs().stream()
+                        .filter(dpdkInterface -> dpdkInterface.deviceName().equals(INTEGRATION_BRIDGE))
+                        .forEach(dpdkInterface -> addOrRemoveDpdkInterface(
+                                osNode, dpdkInterface, ovsdbPort, ovsdbController, true));
             }
 
             osNode.phyIntfs().forEach(i -> {
                 if (!isIntfEnabled(osNode, i.intf())) {
                     addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE,
-                                        i.intf(), true);
+                            i.intf(), deviceService, true);
                 }
             });
 
+            if (osNode.vlanIntf() != null &&
+                    !isIntfEnabled(osNode, osNode.vlanIntf())) {
+                addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE,
+                                        osNode.vlanIntf(), deviceService, true);
+            }
         } catch (Exception e) {
             log.error("Exception occurred because of {}", e.toString());
         }
@@ -334,59 +338,6 @@
     }
 
     /**
-     * Adds or removes a network interface (aka port) into a given bridge of openstack node.
-     *
-     * @param osNode openstack node
-     * @param bridgeName bridge name
-     * @param intfName interface name
-     * @param addOrRemove add port is true, remove it otherwise
-     */
-    private void addOrRemoveSystemInterface(OpenstackNode osNode,
-                                            String bridgeName,
-                                            String intfName,
-                                            boolean addOrRemove) {
-        Device device = deviceService.getDevice(osNode.ovsdb());
-        if (device == null || !device.is(BridgeConfig.class)) {
-            log.info("device is null or this device if not ovsdb device");
-            return;
-        }
-        BridgeConfig bridgeConfig =  device.as(BridgeConfig.class);
-
-        if (addOrRemove) {
-            bridgeConfig.addPort(BridgeName.bridgeName(bridgeName), intfName);
-        } else {
-            bridgeConfig.deletePort(BridgeName.bridgeName(bridgeName), intfName);
-        }
-    }
-
-    private void addOrRemoveDpdkInterface(OpenstackNode osNode,
-                                          DpdkInterface dpdkInterface,
-                                          boolean addOrRemove) {
-
-        OvsdbClientService client = getOvsdbClient(osNode, ovsdbPort, ovsdbController);
-        if (client == null) {
-            log.info("Failed to get ovsdb client");
-            return;
-        }
-
-        if (addOrRemove) {
-            Map<String, String> options = Maps.newHashMap();
-            options.put(DPDK_DEVARGS, dpdkInterface.pciAddress());
-
-            OvsdbInterface.Builder builder = OvsdbInterface.builder()
-                    .name(dpdkInterface.intf())
-                    .type(OvsdbInterface.Type.DPDK)
-                    .mtu(dpdkInterface.mtu())
-                    .options(options);
-
-
-            client.createInterface(dpdkInterface.deviceName(), builder.build());
-        } else {
-            client.dropInterface(dpdkInterface.intf());
-        }
-    }
-
-    /**
      * Creates a tunnel interface in a given openstack node.
      *
      * @param osNode openstack node
@@ -460,8 +411,10 @@
                         !isIntfEnabled(osNode, osNode.uplinkPort())) {
                     return false;
                 }
-                if (osNode.dpdkConfig() != null && osNode.dpdkConfig().dpdkIntfs() != null) {
-                    return isDpdkIntfsCreated(osNode, osNode.dpdkConfig().dpdkIntfs());
+                if (osNode.dpdkConfig() != null &&
+                        osNode.dpdkConfig().dpdkIntfs() != null &&
+                        !isDpdkIntfsCreated(osNode, osNode.dpdkConfig().dpdkIntfs())) {
+                    return false;
                 }
 
                 for (OpenstackPhyInterface intf : osNode.phyIntfs()) {
@@ -558,6 +511,58 @@
         }
     }
 
+    private void removeVlanInterface(OpenstackNode osNode) {
+        if (osNode.vlanIntf() != null) {
+            Optional<DpdkInterface> dpdkInterface = dpdkInterfaceByIntfName(osNode, osNode.vlanIntf());
+
+            removeInterfaceOnIntegrationBridge(osNode, osNode.vlanIntf(), dpdkInterface);
+        }
+    }
+
+    private void removePhysicalInterface(OpenstackNode osNode) {
+        osNode.phyIntfs().forEach(phyIntf -> {
+            Optional<DpdkInterface> dpdkInterface = dpdkInterfaceByIntfName(osNode, phyIntf.intf());
+
+            removeInterfaceOnIntegrationBridge(osNode, phyIntf.intf(), dpdkInterface);
+        });
+    }
+
+    private Optional<DpdkInterface> dpdkInterfaceByIntfName(OpenstackNode osNode, String intf) {
+        return osNode.dpdkConfig() == null ? Optional.empty() :
+                osNode.dpdkConfig().dpdkIntfs().stream()
+                        .filter(dpdkIntf -> dpdkIntf.intf().equals(intf))
+                        .findAny();
+    }
+
+    private void removeInterfaceOnIntegrationBridge(OpenstackNode osNode,
+                                      String intfName,
+                                      Optional<DpdkInterface> dpdkInterface) {
+        if (dpdkInterface.isPresent()) {
+            addOrRemoveDpdkInterface(osNode, dpdkInterface.get(), ovsdbPort,
+                    ovsdbController, false);
+        } else {
+            addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE, intfName, deviceService,
+                    false);
+        }
+    }
+
+    private void processOpenstackNodeRemoved(OpenstackNode osNode) {
+        //delete physical interfaces from the node
+        removePhysicalInterface(osNode);
+
+        //delete vlan interface from the node
+        removeVlanInterface(osNode);
+
+        //delete dpdk interfaces from the node
+        if (osNode.dpdkConfig() != null) {
+            osNode.dpdkConfig().dpdkIntfs().forEach(dpdkInterface -> {
+                if (isDpdkIntfsCreated(osNode, Lists.newArrayList(dpdkInterface))) {
+                    addOrRemoveDpdkInterface(osNode, dpdkInterface, ovsdbPort, ovsdbController, false);
+                }
+            });
+        }
+    }
+
     /**
      * Checks the validity of the given endpoint.
      *
@@ -694,6 +699,7 @@
                         }
                     });
                     break;
+                case PORT_UPDATED:
                 case PORT_ADDED:
                     eventExecutor.execute(() -> {
                         Port port = event.port();
@@ -702,9 +708,10 @@
                                 Objects.equals(portName, DEFAULT_TUNNEL) ||
                                 Objects.equals(portName, osNode.vlanIntf()) ||
                                 Objects.equals(portName, osNode.uplinkPort()) ||
-                                        containsPhyIntf(osNode, portName))) {
-                            log.debug("Interface {} added to {}",
-                                                portName, event.subject().id());
+                                        containsPhyIntf(osNode, portName)) ||
+                                containsDpdkIntfs(osNode, portName)) {
+                            log.info("Interface {} added or updated to {}",
+                                                portName, device.id());
                             bootstrapNode(osNode);
                         }
                     });
@@ -717,14 +724,14 @@
                                 Objects.equals(portName, DEFAULT_TUNNEL) ||
                                 Objects.equals(portName, osNode.vlanIntf()) ||
                                 Objects.equals(portName, osNode.uplinkPort()) ||
-                                        containsPhyIntf(osNode, portName))) {
+                                        containsPhyIntf(osNode, portName)) ||
+                                containsDpdkIntfs(osNode, portName)) {
                             log.warn("Interface {} removed from {}",
                                                 portName, event.subject().id());
                             setState(osNode, INCOMPLETE);
                         }
                     });
                     break;
-                case PORT_UPDATED:
                 case DEVICE_REMOVED:
                 default:
                     // do nothing
@@ -742,13 +749,24 @@
      *          false otherwise
      */
     private boolean containsPhyIntf(OpenstackNode osNode, String portName) {
-        for (OpenstackPhyInterface phyIntf : osNode.phyIntfs()) {
-            if (Objects.equals(portName, phyIntf.intf())) {
-                return true;
-            }
-        }
+        return osNode.phyIntfs().stream()
+                .anyMatch(phyInterface -> phyInterface.intf().equals(portName));
+    }
 
-        return false;
+    /**
+     * Checks whether the openstack node contains the given dpdk interface.
+     *
+     * @param osNode openstack node
+     * @param portName dpdk interface
+     * @return true if openstack node contains the given dpdk interface,
+     *          false otherwise
+     */
+    private boolean containsDpdkIntfs(OpenstackNode osNode, String portName) {
+        if (osNode.dpdkConfig() == null) {
+            return false;
+        }
+        return osNode.dpdkConfig().dpdkIntfs().stream()
+                .anyMatch(dpdkInterface -> dpdkInterface.intf().equals(portName));
     }
 
     /**
@@ -773,6 +791,7 @@
                 case OPENSTACK_NODE_COMPLETE:
                     break;
                 case OPENSTACK_NODE_REMOVED:
+                    eventExecutor.execute(() -> processOpenstackNodeRemoved(event.subject()));
                     break;
                 default:
                     break;
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
index ff10a2c..c2f8bc1 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
@@ -31,10 +31,7 @@
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.event.ListenerRegistry;
-import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
-import org.onosproject.net.behaviour.BridgeConfig;
-import org.onosproject.net.behaviour.BridgeName;
 import org.onosproject.net.device.DeviceService;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
@@ -54,6 +51,7 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ExecutorService;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkArgument;
@@ -61,9 +59,11 @@
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.packet.TpPort.tpPort;
 import static org.onlab.util.Tools.groupedThreads;
+import static org.onosproject.net.AnnotationKeys.PORT_NAME;
 import static org.onosproject.openstacknode.api.Constants.INTEGRATION_BRIDGE;
 import static org.onosproject.openstacknode.api.NodeState.COMPLETE;
 import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.CONTROLLER;
+import static org.onosproject.openstacknode.util.OpenstackNodeUtil.addOrRemoveSystemInterface;
 import static org.onosproject.openstacknode.util.OpenstackNodeUtil.genDpid;
 import static org.onosproject.openstacknode.util.OpenstackNodeUtil.isOvsdbConnected;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -189,11 +189,34 @@
 
         OpenstackNode updatedNode;
 
-        OpenstackNode existNode = osNodeStore.node(osNode.hostname());
-        checkNotNull(existNode, ERR_NULL_NODE);
+        OpenstackNode existingNode = osNodeStore.node(osNode.hostname());
+        checkNotNull(existingNode, ERR_NULL_NODE);
 
         DeviceId existDeviceId = osNodeStore.node(osNode.hostname()).intgBridge();
 
+        if (vlanIntfChanged(existingNode, osNode) ||
+                physicalIntfChanged(existingNode, osNode) ||
+                dpdkIntfChanged(existingNode, osNode)) {
+
+            removeNode(osNode.hostname());
+
+            //we wait 1 second for ovsdb client completely to do removal job
+            try {
+                TimeUnit.MILLISECONDS.sleep(1000);
+            } catch (InterruptedException e) {
+                log.error("Exception occurred because of {}", e);
+            }
+
+            if (!intfsRemovedFromExistNode(existingNode)) {
+                log.error("Updated node failed because intfs of existingNode {} are not removed properly",
+                        existingNode.toString());
+                return;
+            }
+
+            createNode(osNode);
+            return;
+        }
+
         if (osNode.intgBridge() == null && osNode.type() != CONTROLLER) {
             updatedNode = osNode.updateIntbridge(existDeviceId);
             checkArgument(!hasIntgBridge(updatedNode.intgBridge(), updatedNode.hostname()),
@@ -266,7 +289,7 @@
 
         connectSwitch(osNode);
 
-        addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE, portName, true);
+        addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE, portName, deviceService, true);
     }
 
     @Override
@@ -275,7 +298,44 @@
 
         connectSwitch(osNode);
 
-        addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE, portName, false);
+        addOrRemoveSystemInterface(osNode, INTEGRATION_BRIDGE, portName, deviceService, false);
+    }
+
+    private boolean intfsRemovedFromExistNode(OpenstackNode osNode) {
+        if (osNode.vlanIntf() != null &&
+                !intfRemoved(osNode.vlanIntf(), osNode.intgBridge())) {
+            return false;
+        }
+
+        if (osNode.phyIntfs().stream().anyMatch(phyInterface ->
+                !intfRemoved(phyInterface.intf(), osNode.intgBridge()))) {
+            return false;
+        }
+
+        if (osNode.dpdkConfig() != null &&
+                osNode.dpdkConfig().dpdkIntfs().stream().anyMatch(dpdkInterface ->
+                        !intfRemoved(dpdkInterface.intf(), osNode.intgBridge()))) {
+            return false;
+        }
+
+        return true;
+    }
+
+    private boolean intfRemoved(String intf, DeviceId deviceId) {
+        return !deviceService.getPorts(deviceId).stream()
+                .anyMatch(port -> port.annotations().value(PORT_NAME).equals(intf));
+    }
+
+    private boolean vlanIntfChanged(OpenstackNode oldNode, OpenstackNode newNode) {
+        return !Objects.equals(oldNode.vlanIntf(), newNode.vlanIntf());
+    }
+
+    private boolean physicalIntfChanged(OpenstackNode oldNode, OpenstackNode newNode) {
+        return !Objects.equals(oldNode.phyIntfs(), newNode.phyIntfs());
+    }
+
+    private boolean dpdkIntfChanged(OpenstackNode oldNode, OpenstackNode newNode) {
+        return !Objects.equals(oldNode.dpdkConfig(), newNode.dpdkConfig());
     }
 
     private void connectSwitch(OpenstackNode osNode) {
@@ -291,21 +351,6 @@
         }
     }
 
-    private void addOrRemoveSystemInterface(OpenstackNode osNode, String bridgeName, String intfName,
-                                            boolean addOrRemove) {
-        Device device = deviceService.getDevice(osNode.ovsdb());
-        if (device == null || !device.is(BridgeConfig.class)) {
-            log.info("device is null or this device if not ovsdb device");
-            return;
-        }
-        BridgeConfig bridgeConfig =  device.as(BridgeConfig.class);
-        if (addOrRemove) {
-            bridgeConfig.addPort(BridgeName.bridgeName(bridgeName), intfName);
-        } else {
-            bridgeConfig.deletePort(BridgeName.bridgeName(bridgeName), intfName);
-        }
-    }
-
     private boolean hasIntgBridge(DeviceId deviceId, String hostname) {
         Optional<OpenstackNode> existNode = osNodeStore.nodes().stream()
                 .filter(n -> n.type() != CONTROLLER)
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
index 311eba4..f19b8d5 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/util/OpenstackNodeUtil.java
@@ -17,12 +17,18 @@
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableMap;
+import org.onosproject.net.Device;
+import org.onosproject.net.behaviour.BridgeConfig;
+import org.onosproject.net.behaviour.BridgeName;
 import org.onosproject.net.device.DeviceService;
+import org.onosproject.openstacknode.api.DpdkInterface;
 import org.onosproject.openstacknode.api.OpenstackAuth;
 import org.onosproject.openstacknode.api.OpenstackAuth.Perspective;
 import org.onosproject.openstacknode.api.OpenstackNode;
 import org.onosproject.ovsdb.controller.OvsdbClientService;
 import org.onosproject.ovsdb.controller.OvsdbController;
+import org.onosproject.ovsdb.controller.OvsdbInterface;
 import org.onosproject.ovsdb.controller.OvsdbNodeId;
 import org.openstack4j.api.OSClient;
 import org.openstack4j.api.client.IOSClientBuilder;
@@ -42,6 +48,7 @@
 import java.io.IOException;
 import java.security.cert.X509Certificate;
 import java.util.Dictionary;
+import java.util.Map;
 
 import static org.onlab.util.Tools.get;
 
@@ -61,6 +68,8 @@
     private static final String OF_PREFIX = "of:";
     private static final String ZERO = "0";
 
+    private static final String DPDK_DEVARGS = "dpdk-devargs";
+
     /**
      * Prevents object installation from external.
      */
@@ -212,6 +221,74 @@
         return OF_PREFIX + zeroPadding.toString() + hexStr;
     }
 
+
+    /**
+     * Adds or removes a network interface (aka port) into a given bridge of openstack node.
+     *
+     * @param osNode openstack node
+     * @param bridgeName bridge name
+     * @param intfName interface name
+     * @param deviceService device service
+     * @param addOrRemove add port is true, remove it otherwise
+     */
+    public static synchronized void addOrRemoveSystemInterface(OpenstackNode osNode,
+                                                               String bridgeName,
+                                                               String intfName,
+                                                               DeviceService deviceService,
+                                                               boolean addOrRemove) {
+
+
+        Device device = deviceService.getDevice(osNode.ovsdb());
+        if (device == null || !device.is(BridgeConfig.class)) {
+            log.info("device is null or this device if not ovsdb device");
+            return;
+        }
+        BridgeConfig bridgeConfig =  device.as(BridgeConfig.class);
+
+        if (addOrRemove) {
+            bridgeConfig.addPort(BridgeName.bridgeName(bridgeName), intfName);
+        } else {
+            bridgeConfig.deletePort(BridgeName.bridgeName(bridgeName), intfName);
+        }
+    }
+
+    /**
+     * Adds or removes a dpdk interface into a given openstack node.
+     *
+     * @param osNode openstack node
+     * @param dpdkInterface dpdk interface
+     * @param ovsdbPort ovsdb port
+     * @param ovsdbController ovsdb controller
+     * @param addOrRemove add port is true, remove it otherwise
+     */
+    public static synchronized void addOrRemoveDpdkInterface(OpenstackNode osNode,
+                                                             DpdkInterface dpdkInterface,
+                                                             int ovsdbPort,
+                                                             OvsdbController ovsdbController,
+                                                             boolean addOrRemove) {
+
+        OvsdbClientService client = getOvsdbClient(osNode, ovsdbPort, ovsdbController);
+        if (client == null) {
+            log.info("Failed to get ovsdb client");
+            return;
+        }
+
+        if (addOrRemove) {
+            Map<String, String> options = ImmutableMap.of(DPDK_DEVARGS, dpdkInterface.pciAddress());
+
+            OvsdbInterface.Builder builder = OvsdbInterface.builder()
+                    .name(dpdkInterface.intf())
+                    .type(OvsdbInterface.Type.DPDK)
+                    .mtu(dpdkInterface.mtu())
+                    .options(options);
+
+
+            client.createInterface(dpdkInterface.deviceName(), builder.build());
+        } else {
+            client.dropInterface(dpdkInterface.intf());
+        }
+    }
+
     /**
      * Builds up and a complete endpoint URL from gateway node.
      *
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
index 3c1a263..1b69f30 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
@@ -169,7 +169,7 @@
 
                      nodeSet.add(openstackNode);
                  } catch (Exception e) {
-                     log.error(e.toString());
+                     log.error("Exception occurred due to {}", e);
                      throw new IllegalArgumentException();
                  }
              });
