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

19.Librte_pdump庫

librte_pdump庫為DPDK中的數據包捕獲提供了一個框架。該庫將Rx和Tx mbufs的完整復制到新的mempool,因此會降低應用程序的性能,故建議只使用該庫進行調試。

該庫提供以下API來初始化數據包捕獲框架,啟用或禁用數據包捕獲,或者對其進行反初始化:

  • rte_pdump_init():初始化數據包捕獲框架。
  • rte_pdump_enable():在給定的端口和隊列上進行數據包捕獲。注意:API中的過濾器選項是用于未來增強功能的占位符。
  • rte_pdump_enable_by_deviceid():啟用在給定設備ID(vdev名稱或pci地址)和隊列上的數據包捕獲。 注意:API中的過濾器選項是用于未來增強功能的占位符。
  • rte_pdump_disable():禁用給定端口和隊列上的數據包捕獲。
  • rte_pdump_disable_by_deviceid():禁用給定設備ID(vdev名稱或pci地址)和隊列上的數據包捕獲。
  • rte_pdump_uninit():反初始化數據包捕獲框架。
  • rte_pdump_set_socket_dir():設置服務器和客戶端套接字路徑。注意:此API不是線程安全的。

19.1.操作

librte_pdump庫適用于客戶端/服務器型號。服務器負責啟用或禁用數據包捕獲,客戶端負責請求啟用或禁用數據包捕獲。

數據包捕獲框架作為程序初始化的一部分,在pthread中創建pthread和服務器套接字。調用框架初始化的應用程序將創建服務器套接字,可能是在應用程序傳入的路徑,也可能是默認路徑(root用戶的/var/run/.dpdk,非root用戶~/.dpdk)下創建。

請求啟用或禁用數據包捕獲的應用程序將在應用程序傳入的路徑下或默認路徑(root用戶的/var/run/.dpdk,非root用戶~/.dpdk)下創建客戶機套接字,用戶將請求發送到服務器。服務器套接字將監聽用于啟用或禁用數據包捕獲的客戶端請求。

19.2.實現細節

庫API rte_pdump_init()通過創建pthread和服務器套接字來初始化數據包捕獲框架。pthread上下文中的服務器套接字將監聽客戶端請求以啟用或禁用數據包捕獲。

庫API rte_pdump_enable()和rte_pdump_enable_by_deviceid()啟用數據包捕獲。每次調用這些API時,庫創建一個單獨的客戶端套接字,生成“pdump enable”請求,并將請求發送到服務器。在套接字上監聽的服務器將通過對給定的端口或設備ID和隊列組合的以太網Rx/TX注冊回調函數來接收請求并啟用數據包捕獲。然后,服務器將鏡像數據包到新的mempool并將它們入隊到客戶端傳遞給這些API的rte_ring。服務器還將響應發送回客戶端,以了解處理過的請求的狀態。從服務器收到響應后,客戶端套接字關閉。

庫API rte_pdump_disable()和rte_pdump_disable_by_deviceid()禁用數據包捕獲。每次調用這些API時,庫會創建一個單獨的客戶端套接字,生成“pdump disable”請求,并將請求發送到服務器。正在監聽套接字的服務器將通過對給定端口或設備ID和隊列組合的以太網RX和TX刪除回調函數來執行請求并禁用數據包捕獲。服務器還將響應發送回客戶端,以了解處理過的請求的狀態。從服務器收到響應后,客戶端套接字關閉。

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

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

19.3.用例:抓包

DPDK應用程序/pdump工具是基于此庫開發的,用于捕獲DPDK中的數據包。用戶可以用它來開發自己的數據包捕獲工具。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,925評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,841評論 25 708
  • 在今天的功課里的“我是富足”,意思不單只是我擁有富足,而是意味著我就是富足本身。我慷慨給予是因為我知道自己是無限的...
    英杰旺姆閱讀 136評論 0 0
  • 豆子9歲時,我們全家到雁西湖玩。 看到有開卡丁車的,一次是4輛車一起開。看了別人開了幾次,豆爸就問豆子想不想開,豆...
    近馨閱讀 271評論 4 5