ネットワークケーブルが適切なNICに接続されていることを確認してください。

ネットワークケーブルが適切なNICに接続されていることを確認してください。

サーバーには複数のネットワークカードがあり、そのうちの1つだけがケーブルで接続されています。

特定のポートethXが接続されているかどうかをテストする方法は?

似たようなものがたくさん見つかりました。質問しかし、それらのどれも私にはethtool適していませんcat /sys/class/net/eth1/carrier

私の場合、ケーブルは実際に接続されていましたが、まだ表示されていますeth2ethtoolLink detected: no

Settings for eth2:
    Supported ports: [ FIBRE ]
    Supported link modes:   10000baseT/Full 
    Supported pause frame use: Symmetric
    Supports auto-negotiation: No
    Advertised link modes:  10000baseT/Full 
    Advertised pause frame use: Symmetric
    Advertised auto-negotiation: No
    Speed: Unknown!
    Duplex: Unknown! (255)
    Port: Direct Attach Copper
    PHYAD: 0
    Transceiver: internal
    Auto-negotiation: off
    Supports Wake-on: d
    Wake-on: d
    Current message level: 0x00000007 (7)
                   drv probe link
    Link detected: no

eth3接続ケーブルはありませんが、ethtool出力はほぼ同じに見えます。

diff <(ethtool eth2) <(ethtool eth3)
1c1
< Settings for eth2:
---
> Settings for eth3:
11c11
<   Port: Direct Attach Copper
---
>   Port: Other

最初にインターフェースを呼び出すと、eth2インターフェースethtoolが表示されますLink detected: yes。その後、インターフェイスを閉じてもethtoolリンクはとして報告されます。yes

簡単に言えば、ethtoolインターフェイスが ifup されるまで最初は動作しないようです。

特定のインターフェイスにケーブルが接続されているかどうかを確実にテストする方法

ベストアンサー1

ソケットに接続されているケーブルの物理状態ではなく、NICのリンク状態を探したいとします。 (見つけることは不可能かもしれません。)

すばやく検索してみると、すでに答えを知っているようです。インターフェイスを開き、リンクがある場合はそれが見つかるのを待ってから(数秒かかることがあります)、およびethtool/carrierまたはoperstateの出力を確認します/sys/class/net/$NIC/

ifconfig somenic upioctl次の2つの呼び出しが行われたようです。

ioctl(4, SIOCGIFFLAGS, {ifr_name="somenic", ifr_flags=IFF_BROADCAST|IFF_MULTICAST}) = 0
ioctl(4, SIOCSIFFLAGS, {ifr_name="somenic", ifr_flags=IFF_UP|IFF_BROADCAST|IFF_RUNNING|IFF_MULTICAST}) = 0

つまり、IFF_UP.basedを基準に設定します。ここ、これは実際にデバイスを初期化する設定です。

次に、このIFF_UPビットを設定して(ソケットI / O制御設定インターフェイスフラグ)を介してインターフェイスを開きます。dev->flagioctl(SIOCSIFFLAGS)

ただし、後者のコマンド(ioctl(SIOCSIFFLAGS))はデバイスのopenメソッドを呼び出します。

実際のコードに関しては、ドライバは文字やブロックドライバと同じことをたくさん行う必要があります。 open は必要なシステムリソースを要求し、インターフェイスに表示するように指示します。

同様の効果のコメントe1000eドライブソース:

/**
 * e1000e_open - Called when a network interface is made active
 * @netdev: network interface device structure
 *
 * Returns 0 on success, negative value on failure
 *                                                                                                                                                                           * The open entry point is called when a network interface is made
 * active by the system (IFF_UP).  At this point all resources needed
 * for transmit and receive operations are allocated, the interrupt
 * handler is registered with the OS, the watchdog timer is started,
 * and the stack is notified that the interface is ready.
 **/
int e1000e_open(struct net_device *netdev)  

これは、存在しないNICのリンク状態を意味的に見つける方法がないことを意味します。戻る、ハードウェアが初期化されていないためです。


もちろん、少なくとも理論的には、一部のドライバは異なる動作をし、誰かがハードウェアを設定する前にハードウェアを初期化することができますが、IFF_UP一般的な場合にはまだ役に立ちません。

Cisco スイッチに接続されたコンピュータでe1000eインターフェイスをシャットダウンすると、スイッチにもリンクがダウンしているとマークされます。

他のコンピュータ(一部のRealtek NICが組み込まれています)では、トップダウンの変更によりリモートスイッチの接続がしばらく切断されましたが、スイッチはリンクを確認して再接続しました。 (ethtoolただし、PC側では「No Link」と表示されます。) これはWake on LANの準備などと関連があるかもしれませんが、よくわかりません。

おすすめ記事