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),
  • и др.

[править] Принципы работы

Несколько коммутаторов на которых включен LLDP

Протокол работает только между непосредственно присоединенными устройствами. Это значит, что, например, на рисунке:

  • Коммутатор sw4 получит LLDP-информацию от двух соседей core_sw (через два порта) и sw5400;
  • Коммутатор core_sw получит LLDP-информацию только от sw4 (но через оба порта);
  • Коммутатор sw5400 получит LLDP-информацию только от sw4.

Сообщения LLDP могут передаваться через порты, которые заблокированы STP, но не передаются через порты, которые заблокированы 802.1X.

[править] Формат кадра LLDP

Формат кадра 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 полей:

Формат LLDP Data Unit (LLDPDU)
  • 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

Note-icon.gif

Коммутаторы 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):

LLDP procurve2.jpg

Информация о соседях:

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>

Note-icon.gif

Значение 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.

Note-icon.gif

Значение 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>

Note-icon.gif

Эта команда не позволяет назначить адрес полученный по 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 получил информацию о коммутаторе, к которому он подключен:

HANEWIN info.jpg

Более подробная информация о коммутаторе:

HANEWIN detail.jpg

На коммутаторе 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


В результате получаем схему соединения:

Lldp2dot.png

Вручную разобраться в хитросплетениях патчкордов было бы значительно сложнее.

[править] Программы для сбора информации об устройствах

web-интерфейс программы wiremaps

Программа wiremaps пользуясь информацией, которую она может получить через протоколы LLDP, EDP, CDP и SONMP, а также из таблиц FDB и ARP, составляет описание сети и предоставляет его пользователю.

Подробнее о программе:

Нечто похожее делает программа NetDisco. Эта информация доступна через web-интерфейс.

web-интерфейс программы NeDi

Программа 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):

[править] Дополнительная информация

  • LLDP-MED и CDP (англ.) — Сравнение LLDP-MED и CDP на сайте Cisco.
  • LLDP tutorial (англ.) — Описание протокола LLDP и вариантов его использования.


Источник — «http://xgu.ru/wiki/LLDP»