写一个独立的模块并加载到pc上,应用和内核两端收发是正常的。集成后,应用发送数据内核可以收到,但内核发送数据应用无反应,怀疑是netlink创建出现问题(内核是以多播的方式发送)?netlink初始化如下,请各位大虾明示: int len = sizeof(link_sock.nl); link_sock.link_nl = socket(AF_NETLINK,SOCK_RAW,NETLINK_LINK); if(link_sock.link_nl < 0) { perror("create link socket :");...
by whc0421 - Linux环境编程 - 2013-11-07 21:30:50 阅读(1041) 回复(5)
最近开始在内核态下写程序忽然发现不能用线程 。 项目是这样的 ,需要采用nerfilter机制注册一个钩子在prerouting的时候调用 ,这样每进来一个包我就要记录这个包的纪录(存到哈西数组中 )。 同时还需要定时的对这个哈西数组进行数据遍历分析。 开始打算做到一起 ,后来发现这样根本就不行 。因为钩子是包触发的 。但定时器不管有没有包来都要运行 。这样就只好考虑将遍历的程序放到一个后台进程中一直运行 ,同时钩子函数在每...
Netlink 是一种特殊的 socket,它是 Linux 所特有的,类似于 BSD 中的AF_ROUTE 但又远比它的功能强大,目前在最新的 Linux 内核(2.6.14)中使用netlink 进行应用与内核通信的应用很多,包括:路由 daemon(NETLINK_ROUTE),1-wire 子系统(NETLINK_W1),用户态 socket 协议(NETLINK_USERSOCK),防火墙(NETLINK_FIREWALL),socket 监视(NETLINK_INET_DIAG),netfilter 日志(NETLINK_NFLOG),ipsec 安全策略(NETLINK...
对于IP_RAW这一层的socket,可以通过nf_register_sockopt来注册自己的命令字,而不需要重新编译内核。。在用户态可以通过setsockopt来向内核发送数据,getsockopt从内核接收数据。在内核这一层怎么处理数据呢??也就是如果getsockopt能够获取数据,内核是怎么把这个数据放入socket的呢,而这个数据又是从哪里来的呢? 比如我自己定义这么一个结构如下: struct nf_sockopt_ops my_ops = { {NULL, NULL}, PF_INET, 0, 0, NULL...
最近开始在内核态下写程序忽然发现不能用线程 。 项目是这样的 ,需要采用nerfilter机制注册一个钩子在prerouting的时候调用 ,这样每进来一个包我就要记录这个包的纪录(存到哈西数组中 )。 同时还需要定时的对这个哈西数组进行数据遍历分析。 开始打算做到一起 ,后来发现这样根本就不行 。因为钩子是包触发的 。但定时器不管有没有包来都要运行 。这样就只好考虑将遍历的程序放到一个后台进程中一直运行 ,同时钩子函数在每...