Linux Tcpip協(xié)議棧筆記

Linux Tcpip協(xié)議棧筆記

ID:37057009

大小:464.00 KB

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

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

Linux Tcpip協(xié)議棧筆記_第1頁(yè)
Linux Tcpip協(xié)議棧筆記_第2頁(yè)
Linux Tcpip協(xié)議棧筆記_第3頁(yè)
Linux Tcpip協(xié)議棧筆記_第4頁(yè)
Linux Tcpip協(xié)議棧筆記_第5頁(yè)
資源描述:

《Linux Tcpip協(xié)議棧筆記》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)

1、LinuxTCP/IP協(xié)議棧筆記(一)網(wǎng)卡驅(qū)動(dòng)和隊(duì)列層中的數(shù)據(jù)包接收tcp/ip2008-05-1612:05:00閱讀1評(píng)論0字號(hào):大中小數(shù)據(jù)包的接收作者:kendohttp://www.skynet.org.cn/viewthread.php?tid=14&extra=page%3D1Kernel:2.6.12一、從網(wǎng)卡說(shuō)起這并非是一個(gè)網(wǎng)卡驅(qū)動(dòng)分析的專門文檔,只是對(duì)網(wǎng)卡處理數(shù)據(jù)包的流程進(jìn)行一個(gè)重點(diǎn)的分析。這里以Intel的e100驅(qū)動(dòng)為例進(jìn)行分析。大多數(shù)網(wǎng)卡都是一個(gè)PCI設(shè)備,PCI設(shè)備都包含了一個(gè)標(biāo)準(zhǔn)的

2、配置寄存器,寄存器中,包含了PCI設(shè)備的廠商ID、設(shè)備ID等等信息,驅(qū)動(dòng)程序使用來(lái)描述這些寄存器的標(biāo)識(shí)符。如下:[Copytoclipboard][-]CODE:structpci_device_id{????__u32vendor,device;????????/*VendoranddeviceIDorPCI_ANY_ID*/????__u32subvendor,subdevice;????/*SubsystemID'sorPCI_ANY_ID*/????__u32class,class_mask;????

3、/*(class,subclass,prog-if)triplet*/????kernel_ulong_tdriver_data;????/*Dataprivatetothedriver*/};這樣,在驅(qū)動(dòng)程序中,常常就可以看到定義一個(gè)structpci_device_id類型的數(shù)組,告訴內(nèi)核支持不同類型的PCI設(shè)備的列表,以e100驅(qū)動(dòng)為例:#defineINTEL_8255X_ETHERNET_DEVICE(device_id,ich){????PCI_VENDOR_ID_INTEL,device_id

4、,PCI_ANY_ID,PCI_ANY_ID,????PCI_CLASS_NETWORK_ETHERNET<<8,0xFFFF00,ich}????staticstructpci_device_ide100_id_table[]={????INTEL_8255X_ETHERNET_DEVICE(0x1029,0),????INTEL_8255X_ETHERNET_DEVICE(0x1030,0),????INTEL_8255X_ETHERNET_DEVICE(0x1031,3),……/*略過(guò)一大堆支持的設(shè)備

5、*/????{0,}};在內(nèi)核中,一個(gè)PCI設(shè)備,使用structpci_driver結(jié)構(gòu)來(lái)描述,structpci_driver{????structlist_headnode;????char*name;????structmodule*owner;????conststructpci_device_id*id_table;????/*mustbenon-NULLforprobetobecalled*/????int??(*probe)??(structpci_dev*dev,conststructpci

6、_device_id*id);????/*Newdeviceinserted*/????void(*remove)(structpci_dev*dev);????/*Deviceremoved(NULLifnotahot-plugcapabledriver)*/????int??(*suspend)(structpci_dev*dev,pm_message_tstate);????/*Devicesuspended*/????int??(*resume)(structpci_dev*dev);????????

7、????????/*Devicewokenup*/????int??(*enable_wake)(structpci_dev*dev,pci_power_tstate,intenable);??/*Enablewakeevent*/????void(*shutdown)(structpci_dev*dev);????structdevice_driver????driver;????structpci_dynidsdynids;};因?yàn)樵谙到y(tǒng)引導(dǎo)的時(shí)候,PCI設(shè)備已經(jīng)被識(shí)別,當(dāng)內(nèi)核發(fā)現(xiàn)一個(gè)已經(jīng)檢測(cè)到的設(shè)備同驅(qū)

8、動(dòng)注冊(cè)的id_table中的信息相匹配時(shí),它就會(huì)觸發(fā)驅(qū)動(dòng)的probe函數(shù),以e100為例:/**定義一個(gè)名為e100_driver的PCI設(shè)備*1、設(shè)備的探測(cè)函數(shù)為e100_probe;*2、設(shè)備的id_table表為e100_id_table*/staticstructpci_drivere100_driver={????.name=??????DRV_NAME,????.id_table=???

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

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

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問題,請(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)系客服處理。