それはそれである可能性があります:
ethtool ethx | grep detected
bond0がOS(Linux)側でまだ構成されていない場合、「リンクが検出されませんでした」と表示されますか?
ethtoolは物理的な状態を示していませんか?
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
ケーブルがソケットに差し込まれている物理的な状態ではなく、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
_を設定する前に、一部のドライバーの動作が異なり、ハードウェアを初期化することは可能ですが、それでも一般的なケースでは役に立ちません。