社区
驱动程序开发区
帖子详情
提问:nl80211使用netlink与kernel通信,信息最终被发送到那里了呢?
zhxlx
2014-12-19 02:00:55
我对linux不了解,但是希望能看懂wifi工作的机制。
nl80211使用netlink与kernel通信,cfg80211使用ioctl从kernel得到消息,这样理解是否正确?
mac80211层面是最终得到这些消息吗?kernel难道是起到了转发消息的作用?
...全文
119
回复
打赏
收藏
提问:nl80211使用netlink与kernel通信,信息最终被发送到那里了呢?
我对linux不了解,但是希望能看懂wifi工作的机制。 nl80211使用netlink与kernel通信,cfg80211使用ioctl从kernel得到消息,这样理解是否正确? mac80211层面是最终得到这些消息吗?kernel难道是起到了转发消息的作用?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
基于n
etl
ink
机制内核空间与用户空间
通信
的分析_董昱1
摘要:介绍了Linux操作系统的内核空间和用户空间的概念,给出了基于n
etl
ink
通信
的相关流程图和简要程序说明。基于n
etl
ink
的内核空间与用户空间的双向通
用户层与
kernel
层的
信息
交换
自己写的用于
Kernel
与dhcp6c的消息交互
内核和用户空间
通信
—n
etl
ink
源码
一、imp2源码 整个源码包含三个文件:imp2_k.c, imp2_u.c和imp2.h. 其中imp2_k.c为内核模块的源代码,imp2_u.c为应用程序,即测试代码,imp2.h为两个源文件都需要引用的头文件。其整体的功能是:注册一种新的n
etl
ink
协议,并注册一个新的NF hook函数。当有ping包发往当前主机或者经过当前主机转发时,内核向用户
发送
ping包的源IP和目的IP。各个文件的简单分析见下文。 1. imp2.h 该文件主要是定义了一种新的N
etl
ink
协议类型NL_IMP2(31)。新的协议类型的选值不能和当前内核中已经定义的n
etl
ink
协议类型重复。定义了基于该协议类型的消息类型,内核根据接收到消息的不同类型,进行不同的处理:IMP2_U_PID和IMP2_CLOSE分别为请求和关闭。IMP2_K_MSG代表内核空间
发送
的消息。 该头文件的源码如下: 2. imp2_k.c 该程序为内核模块程序。其完成的功能如下: (1)创建一种新的N
etl
ink
协议NL_IMP2,并注册该协议的回调函数
kernel
_receive。但用户空间通过建立且协议类型为NL_IMP2的socket套接字并调用sendto,sendmsg函数
发送
数据时,传送到内核空间的数据由
kernel
_receive进行处理。该函数主要是记录用户进程的ID,用于随后
发送
数据的时候指定目的。 (2)在Netfilter的hook点NF_IP_PRE_ROUTING注册hook函数get_icmp,对经过该hook点的ping包进行处理。get_icmp首先判断是否是ping包,如果不是,直接Accept。如果是,则记录该包的源IP和目的IP,然后调用send_to_user,将记录的
信息
发送
给
kernel
_recieve函数中记录的用户进程ID。 该文件的源码如下: 3. imp2_u.c 该程序为用户空间的测试程序。该程序包括以下功能: (1)生成NL_IMP2协议的socket.然后通过调用sendto
发送
IMP2_U_PID类型的请求
信息
给内核。然后等待接受内核发回的
信息
。记住:仅当有ping包经过内核的NF时,内核才会向用户进程
发送
信息
。 (2)当用户进程通过Ctrl+C来结束该程序时,调用信号处理函数sig_int,向内核
发送
IMP2_CLOSE的消息,结束socket。 该文件的源码如下: 二、编译和测试 1. 整个源文件编译的Makefile如下: all: gcc -O2 -DMODULE -D__
KERNEL
__ -W -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/`uname -r`/build/include -c -o imp2_k.o imp2_k.c gcc imp2_u.c -o imp2_u install: insmod imp2_k.o uninstall: rmmod imp2_k clean: rm -f imp2_k.o imp2_u 2. 加载内核模块,并执行测试程序。 #make install #./imp2_u 当没有ping包时,终端一直处于等待输出状态。通过另一台主机(192.168.1.100)向当前主机(192.168.1.101)
发送
ping包,则终端已经有输出: #./imp2_u [root@localhost imp2]# ./imp2_u src: 192.168.1.100, dest: 192.168.1.101 src: 192.168.1.100, dest: 192.168.1.101 src: 192.168.1.100, dest: 192.168.1.101 src: 192.168.1.100, dest: 192.168.1.101
linux下netfl
ink
通信
实例(内核2.6.25)
linux下netfl
ink
通信
实例(内核2.6.25)
Linux内核中n
etl
ink
协议族的实现
介绍linux内核中n
etl
ink
协议族的实现,主要是用户态与内核的
通信
。
驱动程序开发区
1,324
社区成员
2,170
社区内容
发帖
与我相关
我的任务
驱动程序开发区
主要是开发驱动技术
复制链接
扫一扫
分享
社区描述
主要是开发驱动技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章