freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

[互聯(lián)網(wǎng)]linux網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)-文庫(kù)吧資料

2024-10-22 17:17本頁(yè)面
  

【正文】 據(jù)的長(zhǎng)度小于以太網(wǎng)沖突檢測(cè)所要求數(shù)據(jù)幀的最小長(zhǎng)度ETH_ZLEN,則給臨時(shí)緩沖區(qū)的末尾填充 0。 ? 數(shù)據(jù)包的接收是通過(guò)中斷機(jī)制來(lái)完成的,當(dāng)有數(shù)據(jù)到達(dá)時(shí),就產(chǎn)生中斷信號(hào),網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)功能層就調(diào)用中斷處理程序,即數(shù)據(jù)包接收程序來(lái)處理數(shù)據(jù)包的接收,然后網(wǎng)絡(luò)協(xié)議接口層調(diào)用 if_rx函數(shù)(詳見/linux//core/)把接收到的數(shù)據(jù)包傳輸?shù)骄W(wǎng)絡(luò)協(xié)議的上層進(jìn)行處理。最后通過(guò)協(xié)議接口層函數(shù) dev_queue_xmit來(lái)調(diào)用 device域中的hard_start_xmit函數(shù)指針來(lái)完成數(shù)據(jù)包的發(fā)送。 數(shù)據(jù)包的發(fā)送與接收 ? 數(shù)據(jù)包的發(fā)送與接收 ? 數(shù)據(jù)包的發(fā)送和接收是實(shí)現(xiàn) Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序中兩個(gè)最關(guān)鍵的過(guò)程,對(duì)這兩個(gè)過(guò)程處理的好壞將直接影響到驅(qū)動(dòng)程序的整體運(yùn)行質(zhì)量。 ? 調(diào)用內(nèi)核提供的 if_start_queue(),激活設(shè)備發(fā)送隊(duì)列。 ? 獲得設(shè)備的私有信息指針并初始化其各成員的值。 Linux網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序?qū)崿F(xiàn) 網(wǎng)絡(luò)設(shè)備的初始化 ? 網(wǎng)絡(luò)設(shè)備的初始化 ? 初始化完成如下工作: ? 進(jìn)行硬件上的準(zhǔn)備工作,檢查網(wǎng)絡(luò)設(shè)備是否存在,如果存在,則檢測(cè)設(shè)備所使用的硬件資源。 ? 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)的注冊(cè)與注銷 ? 注冊(cè)與注銷使用 register_dev()和 unregister_dev()函數(shù)。 ? 由于網(wǎng)絡(luò)數(shù)據(jù)包的接收可由中斷引發(fā),設(shè)備驅(qū)動(dòng)功能層中另一個(gè)主體部分將是中斷處理函數(shù),它負(fù)責(zé)讀取硬件上接收的數(shù)據(jù)包并傳送給上層協(xié)議。 實(shí)際驅(qū)動(dòng)的編寫過(guò)程中,我們并不需要實(shí)現(xiàn)全部的函數(shù),實(shí)際上,我們只要根據(jù)具體的需要實(shí)現(xiàn)上邊的部分就可以了。 ...... } 實(shí)現(xiàn)這些函數(shù)中的一部分后,就實(shí)現(xiàn)了驅(qū)動(dòng)的功能了,為千變?nèi)f化的網(wǎng)絡(luò)設(shè)備定義統(tǒng)一的、抽象的數(shù)據(jù)結(jié)構(gòu) _device結(jié)構(gòu)體,以不變應(yīng)萬(wàn)變,實(shí)現(xiàn)多種硬件在軟件層次上的統(tǒng)一。 ? int (*ndo_start_xmit) (struct sk_buff *skb,struct _device *dev)。 ? int (*ndo_open)(struct _device *dev)。 網(wǎng)絡(luò)設(shè)備接口層 ? struct _device_ops { ? int (*ndo_init)(struct _device *dev)。 ? 作用:將 data和 tail指針同時(shí)下移,這個(gè)操作主要用于在存儲(chǔ)空間的頭部預(yù)留 len長(zhǎng)度的空隙。 ? 作用:將 data指針下移,并減少 sk_buff中的 len值。函數(shù)帶 __和不帶 __的區(qū)別在于:帶 __的會(huì)檢測(cè)放入緩沖區(qū)的數(shù)據(jù),后則不會(huì)。 ? 作用:將 data指針上移,同時(shí)增加 sk_buff中的 len。 網(wǎng)絡(luò)協(xié)議接口層 ? push操作: ? unsigned char *skb_push(struct sk_buff *skb, unsigned int len)。 ? unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)。和head一樣, sk_buff和相關(guān)數(shù)據(jù)塊被分配后, end指針也就固定了。 ? tail:指向?qū)?yīng)當(dāng)前協(xié)議層有效數(shù)據(jù)負(fù)載的結(jié)尾地址,與 data對(duì)應(yīng)。 ? data:指針指向?qū)?yīng)當(dāng)前協(xié)議層有效數(shù)據(jù)的起始地址。 sk_buff定義位置為: include/linux/,這個(gè)數(shù)據(jù)結(jié)構(gòu)定義了很多用于網(wǎng)絡(luò)操作的函數(shù),更多的設(shè)計(jì)整個(gè)協(xié)議的實(shí)現(xiàn),包括各層報(bào)文的頭信息,以及報(bào)文的幀格式, 網(wǎng)絡(luò)協(xié)議接口層 ? sk_buff中的數(shù)據(jù)緩沖區(qū)的指針 ? Linux必須分配用于容納數(shù)據(jù)包的緩沖區(qū), sk_buff中定義了 4個(gè)指向這片緩沖區(qū)的不同位置的指針 head、 data、 tail、 end。 ? 相關(guān)數(shù)據(jù)結(jié)構(gòu) sk_buff: ? sk_buff 稱為“套接字緩沖區(qū)”,用于在 Linux網(wǎng)絡(luò)子系統(tǒng)中各層之間傳遞數(shù)據(jù)。 Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序 數(shù)據(jù)包發(fā)送 dev_queue_xmit() 數(shù)據(jù)包接收 if_rx() struct _device 數(shù)據(jù)包發(fā)送 hard_start_xmit() 網(wǎng)絡(luò)物理設(shè)備媒介 中斷處理 (數(shù)據(jù)包接收) 網(wǎng)絡(luò)協(xié)接口層 網(wǎng)絡(luò)設(shè)接口層 設(shè)備驅(qū)功能層 設(shè)備媒介層 網(wǎng)絡(luò)協(xié)議接口層 ? ? 在網(wǎng)絡(luò)協(xié)議接口層,只提供了兩個(gè)抽象函數(shù) dev_queue_xmit()與 if_rx(),之所以稱之為抽象函數(shù),是因?yàn)檫@兩個(gè)函數(shù)抽象了很多底層的操作,不管是那個(gè)芯片它在網(wǎng)絡(luò)協(xié)議結(jié)構(gòu)的操作函數(shù)都是這兩個(gè)函數(shù),采用這樣的抽象后,給上層帶來(lái)了很多的方便,給上層協(xié)議提供統(tǒng)一的數(shù)據(jù)包收發(fā)接口,無(wú)論上層是 ARP協(xié)議還是 IP協(xié)議,都通過(guò)dev_queue_xmit() 函數(shù)發(fā)送數(shù)據(jù),通過(guò) if_rx()函數(shù)接收數(shù)據(jù)。 ? xmit_lock是避免 hard_start_xmit函數(shù)同時(shí)多次調(diào)用的自旋鎖。私有信息指針 ? spinlock_t xmit_lock。 ? 二者分別為:最后一次開始發(fā)送的時(shí)間戳、最后一次接收到數(shù)據(jù)包的時(shí)間戳,這兩個(gè)時(shí)間戳記錄都是 jiffies,驅(qū)動(dòng)程序應(yīng)維護(hù)這兩個(gè)成員。 ? 網(wǎng)絡(luò)設(shè)備接口層 ? 輔助成員 ? unsigned long trans_start。 ? 配置接口, I/O地址,中斷號(hào) ? int (*set_config)(struct _device *dev, struct ifmap *map)。 ? ? 獲得網(wǎng)絡(luò)設(shè)備狀態(tài) ? struct _device_status * (*get_status)(struct _device *dev)。 獲得設(shè)備需要的 IO地址, IRQ及 DMA通道 ? int (*stop)(struct _device *dev)。 ? 二者分別用于存放設(shè)備的硬件地址和廣播地址,以太網(wǎng)設(shè)備的廣播地址為 6個(gè) 0xFF ? unsigned short flags。最大傳輸單元 ? unsigned char dev_addr[MAX_ADDR_LEN]。網(wǎng)絡(luò)設(shè)備的硬件頭長(zhǎng)度,在以太網(wǎng)設(shè)備的初始化函數(shù)中,該成員被賦值為 ETH_HLEN,即 14 ? unsigned short type。多端口設(shè)備中端口選擇 ? unsigned char dma。網(wǎng)絡(luò)設(shè)備的 I/O基地址 ? unsigned char irq。 ? unsigned long mem_start。 網(wǎng)絡(luò)設(shè)備接口層 ? _device結(jié)構(gòu)體的相關(guān)成員 ? 網(wǎng)絡(luò)設(shè)備的名稱: ? char name[IFNAMESIZ] ? 設(shè)備初始化 函數(shù) 指針 ,設(shè)備注冊(cè)時(shí)被調(diào)用 : ? int (*init)(struct _device *dev)。 ? Linux中所有的網(wǎng)絡(luò)設(shè)備都抽象為一個(gè)統(tǒng)一的接口,即網(wǎng)絡(luò)設(shè)備接口,通過(guò)struct _device類型的結(jié)構(gòu)體變量表示網(wǎng)絡(luò)設(shè)備在內(nèi)核中的運(yùn)行情況,這里既包括回環(huán)( loopback)設(shè)備,也包括硬件網(wǎng)絡(luò)設(shè)備接口。 ? Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序的體系結(jié)構(gòu)可劃分為 4個(gè)層次。 Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序 ? Linux網(wǎng)絡(luò)驅(qū)動(dòng)程序作為 Linux網(wǎng)絡(luò)子系統(tǒng)的一部分,位于 TCP/IP網(wǎng)絡(luò)體系結(jié)構(gòu)的網(wǎng)絡(luò)接口層,主要實(shí)現(xiàn)上層協(xié)議棧與網(wǎng)絡(luò)設(shè)備的數(shù)據(jù)交換。IP運(yùn)用互聯(lián)組管理協(xié)議( IGMP)來(lái)告訴路由器某一網(wǎng)絡(luò)上指導(dǎo)組中有哪些可用主機(jī)。這個(gè)回復(fù)消息由原先的那臺(tái)發(fā)送廣播消息的計(jì)算機(jī)接收,從而傳輸過(guò)程就開始了。 ? 一個(gè) ARP請(qǐng)求消息會(huì)在網(wǎng)上廣播。一個(gè)消息(或者其他數(shù)據(jù))在發(fā)送
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1