linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析

linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析

ID:37081026

大小:25.86 KB

頁(yè)數(shù):15頁(yè)

時(shí)間:2019-05-16

linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析_第1頁(yè)
linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析_第2頁(yè)
linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析_第3頁(yè)
linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析_第4頁(yè)
linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析_第5頁(yè)
資源描述:

《linux內(nèi)核ioctl網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、linux內(nèi)核IOCTL網(wǎng)絡(luò)控制框架實(shí)現(xiàn)分析目錄一、概述.二、用戶空間ioctl控制函數(shù)調(diào)用形式.三、內(nèi)核主要函數(shù)調(diào)用框架四、IOCTL框架源代碼分析4.1、入口函數(shù):sys_ioctl4.2、入口函數(shù)跳轉(zhuǎn)4.3、sock_ioctl函數(shù)4.4、二次跳轉(zhuǎn)4.5、structproto_ops結(jié)構(gòu)實(shí)例.4.6、inet_ioctl函數(shù)4.7、網(wǎng)絡(luò)主要結(jié)構(gòu)相關(guān)字段相互引用圖.五、調(diào)用實(shí)踐1.編寫運(yùn)行于用戶空間的控制程序2.內(nèi)核功能支持2.1、修改內(nèi)核相關(guān)代碼2.2、編譯內(nèi)核3.運(yùn)行控制程序4.查看結(jié)果六、結(jié)

2、束語(yǔ)七、參考資料一、概述從ioctl這個(gè)名稱上看,它是設(shè)備驅(qū)動(dòng)程序中對(duì)設(shè)備的I/O通道進(jìn)行管理的函數(shù)。所謂對(duì)I/O通道進(jìn)行管理,就是對(duì)設(shè)備的一些特性進(jìn)行控制,例如串口的傳輸波特率、馬達(dá)的轉(zhuǎn)速等等,但實(shí)際上ioctl所處理的對(duì)象并不限制是真正的I/O設(shè)備,還可以是其它任何一個(gè)內(nèi)核設(shè)備.ioctl以系統(tǒng)調(diào)用的形式提供了一條用戶與內(nèi)核交互的便捷途徑。當(dāng)前一些寬帶計(jì)費(fèi)網(wǎng)關(guān)、防火墻系統(tǒng)均利用Ioctl與內(nèi)核良好的通信互動(dòng)特點(diǎn)支持用戶對(duì)基于內(nèi)核模塊的軟件系統(tǒng)的控制.本文針對(duì)i386平臺(tái)下的ioctl內(nèi)核網(wǎng)絡(luò)源代碼控

3、制框架進(jìn)行剖析解釋,在文章最后列舉一個(gè)實(shí)例,通過(guò)編程實(shí)踐展示如何通過(guò)ioctl控制函數(shù)實(shí)現(xiàn)自定義的功能的控制,使讀者可以對(duì)ioctl實(shí)現(xiàn)原理有一個(gè)全面的認(rèn)識(shí),本文只對(duì)ioctl實(shí)現(xiàn)流程框架做一定的敘述,并不會(huì)深入到具體的控制函數(shù)。為了更好的閱讀本文,要求讀者對(duì)Linux下的網(wǎng)絡(luò)編程有一定的了解。本文約定:1、以下內(nèi)容如果沒(méi)有特殊說(shuō)明,均參照l(shuí)inux內(nèi)核2.4.0版本2、“->”箭頭符表示函數(shù)調(diào)用關(guān)系,如sys_socket->sock_map_fd表示sys_socket函數(shù)調(diào)用的sock_map_f

4、d函數(shù)。3、第五節(jié)的實(shí)踐是在redhat9上實(shí)現(xiàn),基于2.4.20內(nèi)核,但本文所述在2.4內(nèi)核下都適用。二、用戶空間ioctl控制函數(shù)調(diào)用形式通過(guò)man2ioctl命令查看ioctl函數(shù)的調(diào)用形式類似如下:#includeintioctl(intd,intrequest,...);其中d就是用戶程序打開設(shè)備時(shí)使用open函數(shù)返回的文件描述符,request就是用戶程序?qū)υO(shè)備的控制命令,至于后面的省略號(hào),則是一些補(bǔ)充參數(shù),一般最多一個(gè),有或沒(méi)有是和request的意義相關(guān)的,詳情

5、請(qǐng)參考man2ioctl_list以了解更多。ioctl函數(shù)是文件結(jié)構(gòu)中的一個(gè)屬性分量,就是說(shuō)如果驅(qū)動(dòng)程序提供了對(duì)ioctl的支持,用戶就可以在用戶程序中使用ioctl函數(shù)控制設(shè)備的I/O通道或其它一些自己想要控制且設(shè)備支持的功能。三、內(nèi)核主要函數(shù)調(diào)用框架內(nèi)核實(shí)現(xiàn)ioctl()函數(shù)的是sys_ioctl(),在內(nèi)核中主要調(diào)用框架圖如下,它清晰地給我們展示ioctl的控制傳遞框架,我們接下來(lái)的內(nèi)容將根據(jù)此圖向大家做詳細(xì)的解釋:四、IOCTL框架源代碼分析根據(jù)前面的圖示,我們從入口函數(shù)sys_ioctl開始

6、分析:4.1、入口函數(shù):sys_ioctl以下源碼在fs/ioctl.c中,其中刪除了部分與網(wǎng)絡(luò)控制關(guān)系不大的代碼:asmlinkagelongsys_ioctl(unsignedintfd,unsignedintcmd,unsignedlongarg){…//根據(jù)fd獲取文件結(jié)構(gòu)(structfile)lock_kernel();switch(cmd){caseFIOCLEX://對(duì)文件設(shè)置專用標(biāo)志,通知內(nèi)核自動(dòng)關(guān)閉打開的文件…caseFIONCLEX://與FIOCLEX標(biāo)志相反,清除專用標(biāo)志…ca

7、seFIONBIO://將文件操作設(shè)置成阻塞/非阻塞…caseFIOASYNC://將文件操作設(shè)置成同步/異步IO…//以上省略的代碼是關(guān)于具體的磁盤文件系統(tǒng)的控制處理,//關(guān)于socket的阻塞或非阻塞等設(shè)置很簡(jiǎn)單,有興趣的讀者直接閱讀源碼吧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;}注意上面藍(lán)色字體部分,即為調(diào)用網(wǎng)絡(luò)部分的代碼入口。大家注意在default情況下,有個(gè)S_ISREG宏對(duì)文件類型作判斷,其定義在inc

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。