diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
index 94c30e7..d5b2e2d 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/web/OpenstackPortWebResource.java
@@ -15,7 +15,11 @@
  */
 package org.onosproject.openstacknetworking.web;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.openstacknetworking.api.OpenstackNetworkAdminService;
+import org.onosproject.openstacknode.api.OpenstackNode;
+import org.onosproject.openstacknode.api.OpenstackNodeService;
 import org.onosproject.rest.AbstractWebResource;
 import org.openstack4j.openstack.networking.domain.NeutronPort;
 import org.slf4j.Logger;
@@ -49,9 +53,12 @@
 
     private static final String MESSAGE = "Received ports %s request";
     private static final String PORTS = "ports";
+    private static final String VIF_TYPE = "vif_type";
+    private static final String VHOSTUSER = "vhostuser";
+    private static final String SOCKET_DIR = "socket_dir";
 
-    private final OpenstackNetworkAdminService adminService =
-                                        get(OpenstackNetworkAdminService.class);
+    private final OpenstackNetworkAdminService adminService = get(OpenstackNetworkAdminService.class);
+    private final OpenstackNodeService nodeService = get(OpenstackNodeService.class);
 
     @Context
     private UriInfo uriInfo;
@@ -101,8 +108,25 @@
                                  jsonToModelEntity(input, NeutronPort.class);
 
         adminService.updatePort(port);
+        ObjectMapper mapper = new ObjectMapper();
+        ObjectNode jsonNode = mapper.createObjectNode();
 
-        return status(Response.Status.OK).build();
+        OpenstackNode node = nodeService.node(port.getHostId());
+        if (node == null) {
+            return status(Response.Status.OK).build();
+        } else if (node.datapathType().equals(OpenstackNode.DatapathType.NETDEV)) {
+            log.debug("UpdatePort for port {} called in netdev device {} " +
+                            "so sends vif type as a payload of the response",
+                    port.getId(), node.hostname());
+            jsonNode.put(VIF_TYPE, VHOSTUSER);
+
+            if (node.socketDir() != null) {
+                jsonNode.put(SOCKET_DIR, node.socketDir());
+            }
+            return status(Response.Status.OK).entity(jsonNode.toString()).build();
+        } else {
+            return status(Response.Status.OK).build();
+        }
     }
 
     /**
