我正在使用l2fwd-dpdk應用程式,我可以從中提取5個圖元,并可以看到DNS包是否存在。
現在我想用dpdk對DNS資料包進行分類,但我卻失敗了。 以下是我的代碼。
struct rte_udp_hdr *udp_hdr;
struct dnshdr *dns_hdr;
if (rte_be_to_cpu_16(udp_hdr-> dst_port) == 53)
{
printf("DNS Packet"/span>)。
char *dns_hdr = (char *)udp_hdr sizeof(rte_udp_hdr)。
我想分開
- Flags
- Rdata
- 類
- TTL
并分別保存它們。有什么辦法嗎,我也可以舒服地使用cpp包裝器。
uj5u.com熱心網友回復:
DPDK在21.08版本中不包含任何頭或結構來型別化DNS資料包。因此,解決@wildplasser提到的問題的最簡單方法是宣告你的自定義DNS頭并使用它。在你的代碼片段中,你已經有了struct dnshdr *dns_hdr;,所以更簡單的方法是修改你現有的代碼以反映
struct rte_udp_hdr *udp_hdr; /span>
struct dnshdr *dns_hdr;
/* 使用DPDK mtod API來獲取以太網幀的開始 */
/* 檢查資料包大小、乙醚型別、IP協議*/。
/*更新udp_hdr到資料包中的位置 */
if (rte_be_to_cpu_16(udp_hdr-> dst_port) == 53)
{
printf("DNS Packet"/span>)。
struct dnshdr *dns_hdr = (struct) keyword">struct dnshdr *)((char *)udp_hdr sizeof(rte_udp_hdr))。
注意:可能的結構定義代碼片段是
typedef struct {
uint16_t id;
uint16_t rd:1;
uint16_t tc:1;
uint16_t aa:1;
uint16_t opcode:4;
uint16_t qr:1;
uint16_t rcode:4;
uint16_t zero:3;
uint16_t ra:1;
uint16_t qcount; /* question count */
uint16_t ancount; /* 回答記錄數 */
uint16_t nscount; /* 名稱服務器(權威記錄)計數 */
uint16_t adcount; /* 附加記錄數 */
} custom_dnshdr;
custom_dnshdr *dns_hdr = (custom_dnshdr *) ((char *)udp_hdr sizeof(rte_udp_hdr) )。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/334267.html
標籤:
