web-dev-qa-db-ja.com

自動ネゴシエーションを無効にして特定のイーサネット設定を強制するにはどうすればよいですか?

現在何百マイルも離れたデータセンターにあるDell r710(Debian GNU/Linux 6.0を実行)があり、イーサネットカードが10baseT半二重でスタックしています。 10baseTでも大丈夫ですが、全二重にしたいです。

問題のカードはBroadcom BCM5709です。

areion:~# lspci |grep Ethernet
01:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
01:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)
02:00.1 Ethernet controller: Broadcom Corporation NetXtreme II BCM5709 Gigabit Ethernet (rev 20)

bnx2ドライバー/ファームウェアの使用:

areion:~# apt-cache policy firmware-bnx2
firmware-bnx2:
  Installed: 0.28
  Candidate: 0.28
  Version table:
 *** 0.28 0
        500 http://ftp.us.debian.org/debian/ squeeze/non-free AMD64 Packages
        100 /var/lib/dpkg/status

そして、squeezeのストックカーネルを実行します。

areion:~# uname -a
Linux areion 2.6.32-5-AMD64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64 GNU/Linux

イーサネット設定を変更してみました:

ethtool -s eth0 speed 10 duplex full autoneg off

しかし、その後すべての接続が失われ、サーバーに再接続するためにサーバーを再起動する必要があります。常にサーバーを再起動する必要がなくなり、ethtoolコマンドがハングしているかどうかを確認するために、次のスクリプトの使用に切り替えました。

#!/bin/bash

ethtool -s eth0 speed 10 duplex full autoneg off 2>&1 > ethtool.log &

sleep 10
if [ $(jobs -r |wc -l) -gt 0 ]; then
   kill %1 || kill -9 %1
else
  echo '-----------' >> ethtool.log
  ethtool eth0 >> ethtool.log
fi
dmesg |tail > dmesg-recent.log

ethtool -s eth0 autoneg on

これにより、コマンドを実行した後にインターフェースのステータスを確認できます。

Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
                                1000baseT/Full 
        Supports auto-negotiation: Yes
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Speed: Unknown!
        Duplex: Unknown! (255)
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: off
        MDI-X: Unknown
        Supports Wake-on: g
        Wake-on: d
        Link detected: no

Dmesgから:

[  442.865157] bnx2: eth0 NIC Copper Link is Down

自動ネゴシエーションが失敗しているか、私が接続されているスイッチが10Mビット/半二重をアドバタイズしているようです。スイッチが10M全二重で動作していると聞いています。

これは、ドライバーの問題、ハードウェアの問題、ケーブルの問題、スイッチの問題でしょうか?問題の原因を特定するため、または少なくとも可能性を排除するためにリモートでできることはありますか?

更新

自動ネゴシエーションをオフにして、オプションを10/HD、10/FD、100/HD、100/FDなど(自動ネゴシエーションされた10/HD以外のもの)に設定すると、NO-CARRIERが発生し、ip link show dev eth0から報告されます。自動ネゴシエーションをオンのままにし、10/HD以外のものをアドバタイズする場合も同様です。これがスイッチの問題以外の何かである可能性がある方法はありますか?

3
vezult

両端で自動ネゴシエーションを有効にすることをお勧めします。これは、ネットワーキングベンダー(シスコを含む)の現在の推奨事項です。参照: http://www.Cisco.com/en/US/tech/tk389/tk214/technologies_tech_note09186a0080094781.shtml

あなたの問題については、それがリモートエンドでどのように設定されているかを調べる必要があります。自動ネゴシエーションの場合は、サーバーでも自動ネゴシエーションを使用する必要があります。特定の速度とデュプレックスに設定されている場合は、リモートエンドと一致させる必要があります。

ネゴシエーションをオンにして、特定の速度とデュプレックスのネゴシエーションのみを許可することが可能であることを覚えておいてください。また、機能のアドバタイズは設定可能にすることができます。

ネットワークカードが10/HDでネゴシエートした場合、これは通常、リモートエンドでネゴシエーションが無効になっていて、10/FDに設定されていることを意味します。パフォーマンスの低下は、デュプレックスの不一致が原因です。

別のネットワークカードで試してみてください。リンクの検出(キャリアと速度を検出するため)はNICのPHY部分によって行われるため、ドライバーを変更しても役に立ちません。

2

自動ネゴシエーションを無効にすることはお勧めできませんが、それでも決定する場合は、両端で無効にして、両端でまったく同じ速度とデュプレックスを使用するように設定する必要があります。一方の端でのみ自動ネゴシエーションを無効にすると、もう一方の端では10MB/HDが想定されます。イーサネットケーブルのもう一方の端にあるスイッチにアクセスできない場合、またはそのスイッチがそのようなカスタマイズをサポートしていない場合、自動ネゴシエーションを無効にすることはできません。場合によっては、自動ネゴシエーションを有効にしたまま、カードまたはスイッチに低速または半二重をアドバタイズするように指示できます。

0
penguin359

物理的に設定を変更できるサーバーとの間のスイッチのような別のデバイスを置くことができますか?それが役立つかもしれません。

0
Jonathan Ross