[dpdk-dev] About the data payload of rte_mbuf?

Varghese, Vipin vipin.varghese at intel.com
Thu Dec 6 05:20:05 CET 2018


Hi,

A quick query from your email

Snipped

> ipv4_hdr = rte_pktmbuf_mtod_offset(m, struct ipv4_hdr *, sizeof(struct
> ether_hdr)); 

Questions:
1. Should not be sizeof(struct ipv4_hdr) since you are passing second argument as ipv4_hdr?
2. you are getting packets which starts from ether or ipv4? If it is ethernet header would not you checking if ether type is ipv4 first? You can get arp, vlan, mpls right?

ip_len = ntohs(ipv4_hdr->total_length);
> 
> 
> 
> if (ipv4_hdr->next_proto_id == IPPROTO_TCP) {
>     tcp_hdr = (struct tcp_hdr *)((uint8_t *)ipv4_hdr + ((ipv4_hdr->version_ihl &
> 0xf) << 2));
>     payload = (uint8_t *)tcp_hdr + (tcp_hdr->data_off << 2);
>     payload_len = ip_len - (payload - (uint8_t *)ipv4_hdr);
> 
> }
> 
> 
> when i send packets using dpdk-pktgen, i found:
> ip_len = 46
> ip_header_len = 20
> but the tcp_header_len=(tcp_hdr->data_off << 2)=0, and (payload - (uint8_t
> *)ipv4_hdr) = 340 > ip_len.
> 
> 
> I'm confused, is there any errors about the code to compute the payload_len of
> rte_mbuf?
> I think maybe the dpdk-pktgen cannot send the packets with payload?
> 
> 
> I'm a beginner, anyone can help me how to compute the payload_len of
> rte_mbuf and test it?
> 
> 
> Thank you in advance!


More information about the dev mailing list