Support discoverDeviceDetails functionality for arista.
This function is not implemented yet.
ONOS-7706
Change-Id: Ia58ec81951fa106fba83b8afe0101e569746444b
diff --git a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
index cb11a69..34fef89 100644
--- a/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
+++ b/drivers/arista/src/main/java/org/onosproject/drivers/arista/DeviceDescriptionDiscoveryAristaImpl.java
@@ -23,16 +23,20 @@
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
+import org.onlab.packet.ChassisId;
import org.onlab.packet.MacAddress;
import org.onosproject.net.AnnotationKeys;
import org.onosproject.net.DefaultAnnotations;
+import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
import org.onosproject.net.SparseAnnotations;
+import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DefaultPortDescription;
import org.onosproject.net.device.DeviceDescription;
import org.onosproject.net.device.DeviceDescriptionDiscovery;
+import org.onosproject.net.device.DeviceService;
import org.onosproject.net.device.PortDescription;
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onosproject.net.driver.DriverHandler;
@@ -54,6 +58,7 @@
public class DeviceDescriptionDiscoveryAristaImpl extends AbstractHandlerBehaviour
implements DeviceDescriptionDiscovery {
+ private static final String UNKNOWN = "unknown";
private static final String JSON = "json";
private static final String RESULT = "result";
private static final String INTERFACE_STATUSES = "interfaceStatuses";
@@ -66,19 +71,25 @@
private static final String INTERFACES = "interfaces";
private static final String BURNED_IN_ADDRESS = "burnedInAddress";
private static final String PHYSICAL_ADDRESS = "physicalAddress";
+ private static final String MODEL_NAME = "modelName";
+ private static final String SW_VERSION = "version";
+ private static final String SERIAL_NUMBER = "serialNumber";
+ private static final String SYSTEM_MAC_ADDRESS = "systemMacAddress";
private static final int WEIGHTING_FACTOR_MANAGEMENT_INTERFACE = 10000;
private static final String JSONRPC = "jsonrpc";
private static final String METHOD = "method";
private static final String RUN_CMDS = "runCmds";
private static final String VERSION = "version";
private static final String ID = "id";
- private static final String GET_PORT = "GetPort";
+ private static final String ONOS_REST = "onos-rest";
private static final String PARAMS = "params";
private static final String FORMAT = "format";
private static final String TIMESTAMPS = "timestamps";
private static final String CMDS = "cmds";
+ private static final String MANUFACTURER = "Arista Networks";
private static final String SHOW_INTERFACES_STATUS = "show interfaces status";
private static final String SHOW_INTERFACES = "show interfaces";
+ private static final String SHOW_VERSION = "show version";
private static final String TWO_POINT_ZERO = "2.0";
private static final long MBPS = 1000000;
@@ -88,9 +99,32 @@
@Override
public DeviceDescription discoverDeviceDetails() {
- log.info("No description to be added for device");
- //TODO to be implemented if needed.
- return null;
+ try {
+ Optional<JsonNode> result = retrieveCommandResult(SHOW_VERSION);
+
+ if (!result.isPresent()) {
+ return null;
+ }
+
+ ArrayNode arrayNode = (ArrayNode) result.get();
+ JsonNode jsonNode = arrayNode.iterator().next();
+ String hwVer = jsonNode.get(MODEL_NAME).asText(UNKNOWN);
+ String swVer = jsonNode.get(SW_VERSION).asText(UNKNOWN);
+ String serialNum = jsonNode.get(SERIAL_NUMBER).asText(UNKNOWN);
+ String systemMacAddress = jsonNode.get(SYSTEM_MAC_ADDRESS).asText("").replace(":", "");
+ DeviceId deviceId = handler().data().deviceId();
+ DeviceService deviceService = checkNotNull(handler().get(DeviceService.class));
+ Device device = deviceService.getDevice(deviceId);
+ ChassisId chassisId = systemMacAddress.isEmpty() ? new ChassisId() : new ChassisId(systemMacAddress);
+
+ log.debug("systemMacAddress: {}", systemMacAddress);
+
+ return new DefaultDeviceDescription(deviceId.uri(), Device.Type.SWITCH,
+ MANUFACTURER, hwVer, swVer, serialNum, chassisId, (SparseAnnotations) device.annotations());
+ } catch (Exception e) {
+ log.error("Exception occurred because of {}, trace: {}", e, e.getStackTrace());
+ return null;
+ }
}
@Override
@@ -225,7 +259,7 @@
sendObjNode.put(JSONRPC, TWO_POINT_ZERO)
.put(METHOD, RUN_CMDS)
- .put(ID, GET_PORT)
+ .put(ID, ONOS_REST)
.putObject(PARAMS)
.put(FORMAT, JSON)
.put(TIMESTAMPS, false)