본드가 구성될 때까지 링크가 감지되지 않을 수 있습니까?

본드가 구성될 때까지 링크가 감지되지 않을 수 있습니까?

다음과 같을 수 있습니다.

ethtool ethx | grep detected

OS(Linux) 측에서 bond0이 아직 구성되지 않은 경우 "링크가 감지되지 않음"이 표시됩니까?

ethtool이 물리적 상태를 표시하지 않습니까?

답변1

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

답변2

나는 당신이 소켓에 케이블이 꽂혀 있는 물리적인 상태가 아니라 NIC의 링크 상태를 찾고 싶다고 가정합니다. (그것은 알아내는 것이 불가능할 수도 있습니다.)

빠르게 검색해 보면 이미 답이 나와 있는 것 같습니다. 인터페이스를 실행하고 링크를 찾을 때까지 기다린 후(몇 초 정도 걸릴 수 있음), ethtool또는 carrier및/또는 operstatein 의 출력을 확인합니다 /sys/class/net/$NIC/.

ifconfig somenic up다음 두 가지 호출을 하는 것 같습니다 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 . 기반여기, 설정에 따라 실제로 장치가 초기화됩니다.

그런 다음 인터페이스를 켜기 위해 (소켓 I/O 제어 설정 인터페이스 플래그)를 통해 IFF_UP비트를 설정합니다 .dev->flagioctl(SIOCSIFFLAGS)

그러나 후자의 명령( ioctl(SIOCSIFFLAGS))은 장치에 대한 open 메소드를 호출합니다.

실제 코드에 관한 한 드라이버는 char 및 블록 드라이버와 동일한 작업을 많이 수행해야 합니다. 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가 아닌 NIC의 링크 상태를 의미 있게 찾을 수 있는 방법이 없음을 의미합니다.위로, 하드웨어가 초기화되지 않기 때문입니다.


물론 일부 드라이버가 다르게 동작하고 누군가가 설정하기 전에 하드웨어를 초기화하는 것은 적어도 이론적으로는 가능 IFF_UP하지만 일반적인 경우에는 여전히 도움이 되지 않습니다.

관련 정보