当我创build一个虚拟的networking接口,然后提出它显示在未知状态:
root@5b8dd2855a9c:# ip la boom type dummy root@5b8dd2855a9c:# ip l show boom 58: boom: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT link/ether 1e:f6:4b:60:ff:1a brd ff:ff:ff:ff:ff:ff root@5b8dd2855a9c:# ip l set boom up root@5b8dd2855a9c:# ip l show boom 58: boom: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state **UNKNOWN** mode DEFAULT link/ether 1e:f6:4b:60:ff:1a brd ff:ff:ff:ff:ff:ff root@5b8dd2855a9c:#
有人知道为什么 我试着给它分配一个IP地址,但是这并没有解决问题。
我在下面的机器上testing了这个:
root@5b8dd2855a9c:# uname -a Linux 5b8dd2855a9c 3.16.1-tinycore64 #1 SMP Fri Aug 22 05:53:09 UTC 2014 x86_64 GNU/Linux root@5b8dd2855a9c:#
更新:
所以看起来这不会使界面无法操作。 经过一些奴役谷歌search后,我遇到了这个信息
看看drivers / net / dummy.c和include / linux / netdevice.h ,虚拟networking接口驱动程序似乎只实现了一小部分networking设备操作:
从drivers / net / dummy.c的第112行,我们得知:
static const struct net_device_ops dummy_netdev_ops = { .ndo_init = dummy_dev_init, .ndo_uninit = dummy_dev_uninit, .ndo_start_xmit = dummy_xmit, .ndo_validate_addr = eth_validate_addr, .ndo_set_rx_mode = set_multicast_list, .ndo_set_mac_address = eth_mac_addr, .ndo_get_stats64 = dummy_get_stats64, .ndo_change_carrier = dummy_change_carrier, };
在看include / linux / netdevice.h , struct net_device_ops被定义的时候,似乎有(在1057行):
int (*ndo_set_vf_link_state)(struct net_device *dev, int vf, int link_state);
这在什么地方给我们回答你的问题,而不是在这里放一堵文字,希望得到+10? 那么,答案是肯定的,不是。
来源显示是的,状态UNKNOWN是预期的行为,因为没有任何事情会设置状态,所以它肯定应该是UNKNOWN。 另一方面,期望用户带一个虚拟接口的用户应该看到状态改变是合理的。 从用户angular度来看,合理期望的一个经典例子并不是由一个内核来满足的。
接下来的问题可能是:这是一个错误? 应该修好吗? 如果这个答案超出了范围,虽然这当然有可能解决这个问题,如果有人愿意这样做。 但是,值得注意的是,虚拟接口已经在内核中存在了相当长的一段时间,准确的说是20年。 早在1994年,我提出一个正确的链接状态为虚拟接口的用户区不是一个优先事项。