需求
由于项目需要,需要知道WAN口网线插拔的状态,wan口对应port0
实现思路
在内核层增加机制,读取寄存器值,来判断网口是否有插入网线,然后通过netlink和应用层通讯
代码实现
应用层代码
将以下代码保存为network_monitor.c,然后交叉编译即可监听内核事件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <asm/types.h>
//该头文件需要放在netlink.h前面防止编译出现__kernel_sa_family未定义
#include <sys/socket.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
void MonitorNetlinkUevent()
{
int sockfd;
struct sockaddr_nl sa;
int len;
int rc = 0;
char buf[4096];
struct iovec iov;
struct msghdr msg;
int i;
memset(&sa,0,sizeof(sa))