네트워크 인터페이스가 "물리적"인지 "가상"인지 감지하고 싶습니다. 여기서 "물리적"은 "하드웨어"가 하이퍼바이저에 의해 가상화된 경우에도 인터페이스에 하드웨어가 연결되어 있음을 의미합니다. "가상"이란 bridge, veth, macvlan 등과 같은 Linux 커널 요소 중 하나라는 의미입니다.
/sys/class/net/[nif]/...
나는 장치 링크를 추적하여 장치 경로에 "가상" 하위 디렉터리가 포함되어 있는지 여부에 따라 (가상) 물리적 및 "실제"(sic!) 가상 네트워크 인터페이스를 구별할 수 있음 을 알고 있습니다 . 그러나 네트워크 네임스페이스를 처리할 때 sysfs
올바른 항목을 보려면 적절한 재설치가 필요합니다 /sys/class/net/...
. 따라서 RTNETLINK 데이터에만 의존하는 간단한 접근 방식이 더 적절할 수 있습니다.
RTNETLINK를 사용하여 사용 가능한 네트워크 인터페이스를 검색할 때 확인하지 않고도 알 수 있는 속성/속성이 있습니까 /sys/class/net/[nif]
?
답변1
유일한 방법은 IFLA_INFO_KIND
에서 반환된 속성을 살펴보는 것 같습니다 RTM_GETLINK
. 이는 lo
루프백 장치뿐만 아니라 물리적 장치에도 없는 선택적 속성입니다.
존재하는 경우 등 의 문자열을 포함합니다 veth
. bridge
이를 잘 알려진 가상 링크 유형(참고자료 참조) 목록과 비교 ip link help
하고 가상 네트워크 인터페이스를 식별하고 다른 모든 네트워크 인터페이스는 "물리적 네트워크 인터페이스" 범위 내에 둡니다.
완벽하지는 않지만 상담 없이 작동합니다 /sys/class/net/[IFNAME]
. 항상 올바르게 존재하는 것은 아니며 sysfs
(재)설치가 필요합니다.네트워크 인터페이스가 veth
사용 중인지 확인하십시오 /sys/class/net
.