Linux에서 RTNETLINK만 사용하여 네트워크 인터페이스가 "물리적"인지 "가상"인지 감지하시겠습니까?

Linux에서 RTNETLINK만 사용하여 네트워크 인터페이스가 "물리적"인지 "가상"인지 감지하시겠습니까?

네트워크 인터페이스가 "물리적"인지 "가상"인지 감지하고 싶습니다. 여기서 "물리적"은 "하드웨어"가 하이퍼바이저에 의해 가상화된 경우에도 인터페이스에 하드웨어가 연결되어 있음을 의미합니다. "가상"이란 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.

관련 정보