web-dev-qa-db-ja.com

ボンドが設定されるまでリンクが検出されなかった可能性がありますか?

それはそれである可能性があります:

ethtool ethx | grep detected

bond0がOS(Linux)側でまだ構成されていない場合、「リンクが検出されませんでした」と表示されますか?

ethtoolは物理的な状態を示していませんか?

3
Hessnov

Ethtoolは、物理イーサネットアダプターに対してのみ機能します。これは、bond0、tun0、および物理ネットワークデバイスではないその他のネットワークデバイスがethtoolで機能しないことを意味します。

$ ethtool <eth?>

例えば:

$ ethtool eth0

提供:

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:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000001 (1)
        Link detected: yes
1
Saqib Hashmi

ケーブルがソケットに差し込まれている物理的な状態ではなく、NICのリンク状態を調べたいと思います。 (それを見つけるのは不可能かもしれません。)

簡単に検索すると、すでに答えがあると思います。インターフェイスを起動し、リンクが見つかるのを待ちます(リンクがある場合は数秒かかる場合があります)。次に、ethtool、またはcarrierおよび/またはoperstate in _/sys/class/net/$NIC/_。

_ifconfig somenic up_は次の2つのioctl呼び出しを行っているようです。

_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_を設定します。 here に基づいて、実際にデバイスが初期化される原因となる設定:

次に、ioctl(SIOCSIFFLAGS)(Socket I/O Control Set Interface Flags)を使用して_IFF_UP_の_dev->flag_ビットを設定し、インターフェイスをオンにします。

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

実際のコードに関する限り、ドライバーは、charおよびblockドライバーと同じタスクの多くを実行する必要があります。 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)  
_

これは、NICupではない)のリンク状態を意味のある形で見つける方法がないことを意味します。ハードウェアも初期化されません。


もちろん、少なくとも理論的には、誰かが_IFF_UP_を設定する前に、一部のドライバーの動作が異なり、ハードウェアを初期化することは可能ですが、それでも一般的なケースでは役に立ちません。

1
Saqib Hashmi