-1

如何在我的用户空间程序中等待,直到connman在 Linux 启动时完成网络配置?(不幸的是,这不是Wants=connman.service。)

systemd 服务connman启动后,我的用户空间程序通过systemd服务(Wants=network.target connman.service)启动,它想通过 C 函数getifaddrs()(例如ifa->ifa_addrifa->ifa_addr->sa_family)读取网络配置。现在可能发生两件事,要么从其配置文件中connman读取明确未配置的网络(IPv4=0.0.0.0/0.0.0.0/0.0.0.0)或某个网络配置(例如)。IPv4=192.168.0.50/255.255.255.0/0.0.0.0由于某些原因,我的程序必须在某个代码行上等待,直到connman用两种情况之一完成设置。我怎么做?

我在systemd同步可能性中发现的只是connman服务启动的时间点(Wants=connman.service),这并不意味着它已经处理了它的配置文件,它在此之前!!!),其次,network-online.target当一个 IP 地址被配置时(它确实不包括0.0.0.0/0.0.0.0/0.0.0.0connman 配置文件中的情况)。


插件:我注意到在 Linux 启动期间,只要在控制台上打印“Link is up - 100Mbps/Full - flow control off”,就会设置一个 IP 地址。如何在我的用户程序中检测到它?

4

1 回答 1

0

嗯,我发现的只是这个解决方法。我的服务的启动脚本会查看 connman 的 .config 文件并搜索带有“IPv4=”的行,如果那里都是 0.0.0.0,我可以立即启动我的应用程序,否则我必须在该脚本中循环,直到 ifconfig 报告它已为该特定网络适配器接口设置了 IP 地址。

于 2019-08-13T15:08:09.023 回答