Supports dpdk-based vm creation in OpenstackNetworking service.
Change-Id: I39c30cde5b455952a4c7ed0147903324c6598880
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();
+ }
}
/**