linux内核ioctl网络控制框架实现分析

linux内核ioctl网络控制框架实现分析

ID:37081026

大小:25.86 KB

页数:15页

时间:2019-05-16

linux内核ioctl网络控制框架实现分析_第1页
linux内核ioctl网络控制框架实现分析_第2页
linux内核ioctl网络控制框架实现分析_第3页
linux内核ioctl网络控制框架实现分析_第4页
linux内核ioctl网络控制框架实现分析_第5页
资源描述:

《linux内核ioctl网络控制框架实现分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、linux内核IOCTL网络控制框架实现分析目录一、概述.二、用户空间ioctl控制函数调用形式.三、内核主要函数调用框架四、IOCTL框架源代码分析4.1、入口函数:sys_ioctl4.2、入口函数跳转4.3、sock_ioctl函数4.4、二次跳转4.5、structproto_ops结构实例.4.6、inet_ioctl函数4.7、网络主要结构相关字段相互引用图.五、调用实践1.编写运行于用户空间的控制程序2.内核功能支持2.1、修改内核相关代码2.2、编译内核3.运行控制程序4.查看结果六、结

2、束语七、参考资料一、概述从ioctl这个名称上看,它是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等,但实际上ioctl所处理的对象并不限制是真正的I/O设备,还可以是其它任何一个内核设备.ioctl以系统调用的形式提供了一条用户与内核交互的便捷途径。当前一些宽带计费网关、防火墙系统均利用Ioctl与内核良好的通信互动特点支持用户对基于内核模块的软件系统的控制.本文针对i386平台下的ioctl内核网络源代码控

3、制框架进行剖析解释,在文章最后列举一个实例,通过编程实践展示如何通过ioctl控制函数实现自定义的功能的控制,使读者可以对ioctl实现原理有一个全面的认识,本文只对ioctl实现流程框架做一定的叙述,并不会深入到具体的控制函数。为了更好的阅读本文,要求读者对Linux下的网络编程有一定的了解。本文约定:1、以下内容如果没有特殊说明,均参照linux内核2.4.0版本2、“->”箭头符表示函数调用关系,如sys_socket->sock_map_fd表示sys_socket函数调用的sock_map_f

4、d函数。3、第五节的实践是在redhat9上实现,基于2.4.20内核,但本文所述在2.4内核下都适用。二、用户空间ioctl控制函数调用形式通过man2ioctl命令查看ioctl函数的调用形式类似如下:#includeintioctl(intd,intrequest,...);其中d就是用户程序打开设备时使用open函数返回的文件描述符,request就是用户程序对设备的控制命令,至于后面的省略号,则是一些补充参数,一般最多一个,有或没有是和request的意义相关的,详情

5、请参考man2ioctl_list以了解更多。ioctl函数是文件结构中的一个属性分量,就是说如果驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I/O通道或其它一些自己想要控制且设备支持的功能。三、内核主要函数调用框架内核实现ioctl()函数的是sys_ioctl(),在内核中主要调用框架图如下,它清晰地给我们展示ioctl的控制传递框架,我们接下来的内容将根据此图向大家做详细的解释:四、IOCTL框架源代码分析根据前面的图示,我们从入口函数sys_ioctl开始

6、分析:4.1、入口函数:sys_ioctl以下源码在fs/ioctl.c中,其中删除了部分与网络控制关系不大的代码:asmlinkagelongsys_ioctl(unsignedintfd,unsignedintcmd,unsignedlongarg){…//根据fd获取文件结构(structfile)lock_kernel();switch(cmd){caseFIOCLEX://对文件设置专用标志,通知内核自动关闭打开的文件…caseFIONCLEX://与FIOCLEX标志相反,清除专用标志…ca

7、seFIONBIO://将文件操作设置成阻塞/非阻塞…caseFIOASYNC://将文件操作设置成同步/异步IO…//以上省略的代码是关于具体的磁盘文件系统的控制处理,//关于socket的阻塞或非阻塞等设置很简单,有兴趣的读者直接阅读源码吧default://文件其它部分的处理被放在了default部分error=-ENOTTY;if(S_ISREG(filp->f_dentry->d_inode->i_mode))//普通文件error=file_ioctl(filp,cmd,arg);//els

8、eif(filp->f_op&&filp->f_op->ioctl)//socket控制在此处理error=filp->f_op->ioctl(filp->f_dentry->d_inode,filp,cmd,arg);}unlock_kernel();fput(filp);out:returnerror;}注意上面蓝色字体部分,即为调用网络部分的代码入口。大家注意在default情况下,有个S_ISREG宏对文件类型作判断,其定义在inc

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。