[ONOS-7281] Using slow protocol destination mac address (01:80:C2:00:00:0E), and supporting port description in ONOS LLDP
Change-Id: I98dfbad436da0b689a2ac89665ee3298c32b61e8
diff --git a/utils/misc/src/main/java/org/onlab/packet/LLDP.java b/utils/misc/src/main/java/org/onlab/packet/LLDP.java
index cd46eee..33b1f85 100644
--- a/utils/misc/src/main/java/org/onlab/packet/LLDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/LLDP.java
@@ -117,6 +117,16 @@
return this;
}
+ /**
+ * Adds additional TLV to optionalTLVList.
+ * @param lldptlv the optional TLV to be added
+ * @return this
+ */
+ public LLDP addOptionalTLV(final LLDPTLV lldptlv) {
+ this.optionalTLVList.add(lldptlv);
+ return this;
+ }
+
@Override
public byte[] serialize() {
int length = 2 + this.chassisId.getLength() + 2
diff --git a/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java b/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java
index bfac8f0..62f2e7a 100644
--- a/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java
+++ b/utils/misc/src/main/java/org/onlab/packet/LLDPTLV.java
@@ -26,6 +26,9 @@
*
*/
public class LLDPTLV {
+
+ public static final int MAX_LENGTH = 0x1ff;
+
protected byte type;
protected short length;
protected byte[] value;
diff --git a/utils/misc/src/main/java/org/onlab/packet/MacAddress.java b/utils/misc/src/main/java/org/onlab/packet/MacAddress.java
index b048794..8a6d918 100644
--- a/utils/misc/src/main/java/org/onlab/packet/MacAddress.java
+++ b/utils/misc/src/main/java/org/onlab/packet/MacAddress.java
@@ -36,9 +36,9 @@
*/
public static final MacAddress NONE = ONOS;
/**
- * ONOS LLDP MAC address with multicast bit set.
+ * ONOS LLDP MAC address with slow protocol destination address.
*/
- public static final MacAddress ONOS_LLDP = valueOf("a5:23:05:00:00:01");
+ public static final MacAddress ONOS_LLDP = valueOf("01:80:C2:00:00:0E");
/**
* All-zero MAC address.
*/
diff --git a/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java b/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
index 706a8b1..c45ff71 100644
--- a/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
+++ b/utils/misc/src/main/java/org/onlab/packet/ONOSLLDP.java
@@ -21,6 +21,7 @@
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
import java.util.HashMap;
import static org.onlab.packet.LLDPOrganizationalTLV.OUI_LENGTH;
@@ -58,6 +59,8 @@
private static final byte TTL_TLV_TYPE = 3;
+ private static final byte PORT_DESC_TLV_TYPE = 4;
+
private final byte[] ttlValue = new byte[] {0, 0x78};
// Only needs to be accessed from LinkProbeFactory.
@@ -240,4 +243,33 @@
probe.setChassisId(chassisId);
return probe;
}
+
+ /**
+ * Creates a link probe for link discovery/verification.
+ *
+ * @param deviceId The device ID as a String
+ * @param chassisId The chassis ID of the device
+ * @param portNum Port number of port to send probe out of
+ * @param portDesc Port description of port to send probe out of
+ * @return ONOSLLDP probe message
+ */
+ public static ONOSLLDP onosLLDP(String deviceId, ChassisId chassisId, int portNum, String portDesc) {
+
+ ONOSLLDP probe = onosLLDP(deviceId, chassisId, portNum);
+
+ if (portDesc != null && !portDesc.isEmpty()) {
+ byte[] bPortDesc = portDesc.getBytes(StandardCharsets.UTF_8);
+
+ if (bPortDesc.length > LLDPTLV.MAX_LENGTH) {
+ bPortDesc = Arrays.copyOf(bPortDesc, LLDPTLV.MAX_LENGTH);
+ }
+ LLDPTLV portDescTlv = new LLDPTLV()
+ .setType(PORT_DESC_TLV_TYPE)
+ .setLength((short) bPortDesc.length)
+ .setValue(bPortDesc);
+ probe.addOptionalTLV(portDescTlv);
+ }
+ return probe;
+ }
+
}