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;
+    }
+
 }
