lldpd supports several discovery protocols and is smart enough to select the right protocol on each interface:

It is able to advertise the following TLV:

lldpd supports many OS:

Moreover, it can handle correctly VLAN, link aggregates and bridges on all those platforms, except on Solaris.

Discovered neighbors can be queried through a convenient command line interface:

# show neighbors detail
Interface:    eth0, via: LLDP, RID: 1, Time: 0 day, 00:00:10
    ChassisID:    mac 00:18:f3:03:4e:06
    SysName:      dev-01.example.com
    SysDescr:     Debian GNU/Linux 7.0 (wheezy) Linux 3.7-trunk-amd64 #1 SMP Debian 3.7.1-1~experimental.1 x86_64
    Capability:   Bridge, on
    Capability:   Router, on
    Capability:   Wlan, off
    PortID:       mac ea:b8:ab:aa:8c:da
    PortDescr:    eth1
    PMD autoneg:  supported: no, enabled: no
      MAU oper type: 10GigBaseR - R PCS/PMA, unknown PMD.
    Device Type:  Media Endpoint (Class II)
    Capability:   Capabilities
    Capability:   Policy
    Capability:   Location
    Capability:   MDI/PSE
    Capability:   MDI/PD
    Capability:   Inventory
      Hardware Revision: System Version
      Software Revision: 3.7-trunk-amd64
      Firmware Revision: 2104   
      Serial Number: System Serial Number
      Manufacturer: System manufacturer
      Model:        System Product Name
      Asset ID:     Asset-1234567890

They can also be queried through SNMP with the built-in SNMP subagent. Or through a Unix socket with the provided library.