Add flow support to the Polatis SNMP driver
Change-Id: I150e174acd54c945c95ca9a1885f1f6313d44ce9
diff --git a/drivers/polatis/snmp/src/main/java/org/onosproject/drivers/polatis/snmp/PolatisDeviceDescription.java b/drivers/polatis/snmp/src/main/java/org/onosproject/drivers/polatis/snmp/PolatisDeviceDescription.java
index ff2862d..8d7ec4e 100644
--- a/drivers/polatis/snmp/src/main/java/org/onosproject/drivers/polatis/snmp/PolatisDeviceDescription.java
+++ b/drivers/polatis/snmp/src/main/java/org/onosproject/drivers/polatis/snmp/PolatisDeviceDescription.java
@@ -17,8 +17,10 @@
package org.onosproject.drivers.polatis.snmp;
import com.google.common.collect.Lists;
+import org.onosproject.net.DefaultAnnotations;
import org.onosproject.net.Device;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
import org.onosproject.net.SparseAnnotations;
import org.onosproject.net.device.DefaultDeviceDescription;
import org.onosproject.net.device.DeviceDescription;
@@ -28,6 +30,12 @@
import org.onosproject.net.driver.AbstractHandlerBehaviour;
import org.onlab.packet.ChassisId;
+import org.onlab.util.Frequency;
+import org.onlab.util.Spectrum;
+
+import org.snmp4j.smi.OID;
+import org.snmp4j.smi.VariableBinding;
+import org.snmp4j.util.TableEvent;
import org.slf4j.Logger;
@@ -37,7 +45,9 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
+import static org.onosproject.net.optical.device.OmsPortHelper.omsPortDescription;
import static org.onosproject.drivers.polatis.snmp.PolatisSnmpUtility.getOid;
+import static org.onosproject.drivers.polatis.snmp.PolatisSnmpUtility.getTable;
/**
* Representation of device information and ports via SNMP for all Polatis
@@ -53,6 +63,12 @@
private static final String PRODUCT_CODE_OID = ".1.3.6.1.4.1.26592.2.1.2.2.1.0";
private static final String SERIAL_NUMBER_OID = ".1.3.6.1.4.1.26592.2.1.2.2.2.0";
+ private static final String PORT_ENTRY_OID = ".1.3.6.1.4.1.26592.2.2.2.1.2";
+ private static final String PORT_PATCH_OID = PORT_ENTRY_OID + ".1.2";
+ private static final String PORT_CURRENT_STATE_OID = PORT_ENTRY_OID + ".1.3";
+
+ public static final int POLATIS_NUM_OF_WAVELENGTHS = 39;
+
private final Logger log = getLogger(getClass());
/**
@@ -76,7 +92,7 @@
try {
hardwareVersion = hardwareVersion();
} catch (IOException e) {
- log.error("Error reading hardware version for device {} exception {}", deviceId, e);
+ log.error("Error reading hardware version for device {} exception ", deviceId, e);
}
String softwareVersion = DEFAULT_DESCRIPTION_DATA;
@@ -106,9 +122,55 @@
*/
@Override
public List<PortDescription> discoverPortDetails() {
- // TODO: Implement me
- return Lists.newLinkedList();
- // return ImmutableList.copyOf(this.getPorts());
+ List<PortDescription> ports = Lists.newArrayList();
+ List<TableEvent> events;
+ DeviceId deviceId = handler().data().deviceId();
+
+ try {
+ OID[] columnOIDs = {new OID(PORT_CURRENT_STATE_OID)};
+ events = getTable(handler(), columnOIDs);
+ } catch (IOException e) {
+ log.error("Error reading ports table for device {} exception {}", deviceId, e);
+ return ports;
+ }
+
+ if (events == null) {
+ log.error("Error reading ports table for device {}", deviceId);
+ return ports;
+ }
+
+ for (TableEvent event : events) {
+ if (event == null) {
+ log.error("Error reading event for device {}", deviceId);
+ continue;
+ }
+ VariableBinding[] columns = event.getColumns();
+ if (columns == null) {
+ log.error("Error reading columns for device {} event {}", deviceId, event);
+ continue;
+ }
+
+ VariableBinding portColumn = columns[0];
+ if (portColumn == null) {
+ continue;
+ }
+
+ int port = event.getIndex().last();
+ boolean enabled = (portColumn.getVariable().toInt() == 1);
+ PortNumber portNumber = PortNumber.portNumber(port);
+ DefaultAnnotations annotations = DefaultAnnotations.builder().build();
+ double opticalBand = Spectrum.O_BAND_MIN.asGHz() - Spectrum.L_BAND_MAX.asGHz();
+ Frequency opticalGrid = Frequency.ofGHz(opticalBand / POLATIS_NUM_OF_WAVELENGTHS);
+ PortDescription p = omsPortDescription(portNumber,
+ enabled,
+ Spectrum.O_BAND_MIN,
+ Spectrum.L_BAND_MAX,
+ opticalGrid,
+ annotations);
+ ports.add(p);
+ }
+
+ return ports;
}
private String hardwareVersion() throws IOException {