小编dmy*_*ush的帖子

如何在 Linux 中异步检查 ipv6 网络接口状态是否从暂定更改为“有效”?

IPv6地址分配前后会经历各种状态,例如临时地址、重复地址和首选地址。这些地址状态适用于手动和自动配置的地址。我遇到一种情况,当在暂定状态下使用网络接口时,对一天中的时间服务器的请求无限期地阻塞。(当从 python 脚本中调用 rdate 实用程序时)。通过实验,我得出结论,在接口处于暂定状态时调用 rdate 是问题所在。

我看到

ip-monitor
Run Code Online (Sandbox Code Playgroud)

可以使用命令,并 在 Linux 上的 AF_NETLINK 套接字中找到一些有趣的想法:如何以编程方式确定 NIC 接口是否已启用并插入?

我正在尝试设置一些异步调用(最好在 python3 中),一旦接口准备好并且 rdate 可以恢复,该调用就会返回。netlink 套接字似乎就是解决这个问题的工具。读完这篇文章和 netlink(7) 我发现我需要类似的东西

s = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE);
Run Code Online (Sandbox Code Playgroud)

但我无法找到有关从套接字获取输出后要检查哪些结构字段/设备标志的正确信息。在 netdevice(7) 中我发现

IFF_UP            Interface is running.
Run Code Online (Sandbox Code Playgroud)

但我不确定在暂定状态下这是否也是如此。

当然,最简单的方法就是循环 sleep 并检查

ip a show dev devName
Run Code Online (Sandbox Code Playgroud)

直到状态有效,但我将其保留为最后的手段,以防异步调用失败。

sockets linux linux-kernel netlink

1
推荐指数
1
解决办法
1349
查看次数

标签 统计

linux ×1

linux-kernel ×1

netlink ×1

sockets ×1