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

正文內(nèi)容

lwip協(xié)議棧架構(gòu)與設(shè)計(jì)解析(參考版)

2024-11-12 16:08本頁面
  

【正文】 。具體提取出來的接口有: static void low_level_init(struct if *if) static err_t low_level_output(struct if *if, struct pbuf *p) static struct pbuf * low_level_input(struct if *if) err_t etherif_input(struct if *if) err_t etherif_init(struct if *if) 重寫以上這些接口,并用重寫的接口替換 里的接口。 四、 接口提取 看完第三章的協(xié)議棧處理數(shù)據(jù)的流程,就知道與網(wǎng)絡(luò)底層驅(qū)動(dòng)的接口部分主要是在網(wǎng)絡(luò)接口層。如果這個(gè) TCP 段由一個(gè)不被承認(rèn)的 ACK應(yīng)答數(shù)據(jù)構(gòu)成,數(shù)據(jù)將會(huì)從緩沖區(qū)移走,它所占用的存儲(chǔ)區(qū)被收回。當(dāng)該 TCP 所屬的連接正處于接受網(wǎng)絡(luò)數(shù)據(jù)的狀態(tài),tcp_receive()函數(shù)將被調(diào)用。 tcp_input() 函數(shù)完成兩項(xiàng)工作:其一,初始完整性檢查(也就是校驗(yàn)和驗(yàn)證與 TCP 選項(xiàng)解析);其二,判定這 個(gè) TCP 段屬于哪個(gè)TCP 連接。 【 2】 數(shù)據(jù)的接收 過程的發(fā)起者是網(wǎng)絡(luò)接口層,這里不做描述。應(yīng)用層調(diào)用 ip_write()函數(shù),接著 tcp_write() 函數(shù)再將控制權(quán)交給 tcp_enqueue() 函數(shù),這個(gè)函數(shù)會(huì)在必要時(shí)將數(shù)據(jù)分割為適當(dāng)大小的 TCP 段,然后再把這些 TCP 段放到所屬連接的 傳輸隊(duì)列中。圖中左半邊部分是數(shù)據(jù)發(fā)送的處理部分,右半部分是數(shù)據(jù)接收的處理部分。 圖 協(xié)議棧數(shù)據(jù)處理流程 如上圖所示, lwip 協(xié)議棧對(duì) TCP 數(shù)據(jù)包的處理經(jīng)過四層的處理。關(guān)于 UDP 數(shù)據(jù)報(bào)的處理流程暫且不做討論。 從源碼分析看,上述的接口在應(yīng)用 lwip 的協(xié)議棧時(shí),需要重點(diǎn)關(guān)注。上面一個(gè)用于請(qǐng)求應(yīng)答超時(shí)處理。該接口中,實(shí)現(xiàn)dhcp 報(bào)文的 協(xié)議處理。在 start dhcp 時(shí),該接口通過 dhcp 的 udp pcb 注冊(cè)到 udp 協(xié)議層。最后啟動(dòng) dhcp 申請(qǐng)。 主要的接口原型如下: err_t dhcp_start(struct if *if) 該接口用于設(shè)備啟動(dòng) dhcp 模塊,主要是客戶端的功能。 dhcp 模塊用于獲取設(shè)備 ip 地址的相關(guān)信息。 該模塊另外一個(gè)接口是輸入函數(shù),原型如下: err_t ip_output(struct pbuf *p, struct ip_addr *src, struct ip_addr *dest, u8_t ttl, u8_t tos, u8_t proto) 該接口通過路由表或者傳輸 ip 后,調(diào)用 if 的 output 函數(shù)指針指向的函數(shù) 發(fā)送報(bào)文。其主要入口函數(shù)為: err_t ip_input(struct pbuf *p, struct if *inp) 該接口通過判斷輸入報(bào)文的協(xié)議類型,將其輸入到相應(yīng)的上層協(xié)議模塊中去。并在 etharp_query中調(diào)用 etharp_send_ip來發(fā)送最終組合報(bào)文。 在 etharp_output 接口中,判斷報(bào)文類型,如果是廣播包或者組播包,就調(diào)用 etharp_send_ip(組裝目標(biāo) mac和源 mac)接口, etharp_send_ip調(diào)用 if結(jié)構(gòu)中的設(shè)備驅(qū)動(dòng)注冊(cè)的 linkoutput鉤子函數(shù)發(fā)送最終報(bào)文。同時(shí)還提供了 arp 報(bào)文的發(fā)送接口。 如果是 ip 報(bào)文,該接口就調(diào)用 etharp_ip_input 進(jìn)行 arp更新,并調(diào)用 ip_input 接口,將報(bào)文提交給 ip 層。其主要入口函數(shù)為: err_t ether_input(struct pbuf *p, struct if *if) 該入口函數(shù)通過判斷輸入報(bào)文 p的協(xié)議類型來決定是按照 arp協(xié)議進(jìn)行處理還是將該報(bào)文提交到 IP 協(xié)議。 這是對(duì) pbuf 結(jié)構(gòu)體進(jìn)行操作的函數(shù)。 err_t pbuf_take(struct pbuf *buf, const void *dataptr, u16_t len)。 err_t pbuf_copy(struct pbuf *p_to, struct pbuf *p_from)。 void pbuf_chain(struct pbuf *head, struct pbuf *tail)。 第 15 頁 共 18 頁 u8_t pbuf_clen(struct pbuf *p)。 void pbuf_ref_chain(struct pbuf *p)。 u8_t pbuf_header(struct pbuf *p, s16_t header_size)。 struct pbuf *pbuf_alloc(pbuf_layer l, u16_t size, pbuf_type type)。當(dāng)接收網(wǎng)絡(luò)數(shù)據(jù)包時(shí),我們選擇的 pbuf 是 PBUF_POOL類型的。關(guān)于這四種類型的 pbuf有什么區(qū)別請(qǐng)參考相應(yīng)的文檔,一句話說明四者的不同,主要是 pbuf 結(jié)構(gòu)體中存放的數(shù)據(jù)的位置不同。 typedef enum { PBUF_RAM, /* pbuf data is stored in RAM */ PBUF_ROM, /* pbuf data is stored in ROM */ PBUF_REF, /* pbuf es from the pbuf pool */ PBUF_POOL /* pbuf payload refers to RAM */ } pbuf_type。主要的文件包括 、 、 。所以放在了一起。因?yàn)橄到y(tǒng)中可能會(huì)有很多網(wǎng)絡(luò)設(shè)備。所以 input 和 output 函數(shù)指針是直接指向網(wǎng)絡(luò)驅(qū)動(dòng)收發(fā)接口函數(shù)的。當(dāng)我們要向網(wǎng)絡(luò)中發(fā)送一個(gè)數(shù)據(jù)時(shí),我們調(diào)用 output 函數(shù)指針指向的那個(gè)函數(shù)進(jìn)行數(shù)據(jù)的發(fā)送工作。這個(gè)字段由設(shè)備驅(qū)動(dòng)的初始設(shè)置 函數(shù) 填充。 網(wǎng)絡(luò)接口通過 output 指針連接到設(shè)備驅(qū)動(dòng)。 這個(gè)結(jié)構(gòu)體里所有的成員的作用都已經(jīng)注釋了,這里我們只關(guān)心兩個(gè)成員: err_t (* input)(struct pbuf *p, struct if *inp)。 if LWIP_LOOPBACK_MAX_PBUFS u16_t loop_t_current。 endif /* LWIP_NETIF_HWADDRHINT */ if ENABLE_LOOPBACK /* List of packets to be q
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計(jì)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1