2012/01/28

Red Hat 6系でLLDPを使う・その2

前回の補足。 「lldptool set-tlv」 コマンドの「-V」オプションで指定できる項目にはどう言うものがあるだろう?調べてみよう。
[root@sl01 ~]# lldptool -h
Usage:
  lldptool  [options] [arg]   general command line usage format
  lldptool                             go into interactive mode
            [options] [arg]   general interactive command format

Options:
  -i [ifname]                          network interface
  -V [tlvid]                           TLV identifier
                                       may be numeric or keyword (see below)
  -n                                   "neighbor" option for command
  -a                                   "add" option for command
  -d                                   "remove" option for command
  -r                                   show raw message
  -R                                   show only raw messages

Commands:
  license                              show license information
  -h|help                              show command usage information
  -v|version                           show version
  -q|quit                              exit lldptool (interactive mode)
  -S|stats                             get LLDP statistics for ifname
  -t|get-tlv                           get TLVs from ifname
  -T|set-tlv                           set arg for tlvid to value
  -l|get-lldp                          get the LLDP parameters for ifname
  -L|set-lldp                          set the LLDP parameter for ifname

TLV identifiers:
   chassisID    : Chassis ID TLV
   portID       : Port ID TLV
   TTL          : Time to Live TLV
   portDesc     : Port Description TLV
   sysName      : System Name TLV
   sysDesc      : System Description TLV
   sysCap       : System Capabilities TLV
   mngAddr      : Management Address TLV
   macPhyCfg    : MAC/PHY Configuration Status TLV
   powerMdi     : Power via MDI TLV
   linkAgg      : Link Aggregation TLV
   MTU          : Maximum Frame Size TLV
   LLDP-MED     : LLDP-MED Settings
   medCap       : LLDP-MED Capabilities TLV
   medPolicy    : LLDP-MED Network Policy TLV
   medLoc       : LLDP-MED Location TLV
   medPower     : LLDP-MED Extended Power-via-MDI TLV
   medHwRev     : LLDP-MED Hardware Revision TLV
   medFwRev     : LLDP-MED Firmware Revision TLV
   medSwRev     : LLDP-MED Software Revision TLV
   medSerNum    : LLDP-MED Serial Number TLV
   medManuf     : LLDP-MED Manufacturer Name TLV
   medModel     : LLDP-MED Model Name TLV
   medAssetID   : LLDP-MED Asset ID TLV
   DCBXv1       : PRE-CEE DCBX TLV
   DCBX         : CEE DCBX TLV
   evbCfg       : EVB Configuration TLV
   vdp          : VDP protocol configuration
[root@sl01 ~]# 
サービスlldpadの設定ファイルは、/var/lib/lldpad/lldpad.conf。この設定ファイルは、lldpadデーモン起動時に存在していなければ、デーモンが自動的に作成する。
[root@sl01 ~]# service lldpad stop
Shutting down lldpad: [done]                               [  OK  ]
[root@sl01 ~]# rm /var/lib/lldpad/lldpad.conf
rm: remove 通常ファイル `/var/lib/lldpad/lldpad.conf'? y
[root@sl01 ~]# ls -l /var/lib/lldpad/lldpad.conf
ls: cannot access /var/lib/lldpad/lldpad.conf: そのようなファイルやディレクトリ はありません
[root@sl01 ~]# service lldpad start
Starting lldpad: [done]                                    [  OK  ]
[root@sl01 ~]# ls -l /var/lib/lldpad/lldpad.conf
-rw-------. 1 root root 213  1月 28 11:02 2012 /var/lib/lldpad/lldpad.conf
[root@sl01 ~]#
中身はテキストファイルだ。
[root@sl01 ~]# cat /var/lib/lldpad/lldpad.conf
dcbx :
{
  version = "1.0";
  dcbx_version = 2;
};
lldp :
{
  em1 :
  {
    tlvid00000001 :
    {
      info = "04D4AE52724ADD";
    };
    tlvid00000002 :
    {
      info = "03D4AE52724ADD";
    };
  };
};
[root@sl01 ~]#
デーモン起動時にリンクアップしているインターフェースに関する定義が自動的に追加されている。 この設定ファイルは、前回までに見たとおり、lldptool(8)コマンドを使い間接的に編集するが、手で編集できないわけでもない。
[root@sl01 ~]# service lldpad stop
Shutting down lldpad: [done]                               [  OK  ]
[root@sl01 ~]# rm /var/lib/lldpad/lldpad.conf
rm: remove 通常ファイル `/var/lib/lldpad/lldpad.conf'? y
[root@sl01 ~]# cp lldpad.conf /var/lib/lldpad/
[root@sl01 ~]# cat /var/lib/lldpad/lldpad.conf
dcbx :
{
  version = "1.0";
  dcbx_version = 2;
};
lldp :
{
  common :
  {
    adminStatus = 3;
    tlvid00000005 :
    {
      enableTx = true;
    };
    tlvid00000006 :
    {
      enableTx = true;
    };
    tlvid00000004 :
    {
      enableTx = true;
    };
    tlvid00000007 :
    {
      enableTx = true;
    };
    tlvid00120f01 :
    {
      enableTx = true;
    };
    tlvid00120f03 :
    {
      enableTx = true;
    };
    tlvid00120f04 :
    {
      enableTx = true;
    };
    tlvid00000008 :
    {
      enableTx = true;
    };
  };
};
[root@sl01 ~]#
この状態でデーモンを起動すると、期待通りLLDPの送受信が有効となっている。
[root@sl01 ~]# service lldpad start
Starting lldpad: [done]                                    [  OK  ]
[root@sl01 ~]# lldptool get-tlv -i em1
Chassis ID TLV
        MAC: d4:ae:52:72:4a:dd
Port ID TLV
        MAC: d4:ae:52:72:4a:dd
Time to Live TLV
        120
Port Description TLV
        Interface   4 as em1
System Name TLV
        sl01.mynetwork.local
System Description TLV
        Linux sl01.mynetwork.local 2.6.32-220.2.1.el6.x86_64 #1 SMP Thu Dec 22 11:15:52 CST 2011 x86_64
System Capabilities TLV
        System capabilities:  Station Only
        Enabled capabilities: Station Only
Management Address TLV
        IPv6: f246:4000::
        Ifindex: 4
MAC/PHY Configuration Status TLV
        Auto-negotiation supported and enabled
        PMD auto-negotiation capabilities: 0x8037
        MAU type: 1000 BaseTFD
Link Aggregation TLV
        Aggregation not capable
        Currently not aggregated
        Aggregated Port ID: 0
Maximum Frame Size TLV
        1522
End of LLDPDU TLV
[root@sl01 ~]#
ただし、デーモン起動時にリンクアップしていたインターフェースの設定が自動的に追加されている。
[root@sl01 ~]# diff lldpad.conf /var/lib/lldpad/lldpad.conf
43a44,58
>   em1 :
>   {
>     tlvid00000001 :
>     {
>       info = "04D4AE52724ADD";
>     };
>     tlvid00000002 :
>     {
>       info = "03D4AE52724ADD";
>     };
>     tlvid00000008 :
>     {
>       ipv6 = "f246:4000::";
>     };
>   };
[root@sl01 ~]#
Red Hat 6系でLLDPを使う・その1
Red Hat 6系でLLDPを使う・その2

Red Hat 6系でLLDPを使う・その1

Red Hat Enterprise Linux 6 (RHEL6)およびその互換ディストリビューションでは、LLDPがサポートされている。今回の記事では、これを使ってみる。

LLDP (Link Layer Discovery Protocol)は、ネットワークインターフェースに直接接続されている対向機器が何かを知ることができる仕組み。Cisco製品を使ったことがあれば、CDPのオープン規格版だと思えば理解しやすいだろう。例えば、次のように使う。
[root@sl01 ~]# lldptool get-tlv -i em1 -n
Chassis ID TLV
        MAC: 08:2e:5f:85:7f:eb
Port ID TLV
        Local: 3
Time to Live TLV
        120
Port Description TLV
        3
System Name TLV
        ProCurve Switch 2510G-48
System Description TLV
        ProCurve J9280A Switch 2510G-48, revision Y.11.12, ROM N.10.02 (/sw/code/build/cod(cod11))
System Capabilities TLV
        System capabilities:  Bridge
        Enabled capabilities: Bridge
Management Address TLV
        IPv4: 172.18.0.245
        Ifindex: 0
End of LLDPDU TLV
[root@sl01 ~]#
出力結果を見ると、自身sl01のインターフェースem1の対向機器は、ProCurve Switch 2510G-48であって、そのポート3と接続されていることがわかる。その他、様々な情報を得ることができる。ただし、CDPとは違い、LLDPは、ネットワーク機器側、サーバ側双方ともデフォルトでは有効ではない。従って、有効にするための設定が必要。

まずは、サーバ側の設定を見てみよう。ネットワーク機器側は既に設定されているものとする。以下は、RHEL6.1と互換のScientific Linux 6.1で検証した。
RHEL系でLLDP機能を担うのは、lldpadというパッケージ。まず、これをインストールする。
[root@sl01 ~]# yum install -y lldpad
Loaded plugins: refresh-packagekit
sl                                                       | 1.9 kB     00:00
sl-security                                              | 1.9 kB     00:00
Setting up Install Process
Resolving Dependencies
<<略>> 

Running Transaction
Warning: RPMDB altered outside of yum.
  Installing : libconfig-1.3.2-1.1.el6.x86_64                               1/2
  Installing : lldpad-0.9.41-4.el6.x86_64                                   2/2

Installed:
  lldpad.x86_64 0:0.9.41-4.el6

Dependency Installed:
  libconfig.x86_64 0:1.3.2-1.1.el6

Complete!
[root@sl01 ~]#
インストールすると、lldpadというサービスが追加される。サービスが起動していない状態では、設定できない。インストール直後は、サービスが起動されていないため、起動する。
[root@sl01 ~]# chkconfig --list lldpad
lldpad          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@sl01 ~]# service lldpad start
Starting lldpad: [done]                                    [  OK  ]
[root@sl01 ~]#
LLDPフレームを送受信するよう設定する。設定後、サービスを再起動しないと反映されないので注意する。
[root@sl01 ~]# lldptool set-lldp adminStatus=rxtx
[root@sl01 ~]# service lldpad restart
Checking for service lldpad: running
Shutting down lldpad: [done]                               [  OK  ]
Starting lldpad: [done]                                    [  OK  ]
[root@sl01 ~]#
タイミングによるが、まず最初にLLDPフレームをいくつか送信した後、ネットワーク機器側からのLLDPフレームが届く。これは、以下の様に確認することができる。
[root@sl01 ~]# lldptool stats -i em1
Total Frames Transmitted        = 5
Total Discarded Frames Received = 0
Total Error Frames Received     = 0
Total Frames Received           = 0
Total Discarded TLVs            = 0
Total Unrecognized TLVs         = 0
Total Ageouts                   = 0
[root@sl01 ~]# lldptool stats -i em1
Total Frames Transmitted        = 5
Total Discarded Frames Received = 0
Total Error Frames Received     = 0
Total Frames Received           = 2
Total Discarded TLVs            = 0
Total Unrecognized TLVs         = 0
Total Ageouts                   = 0
[root@sl01 ~]#
一回目の実行では、送信済フレームが5、受信済フレームが0だが、二回目は、受信フレームが2になっていることが解る。この状態になると、対向機器の情報を得ることができる。
[root@sl01 ~]# lldptool get-tlv -i em1 -n
Chassis ID TLV
        MAC: 08:2e:5f:85:7f:eb
Port ID TLV
        Local: 3
Time to Live TLV
        120
Port Description TLV
        3
System Name TLV
        ProCurve Switch 2510G-48
System Description TLV
        ProCurve J9280A Switch 2510G-48, revision Y.11.12, ROM N.10.02 (/sw/code/build/cod(cod11))
System Capabilities TLV
        System capabilities:  Bridge
        Enabled capabilities: Bridge
Management Address TLV
        IPv4: 172.18.0.245
        Ifindex: 0
End of LLDPDU TLV
[root@sl01 ~]#
一方、この状態ではサーバ側からはどう言う情報が送信されているのだろう。サーバ側から確認する。
[root@sl01 ~]# lldptool get-tlv -i em1
Chassis ID TLV
        MAC: d4:ae:52:72:4a:dd
Port ID TLV
        MAC: d4:ae:52:72:4a:dd
Time to Live TLV
        120
End of LLDPDU TLV
[root@sl01 ~]#
シャーシID(Chassis ID)およびポートID(Port ID)としてMACアドレスが、TTLとして120[秒]が送信される設定になっている。
ネットワーク機器側で確認する。
ProCurve Switch 2510G-48# show lldp info remote-device 3

 LLDP Remote Device Information Detail

  Local Port   : 3
  ChassisType  : mac-address
  ChassisId    : d4 ae 52 72 4a dd
  PortType     : mac-address
  PortId       : d4 ae 52 72 4a dd
  SysName      :
  System Descr :
  PortDescr    :

  System Capabilities Supported  :
  System Capabilities Enabled    :

  Remote Management Address


ProCurve Switch 2510G-48#
それらの情報がネットワーク機器側に認識されていることが判る。

さらに、ホスト名が送信される様設定してみよう。設定後は再起動が必要。
[root@sl01 ~]# lldptool set-tlv -V sysName enableTx=yes
[root@sl01 ~]# service lldpad restart
Checking for service lldpad: running
Shutting down lldpad: [done]                               [  OK  ]
Starting lldpad: [done]                                    [  OK  ]
[root@sl01 ~]#
ネットワーク機器側で確認する。
ProCurve Switch 2510G-48# show lldp info remote-device 3

 LLDP Remote Device Information Detail

  Local Port   : 3
  ChassisType  : mac-address
  ChassisId    : d4 ae 52 72 4a dd
  PortType     : mac-address
  PortId       : d4 ae 52 72 4a dd
  SysName      : sl01.mynetwork.local
  System Descr :
  PortDescr    :

  System Capabilities Supported  :
  System Capabilities Enabled    :

  Remote Management Address


ProCurve Switch 2510G-48#
ホスト名が認識されている。
他の情報も有効にしてみよう。
[root@sl01 ~]# lldptool set-tlv -V sysDesc enableTx=yes
[root@sl01 ~]# lldptool set-tlv -V portDesc enableTx=yes
Checking for service lldpad: running
Shutting down lldpad: [done]                               [  OK  ]
Starting lldpad: [done]                                    [  OK  ]
[root@sl01 ~]#
確認。
ProCurve Switch 2510G-48# show lldp info remote-device 3

 LLDP Remote Device Information Detail

  Local Port   : 3
  ChassisType  : mac-address
  ChassisId    : d4 ae 52 72 4a dd
  PortType     : mac-address
  PortId       : d4 ae 52 72 4a dd
  SysName      : sl01.mynetwork.local
  System Descr : Linux sl01.mynetwork.local 2.6.32-220.2.1.el6.x86_64 #1 S...
  PortDescr    : Interface   4 as em1

  System Capabilities Supported  :
  System Capabilities Enabled    :

  Remote Management Address


ProCurve Switch 2510G-48#
システム詳細(System Descr)にカーネルのバージョンが表示されている。セキュリティ的には表示しない方がいいかもしれない。

Red Hat 6系でLLDPを使う・その1
Red Hat 6系でLLDPを使う・その2