
= Link Layer Discovery
:description: Learn more about Link Layer Discovery (LLDP) in {page-component-title} topology mapping including supported OIDs.

The Link Layer Discovery Protocol (LLDP) is a vendor-neutral link layer protocol.
Network devices use it to advertise their identity, capabilities, and neighbors.

LLDP performs functions similar to several proprietary protocols, such as the Cisco Discovery Protocol (CDP), Extreme Discovery Protocol (EDP), Foundry Discovery Protocol (FDP), Nortel Discovery Protocol (also known as SONMP), and Microsoft's https://en.wikipedia.org/wiki/Link_Layer_Discovery_Protocol[Link Layer Discovery Protocol] (LLDP).

NOTE: Only nodes with a running LLDP process can be part of the link discovery.
The data is similar to running the `show lldp neighbor` command on a device's command line.
Linux and Windows servers don't have an LLDP process running by default, and will not be part of the link discovery unless an LLDP agent is manually installed and configured.

You can find generic information about the LLDP process in the LLDP Information box on any device's Node Detail page.

== LLDP Topology Updater

The LLDP Topology Updater consolidates LLDP data and provides the LLDP OnmsTopology.
Only full bidirectional connections between two LLDP-supported devices become edges in the topology.
For example, Node A and Node B are connected by an edge if, and only if, there is an LLDP MIB port connection in Node A to Node B, and vice versa.

Information gathered from supported OIDs is stored in the following database tables:

.Database tables related to LLDP discovery
image::enlinkd/lldp-database.png["Network diagram depicting database tables that are used in LLDP discovery"]

== Supported OIDs

The following OIDs are supported for the discovery and construction of the LLDP network topology.
The LLDP Discovery Collector collects them:

[caption=]
.Supported OIDs from the `LLDP-MIB` module
[cols="1,2,1"]
|===
| Name  | Description   | OID

| lldpLocChassisIdSubtype
| Type of encoding used to identify the chassis associated with the local system (`chassisComponent(1)`, `interfaceAlias(2)`, `portComponent(3)`, `macAddress(4)`, `networkAddress(5)`, `interfaceName(6)`, or `local(7)`).
| .1.0.8802.1.1.2.1.3.1.0

| lldpLocChassisId
| String value used to identify the chassis component associated with the local system.
| .1.0.8802.1.1.2.1.3.2.0

| lldpLocSysName
| String value used to identify the system name of the local system.
If the local agent supports http://tools.ietf.org/html/rfc3418[IETF RFC 3418], `lldpLocSysName` should have the same value as `sysName`.
| .1.0.8802.1.1.2.1.3.3.0

| lldpLocPortIdSubtype
| Type of port identifier encoding used in the associated `lldpLocPortId` object.
| .1.0.8802.1.1.2.1.3.7.1.2

| lldpLocPortId
| String value used to identify the port component associated with a given port in the local system.
| .1.0.8802.1.1.2.1.3.7.1.3

| lldpLocPortDesc
| String value used to identify the 802 LAN station's port description that is associated with the local system.
If the local agent supports IETF RFC 2863, `lldpLocPortDesc` should have the same value as `ifDescr`.
| .1.0.8802.1.1.2.1.3.7.1.4

| lldpRemChassisIdSubtype
| Type of encoding used to identify the chassis associated with the local system (`chassisComponent(1)`, `interfaceAlias(2)`, `portComponent(3)`, `macAddress(4)`, `networkAddress(5)`, `interfaceName(6)`, or `local(7)`).
| .1.0.8802.1.1.2.1.4.1.1.4

| lldpRemChassisId
| String value used to identify the chassis component associated with the remote system.
| .1.0.8802.1.1.2.1.4.1.1.5

| lldpRemPortIdSubtype
| Type of port identifier encoding used in the associated `lldpRemPortId` object. +
*interfaceAlias(1):* Identifies an instance of the `ifAlias` object (defined in https://datatracker.ietf.org/doc/rfc2863/[IETF RFC 2863]).
If that `ifAlias` object does not contain any values, use another port identifier type. +
*portComponent(2):* Identifies a particular instance of the `entPhysicalAlias` object (defined in https://datatracker.ietf.org/doc/rfc2737/[IETF RFC 2737]) for a port or backplane component. +
*macAddress(3):* Identifies a particular unicast source address (encoded in network byte order and IEEE 802.3 canonical bit order) that is associated with the port (https://standards.ieee.org/ieee/802/1025/[IEEE Std 802-2001]). +
*networkAddress(4):* Identifies a network address that is associated with the port.
The first octet contains the IANA `AddressFamilyNumbers` enumeration value for the specific address type.
Octets 2 through N contain the `networkAddress` value (in network byte order). +
*interfaceName(5):* Identifies a particular instance of the `ifName` object (defined in IETF RFC 2863).
If the particular `ifName` object does not contain any values, use another port identifier type. +
*acentCircuitId(6):* Identifies an `agent-local` circuit identifier (defined in https://datatracker.ietf.org/doc/rfc3046/[RFC 3046]). +
*local(7):* Identifies a locally assigned port ID.
| .1.0.8802.1.1.2.1.4.1.1.6

| lldpRemPortId
| String value used to identify the port component that is associated with the remote system.
| .1.0.8802.1.1.2.1.4.1.1.7

| lldpRemPortDesc
| String value used to identify the description of the given port that is associated with the remote system.
| .1.0.8802.1.1.2.1.4.1.1.8

| lldpRemSysName
| String value used to identify the remote system's name.
| .1.0.8802.1.1.2.1.4.1.1.9
|===
