New upstream version 18.02
[deb_dpdk.git] / app / test-pmd / csumonly.c
index aa29f5f..5f5ab64 100644 (file)
@@ -1,35 +1,6 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- *   Copyright 2014 6WIND S.A.
- *   All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Intel Corporation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2010-2014 Intel Corporation.
+ * Copyright 2014 6WIND S.A.
  */
 
 #include <stdarg.h>
@@ -316,7 +287,7 @@ parse_encap_ip(void *encap_ip, struct testpmd_offload_info *info)
  * depending on the testpmd command line configuration */
 static uint64_t
 process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
-       uint16_t testpmd_ol_flags)
+       uint64_t tx_offloads)
 {
        struct ipv4_hdr *ipv4_hdr = l3_hdr;
        struct udp_hdr *udp_hdr;
@@ -347,7 +318,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
                if (info->l4_proto == IPPROTO_TCP && tso_segsz) {
                        ol_flags |= PKT_TX_IP_CKSUM;
                } else {
-                       if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM)
+                       if (tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM)
                                ol_flags |= PKT_TX_IP_CKSUM;
                        else
                                ipv4_hdr->hdr_checksum =
@@ -363,7 +334,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
                /* do not recalculate udp cksum if it was 0 */
                if (udp_hdr->dgram_cksum != 0) {
                        udp_hdr->dgram_cksum = 0;
-                       if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM)
+                       if (tx_offloads & DEV_TX_OFFLOAD_UDP_CKSUM)
                                ol_flags |= PKT_TX_UDP_CKSUM;
                        else {
                                udp_hdr->dgram_cksum =
@@ -376,7 +347,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
                tcp_hdr->cksum = 0;
                if (tso_segsz)
                        ol_flags |= PKT_TX_TCP_SEG;
-               else if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM)
+               else if (tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM)
                        ol_flags |= PKT_TX_TCP_CKSUM;
                else {
                        tcp_hdr->cksum =
@@ -390,7 +361,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
                sctp_hdr->cksum = 0;
                /* sctp payload must be a multiple of 4 to be
                 * offloaded */
-               if ((testpmd_ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM) &&
+               if ((tx_offloads & DEV_TX_OFFLOAD_SCTP_CKSUM) &&
                        ((ipv4_hdr->total_length & 0x3) == 0)) {
                        ol_flags |= PKT_TX_SCTP_CKSUM;
                } else {
@@ -405,7 +376,7 @@ process_inner_cksums(void *l3_hdr, const struct testpmd_offload_info *info,
 /* Calculate the checksum of outer header */
 static uint64_t
 process_outer_cksums(void *outer_l3_hdr, struct testpmd_offload_info *info,
-       uint16_t testpmd_ol_flags, int tso_enabled)
+       uint64_t tx_offloads, int tso_enabled)
 {
        struct ipv4_hdr *ipv4_hdr = outer_l3_hdr;
        struct ipv6_hdr *ipv6_hdr = outer_l3_hdr;
@@ -416,7 +387,7 @@ process_outer_cksums(void *outer_l3_hdr, struct testpmd_offload_info *info,
                ipv4_hdr->hdr_checksum = 0;
                ol_flags |= PKT_TX_OUTER_IPV4;
 
-               if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM)
+               if (tx_offloads & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM)
                        ol_flags |= PKT_TX_OUTER_IP_CKSUM;
                else
                        ipv4_hdr->hdr_checksum = rte_ipv4_cksum(ipv4_hdr);
@@ -563,7 +534,7 @@ pkt_copy_split(const struct rte_mbuf *pkt)
        while (i != 0) {
                p = rte_pktmbuf_alloc(mp);
                if (p == NULL) {
-                       RTE_LOG(ERR, USER1,
+                       TESTPMD_LOG(ERR,
                                "failed to allocate %u-th of %u mbuf "
                                "from mempool: %s\n",
                                nb_seg - i, nb_seg, mp->name);
@@ -572,7 +543,7 @@ pkt_copy_split(const struct rte_mbuf *pkt)
 
                md[--i] = p;
                if (rte_pktmbuf_tailroom(md[i]) < seglen[i]) {
-                       RTE_LOG(ERR, USER1, "mempool %s, %u-th segment: "
+                       TESTPMD_LOG(ERR, "mempool %s, %u-th segment: "
                                "expected seglen: %u, "
                                "actual mbuf tailroom: %u\n",
                                mp->name, i, seglen[i],
@@ -585,7 +556,7 @@ pkt_copy_split(const struct rte_mbuf *pkt)
        if (i == 0) {
                rc = mbuf_copy_split(pkt, md, seglen, nb_seg);
                if (rc < 0)
-                       RTE_LOG(ERR, USER1,
+                       TESTPMD_LOG(ERR,
                                "mbuf_copy_split for %p(len=%u, nb_seg=%u) "
                                "into %u segments failed with error code: %d\n",
                                pkt, pkt->pkt_len, pkt->nb_segs, nb_seg, rc);
@@ -646,7 +617,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
        uint16_t nb_prep;
        uint16_t i;
        uint64_t rx_ol_flags, tx_ol_flags;
-       uint16_t testpmd_ol_flags;
+       uint64_t tx_offloads;
        uint32_t retry;
        uint32_t rx_bad_ip_csum;
        uint32_t rx_bad_l4_csum;
@@ -678,7 +649,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
        gro_enable = gro_ports[fs->rx_port].enable;
 
        txp = &ports[fs->tx_port];
-       testpmd_ol_flags = txp->tx_ol_flags;
+       tx_offloads = txp->dev_conf.txmode.offloads;
        memset(&info, 0, sizeof(info));
        info.tso_segsz = txp->tso_segsz;
        info.tunnel_tso_segsz = txp->tunnel_tso_segsz;
@@ -714,7 +685,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                l3_hdr = (char *)eth_hdr + info.l2_len;
 
                /* check if it's a supported tunnel */
-               if (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_PARSE_TUNNEL) {
+               if (txp->parse_tunnel) {
                        if (info.l4_proto == IPPROTO_UDP) {
                                struct udp_hdr *udp_hdr;
 
@@ -754,14 +725,14 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
 
                /* process checksums of inner headers first */
                tx_ol_flags |= process_inner_cksums(l3_hdr, &info,
-                       testpmd_ol_flags);
+                       tx_offloads);
 
                /* Then process outer headers if any. Note that the software
                 * checksum will be wrong if one of the inner checksums is
                 * processed in hardware. */
                if (info.is_tunnel == 1) {
                        tx_ol_flags |= process_outer_cksums(outer_l3_hdr, &info,
-                                       testpmd_ol_flags,
+                                       tx_offloads,
                                        !!(tx_ol_flags & PKT_TX_TCP_SEG));
                }
 
@@ -769,8 +740,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
 
                if (info.is_tunnel == 1) {
                        if (info.tunnel_tso_segsz ||
-                           (testpmd_ol_flags &
-                           TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM) ||
+                           (tx_offloads &
+                            DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) ||
                            (tx_ol_flags & PKT_TX_OUTER_IPV6)) {
                                m->outer_l2_len = info.outer_l2_len;
                                m->outer_l3_len = info.outer_l3_len;
@@ -832,17 +803,17 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                                        rte_be_to_cpu_16(info.outer_ethertype),
                                        info.outer_l3_len);
                        /* dump tx packet info */
-                       if ((testpmd_ol_flags & (TESTPMD_TX_OFFLOAD_IP_CKSUM |
-                                               TESTPMD_TX_OFFLOAD_UDP_CKSUM |
-                                               TESTPMD_TX_OFFLOAD_TCP_CKSUM |
-                                               TESTPMD_TX_OFFLOAD_SCTP_CKSUM)) ||
+                       if ((tx_offloads & (DEV_TX_OFFLOAD_IPV4_CKSUM |
+                                           DEV_TX_OFFLOAD_UDP_CKSUM |
+                                           DEV_TX_OFFLOAD_TCP_CKSUM |
+                                           DEV_TX_OFFLOAD_SCTP_CKSUM)) ||
                                info.tso_segsz != 0)
                                printf("tx: m->l2_len=%d m->l3_len=%d "
                                        "m->l4_len=%d\n",
                                        m->l2_len, m->l3_len, m->l4_len);
                        if (info.is_tunnel == 1) {
-                               if ((testpmd_ol_flags &
-                                   TESTPMD_TX_OFFLOAD_OUTER_IP_CKSUM) ||
+                               if ((tx_offloads &
+                                   DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM) ||
                                    (tx_ol_flags & PKT_TX_OUTER_IPV6))
                                        printf("tx: m->outer_l2_len=%d "
                                                "m->outer_l3_len=%d\n",
@@ -895,8 +866,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
                        if (ret >= 0)
                                nb_segments += ret;
                        else {
-                               RTE_LOG(DEBUG, USER1,
-                                               "Unable to segment packet");
+                               TESTPMD_LOG(DEBUG, "Unable to segment packet");
                                rte_pktmbuf_free(pkts_burst[i]);
                        }
                }