[dpdk-dev] [PATCH 09/11] examples/ipsec-secgw: Fixed ip length in case of transport

Aviad Yehezkel aviadye at dev.mellanox.co.il
Mon Oct 16 13:44:36 CEST 2017


On 10/16/2017 12:43 PM, Sergio Gonzalez Monroy wrote:
> On 14/10/2017 14:28, aviadye at dev.mellanox.co.il wrote:
>> From: Aviad Yehezkel <aviadye at mellanox.com>
>>
>> IP length was incorrect causing corrupted ICMP packets for example
>>
>> Signed-off-by: Aviad Yehezkel <aviadye at mellanox.com>
>> ---
>>   examples/ipsec-secgw/esp.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/examples/ipsec-secgw/esp.c b/examples/ipsec-secgw/esp.c
>> index 81ebf55..12c6f8c 100644
>> --- a/examples/ipsec-secgw/esp.c
>> +++ b/examples/ipsec-secgw/esp.c
>> @@ -205,13 +205,13 @@ esp_inbound_post(struct rte_mbuf *m, struct 
>> ipsec_sa *sa,
>>           if (likely(ip->ip_v == IPVERSION)) {
>>               memmove(ip4, ip, ip->ip_hl * 4);
>>               ip4->ip_p = *nexthdr;
>> -            ip4->ip_len = htons(rte_pktmbuf_data_len(m));
>> +            ip4->ip_len = htons(rte_pktmbuf_pkt_len(m));
>>           } else {
>>               ip6 = (struct ip6_hdr *)ip4;
>>               /* XXX No option headers supported */
>>               memmove(ip6, ip, sizeof(struct ip6_hdr));
>>               ip6->ip6_nxt = *nexthdr;
>> -            ip6->ip6_plen = htons(rte_pktmbuf_data_len(m));
>> +            ip6->ip6_plen = htons(rte_pktmbuf_pkt_len(m));
>>           }
>>       } else
>>           ipip_inbound(m, sizeof(struct esp_hdr) + sa->iv_len);
>
> AFAIK the app does not support multi-segments (chain mbufs), so 
> data_len should be the same as pkt_len.
> Is that not the case?
>
This is the inbound function (RX side), so mbufs are allocated by PMD.
PMD is allocating mbuf with additional 14 bytes for ETH header but trim 
it before passing the mbuf.
As a result seg len is 14 bytes smaller than data len.

Thanks,
Aviad

> Thanks,
> Sergio



More information about the dev mailing list