From: "Ananyev, Konstantin" <konstantin.ananyev@intel.com>
To: Olivier Matz <olivier.matz@6wind.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "jigsaw@gmail.com" <jigsaw@gmail.com>
Subject: Re: [dpdk-dev] [PATCH v2 09/13] mbuf: introduce new checksum API
Date: Mon, 17 Nov 2014 18:15:32 +0000 [thread overview]
Message-ID: <2601191342CEEE43887BDE71AB977258213AE563@IRSMSX105.ger.corp.intel.com> (raw)
In-Reply-To: <1415984609-2484-10-git-send-email-olivier.matz@6wind.com>
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Olivier Matz
> Sent: Friday, November 14, 2014 5:03 PM
> To: dev@dpdk.org
> Cc: jigsaw@gmail.com
> Subject: [dpdk-dev] [PATCH v2 09/13] mbuf: introduce new checksum API
>
> Introduce new functions to calculate checksums. These new functions
> are derivated from the ones provided csumonly.c but slightly reworked.
> There is still some room for future optimization of these functions
> (maybe SSE/AVX, ...).
>
> This API will be modified in tbe next commits by the introduction of
> TSO that requires a different pseudo header checksum to be set in the
> packet.
>
> Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Just 2 nits from me:
1)
> +static inline uint16_t
> +rte_raw_cksum(const char *buf, size_t len)
> +{
...
> + while (len >= 8) {
> + sum += u16[0]; sum += u16[1]; sum += u16[2]; sum += u16[3];
Can you put each expression into a new line?
sum += u16[0];
sum += u16[1];
...
To make it easier to read.
Or can it be rewritten just like:
sum = (uint32_t)u16[0] + u16[1] + u16[2] + u16[3];
here?
2)
> + while (len >= 8) {
> + sum += u16[0]; sum += u16[1]; sum += u16[2]; sum += u16[3];
> + len -= 8;
> + u16 += 4;
> + }
> + while (len >= 2) {
> + sum += *u16;
> + len -= 2;
> + u16 += 1;
> + }
In the code above, probably use sizeof(u16[0]) wherever appropriate.
To make things a bit more clearer and consistent.
...
while (len >= 4 * sizeof(u16[0]))
len -= 4 * sizeof(u16[0]);
u16 += 4;
...
Same for second loop.
> ---
> app/test-pmd/csumonly.c | 133 ++-------------------------------
> lib/librte_mbuf/rte_mbuf.h | 3 +-
> lib/librte_net/rte_ip.h | 179 +++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 189 insertions(+), 126 deletions(-)
>
> diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
> index dda5d9e..39f974d 100644
> --- a/app/test-pmd/csumonly.c
> +++ b/app/test-pmd/csumonly.c
> @@ -86,137 +86,22 @@
> #define _htons(x) (x)
> #endif
>
> -static inline uint16_t
> -get_16b_sum(uint16_t *ptr16, uint32_t nr)
> -{
> - uint32_t sum = 0;
> - while (nr > 1)
> - {
> - sum +=*ptr16;
> - nr -= sizeof(uint16_t);
> - ptr16++;
> - if (sum > UINT16_MAX)
> - sum -= UINT16_MAX;
> - }
> -
> - /* If length is in odd bytes */
> - if (nr)
> - sum += *((uint8_t*)ptr16);
> -
> - sum = ((sum & 0xffff0000) >> 16) + (sum & 0xffff);
> - sum &= 0x0ffff;
> - return (uint16_t)sum;
> -}
> -
> -static inline uint16_t
> -get_ipv4_cksum(struct ipv4_hdr *ipv4_hdr)
> -{
> - uint16_t cksum;
> - cksum = get_16b_sum((uint16_t*)ipv4_hdr, sizeof(struct ipv4_hdr));
> - return (uint16_t)((cksum == 0xffff)?cksum:~cksum);
> -}
> -
> -
> -static inline uint16_t
> -get_ipv4_psd_sum(struct ipv4_hdr *ip_hdr)
> -{
> - /* Pseudo Header for IPv4/UDP/TCP checksum */
> - union ipv4_psd_header {
> - struct {
> - uint32_t src_addr; /* IP address of source host. */
> - uint32_t dst_addr; /* IP address of destination host(s). */
> - uint8_t zero; /* zero. */
> - uint8_t proto; /* L4 protocol type. */
> - uint16_t len; /* L4 length. */
> - } __attribute__((__packed__));
> - uint16_t u16_arr[0];
> - } psd_hdr;
> -
> - psd_hdr.src_addr = ip_hdr->src_addr;
> - psd_hdr.dst_addr = ip_hdr->dst_addr;
> - psd_hdr.zero = 0;
> - psd_hdr.proto = ip_hdr->next_proto_id;
> - psd_hdr.len = rte_cpu_to_be_16((uint16_t)(rte_be_to_cpu_16(ip_hdr->total_length)
> - - sizeof(struct ipv4_hdr)));
> - return get_16b_sum(psd_hdr.u16_arr, sizeof(psd_hdr));
> -}
> -
> -static inline uint16_t
> -get_ipv6_psd_sum(struct ipv6_hdr *ip_hdr)
> -{
> - /* Pseudo Header for IPv6/UDP/TCP checksum */
> - union ipv6_psd_header {
> - struct {
> - uint8_t src_addr[16]; /* IP address of source host. */
> - uint8_t dst_addr[16]; /* IP address of destination host(s). */
> - uint32_t len; /* L4 length. */
> - uint32_t proto; /* L4 protocol - top 3 bytes must be zero */
> - } __attribute__((__packed__));
> -
> - uint16_t u16_arr[0]; /* allow use as 16-bit values with safe aliasing */
> - } psd_hdr;
> -
> - rte_memcpy(&psd_hdr.src_addr, ip_hdr->src_addr,
> - sizeof(ip_hdr->src_addr) + sizeof(ip_hdr->dst_addr));
> - psd_hdr.len = ip_hdr->payload_len;
> - psd_hdr.proto = (ip_hdr->proto << 24);
> -
> - return get_16b_sum(psd_hdr.u16_arr, sizeof(psd_hdr));
> -}
> -
> static uint16_t
> get_psd_sum(void *l3_hdr, uint16_t ethertype)
> {
> if (ethertype == _htons(ETHER_TYPE_IPv4))
> - return get_ipv4_psd_sum(l3_hdr);
> + return rte_ipv4_phdr_cksum(l3_hdr);
> else /* assume ethertype == ETHER_TYPE_IPv6 */
> - return get_ipv6_psd_sum(l3_hdr);
> -}
> -
> -static inline uint16_t
> -get_ipv4_udptcp_checksum(struct ipv4_hdr *ipv4_hdr, uint16_t *l4_hdr)
> -{
> - uint32_t cksum;
> - uint32_t l4_len;
> -
> - l4_len = rte_be_to_cpu_16(ipv4_hdr->total_length) - sizeof(struct ipv4_hdr);
> -
> - cksum = get_16b_sum(l4_hdr, l4_len);
> - cksum += get_ipv4_psd_sum(ipv4_hdr);
> -
> - cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
> - cksum = (~cksum) & 0xffff;
> - if (cksum == 0)
> - cksum = 0xffff;
> - return (uint16_t)cksum;
> -}
> -
> -static inline uint16_t
> -get_ipv6_udptcp_checksum(struct ipv6_hdr *ipv6_hdr, uint16_t *l4_hdr)
> -{
> - uint32_t cksum;
> - uint32_t l4_len;
> -
> - l4_len = rte_be_to_cpu_16(ipv6_hdr->payload_len);
> -
> - cksum = get_16b_sum(l4_hdr, l4_len);
> - cksum += get_ipv6_psd_sum(ipv6_hdr);
> -
> - cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
> - cksum = (~cksum) & 0xffff;
> - if (cksum == 0)
> - cksum = 0xffff;
> -
> - return (uint16_t)cksum;
> + return rte_ipv6_phdr_cksum(l3_hdr);
> }
>
> static uint16_t
> get_udptcp_checksum(void *l3_hdr, void *l4_hdr, uint16_t ethertype)
> {
> if (ethertype == _htons(ETHER_TYPE_IPv4))
> - return get_ipv4_udptcp_checksum(l3_hdr, l4_hdr);
> + return rte_ipv4_udptcp_cksum(l3_hdr, l4_hdr);
> else /* assume ethertype == ETHER_TYPE_IPv6 */
> - return get_ipv6_udptcp_checksum(l3_hdr, l4_hdr);
> + return rte_ipv6_udptcp_cksum(l3_hdr, l4_hdr);
> }
>
> /*
> @@ -294,7 +179,7 @@ process_inner_cksums(void *l3_hdr, uint16_t ethertype, uint16_t l3_len,
> if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM)
> ol_flags |= PKT_TX_IP_CKSUM;
> else
> - ipv4_hdr->hdr_checksum = get_ipv4_cksum(ipv4_hdr);
> + ipv4_hdr->hdr_checksum = rte_ipv4_cksum(ipv4_hdr);
>
> }
> else if (ethertype != _htons(ETHER_TYPE_IPv6))
> @@ -366,7 +251,7 @@ process_outer_cksums(void *outer_l3_hdr, uint16_t outer_ethertype,
> ipv4_hdr->hdr_checksum = 0;
>
> if ((testpmd_ol_flags & TESTPMD_TX_OFFLOAD_VXLAN_CKSUM) == 0)
> - ipv4_hdr->hdr_checksum = get_ipv4_cksum(ipv4_hdr);
> + ipv4_hdr->hdr_checksum = rte_ipv4_cksum(ipv4_hdr);
> }
>
> udp_hdr = (struct udp_hdr *)((char *)outer_l3_hdr + outer_l3_len);
> @@ -376,12 +261,10 @@ process_outer_cksums(void *outer_l3_hdr, uint16_t outer_ethertype,
> if ((testpmd_ol_flags & TESTPMD_TX_OFFLOAD_VXLAN_CKSUM) == 0) {
> if (outer_ethertype == _htons(ETHER_TYPE_IPv4))
> udp_hdr->dgram_cksum =
> - get_ipv4_udptcp_checksum(ipv4_hdr,
> - (uint16_t *)udp_hdr);
> + rte_ipv4_udptcp_cksum(ipv4_hdr, udp_hdr);
> else
> udp_hdr->dgram_cksum =
> - get_ipv6_udptcp_checksum(ipv6_hdr,
> - (uint16_t *)udp_hdr);
> + rte_ipv6_udptcp_cksum(ipv6_hdr, udp_hdr);
> }
> }
>
> diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
> index e76617f..3c8e825 100644
> --- a/lib/librte_mbuf/rte_mbuf.h
> +++ b/lib/librte_mbuf/rte_mbuf.h
> @@ -114,7 +114,8 @@ extern "C" {
> * - fill l2_len and l3_len in mbuf
> * - set the flags PKT_TX_TCP_CKSUM, PKT_TX_SCTP_CKSUM or PKT_TX_UDP_CKSUM
> * - calculate the pseudo header checksum and set it in the L4 header (only
> - * for TCP or UDP). For SCTP, set the crc field to 0.
> + * for TCP or UDP). See rte_ipv4_phdr_cksum() and rte_ipv6_phdr_cksum().
> + * For SCTP, set the crc field to 0.
> */
> #define PKT_TX_L4_NO_CKSUM (0ULL << 52) /* Disable L4 cksum of TX pkt. */
> #define PKT_TX_TCP_CKSUM (1ULL << 52) /**< TCP cksum of TX pkt. computed by NIC. */
> diff --git a/lib/librte_net/rte_ip.h b/lib/librte_net/rte_ip.h
> index e3f65c1..9cfca7f 100644
> --- a/lib/librte_net/rte_ip.h
> +++ b/lib/librte_net/rte_ip.h
> @@ -78,6 +78,9 @@
>
> #include <stdint.h>
>
> +#include <rte_memcpy.h>
> +#include <rte_byteorder.h>
> +
> #ifdef __cplusplus
> extern "C" {
> #endif
> @@ -247,6 +250,124 @@ struct ipv4_hdr {
> ((x) >= IPV4_MIN_MCAST && (x) <= IPV4_MAX_MCAST) /**< check if IPv4 address is multicast */
>
> /**
> + * Process the non-complemented checksum of a buffer.
> + *
> + * @param buf
> + * Pointer to the buffer.
> + * @param len
> + * Length of the buffer.
> + * @return
> + * The non-complemented checksum.
> + */
> +static inline uint16_t
> +rte_raw_cksum(const char *buf, size_t len)
> +{
> + const uint16_t *u16 = (const uint16_t *)buf;
> + uint32_t sum = 0;
> +
> + while (len >= 8) {
> + sum += u16[0]; sum += u16[1]; sum += u16[2]; sum += u16[3];
> + len -= 8;
> + u16 += 4;
> + }
> + while (len >= 2) {
> + sum += *u16;
> + len -= 2;
> + u16 += 1;
> + }
> +
> + /* if length is in odd bytes */
> + if (len == 1)
> + sum += *((const uint8_t *)u16);
> +
> + sum = ((sum & 0xffff0000) >> 16) + (sum & 0xffff);
> + sum = ((sum & 0xffff0000) >> 16) + (sum & 0xffff);
> + return (uint16_t)sum;
> +}
> +
> +/**
> + * Process the IPv4 checksum of an IPv4 header.
> + *
> + * The checksum field must be set to 0 by the caller.
> + *
> + * @param ipv4_hdr
> + * The pointer to the contiguous IPv4 header.
> + * @return
> + * The complemented checksum to set in the IP packet.
> + */
> +static inline uint16_t
> +rte_ipv4_cksum(const struct ipv4_hdr *ipv4_hdr)
> +{
> + uint16_t cksum;
> + cksum = rte_raw_cksum((const char *)ipv4_hdr, sizeof(struct ipv4_hdr));
> + return ((cksum == 0xffff) ? cksum : ~cksum);
> +}
> +
> +/**
> + * Process the pseudo-header checksum of an IPv4 header.
> + *
> + * The checksum field must be set to 0 by the caller.
> + *
> + * @param ipv4_hdr
> + * The pointer to the contiguous IPv4 header.
> + * @return
> + * The non-complemented checksum to set in the L4 header.
> + */
> +static inline uint16_t
> +rte_ipv4_phdr_cksum(const struct ipv4_hdr *ipv4_hdr)
> +{
> + struct ipv4_psd_header {
> + uint32_t src_addr; /* IP address of source host. */
> + uint32_t dst_addr; /* IP address of destination host. */
> + uint8_t zero; /* zero. */
> + uint8_t proto; /* L4 protocol type. */
> + uint16_t len; /* L4 length. */
> + } psd_hdr;
> +
> + psd_hdr.src_addr = ipv4_hdr->src_addr;
> + psd_hdr.dst_addr = ipv4_hdr->dst_addr;
> + psd_hdr.zero = 0;
> + psd_hdr.proto = ipv4_hdr->next_proto_id;
> + psd_hdr.len = rte_cpu_to_be_16(
> + (uint16_t)(rte_be_to_cpu_16(ipv4_hdr->total_length)
> + - sizeof(struct ipv4_hdr)));
> + return rte_raw_cksum((const char *)&psd_hdr, sizeof(psd_hdr));
> +}
> +
> +/**
> + * Process the IPv4 UDP or TCP checksum.
> + *
> + * The IPv4 header should not contains options. The IP and layer 4
> + * checksum must be set to 0 in the packet by the caller.
> + *
> + * @param ipv4_hdr
> + * The pointer to the contiguous IPv4 header.
> + * @param l4_hdr
> + * The pointer to the beginning of the L4 header.
> + * @return
> + * The complemented checksum to set in the IP packet.
> + */
> +static inline uint16_t
> +rte_ipv4_udptcp_cksum(const struct ipv4_hdr *ipv4_hdr, const void *l4_hdr)
> +{
> + uint32_t cksum;
> + uint32_t l4_len;
> +
> + l4_len = rte_be_to_cpu_16(ipv4_hdr->total_length) -
> + sizeof(struct ipv4_hdr);
> +
> + cksum = rte_raw_cksum(l4_hdr, l4_len);
> + cksum += rte_ipv4_phdr_cksum(ipv4_hdr);
> +
> + cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
> + cksum = (~cksum) & 0xffff;
> + if (cksum == 0)
> + cksum = 0xffff;
> +
> + return cksum;
> +}
> +
> +/**
> * IPv6 Header
> */
> struct ipv6_hdr {
> @@ -258,6 +379,64 @@ struct ipv6_hdr {
> uint8_t dst_addr[16]; /**< IP address of destination host(s). */
> } __attribute__((__packed__));
>
> +/**
> + * Process the pseudo-header checksum of an IPv6 header.
> + *
> + * @param ipv6_hdr
> + * The pointer to the contiguous IPv6 header.
> + * @return
> + * The non-complemented checksum to set in the L4 header.
> + */
> +static inline uint16_t
> +rte_ipv6_phdr_cksum(const struct ipv6_hdr *ipv6_hdr)
> +{
> + struct ipv6_psd_header {
> + uint8_t src_addr[16]; /* IP address of source host. */
> + uint8_t dst_addr[16]; /* IP address of destination host. */
> + uint32_t len; /* L4 length. */
> + uint32_t proto; /* L4 protocol - top 3 bytes must be zero */
> + } psd_hdr;
> +
> + rte_memcpy(&psd_hdr.src_addr, ipv6_hdr->src_addr,
> + sizeof(ipv6_hdr->src_addr) + sizeof(ipv6_hdr->dst_addr));
> + psd_hdr.proto = (ipv6_hdr->proto << 24);
> + psd_hdr.len = ipv6_hdr->payload_len;
> +
> + return rte_raw_cksum((const char *)&psd_hdr, sizeof(psd_hdr));
> +}
> +
> +/**
> + * Process the IPv6 UDP or TCP checksum.
> + *
> + * The IPv4 header should not contains options. The layer 4 checksum
> + * must be set to 0 in the packet by the caller.
> + *
> + * @param ipv6_hdr
> + * The pointer to the contiguous IPv6 header.
> + * @param l4_hdr
> + * The pointer to the beginning of the L4 header.
> + * @return
> + * The complemented checksum to set in the IP packet.
> + */
> +static inline uint16_t
> +rte_ipv6_udptcp_cksum(const struct ipv6_hdr *ipv6_hdr, const void *l4_hdr)
> +{
> + uint32_t cksum;
> + uint32_t l4_len;
> +
> + l4_len = rte_be_to_cpu_16(ipv6_hdr->payload_len);
> +
> + cksum = rte_raw_cksum(l4_hdr, l4_len);
> + cksum += rte_ipv6_phdr_cksum(ipv6_hdr, 0);
> +
> + cksum = ((cksum & 0xffff0000) >> 16) + (cksum & 0xffff);
> + cksum = (~cksum) & 0xffff;
> + if (cksum == 0)
> + cksum = 0xffff;
> +
> + return cksum;
> +}
> +
> #ifdef __cplusplus
> }
> #endif
> --
> 2.1.0
next prev parent reply other threads:[~2014-11-17 18:05 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-10 15:59 [dpdk-dev] [PATCH 00/12] add TSO support Olivier Matz
2014-11-10 15:59 ` [dpdk-dev] [PATCH 01/12] igb/ixgbe: fix IP checksum calculation Olivier Matz
2014-11-10 15:59 ` [dpdk-dev] [PATCH 02/12] ixgbe: fix remaining pkt_flags variable size to 64 bits Olivier Matz
2014-11-10 16:59 ` Bruce Richardson
2014-11-10 15:59 ` [dpdk-dev] [PATCH 03/12] mbuf: move vxlan_cksum flag definition at the proper place Olivier Matz
2014-11-10 17:09 ` Bruce Richardson
2014-11-10 15:59 ` [dpdk-dev] [PATCH 04/12] mbuf: add help about TX checksum flags Olivier Matz
2014-11-10 17:10 ` Bruce Richardson
2014-11-10 15:59 ` [dpdk-dev] [PATCH 05/12] mbuf: remove too specific PKT_TX_OFFLOAD_MASK definition Olivier Matz
2014-11-10 17:14 ` Bruce Richardson
2014-11-10 20:59 ` Olivier MATZ
2014-11-10 15:59 ` [dpdk-dev] [PATCH 06/12] mbuf: add functions to get the name of an ol_flag Olivier Matz
2014-11-10 17:29 ` Bruce Richardson
2014-11-10 20:54 ` Olivier MATZ
2014-11-12 17:21 ` Ananyev, Konstantin
2014-11-12 17:44 ` Olivier MATZ
2014-11-10 15:59 ` [dpdk-dev] [PATCH 07/12] mbuf: generic support for TCP segmentation offload Olivier Matz
2014-11-11 3:17 ` Liu, Jijiang
2014-11-12 13:09 ` Ananyev, Konstantin
2014-11-10 15:59 ` [dpdk-dev] [PATCH 08/12] ixgbe: support " Olivier Matz
2014-11-10 15:59 ` [dpdk-dev] [PATCH 09/12] testpmd: fix use of offload flags in testpmd Olivier Matz
2014-11-10 15:59 ` [dpdk-dev] [PATCH 10/12] testpmd: rework csum forward engine Olivier Matz
2014-11-11 8:35 ` Liu, Jijiang
2014-11-11 9:55 ` Olivier MATZ
2014-11-10 15:59 ` [dpdk-dev] [PATCH 11/12] testpmd: support TSO in " Olivier Matz
2014-11-10 15:59 ` [dpdk-dev] [PATCH 12/12] testpmd: add a verbose mode " Olivier Matz
2014-11-11 9:21 ` [dpdk-dev] [PATCH 00/12] add TSO support Olivier MATZ
2014-11-11 9:48 ` Olivier MATZ
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 00/13] " Olivier Matz
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 01/13] igb/ixgbe: fix IP checksum calculation Olivier Matz
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 02/13] ixgbe: fix remaining pkt_flags variable size to 64 bits Olivier Matz
2014-11-17 16:47 ` Walukiewicz, Miroslaw
2014-11-17 17:03 ` Olivier MATZ
2014-11-17 17:40 ` Thomas Monjalon
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 03/13] mbuf: move vxlan_cksum flag definition at the proper place Olivier Matz
2014-11-17 22:05 ` Thomas Monjalon
2014-11-18 14:10 ` Olivier MATZ
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 04/13] mbuf: add help about TX checksum flags Olivier Matz
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 05/13] mbuf: remove too specific PKT_TX_OFFLOAD_MASK definition Olivier Matz
2014-11-17 10:35 ` Bruce Richardson
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 06/13] mbuf: add functions to get the name of an ol_flag Olivier Matz
2014-11-17 10:39 ` Bruce Richardson
2014-11-17 12:51 ` Olivier MATZ
2014-11-17 19:00 ` Ananyev, Konstantin
2014-11-18 9:29 ` Olivier MATZ
2014-11-19 11:06 ` Ananyev, Konstantin
2014-11-25 10:37 ` Ananyev, Konstantin
2014-11-25 12:15 ` Zhang, Helin
2014-11-25 12:37 ` Olivier MATZ
2014-11-25 13:31 ` Zhang, Helin
2014-11-25 13:49 ` Ananyev, Konstantin
2014-11-26 0:58 ` Zhang, Helin
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 07/13] testpmd: fix use of offload flags in testpmd Olivier Matz
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 08/13] testpmd: rework csum forward engine Olivier Matz
2014-11-17 8:11 ` Liu, Jijiang
2014-11-17 13:00 ` Olivier MATZ
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 09/13] mbuf: introduce new checksum API Olivier Matz
2014-11-17 18:15 ` Ananyev, Konstantin [this message]
2014-11-18 9:10 ` Olivier MATZ
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 10/13] mbuf: generic support for TCP segmentation offload Olivier Matz
2014-11-17 23:33 ` Ananyev, Konstantin
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 11/13] ixgbe: support " Olivier Matz
2014-11-17 18:26 ` Ananyev, Konstantin
2014-11-18 9:11 ` Olivier MATZ
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 12/13] testpmd: support TSO in csum forward engine Olivier Matz
2014-11-14 17:03 ` [dpdk-dev] [PATCH v2 13/13] testpmd: add a verbose mode " Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 00/13] add TSO support Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 01/13] igb/ixgbe: fix IP checksum calculation Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 02/13] ixgbe: fix remaining pkt_flags variable size to 64 bits Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 03/13] mbuf: reorder tx ol_flags Olivier Matz
2014-11-25 10:22 ` Thomas Monjalon
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 04/13] mbuf: add help about TX checksum flags Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 05/13] mbuf: remove too specific PKT_TX_OFFLOAD_MASK definition Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 06/13] mbuf: add functions to get the name of an ol_flag Olivier Matz
2014-11-25 10:23 ` Thomas Monjalon
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 07/13] testpmd: fix use of offload flags in testpmd Olivier Matz
2014-11-25 11:52 ` Ananyev, Konstantin
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 08/13] testpmd: rework csum forward engine Olivier Matz
2014-11-26 10:10 ` Ananyev, Konstantin
2014-11-26 11:14 ` Olivier MATZ
2014-11-26 12:25 ` Ananyev, Konstantin
2014-11-26 14:55 ` Olivier MATZ
2014-11-26 16:34 ` Ananyev, Konstantin
2014-11-27 8:34 ` Liu, Jijiang
2014-11-26 13:59 ` Liu, Jijiang
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 09/13] mbuf: introduce new checksum API Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 10/13] mbuf: generic support for TCP segmentation offload Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 11/13] ixgbe: support " Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 12/13] testpmd: support TSO in csum forward engine Olivier Matz
2014-11-20 22:58 ` [dpdk-dev] [PATCH v3 13/13] testpmd: add a verbose mode " Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 00/13] add TSO support Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 01/13] igb/ixgbe: fix IP checksum calculation Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 02/13] ixgbe: fix remaining pkt_flags variable size to 64 bits Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 03/13] mbuf: reorder tx ol_flags Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 04/13] mbuf: add help about TX checksum flags Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 05/13] mbuf: remove too specific PKT_TX_OFFLOAD_MASK definition Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 06/13] mbuf: add functions to get the name of an ol_flag Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 07/13] testpmd: fix use of offload flags in testpmd Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 08/13] testpmd: rework csum forward engine Olivier Matz
2014-11-26 20:02 ` Ananyev, Konstantin
2014-11-27 8:26 ` Liu, Jijiang
2014-11-27 9:10 ` Olivier MATZ
2014-11-27 11:02 ` Ananyev, Konstantin
2014-11-28 8:54 ` Liu, Jijiang
2014-11-28 9:54 ` Olivier MATZ
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 09/13] mbuf: introduce new checksum API Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 10/13] mbuf: generic support for TCP segmentation offload Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 11/13] ixgbe: support " Olivier Matz
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 12/13] testpmd: support TSO in csum forward engine Olivier Matz
2014-11-26 21:23 ` Ananyev, Konstantin
2014-11-26 15:04 ` [dpdk-dev] [PATCH v4 13/13] testpmd: add a verbose mode " Olivier Matz
2014-11-26 18:30 ` [dpdk-dev] [PATCH v4 00/13] add TSO support Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2601191342CEEE43887BDE71AB977258213AE563@IRSMSX105.ger.corp.intel.com \
--to=konstantin.ananyev@intel.com \
--cc=dev@dpdk.org \
--cc=jigsaw@gmail.com \
--cc=olivier.matz@6wind.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).