日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

netif_start_queue/netif_wake_queue/netif_stop_queue

發(fā)布時(shí)間:2023/12/2 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 netif_start_queue/netif_wake_queue/netif_stop_queue 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在網(wǎng)卡驅(qū)動(dòng)中,內(nèi)核為發(fā)送數(shù)據(jù)包的流量控制提供了幾個(gè)主要的函數(shù),用來(lái)在驅(qū)動(dòng)程序和內(nèi)核之間傳遞流控信息。

主要有4個(gè):

1】netif_start_queue ?啟動(dòng)接口傳輸隊(duì)列

2】netif_wake_queue ?通知網(wǎng)絡(luò)系統(tǒng)可以再次開(kāi)始傳輸數(shù)據(jù)包;并啟動(dòng)接口傳輸隊(duì)列。

3】netif_stop_queue ? 標(biāo)記設(shè)備不能傳輸其他數(shù)據(jù)包。

4】netif_queue_stopped

5】netif_tx_disable ? ?和第三個(gè)功能接口類似,但它還確保在返回時(shí),在其他cpu上沒(méi)有運(yùn)行hard_start_xmit函數(shù)。可以用第二個(gè)接口再次開(kāi)始傳輸隊(duì)列。

NETIF_STOP_QUEUE:

【作用】在驅(qū)動(dòng)程序中調(diào)用這個(gè)函數(shù)來(lái)告訴內(nèi)核的網(wǎng)絡(luò)子系統(tǒng),當(dāng)前網(wǎng)卡設(shè)備內(nèi)存不夠,不能繼續(xù)傳輸數(shù)據(jù)包,內(nèi)核要停止數(shù)據(jù)包的發(fā)送。

【實(shí)現(xiàn)】將設(shè)備發(fā)送隊(duì)列_tx[0]的狀態(tài)state的_QUEUE_STATE_XOFF置1。

NETIF_START_QUEUE:

【作用】驅(qū)動(dòng)程序調(diào)用這個(gè)函數(shù)來(lái)告訴內(nèi)核網(wǎng)絡(luò)子系統(tǒng),現(xiàn)在可以開(kāi)始數(shù)據(jù)包的發(fā)送。

【實(shí)現(xiàn)】將設(shè)備發(fā)送隊(duì)列的_tx[0]的state的_QUEUE_STATE_XOFF復(fù)位0。

NETIF_WAKE_QUEUE:

【作用】除了實(shí)現(xiàn)netif_start_queue的作用外,還會(huì)將設(shè)備的發(fā)送隊(duì)列加入到CPU的發(fā)送隊(duì)列,并且出發(fā)中斷處理的下半部來(lái)出發(fā)數(shù)據(jù)包發(fā)送。

【實(shí)現(xiàn)】除了檢查tx[0]的state的_QUEUE_STATE_XOFF位外,還檢查設(shè)備發(fā)送隊(duì)列qdisk成員的_QDISK_STATE_SCHED,如果是1說(shuō)明當(dāng)前設(shè)備的發(fā)送隊(duì)列尚未加入到CPU的發(fā)送隊(duì)列尾部,同時(shí)調(diào)用raise_softirq_irqoff(NET_TX_SOFTIRQ)來(lái)觸發(fā)softirq。

NETIF_QUEUE_STOPPED:

【作用】檢查net_device的發(fā)送隊(duì)列是否stopped

【實(shí)現(xiàn)】檢查設(shè)備發(fā)送隊(duì)列_tx[0]的狀態(tài)state的_QUEUE_STATE_XOFF是否置1,置1的話返回1,置0返回0。

=======用法=========

netif_start_queue一般在open函數(shù)中調(diào)用,開(kāi)啟數(shù)據(jù)包的傳輸。

netif_stop_queue一般用于驅(qū)動(dòng)程序通知網(wǎng)絡(luò)子系統(tǒng)暫停數(shù)據(jù)包傳輸,從來(lái)進(jìn)行實(shí)現(xiàn)流量控制。

netif_wake_queue在timeout后或者網(wǎng)卡硬件出錯(cuò)后調(diào)用,來(lái)重啟數(shù)據(jù)包的發(fā)送,并且將在設(shè)備隊(duì)列關(guān)閉期間進(jìn)入的到隊(duì)列的數(shù)據(jù)包發(fā)送。

?

?

================================================================================

netif_rx :?

原型: void netif_rx(struct sk_buff *skb)

調(diào)用(包括中斷期間)這個(gè)函數(shù)可以通知內(nèi)核已經(jīng)收到一個(gè)數(shù)據(jù)包,并封裝入一個(gè)套接字緩沖區(qū)。

netif_rx_schedule:

原型: void netif_rx_schedule(dev);

調(diào)用該函數(shù)通知內(nèi)核數(shù)據(jù)包已經(jīng)存在,并且在接口上啟動(dòng)輪詢機(jī)制,它只在NAPI驅(qū)動(dòng)程序中使用。

netif_receive_skb 和?netif_rx_complete

原型:int netif_receive_skb(struct sk_buff *skb);

   ??void netif_rx_complete(dev);

這兩函數(shù)只在NAPI驅(qū)動(dòng)程序中使用;NAPI中的netif_receive_skb函數(shù)與netif_rx等價(jià);它將數(shù)據(jù)包發(fā)送給內(nèi)核。當(dāng)NAPI驅(qū)動(dòng)程序耗盡了為接收數(shù)據(jù)包準(zhǔn)備的內(nèi)存時(shí),則它將重新啟動(dòng)中斷,然后調(diào)用netif_rx_complete終止輪詢函數(shù)。?

?

轉(zhuǎn)載于:https://www.cnblogs.com/zxc2man/p/4105652.html

總結(jié)

以上是生活随笔為你收集整理的netif_start_queue/netif_wake_queue/netif_stop_queue的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。