Supports netdev data path type in OpenstackNode.
Change-Id: I716276a98bd141e87bf20dd5314e52128cf7e495
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
index a94aa10..e9f8e35 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/codec/OpenstackNodeCodec.java
@@ -61,8 +61,10 @@
private static final String AUTHENTICATION = "authentication";
private static final String END_POINT = "endPoint";
private static final String SSH_AUTH = "sshAuth";
+ private static final String DATA_PATH_TYPE = "datapathType";
private static final String MISSING_MESSAGE = " is required in OpenstackNode";
+ private static final String UNSUPPORTED_DATAPATH_TYPE = "Unsupported datapath type";
@Override
public ObjectNode encode(OpenstackNode node, CodecContext context) {
@@ -72,7 +74,8 @@
.put(HOST_NAME, node.hostname())
.put(TYPE, node.type().name())
.put(STATE, node.state().name())
- .put(MANAGEMENT_IP, node.managementIp().toString());
+ .put(MANAGEMENT_IP, node.managementIp().toString())
+ .put(DATA_PATH_TYPE, node.datapathType().name());
OpenstackNode.NodeType type = node.type();
@@ -164,6 +167,17 @@
nodeBuilder.dataIp(IpAddress.valueOf(json.get(DATA_IP).asText()));
}
+ JsonNode datapathTypeJson = json.get(DATA_PATH_TYPE);
+
+ if (datapathTypeJson == null ||
+ datapathTypeJson.asText().equals(OpenstackNode.DatapathType.NORMAL.name().toLowerCase())) {
+ nodeBuilder.datapathType(OpenstackNode.DatapathType.NORMAL);
+ } else if (datapathTypeJson.asText().equals(OpenstackNode.DatapathType.NETDEV.name().toLowerCase())) {
+ nodeBuilder.datapathType(OpenstackNode.DatapathType.NETDEV);
+ } else {
+ throw new IllegalArgumentException(UNSUPPORTED_DATAPATH_TYPE + datapathTypeJson.asText());
+ }
+
// parse physical interfaces
List<OpenstackPhyInterface> phyIntfs = new ArrayList<>();
JsonNode phyIntfsJson = json.get(PHYSICAL_INTERFACES);
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 06b65a3..07d71de 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
@@ -82,6 +82,7 @@
import static org.onosproject.openstacknode.api.NodeState.DEVICE_CREATED;
import static org.onosproject.openstacknode.api.NodeState.INCOMPLETE;
import static org.onosproject.openstacknode.api.NodeState.INIT;
+import static org.onosproject.openstacknode.api.OpenstackNode.DatapathType.NETDEV;
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;
@@ -272,16 +273,19 @@
String dpid = deviceId.toString().substring(DPID_BEGIN);
- BridgeDescription bridgeDesc = DefaultBridgeDescription.builder()
+ BridgeDescription.Builder builder = DefaultBridgeDescription.builder()
.name(bridgeName)
.failMode(BridgeDescription.FailMode.SECURE)
.datapathId(dpid)
.disableInBand()
- .controllers(controllers)
- .build();
+ .controllers(controllers);
+
+ if (osNode.datapathType().equals(NETDEV)) {
+ builder.datapathType(osNode.datapathType().name().toLowerCase());
+ }
BridgeConfig bridgeConfig = device.as(BridgeConfig.class);
- bridgeConfig.addBridge(bridgeDesc);
+ bridgeConfig.addBridge(builder.build());
}
/**
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
index 106e4ea..f30611b 100644
--- a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
@@ -83,6 +83,7 @@
.register(DefaultOpenstackNode.class)
.register(OpenstackNode.NodeType.class)
.register(NodeState.class)
+ .register(OpenstackNode.DatapathType.class)
.register(OpenstackPhyInterface.class)
.register(DefaultOpenstackPhyInterface.class)
.register(ControllerInfo.class)