NAME
    Net::SNMP::Mixin::Dot1abLLDP - mixin class for the Link Layer Dicsovery
    Protocol

VERSION
    Version 0.02

SYNOPSIS
    A mixin class for Net::SNMP for LLDP (Link Layer Discovery Protocol)
    based info.

      use Net::SNMP;
      use Net::SNMP::Mixin qw/mixer init_mixins/;

      #...

      my $session = Net::SNMP->session( -hostname => 'foo.bar.com' );

      $session->mixer('Net::SNMP::Mixin::Dot1abLLDP');
      $session->init_mixins;
      snmp_dispatcher() if $session->nonblocking;

      die $session->error if $session->error;

      printf "Local ChassisID: %s\n",
        $session->get_lldp_local_system_data->{lldpLocChassisId};

      my $lldp_rem_tbl = $session->get_lldp_rem_table;

      foreach my $lport ( sort { $a <=> $b } keys %{$lldp_rem_tbl} ) {
        printf "%3d %15.15s %25.25s %25.25s\n", $lport,
          $lldp_rem_tbl->{$lport}{lldpRemSysName},
          $lldp_rem_tbl->{$lport}{lldpRemPortId},
          $lldp_rem_tbl->{$lport}{lldpRemChassisId};
      }

DESCRIPTION
    With this mixin it's simple to explore the Layer-2 topologie of the
    network.

    The LLDP (Link Layer Discovery Protocol) is an IEEE (Draft?) standard
    for vendor-independent Layer-2 discovery, similar to the proprietary CDP
    (Cisco Discovery Protocol) from Cisco. It's defined in the IEEE 802.1AB
    documents, therefore the name of this module.

    This mixin reads data from the lldpLocalSystemData and the lldpRemTable
    out of the LLDP-MIB. At least these values are in the mandatory set of
    the LLDP-MIB.

MIXIN METHODS
  OBJ->get_lldp_local_system_data()
    Returns the LLDP lldpLocalSystemData group as a hash reference:

      {
        lldpLocChassisIdSubtype => Integer,
        lldpLocChassisId        => OCTET_STRING,
        lldpLocSysName          => OCTET_STRING,
        lldpLocSysDesc          => OCTET_STRING,
        lldpLocSysCapSupported  => BITS,
        lldpLocSysCapEnabled    => BITS,
      }

  OBJ->get_lldp_rem_table()
    Returns the LLDP lldp_rem_table as a hash reference. The keys are the
    LLDP local port numbers on which the remote system information is
    received:

      {
        INTEGER => {    # lldpRemLocalPortNum

          lldpRemChassisIdSubtype => INTEGER,
          lldpRemChassisId        => OCTET_STRING,
          lldpRemPortIdSubtype    => INTEGER,
          lldpRemPortId           => OCTET_STRING,
          lldpRemPortDesc         => OCTET_STRING,
          lldpRemSysName          => OCTET_STRING,
          lldpRemSysDesc          => OCTET_STRING,
          lldpRemSysCapSupported  => BITS,
          lldpRemSysCapEnabled    => BITS,
        }
      }

    The LLDP portnumber isn't necessarily the ifIndex of the switch. See the
    TEXTUAL-CONVENTION from the LLDP-MIB:

      "A port number has no mandatory relationship to an
      InterfaceIndex object (of the interfaces MIB, IETF RFC 2863).
      If the LLDP agent is a IEEE 802.1D, IEEE 802.1Q bridge, the
      LldpPortNumber will have the same value as the dot1dBasePort
      object (defined in IETF RFC 1493) associated corresponding
      bridge port.  If the system hosting LLDP agent is not an
      IEEE 802.1D or an IEEE 802.1Q bridge, the LldpPortNumber
      will have the same value as the corresponding interface's
      InterfaceIndex object."

    See also the Net::SNMP::Mixin::Dot1dBase for a mixin to get the mapping
    between the ifIndexes and the dot1dBasePorts if needed.

INITIALIZATION
  OBJ->_init($reload)
    Fetch the LLDP related snmp values from the host. Don't call this method
    direct!

PRIVATE METHODS
    Only for developers or maintainers.

  _fetch_lldp_local_system_data($session)
    Fetch the local system data from the lldpMIB once during object
    initialization.

  _lldp_local_system_data_cb($session)
    The callback for _fetch_lldp_local_system_data.

  _fetch_lldp_rem_tbl($session)
    Fetch the lldpRemTable once during object initialization.

  _lldp_rem_tbl_cb($session)
    The callback for _fetch_lldp_rem_tbl_cb().

SEE ALSO
    Net::SNMP::Mixin::Dot1dBase

REQUIREMENTS
    Net::SNMP, Net::SNMP::Mixin

BUGS, PATCHES & FIXES
    There are no known bugs at the time of this release. However, if you
    spot a bug or are experiencing difficulties that are not explained
    within the POD documentation, please submit a bug to the RT system (see
    link below). However, it would help greatly if you are able to pinpoint
    problems or even supply a patch.

    Fixes are dependant upon their severity and my availablity. Should a fix
    not be forthcoming, please feel free to (politely) remind me by sending
    an email to gaissmai@cpan.org .

      RT: http://rt.cpan.org/Public/Dist/Display.html?Name=Net-SNMP-Mixin-Dot1abLLDP

AUTHOR
    Karl Gaissmaier <karl.gaissmaier at uni-ulm.de>

COPYRIGHT & LICENSE
    Copyright 2008 Karl Gaissmaier, all rights reserved.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

