我编写了一个程序,如果网络接口发生了变化,需要得到通知,特别是新的一个出现或者已经存在.我的研究带来了netlink及其RTMGRP_LINK信号.这个手册页给出了一个我尚不清楚的例子.
它有这个代码:
memset(&sa, 0, sizeof(sa));
snl.nl_family = AF_NETLINK;
snl.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR;
fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
bind(fd, (struct sockaddr*)&sa, sizeof(sa));
Run Code Online (Sandbox Code Playgroud)
我的理解是这是一个初始化部分,用于启用某些信号.我想必须有一个处理事件的处理程序子程序.
我的问题是:
这是启用该事件的正确代码段吗?
如何处理事件:我需要一些处理程序吗?
包含相关信息(关于网络接口及其更改)的数据结构是什么?
谢谢你的帮助.
根据以下链接,我了解到通过创建netlink套接字并收听RTMGRP_LINK,我们可以检测事件(网络接口创建/删除/上/下事件).
如何在不轮询内核的情况下监视C程序中的NIC状态(向上/向下)?
一旦检测到新添加的接口,是否可以获取pci地址?