DPDK編程指南(翻譯)( 十九)

19.Librte_pdump庫

librte_pdump庫為DPDK中的數(shù)據(jù)包捕獲提供了一個(gè)框架。該庫將Rx和Tx mbufs的完整復(fù)制到新的mempool,因此會(huì)降低應(yīng)用程序的性能,故建議只使用該庫進(jìn)行調(diào)試。

該庫提供以下API來初始化數(shù)據(jù)包捕獲框架,啟用或禁用數(shù)據(jù)包捕獲,或者對(duì)其進(jìn)行反初始化:

  • rte_pdump_init():初始化數(shù)據(jù)包捕獲框架。
  • rte_pdump_enable():在給定的端口和隊(duì)列上進(jìn)行數(shù)據(jù)包捕獲。注意:API中的過濾器選項(xiàng)是用于未來增強(qiáng)功能的占位符。
  • rte_pdump_enable_by_deviceid():?jiǎn)⒂迷诮o定設(shè)備ID(vdev名稱或pci地址)和隊(duì)列上的數(shù)據(jù)包捕獲。 注意:API中的過濾器選項(xiàng)是用于未來增強(qiáng)功能的占位符。
  • rte_pdump_disable():禁用給定端口和隊(duì)列上的數(shù)據(jù)包捕獲。
  • rte_pdump_disable_by_deviceid():禁用給定設(shè)備ID(vdev名稱或pci地址)和隊(duì)列上的數(shù)據(jù)包捕獲。
  • rte_pdump_uninit():反初始化數(shù)據(jù)包捕獲框架。
  • rte_pdump_set_socket_dir():設(shè)置服務(wù)器和客戶端套接字路徑。注意:此API不是線程安全的。

19.1.操作

librte_pdump庫適用于客戶端/服務(wù)器型號(hào)。服務(wù)器負(fù)責(zé)啟用或禁用數(shù)據(jù)包捕獲,客戶端負(fù)責(zé)請(qǐng)求啟用或禁用數(shù)據(jù)包捕獲。

數(shù)據(jù)包捕獲框架作為程序初始化的一部分,在pthread中創(chuàng)建pthread和服務(wù)器套接字。調(diào)用框架初始化的應(yīng)用程序?qū)?chuàng)建服務(wù)器套接字,可能是在應(yīng)用程序傳入的路徑,也可能是默認(rèn)路徑(root用戶的/var/run/.dpdk,非root用戶~/.dpdk)下創(chuàng)建。

請(qǐng)求啟用或禁用數(shù)據(jù)包捕獲的應(yīng)用程序?qū)⒃趹?yīng)用程序傳入的路徑下或默認(rèn)路徑(root用戶的/var/run/.dpdk,非root用戶~/.dpdk)下創(chuàng)建客戶機(jī)套接字,用戶將請(qǐng)求發(fā)送到服務(wù)器。服務(wù)器套接字將監(jiān)聽用于啟用或禁用數(shù)據(jù)包捕獲的客戶端請(qǐng)求。

19.2.實(shí)現(xiàn)細(xì)節(jié)

庫API rte_pdump_init()通過創(chuàng)建pthread和服務(wù)器套接字來初始化數(shù)據(jù)包捕獲框架。pthread上下文中的服務(wù)器套接字將監(jiān)聽客戶端請(qǐng)求以啟用或禁用數(shù)據(jù)包捕獲。

庫API rte_pdump_enable()和rte_pdump_enable_by_deviceid()啟用數(shù)據(jù)包捕獲。每次調(diào)用這些API時(shí),庫創(chuàng)建一個(gè)單獨(dú)的客戶端套接字,生成“pdump enable”請(qǐng)求,并將請(qǐng)求發(fā)送到服務(wù)器。在套接字上監(jiān)聽的服務(wù)器將通過對(duì)給定的端口或設(shè)備ID和隊(duì)列組合的以太網(wǎng)Rx/TX注冊(cè)回調(diào)函數(shù)來接收請(qǐng)求并啟用數(shù)據(jù)包捕獲。然后,服務(wù)器將鏡像數(shù)據(jù)包到新的mempool并將它們?nèi)腙?duì)到客戶端傳遞給這些API的rte_ring。服務(wù)器還將響應(yīng)發(fā)送回客戶端,以了解處理過的請(qǐng)求的狀態(tài)。從服務(wù)器收到響應(yīng)后,客戶端套接字關(guān)閉。

庫API rte_pdump_disable()和rte_pdump_disable_by_deviceid()禁用數(shù)據(jù)包捕獲。每次調(diào)用這些API時(shí),庫會(huì)創(chuàng)建一個(gè)單獨(dú)的客戶端套接字,生成“pdump disable”請(qǐng)求,并將請(qǐng)求發(fā)送到服務(wù)器。正在監(jiān)聽套接字的服務(wù)器將通過對(duì)給定端口或設(shè)備ID和隊(duì)列組合的以太網(wǎng)RX和TX刪除回調(diào)函數(shù)來執(zhí)行請(qǐng)求并禁用數(shù)據(jù)包捕獲。服務(wù)器還將響應(yīng)發(fā)送回客戶端,以了解處理過的請(qǐng)求的狀態(tài)。從服務(wù)器收到響應(yīng)后,客戶端套接字關(guān)閉。

庫API rte_pdump_uninit()通過關(guān)閉pthread和服務(wù)器套接字來初始化數(shù)據(jù)包捕獲框架。

庫API rte_pdump_set_socket_dir()根據(jù)API的類型參數(shù)將給定路徑設(shè)置為服務(wù)器套接字路徑或客戶端套接字路徑。如果給定路徑為NULL,則將選擇默認(rèn)路徑(即root用戶的/var/run/.dpdk或非root用戶的~/.dpdk)。如果服務(wù)器套接字路徑與默認(rèn)路徑不同,客戶端還需要調(diào)用此API來設(shè)置其服務(wù)器套接字路徑。

19.3.用例:抓包

DPDK應(yīng)用程序/pdump工具是基于此庫開發(fā)的,用于捕獲DPDK中的數(shù)據(jù)包。用戶可以用它來開發(fā)自己的數(shù)據(jù)包捕獲工具。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,616評(píng)論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,276評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,150評(píng)論 25 708
  • 在今天的功課里的“我是富足”,意思不單只是我擁有富足,而是意味著我就是富足本身。我慷慨給予是因?yàn)槲抑雷约菏菬o限的...
    英杰旺姆閱讀 150評(píng)論 0 0
  • 豆子9歲時(shí),我們?nèi)业窖阄骱妗?看到有開卡丁車的,一次是4輛車一起開??戳藙e人開了幾次,豆爸就問豆子想不想開,豆...
    近馨閱讀 302評(píng)論 4 5

友情鏈接更多精彩內(nèi)容