LLDP
Материал из Xgu.ru
-  Автор: Наташа Самойленко
 
Link Layer Discovery Protocol (LLDP) — протокол канального уровня, который позволяет сетевым устройствам анонсировать в сеть информацию о себе и о своих возможностях, а также собирать эту информацию о соседних устройствах.
LLDP это стандартный протокол, который описан в IEEE 802.1AB.
[править] Описание протокола
Каждое устройство, на котором включен LLDP, отправляет информацию о себе соседям независимо от того, отправляет ли сосед информацию о себе. При обмене сообщениями LLDP, не используется механизм запрос/ответ.
Устройство, использующее LLDP, хранит информацию о соседях, но не перенаправляет её дальше (независимо от того поддерживает ли устройство протокол LLDP).
Каждое устройство хранит информацию о соседях в MIB. Поэтому эта информация может использоваться различными управляющими хостами с помощью протокола SNMP.
Например, ProCurve Manager использует информацию LLDP для построения топологии сети и сбора инвентарной информации.
Информация об устройстве, которая может передаваться с помощью LLDP:
- Имя устройства (System Name),
 - Описание устройства (System Description),
 - Идентификатор порта (Port ID),
 - Описание порта (Port Description),
 - Возможности устройства (System Capabilities),
 - Управляющий адрес (Management Address),
 - и др.
 
[править] Принципы работы
Протокол работает только между непосредственно присоединенными устройствами. Это значит, что, например, на рисунке:
- Коммутатор sw4 получит LLDP-информацию от двух соседей core_sw (через два порта) и sw5400;
 - Коммутатор core_sw получит LLDP-информацию только от sw4 (но через оба порта);
 - Коммутатор sw5400 получит LLDP-информацию только от sw4.
 
Сообщения LLDP могут передаваться через порты, которые заблокированы STP, но не передаются через порты, которые заблокированы 802.1X.
[править] Формат кадра LLDP
| Адрес получателя | Адрес отправителя | LLDP Ethertype | Данные LLDP | |
| LLDP multicast адрес | MAC-адрес | 88-СС | LLDPDU | FCS | 
| 6 байт | 6 байт | 2 байта | 1500 байт | 4 байта | 
Сообщения LLDP инкапсулируются в Ethernet-кадр и передаются через все активные линки.
Для LLDP зарезервирован multicast MAC-адрес — 01:80:C2:00:00:0E. Это специальный зарезервированный MAC-адрес, который предполагает, что коммутаторы, получившие кадр с таким адресом получателя, не будут его передавать дальше.
LLDP передает информацию в сообщениях, которые называются LLDP Data Unit (LLDPDU).
В сообщениях LLDP содержатся несколько TLV (Type, Value, Length):
- Type — описывает тип информации, которая передается этой частью сообщения (7 бит);
 - Length — размер поля Value (9 бит);
 - Value — описывает определенную характеристику устройства.
 
LLDPDU состоит как минимум из четырёх обязательных TLV полей:
- Chassis ID TLV (Type = 1);
 - Port ID TLV (Type = 2);
 - Time To Live TLV (Type = 3);
 - End of LLDPDU TLV (Type = 0).
 
Между обязательными TLV (после первых трёх и перед последним) могут размещаться другие (опциональные) TLV, например:
- Port Description TLV (Type = 4);
 - System Name TLV (Type = 5);
 - System Description TLV (Type = 6);
 - System Capabilities TLV (Type = 7).
 
[править] LLDP на коммутаторах ProCurve
| 
 
  | 
 Коммутаторы ProCurve поддерживают протоколы LLDP и CDP. Однако, LLDP-сообщения они могут и генерировать и принимать, а CDP — только принимать. В коммутаторах ProCurve таблицы LLDP и CDP взаимно пополняют друг друга. То есть, командами просмотра соседей обнаруженных по LLDP, можно увидеть и CDP-соседей. И наоборот.  | 
[править] Настройки по умолчанию
По умолчанию на коммутаторах ProCurve включен LLDP, с такими параметрами:
- Режим отправки и получения — коммутатор и отправляет и принимает сообщения LLDP;
 - Отправка SNMP-оповещений — выключена;
 -  Управляющий адрес (Management Address):
- если порт принадлежит только одному VLAN и в нем есть IP-адрес(а) — он анонсирует наименьший IP-адрес,
 - если порт принадлежит только одному VLAN и в нем нет IP-адреса — он анонсирует 127.0.0.1,
 - если порт принадлежит нескольким VLAN — он анонсирует наименьший IP-адрес из VLAN с наименьшим VID;
 
 -  Таймеры:
- Transmit Interval — 30 секунд. Частота отправки LLDP-сообщений соседям;
 - Holdtime Multiplier — 4. Множитель, на который умножается Transmit Interval для получения TTL;
 - Время жизни (TTL) — 120 секунд. Время в течении которого сосед будет хранить информацию об устройстве;
 - Delay Interval — 2 секунды. Интервал, который коммутатор использует для задержки отправки объявлений LLDP, которые отправляются из-за изменений в LLDP MIB;
 - Reinit Interval — 2 секунды. Минимальное время, которое порт должен подождать прежде чем он инициализируется снова после выключения LLDP, за которым следует изменение режима передачи сообщений LLDP.;
 - Notification Interval — 5 секунды. Интервал между отправкой оповещений об изменении информации LLDP.
 
 
[править] Информация о локальном устройстве
Информация об устройстве на котором выполняется команда:
sw4# show lldp info local-device LLDP Local Device Information Chassis Type : mac-address Chassis Id : 00 16 b9 10 60 00 System Name : sw4 System Description : ProCurve J8692A Switch 3500yl-24G, revision K.13.51,... System Capabilities Supported:bridge, router System Capabilities Enabled:bridge Management Address : LLDP Port Information Port | PortType PortId PortDesc -------- + -------- -------- -------- 1 | local 1 1 2 | local 2 2 ...... 22 | local 22 22 23 | local 23 23 24 | local 24 24
[править] Информация о соседях
Пример топологии (команды выполняются на коммутаторе sw4):
Информация о соседях:
sw4(config)# show lldp info remote-device LLDP Remote Devices Information LocalPort | ChassisId PortId PortDescr SysName --------- + ------------------------- ------ --------- ---------------------- 1 | 00 15 60 ea 4e 00 1 1 core_sw 7 | 00 15 60 ea 4e 00 3 3 core_sw 24 | 00 17 08 ca eb 00 5 A5 sw5400
Более подробная информация о соседе на 1 интерфейсе (коммутатор 3 уровня, но в данный момент работает как коммутатор 2 уровня):
sw4(config)# show lldp info remote-device 1
 LLDP Remote Device Information Detail
  Local Port   : 1
  ChassisType  : mac-address         
  ChassisId    : 00 15 60 ea 4e 00        
  PortType     : local  
  PortId       : 1                        
  SysName      : core_sw                       
  System Descr : ProCurve J4906A Switch 3400cl-48G, revision M.10.30, ROM ...
  PortDescr    : 1                                                           
  System Capabilities Supported  : bridge, router
  System Capabilities Enabled    : bridge
  Remote Management Address
     Type    : all802
     Address : 00 15 60 ea 4e 00 
Более подробная информация о соседе на 24 интерфейсе (коммутатор 3 уровня):
sw4(config)# show lldp info remote-device 24
 LLDP Remote Device Information Detail
  Local Port   : 24
  ChassisType  : mac-address         
  ChassisId    : 00 17 08 ca eb 00        
  PortType     : local  
  PortId       : 5                        
  SysName      : sw5400                        
  System Descr : ProCurve J8697A Switch 5406zl, revision K.13.23, ROM K.12...
  PortDescr    : A5                                                          
  System Capabilities Supported  : bridge, router
  System Capabilities Enabled    : bridge, router
  Remote Management Address
     Type    : ipv4
     Address : 10.1.67.1
[править] Настройки LLDP
[править] Включение и выключение LLDP на коммутаторе
По умолчанию на коммутаторе включен LLDP.
Отключение LLDP:
sw4(config)# no lldp run
Если после отключения LLDP, необходимо его снова включить:
sw4(config)# lldp run
[править] Изменение интервалов
[править] Transmit Interval
Transmit Interval — частота отправки LLDP-сообщений соседям. По умолчанию — 30 секунд.
Настройка transmit interval (из-за используемой команды называется также refresh interval):
sw4(config)# lldp refresh-interval <5-32768>
| 
 
  | 
 Значение refresh-interval должно быть большим чем или равным 4 * delay-interval. Иначе коммутатор выдаст сообщение об ошибке. Для изменения delay-interval необходимо использовать команду setmib lldpTxDelay.0 -i <1-8192>. По умолчанию delay-interval равен 2 секундам.  | 
[править] Time-to-Live
Time-to-Live (TTL) — время в течении которого сосед будет хранить информацию об устройстве, которое отправило сообщение LLDP. По умолчанию — 120 секунд.
Значение TTL получается по формуле:
- refresh-interval * holdtime-multiplier
 
Изменение holdtime multiplier (по умолчанию 4):
sw4(config)# lldp holdtime-multiplier <2-10>
[править] Delay Interval
Delay Interval — коммутатор использует этот интервал для задержки отправки объявлений LLDP, которые отправляются из-за изменений в LLDP MIB. По умолчанию delay-interval равен 2 секундам.
Если на коммутаторе часто изменяется LLDP MIB, то увеличение интервала может уменьшить количество отправляемых сообщений.
Интервал может быть изменен с помощью управляющего хоста SNMP (NMS) или с помощью команды setmib.
| 
 
  | 
 Значение refresh-interval должно быть большим чем или равным 4 * delay-interval. Иначе коммутатор выдаст сообщение об ошибке.  | 
Изменение delay interval:
sw4(config)# setmib lldpTxDelay.0 -i <1-8192>
[править] Reinit Interval
Reinit Interval — минимальное время, которое порт должен подождать прежде чем он инициализируется снова после выключения LLDP, за которым следует изменение режима передачи сообщений LLDP. По умолчанию — 2 секунды.
Изменение reinit interval:
sw4(config)# setmib lldpReinitDelay.0 -i <1-10>
[править] Notification Interval
Notification Interval — интервал между отправкой оповещений об изменении информации LLDP. Если на интерфейсе включена отправка SNMP-сообщений, то частое изменение информации LLDP может привести к большому количеству trap. По умолчанию — 5 секунд.
Изменение notification interval:
sw4(config)# setmib lldpnotificationinterval.0 -i <1-3600>
[править] Просмотр информации о текущих значениях интервалов
Просмотр информации о текущих значениях интервалов на коммутаторе:
sw4# show lldp config LLDP Global Configuation LLDP Enabled [Yes] : Yes LLDP Transmit Interval [30] : 30 LLDP Hold time Multiplier [4] : 4 LLDP Delay Interval [2] : 2 LLDP Reinit Interval [2] : 2 LLDP Notification Interval [5] : 5 .....
[править] Изменение режима отправки и получения сообщений LLDP
По умолчанию коммутатор и отправляет и принимает сообщения LLDP.
Синтаксис команды изменения режима отправки сообщений LLDP:
sw4(config)# lldp admin-status <port-list> <txonly | rxonly | tx_rx | disable>
Параметры команды:
- port-list — перечень портов к которым применяется режим,
 - txonly — только отправка LLDP-сообщений, входящие сообщения LLDP блокируются,
 - rxonly — только получение LLDP-сообщений, исходящие сообщения LLDP блокируются,
 - tx_rx — отправка и получение LLDP-сообщений (режим по умолчанию),
 - disable — отключение отправки и получения LLDP-сообщений.
 
Пример перевода порта 3 в режим txonly:
sw4(config)# lldp admin-status 3 txonly
Просмотр информации о текущем режиме портов:
sw4# show lldp config LLDP Global Configuation LLDP Enabled [Yes] : Yes LLDP Transmit Interval [30] : 30 LLDP Hold time Multiplier [4] : 4 LLDP Delay Interval [2] : 2 LLDP Reinit Interval [2] : 2 LLDP Notification Interval [5] : 5 LLDP Port Configuration Port | AdminStatus NotificationEnabled ----- + ----------- ------------------- 1 | Tx_Rx False 2 | Tx_Rx False 3 | TxOnly False 4 | Tx_Rx False 5 | Tx_Rx False .....
Просмотр информации о текущем режиме порта 2:
sw4(config)# sh lldp config 2 LLDP Port Configuration Detail Port : 2 AdminStatus [Tx_Rx] : Tx_Rx ....
[править] Указание управляющего адреса
По умолчанию коммутатор анонсирует управляющий адрес по таким правилам:
- если порт принадлежит только одному VLAN и в нем есть IP-адрес(а) — он анонсирует наименьший IP-адрес,
 - если порт принадлежит только одному VLAN и в нем нет IP-адреса — он анонсирует 127.0.0.1,
 - если порт принадлежит нескольким VLAN — он анонсирует наименьший IP-адрес из VLAN с наименьшим VID.
 
Однако, адрес может быть назначен административно.
Назначение IP-адреса, который будет анонсироваться как управляющий
sw4(config)# lldp config <port-list> ipAddrEnable <ip-address>
| 
 
  | 
 Эта команда не позволяет назначить адрес полученный по DHCP или адрес, который не назначен статически в VLAN на коммутаторе. Если, например, попытаться назначить несуществующий адрес как управляющий, то коммутатор выдаст такую ошибку: sw4(config)# lldp config 1-3 ipAddrEnable 10.1.1.1 10.1.1.1: This IP address is not configured or is a DHCP address.  | 
Просмотр информации о том, какой адрес этот коммутатор анонсирует как управляющий:
sw4(config)# sh lldp info local-device 
LLDP Local Device Information
 Chassis Type : mac-address
 Chassis Id   : 00 16 35 b2 16 00        
 System Name  : sw1                           
 System Description : ProCurve J4905A Switch 3400cl-24G, revision M.10.68,...
 System Capabilities Supported:bridge, router
 System Capabilities Enabled:bridge
 Management Address  :
    Type:ipv4
    Address:192.168.25.101
.....
Просмотр информации о том, какой адрес сосед анонсирует как управляющий:
sw4(config)# sh lldp i r 24
LLDP Remote Device Information Detail
 Local Port   : 24
 ChassisType  : mac-address         
 ChassisId    : 00 21 f7 62 6b 00        
 PortType     : local  
 PortId       : 5                        
 SysName      : sw5400                           
 System Descr : ProCurve J8698A Switch 5412zl, revision K.12.57, ROM K.12...
 PortDescr    : A5                                                          
 System Capabilities Supported  : bridge, router
 System Capabilities Enabled    : bridge
 Remote Management Address
    Type    : ipv4
    Address : 192.168.25.104
[править] Просмотр информации о настройках LLDP
Настройки LLDP на коммутаторе:
sw4# show lldp config LLDP Global Configuation LLDP Enabled [Yes] : Yes LLDP Transmit Interval [30] : 30 LLDP Hold time Multiplier [4] : 4 LLDP Delay Interval [2] : 2 LLDP Reinit Interval [2] : 2 LLDP Notification Interval [5] : 5 LLDP Port Configuration Port | AdminStatus NotificationEnabled ----- + ----------- ------------------- 1 | Tx_Rx False 2 | Tx_Rx False 3 | Tx_Rx False .....
Информация о настройках LLDP на интерфейсе, в том числе какие TLV отправляются (на коммутаторе с поддержкой LLDP-MED):
sw5400(config)# show lldp config a5 LLDP Port Configuration Detail Port : A5 AdminStatus [Tx_Rx] : Tx_Rx NotificationEnabled [False] : False Med Topology Trap Enabled [False] : False TLVS Advertised: * port_descr * system_name * system_descr * system_cap * capabilities * network_policy * location_id * poe * macphy_config IpAddress Advertised:
Информация о настройках LLDP на интерфейсе, в том числе какие TLV отправляются (на коммутаторе без поддержки LLDP-MED):
sw4(config)# show lldp config 24 LLDP Port Configuration Detail Port : 24 AdminStatus [Tx_Rx] : Tx_Rx NotificationEnabled [False] : False TLVS Advertised: * port_descr * system_name * system_descr * system_cap IpAddress Advertised:
[править] Статистика LLDP
Статистика LLDP (на 23 интерфейсе сейчас соседа нет, но статистика о пакетах осталась):
sw4# show lldp stats LLDP Device Statistics Neighbor Entries List Last Updated : 2 days New Neighbor Entries Count : 4 Neighbor Entries Deleted Count : 1 Neighbor Entries Dropped Count : 0 Neighbor Entries AgeOut Count : 1 LLDP Port Statistics Port | NumFramesRecvd NumFramesSent NumFramesDiscarded ----- + -------------- ------------- ------------------ 1 | 8071 8034 0 2 | 0 0 0 3 | 0 0 0 4 | 0 0 0 5 | 0 0 0 6 | 0 0 0 7 | 8071 8034 0 8 | 0 0 0 .......... 23 | 5687 5659 0 24 | 8077 8036 0 25 | 0 0 0
Информация о статистике на конкретном интерфейсе:
sw4(config)# show lldp stats 23 LLDP Port Statistics Detail PortName : 23 Frames Discarded : 0 Frames Invalid : 0 Frames Received : 5687 Frames Sent : 5659 TLVs Unrecognized : 0 TLVs Discarded : 0 Neighbor Ageouts : 1
[править] LLDP в Linux
Вообще, lldpd поддерживает не только LLDP, но также и CDP, EDP, SONMP и AgentX SNMP.
Активация соответствующих протоколов выполняется ключами:
- -x — AgentX SNMP
 - -s — SONMP
 - -c — CDP
 - -f — FDP
 - -e — EDP
 
Установка lldpd осуществляется принятым в дистрибутиве способом:
%# apt-get install lldpd
Ключи демону в Debian передаются через /etc/default/lldpd:
DAEMON_ARGS="-x -c -s -e"
Запуск демона осуществляется командой:
%# /etc/init.d/lldpd start
Просмотреть информацию о LLDP-соседях:
$ sudo lldpctl
-------------------------------------------------------------------------------
    LLDP neighbors
-------------------------------------------------------------------------------
Interface: eth3
 ChassisID: 00:15:60:79:8e:c0 (MAC)
 SysName:   mossy
 SysDescr:  
   ProCurve J4906A Switch 3400cl-48G, revision M.10.06, ROM I.08.11 (/sw/code/build/makf(ts_08_5))
 MgmtIP:    192.168.18.1
 Caps:      Bridge(E) Router(E) 
 PortID:    1 (local)
 PortDescr: 1
-------------------------------------------------------------------------------
На коммутаторе Linux-машина при этом видна так:
# sh lldp i r LLDP Remote Devices Information LocalPort | ChassisId PortId PortDescr SysName --------- + ------------------------- ------ --------- ---------------------- 1 | 00 04 75 82 53 43 00 ... eth3 xnt1 ...
Виден её MAC-адрес, имя хоста, а также интерфейс, которым хост подключен к коммутатору.
Среди расширенных сведений можно увидеть версию ядра и IP-адрес системы.
# sh lldp i r 1
 LLDP Remote Device Information Detail
  Local Port   : 1
  ChassisType  : mac-address
  ChassisId    : 00 04 75 82 53 43
  PortType     : mac-address
  PortId       : 00 04 75 82 53 43
  SysName      : xnt1
  System Descr : Linux 2.6.18-6-xen-686 #1 SMP Sun Feb 10 22:43:13 UTC 200...
  PortDescr    : eth3
  System Capabilities Supported  : bridge, wlan-access-point, router
  System Capabilities Enabled    : bridge
  Remote Management Address
     Type    : ipv4
     Address : 192.168.18.3
[править] LLDP в FreeBSD
Поддержка LLDP в FreeBSD осуществляется при помощи программы openlldp, доступной в виде порта. Демон openlldpd отправляет по указанному ему сетевому интерфейсу информацию о системе, пользуясь протоколом LLDP.
lldpd 0.3
(c) Copyright 2002 - 2006 The OpenLLDP Group
Dual licensed under the GPL and Other/Proprietary licenses.
This product borrows some code from the Open1X project. (http://www.open1x.org)
Usage: lldpd [-c config file] [-i device] [-d debug_level] [-f] [-s] 
-c <path> : Use the config file <path> instead of the default.
-i <interface> : Use <interface> for LLDP transactions
-d <debug_level/flags> : Set debug verbosity.
-f : Run in forground mode.
-s : Remove the existing control socket if found.  (Should only be used in system init scripts!)
 <debug_level> can be any of : 
        A : Enable ALL debug flags.
        c : Enable CONFIG debug flag.
        s : Enable STATE debug flag.
        t : Enable TLV debug flag.
        i : Enable INT debug flag.
        n : Enable SNMP debug flag.
        x : Enable EXCESSIVE debug flag.
Домашний сайт проекта: OpenLLDP (англ.)
[править] LLDP в Windows
Для того чтобы хосты Windows также могли использовать LLDP, необходимо установить LLDP-агент. Например, haneWIN LLDP Agent. Этот агент платный, однако в течении 30дневного периода его можно потестировать бесплатно.
Теперь хост по LLDP получил информацию о коммутаторе, к которому он подключен:
Более подробная информация о коммутаторе:
На коммутаторе Windows-машины с установленным LLDP-агентом видны так:
switch# show lldp info remote-device LLDP Remote Devices Information LocalPort | ChassisId PortId PortDescr SysName --------- + ------------------------- ------ --------- ---------------------- 25 | gMTcheha 00 ... Attans... PC1 27 | Q78hheha 00 ... Attans... PC2 29 | qD89heha 00 ... Attans... PC3
Более подробная информация:
switch# show lldp info remote-device 25
 LLDP Remote Device Information Detail
  Local Port   : 25
  ChassisType  : local               
  ChassisId    : gMTcheha                 
  PortType     : mac-address
  PortId       : 00 1b fc 7d bb 1e        
  SysName      : PC1                           
  System Descr : x86 Family 6 Model 15 Stepping 11, GenuineIntel - Windows...
  PortDescr    : Attansic L1 Gigabit Ethernet 10/100/1000Base-T Controller   
  System Capabilities Supported  : station-only
  System Capabilities Enabled    : station-only
  Remote Management Address
     Type    : ipv4
     Address : 192.168.25.1
[править] Сбор информации об устройствах
[править] Написание скриптов для сбора информации об устройствах
Информацию о множестве устройств, обменивающихся информацией по LLDP, можно собрать и представить в виде карты сети.
Вот пример простого скрипта, который обходит коммутаторы по SSH, узнает у них информацию о соседях, полученную по LLDP, и на её основе генерирует описание представления сети в виде graphviz-файла, который после дальнейшей обработки превращается в графическую схему:
#!/usr/bin/perl
# lldp2dot
# igor chubin, 2009
# Thanks to Natasha Samoylenko for the network
@switches=qw/1 2 3 4 5 6 7 8 9/;
@switches=map{ 'user@192.168.25.10'.$_ } @switches;
$PASSWORD='user';
$trigger=0;
=cut
# sh lldp i r
  LocalPort | ChassisId                 PortId PortDescr SysName               
  --------- + ------------------------- ------ --------- ----------------------
  1         | 00 15 60 7a 58 80         1      1         VIRTUAL               
  7         | 00 15 60 7a 58 80         3      3         VIRTUAL               
  23        | 00 16 b9 10 60 00         1      1         sw3                   
  24        | 00 21 f7 62 6b 00         5      A5        sw4                   
# sh lldp i l
 LLDP Local Device Information
  Chassis Type : mac-address
  Chassis Id   : 00 16 35 b2 16 00
  System Name  : sw1
  System Description : ProCurve J4905A Switch 3400cl-24G, revision M.10.68,...
  System Capabilities Supported:bridge, router
  System Capabilities Enabled:bridge
  Management Address  :
     Type:ipv4
     Address:192.168.25.101
=cut
print "graph G {\nedge[len=2];\n";
for $SWITCH (@switches) {
#print $SWITCH;
$command="(sleep 2; echo ${PASSWORD}; sleep 2; echo; echo sh lldp i r;".
         " sleep 2; echo sh lldp i l; sleep 4; echo exit; sleep 2; echo exit; sleep 2; echo y)";
$result = '';
$lldp_i_r='';
@graphviz=();
if (open(SOCAT, "$command | socat - EXEC:'ssh ${SWITCH}',setsid,pty,ctty 2>&1 |")) {
	while(<SOCAT>) {
		#print $_;
		if (m/LocalPort/) {
			$trigger=1;
		}
		if ($trigger) {
			if ($trigger==1) { $lldp_i_r.=$_; }
			$result .= $_;
			if (m/LLDP Port Information/) {
				$trigger = 0;
			}
			if (m/^\s*$/) {
				$trigger=2;
			}
		}
	}
	close(SOCAT);
}
$result =~ m/System Name\s*:\s*(\S*)/;
$node=$1;
@lines = split /\n/, $lldp_i_r;
splice(@lines,0,2);
for $line (@lines){
	@fields = split /\s+/, $line;
    if (substr($line,57,10) !~ /^\s*$/) {
        my $head = substr($line,47,10); #$fields[10];
        $_=$head; s/\s*$//; s/^\s*//; s/[.]//g; $head=$_;
        my $tail = substr($line,2,10); #$fields[1];
        $_=$tail; s/\s*$//; s/^\s*//; s/[.]//g; $tail=$_;
        my $node2 = substr($line,57,20); #$fields[11];
        $node2 =~ s/\s*$//; $node2 =~ s/^\s*//; $node2 =~ s/[_.]//;
        $node =~ s/\s*$//; $node =~ s/^\s*//; $node =~ s/[_.]//;
        if (not $known{"$node $node2 $head $tail"}) {
            $known{"$node2 $node $tail $head"}="yes";
            push @graphviz, " $node -- ".$node2."[headlabel=$head,taillabel=$tail];";
        }
    }
}
#print $node, "\n", join("\n", @lines);
print "\n", join("\n", @graphviz);
}
print "};"
Использование:
%$ lldp2dot > /tmp/network.dot %$ neato -Tpng -o /tmp/lldp2dot.png /tmp/network.dot
В результате получаем схему соединения:
Вручную разобраться в хитросплетениях патчкордов было бы значительно сложнее.
[править] Программы для сбора информации об устройствах
Программа wiremaps пользуясь информацией, которую она может получить через протоколы LLDP, EDP, CDP и SONMP, а также из таблиц FDB и ARP, составляет описание сети и предоставляет его пользователю.
Подробнее о программе:
Нечто похожее делает программа NetDisco. Эта информация доступна через web-интерфейс.
Программа NeDi (Network Discovery and Inventory) собирает информацию с управляемых сетевых устройств и ведет учет и статистику как самих устройств, так и абонентских нод. Использует LLDP, CDP и ARP таблицы для построения наглядной топологии в растровом и векторном виде, а также для автоматического поиска новый управлемых устройств.
Подробнее о программе:
[править] LLDP-MED
Link Layer Discovery Protocol-Media Endpoint Discovery (LLDP-MED) — расширение стандарта LLDP, которое позволяет:
- Автоматически обнаруживать сетевые политики (VLAN, 802.1p, DSCP),
 - Использовать более расширенное и автоматическое управление питанием на PoE хостах,
 - Отслеживать местоположения устройств и топологию, в том числе таких устройств как IP-телефоны,
 - Выполнять инвентаризацию устройств в сети и определение их характеристик
 - Отслеживать перемещения устройств и отправлять SNMP-сообщения на соответствующий управляющий хост.
 
Описан в стандарте ANSI/TIA-1057.
LLDP-MED определяет такие TIA Organizationally Specific TLV:
- LLDP-MED Capabilities TLV (OUI = 00-12-BB, Subtype = 1)
 - Network Policy TLV (OUI = 00-12-BB, Subtype = 2)
 - Location Identification TLV (OUI = 00-12-BB, Subtype = 3)
 - Extended Power-via-MDI TLV (OUI = 00-12-BB, Subtype = 4)
 - Inventory - Hardware Revision TLV (OUI = 00-12-BB, Subtype = 5)
 - Inventory - Firmware Revision TLV (OUI = 00-12-BB, Subtype = 6)
 - Inventory - Software Revision TLV (OUI = 00-12-BB, Subtype = 7)
 - Inventory - Serial Number TLV (OUI = 00-12-BB, Subtype = 8)
 - Inventory - Manufacturer Name TLV (OUI = 00-12-BB, Subtype = 9)
 - Inventory - Model Name TLV (OUI = 00-12-BB, Subtype = 10)
 - Inventory - Asset ID TLV (OUI = 00-12-BB, Subtype = 11)
 
[править] Классы устройств в LLDP-MED
Устройства которые поддерживают LLDP-MED разбиты на три класса:
- Class 1 (generic endpoint devices): Эти устройства поддерживают базовые возможности обнаружения по LLDP, анонсирование сетевых политик (VLAN ID, приоритеты 802.1p и DSCP), управление PoE. Этот класс включает такие устройства как IP call controllers и communication-related сервера.
 - Class 2 (media endpoint devices): Эти устройства поддерживают все возможности первого класса, плюс возможности media streaming. Это такие устройства как voice/media gateways, conference bridges, и media servers.
 - Class 3 (communication devices): Эти устройства поддерживают все возможности первого и второго классов, плюс идентификацию местоположения, emergency 911 capability, поддержку коммутатора 2го уровня, управление информацией об устройстве. Как правило это IP телефоны или софт-телефоны.
 
[править] Настройка LLDP-MED на коммутаторах ProCurve
[править] Создание voice VLAN
Для того чтобы LLDP-MED анонсировал в TLV информацию о VLAN, должен быть создан voice VLAN и порт, на котором находится IP-телефон должен быть тегированным в этом VLAN.
Создание voice VLAN:
ProCurve(config)# vlan 10 voice
Просмотр информации о VLAN (метка voice выставлена у VLAN 10):
ProCurve(config)# sh vlans Status and Counters - VLAN Information Maximum VLANs to support : 256 Primary VLAN : DEFAULT_VLAN Management VLAN : VLAN ID Name | Status Voice Jumbo ------- -------------------- + ---------- ----- ----- 1 DEFAULT_VLAN | Port-based No No 10 VLAN10 | Port-based Yes No
[править] Обязательные TLV
Для работы LLDP-MED на коммутаторе обязательно должны быть включены такие TVL (они включены по умолчанию):
- capabilities — позволяет коммутатору определить тип подключенного устройства и какие TLV устройство поддерживает;
 - network_policy — используется для информирования устройства о номере VLAN (VLAN ID) и настройках QoS, которые ему присвоены. Подключенное устройство использует эту информацию для того чтобы настроить себя для работы в соответствующем VLAN. Если порт принадлежит нескольким voice VLAN, то коммутатор поместит в TLV VLAN с наименьшим VLAN ID.
 - location_id — анонсирует настроенную информацию о местоположении устройства;
 - poe — коммутатор использует это TLV для того чтобы анонсировать возможности и настройки приоритета PoE для порта. Подключенное устройство использует аналогичное TLV для того чтобы сообщить свои требования к PoE.
 - macphy_config — коммутатор и подключенное устройство используют это TLV для того чтобы договариваться о скорости и режиме дуплекса. Поддерживается и в LLDP, но является обязательным только для LLDP-MED.
 
Информация о TLV на интерфейсе:
ProCurve(config)# show lldp config a5 LLDP Port Configuration Detail Port : A5 AdminStatus [Tx_Rx] : Tx_Rx NotificationEnabled [False] : False Med Topology Trap Enabled [False] : False TLVS Advertised: * port_descr * system_name * system_descr * system_cap * capabilities * network_policy * location_id * poe * macphy_config IpAddress Advertised:
Если какие-либо из LLDP-MED TLV были отключены на интерфейсе, то можно их включить с помощью команды:
ProCurve(config)# lldp config <port-id> medTlvEnable <capabilities | network_policy | location_id | poe>
TLV macphy_config включается так:
ProCurve(config)# lldp config <port-id> dot3TlvEnable macphy_config
[править] Управление PoE с помощью LLDP-MED
Включение/отключение возможности контроля и выделения PoE с помощью LLDP-MED (по умолчанию отключено):
ProCurve(config)# int <port-list> poe-lldp-detect [enabled | disabled]
Включить обнаружение PoE с помощью LLDP TLV advertisement:
ProCurve(config)# lldp config <port-number> medTlvenable poe
[править] Другие протоколы обнаружения
Существуют аналогичные LLDP проприетарные протоколы обнаружения (discovery protocols):
- Cisco Discovery Protocol;
 - Extreme Discovery Protocol;
 - Nortel Discovery Protocol;
 - ZTE Discovery Protocol (+ ZTP ZTE topology collect protocol).
 
[править] Дополнительная информация
- LLDP-MED и CDP (англ.) — Сравнение LLDP-MED и CDP на сайте Cisco.
 - LLDP tutorial (англ.) — Описание протокола LLDP и вариантов его использования.
 
| ProCurve | ||
|---|---|---|
| Основы | ProCurve Adaptive Edge | ProCurve ProActive Defense | ProCurve Network Access Control | ProCurve Wireless | |
| Программы | ProCurve Manager | ProCurve Identity Driven Manager | ProCurve Network Immunity Manager | ProCurve Mobility Manager | |
| Устройства | ProCurve Switch | ProCurve Router | ProCurve ONE Module | ProCurve TMS Module | ProCurve NAC 800 | ProCurve Access Point | ProCurve WESM | |
| Настройка | ||
| Безопасность | ProCurve Security | Доступ к коммутатору ProCurve | DHCP snooping | Dynamic ARP Protection | IP Source Guard | Port security | Аутентификация при доступе к сети | 802.1X в ProCurve | Web-аутентификация в ProCurve | MAC-аутентификация в ProCurve | |
| Канальный уровень | CDP | LLDP | VLAN в ProCurve | GVRP | STP в ProCurve | ProCurve Mesh | Агрегирование каналов | Зеркалирование трафика | QinQ | |
| Сетевой уровень | RIP в ProCurve | OSPF в ProCurve | VRRP в ProCurve | XRRP в ProCurve | QoS в ProCurve | Multicast в ProCurve | PIM в ProCurve | |
| Разное | Опция 82 DHCP | SNMP в ProCurve | |