해당 NIC에 네트워크 케이블이 연결되어 있는지 확인하세요.

해당 NIC에 네트워크 케이블이 연결되어 있는지 확인하세요.

서버에는 여러 개의 NIC가 있으며 그 중 하나만 케이블이 연결되어 있습니다.

ethX특정 포트가 연결되어 있는지 여부를 어떻게 테스트할 수 있습니까 ?

비슷한거 많이 찾았는데질문, 그러나 나에게는 효과가 ethtool없습니다 .cat /sys/class/net/eth1/carrier

내 경우에는 케이블이 실제로 에 연결되어 있지만 여전히 표시됩니다 eth2.ethtoolLink 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

먼저 인터페이스를 불러오면 eth2ethtool표시됩니다 Link detected: yes. 그 후에는 인터페이스를 다운하더라도 ethtool링크를 로 보고합니다 .yes

간단히 말해서, ethtool인터페이스가 실행되기 전에는 처음에는 작동하지 않는 것 같습니다.

해당 인터페이스에 케이블이 연결되어 있는지 여부를 어떻게 안정적으로 테스트할 수 있습니까??

답변1

나는 당신이 소켓에 케이블이 꽂혀 있는 물리적인 상태가 아니라 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하지만 일반적인 경우에는 여전히 도움이 되지 않습니다.

한 시스템( e1000eCisco 스위치에 연결된)에서 인터페이스를 아래로 당기면 스위치도 링크가 다운되는 것을 볼 수 있습니다.

다른 시스템(일부 Realtek NIC가 내장되어 있음)에서 위에서 아래로 변경하면 원격 스위치의 연결이 잠시 끊어지지만 스위치는 링크를 확인한 다음 다시 활성화됩니다. ( ethtool그러나 PC 측에는 "링크 없음"이 표시됩니다.) 이는 Wake-on-LAN 준비와 관련이 있을 수도 있고 없을 수도 있지만 실제로는 잘 모르겠습니다.

답변2

ifplugstatus패키지에서 명령을 사용해 보세요.ifplugd

$ ifplugstatus net0
net0: unplugged

$ ifplugstatus wlnet0
wlnet0: link beat detected

화면 출력 외에도 명령의 종료 상태를 통해 알 수 있습니다.

(맨페이지에서)

반환 값

  0 Success

  1 Failure

  2 Link beat detected (only available when an interface is specified)

  3 Unplugged (same here)

답변3

ethertools 소스 코드를 살펴봤지만 링크 상태가 설명된 곳을 찾을 수 없습니다.

그런 다음 이것이 SO에 대한 질문과 정확히 중복되는 것으로 나타났습니다.https://stackoverflow.com/questions/808560/how-to-Detect-the-physical-connected-state-of-a-network-cable-connector

나는 거기에 나열된 대부분의 답변 (mii-tools, ethertool, cat the Carrier 또는 operstate, dmesg)을 시도했지만 ifconfig가 다운되었을 때 링크에서 제대로 작동하지 않았습니다.

SO 질문은 6년 이상 되었기 때문에 대부분의 질문은 다음과 같습니다.가능한답변은 이미 나와 있습니다.

내 투표는 표준 Linux 도구를 사용하면 캐리어를 불러올 때까지 캐리어를 확인할 수 없다는 것입니다. 그 후에는 mii-tools링크 감지가 잘 작동하고 일관된 답변을 제공하는 것 같습니다.

나는 rtnetlink와 다른 답변을 시도하지 않았습니다.변화링크 상태에 있는데, 이는 당신이 원하는 것이 아닐 것이라고 생각합니다.

관련 정보