当我创建一个虚拟网络接口然后将其启动时,它显示为处于 UNKNOWN 状态:
root@5b8dd2855a9c:# ip l a 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 地址,但这并没有解决问题。
我在以下机器上对此进行了测试:
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:#
更新:
所以看起来这并没有使界面无法操作。经过一些奴性的谷歌搜索后,我发现了这个信息
查看drivers/net/dummy.c和include/linux/netdevice.h,似乎虚拟网络接口驱动程序只实现了一小部分网络设备操作:
从drivers/net/dummy.c的第 112 行我们了解到:
在查看include/linux/netdevice.h时,其中
struct net_device_ops
定义的位置似乎有(准确地说是在第 1057 行):就回答您的问题而言,这对我们有什么影响,而不仅仅是在这里放一堵文字并希望得分+10?嗯,答案是肯定的和否定的。
消息来源透露,是的,状态 UNKNOWN 是预期的行为,因为没有任何东西会设置状态,因此它肯定应该是 UNKNOWN。另一方面,可以合理地预期用户启动虚拟界面应该会看到状态发生变化。从用户的角度来看,一个内核没有满足的合理期望的经典示例。
下一个问题可能是:这是一个错误吗?它应该被修复吗?如果这个答案当然可以解决这个问题,那么这超出了范围,如果一个人愿意这样做的话。然而,值得注意的是,虚拟接口在内核中已经存在了相当长的一段时间,确切地说是 20 年。早在 1994 年,我想为用户空间的虚拟接口提供正确的链接状态并不是什么优先事项。