使用 /sys/class/net/ 识别物理网络设备

使用 /sys/class/net/ 识别物理网络设备

我想知道是否有办法区分物理和虚拟网络设备。ip a没有选择。所以我正在努力/sys/class/net/<iface>。有 2 个属性addr_assign_type和类型,但类型只能说明Ethernetloopback无法判断其是否为虚拟。

我想知道addr_assign_type我们有什么不同吗?

根据我的观察,/sys/class/net/<iface>/{eth|loopback}给出0/sys/class/net/<iface>/{virtualdevice}给出1 or 3

我可以从中推断出什么吗?

答案1

当您运行时ethtool -i <network interface>,物理接口应该有一条bus-info:线来标识适当的硬件设备。对于虚拟设备,bus-info:将为空。

对于/sys基于 - 的识别,你可以这样做:

if readlink /sys/class/net/$IFACE | grep -q /virtual/
then
    echo "$IFACE is virtual"
else
    echo "$IFACE is physical"
fi 

答案2

kernel.org 上的 sysfs-class-net 页面:

What:           /sys/class/net/<iface>/addr_assign_type
Date:           July 2010
KernelVersion:  3.2
Contact:        [email protected]
Description:
            Indicates the address assignment type. Possible values are:

            == ============================
            0  permanent address
            1  randomly generated
            2  stolen from another device
            3  set (by) dev_set_mac_address
            == ============================

相关内容