get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/1250/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 1250,
    "url": "https://patches.dpdk.org/api/patches/1250/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1415635166-1364-10-git-send-email-olivier.matz@6wind.com/",
    "project": {
        "id": 1,
        "url": "https://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<1415635166-1364-10-git-send-email-olivier.matz@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1415635166-1364-10-git-send-email-olivier.matz@6wind.com",
    "date": "2014-11-10T15:59:23",
    "name": "[dpdk-dev,09/12] testpmd: fix use of offload flags in testpmd",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "ce9359c9c8053ad7fce107a2b5ff6503541b1848",
    "submitter": {
        "id": 8,
        "url": "https://patches.dpdk.org/api/people/8/?format=api",
        "name": "Olivier Matz",
        "email": "olivier.matz@6wind.com"
    },
    "delegate": null,
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1415635166-1364-10-git-send-email-olivier.matz@6wind.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/1250/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/1250/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 22EA97F74;\n\tMon, 10 Nov 2014 16:56:16 +0100 (CET)",
            "from mail-wg0-f50.google.com (mail-wg0-f50.google.com\n\t[74.125.82.50]) by dpdk.org (Postfix) with ESMTP id 90FA07F70\n\tfor <dev@dpdk.org>; Mon, 10 Nov 2014 16:56:15 +0100 (CET)",
            "by mail-wg0-f50.google.com with SMTP id z12so9143394wgg.9\n\tfor <dev@dpdk.org>; Mon, 10 Nov 2014 08:06:01 -0800 (PST)",
            "from glumotte.dev.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net.\n\t[82.239.227.177]) by mx.google.com with ESMTPSA id\n\tll2sm10966561wjb.11.2014.11.10.07.59.58 for <multiple recipients>\n\t(version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128);\n\tMon, 10 Nov 2014 07:59:58 -0800 (PST)"
        ],
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20130820;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=vYpcVtrTF0O4DzFNA4i1GzICThaOQYSL6OSjjataz6Y=;\n\tb=FCma93GnVnx6lKGYq5J6e8W2wsmZfg1p00bjJOPjLXCd5Tp3uttTyJirsVb3qDqPAB\n\tB8aXJNmywcmbCVDR1erv4cTJULnZ4dKB+uGvOpBdVMTy6/9F5QEW69FAdYjd3vcSHzNA\n\taonB9KJesxV6YYqKDgZJMpnq0se9faXGq7+le6Kh4aSscQ/JW0E4U6twHD79pnHMnV1w\n\tzNTDUtu7IgcoAOiRhHcKJurNg18DTxLjpQk2mI9OhG8BjdHfGaua2ehnFPy+LYgxPQar\n\tZQTF9J4y2yWwrCzdZmuo2nla8KgqbGHcvrmu+FKgLQYi5twPZVLmuyKdndsdQ5r6iTkJ\n\tZH5Q==",
        "X-Gm-Message-State": "ALoCoQmzlvFTBqv2QMu0TSY3rmzzOIMsD+eei6MOKUozoXKYh058OHeqsm6nbQdCW5aJqnFrY7t+",
        "X-Received": "by 10.180.218.40 with SMTP id pd8mr25251978wic.9.1415635199263; \n\tMon, 10 Nov 2014 07:59:59 -0800 (PST)",
        "From": "Olivier Matz <olivier.matz@6wind.com>",
        "To": "dev@dpdk.org",
        "Date": "Mon, 10 Nov 2014 16:59:23 +0100",
        "Message-Id": "<1415635166-1364-10-git-send-email-olivier.matz@6wind.com>",
        "X-Mailer": "git-send-email 2.1.0",
        "In-Reply-To": "<1415635166-1364-1-git-send-email-olivier.matz@6wind.com>",
        "References": "<1415635166-1364-1-git-send-email-olivier.matz@6wind.com>",
        "Cc": "jigsaw@gmail.com",
        "Subject": "[dpdk-dev] [PATCH 09/12] testpmd: fix use of offload flags in\n\ttestpmd",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "In testpmd the rte_port->tx_ol_flags flag was used in 2 incompatible\nmanners:\n- sometimes used with testpmd specific flags (0xff for checksums, and\n  bit 11 for vlan)\n- sometimes assigned to m->ol_flags directly, which is wrong in case\n  of checksum flags\n\nThis commit replaces the hardcoded values by named definitions, which\nare not compatible with mbuf flags. The testpmd forward engines are\nfixed to use the flags properly.\n\nSigned-off-by: Olivier Matz <olivier.matz@6wind.com>\n---\n app/test-pmd/config.c   |  4 ++--\n app/test-pmd/csumonly.c | 40 +++++++++++++++++++++++-----------------\n app/test-pmd/macfwd.c   |  5 ++++-\n app/test-pmd/macswap.c  |  5 ++++-\n app/test-pmd/testpmd.h  | 28 +++++++++++++++++++++-------\n app/test-pmd/txonly.c   |  9 ++++++---\n 6 files changed, 60 insertions(+), 31 deletions(-)",
    "diff": "diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c\nindex 9bc08f4..4b6fb91 100644\n--- a/app/test-pmd/config.c\n+++ b/app/test-pmd/config.c\n@@ -1674,7 +1674,7 @@ tx_vlan_set(portid_t port_id, uint16_t vlan_id)\n \t\treturn;\n \tif (vlan_id_is_invalid(vlan_id))\n \t\treturn;\n-\tports[port_id].tx_ol_flags |= PKT_TX_VLAN_PKT;\n+\tports[port_id].tx_ol_flags |= TESTPMD_TX_OFFLOAD_INSERT_VLAN;\n \tports[port_id].tx_vlan_id = vlan_id;\n }\n \n@@ -1683,7 +1683,7 @@ tx_vlan_reset(portid_t port_id)\n {\n \tif (port_id_is_invalid(port_id))\n \t\treturn;\n-\tports[port_id].tx_ol_flags &= ~PKT_TX_VLAN_PKT;\n+\tports[port_id].tx_ol_flags &= ~TESTPMD_TX_OFFLOAD_INSERT_VLAN;\n }\n \n void\ndiff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c\nindex 8d10bfd..743094a 100644\n--- a/app/test-pmd/csumonly.c\n+++ b/app/test-pmd/csumonly.c\n@@ -322,7 +322,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t/* Do not delete, this is required by HW*/\n \t\t\tipv4_hdr->hdr_checksum = 0;\n \n-\t\t\tif (tx_ol_flags & 0x1) {\n+\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_IP_CKSUM) {\n \t\t\t\t/* HW checksum */\n \t\t\t\tol_flags |= PKT_TX_IP_CKSUM;\n \t\t\t}\n@@ -336,7 +336,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\tif (l4_proto == IPPROTO_UDP) {\n \t\t\t\tudp_hdr = (struct udp_hdr*) (rte_pktmbuf_mtod(mb,\n \t\t\t\t\t\tunsigned char *) + l2_len + l3_len);\n-\t\t\t\tif (tx_ol_flags & 0x2) {\n+\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM) {\n \t\t\t\t\t/* HW Offload */\n \t\t\t\t\tol_flags |= PKT_TX_UDP_CKSUM;\n \t\t\t\t\tif (ipv4_tunnel)\n@@ -358,7 +358,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\tuint16_t len;\n \n \t\t\t\t\t/* Check if inner L3/L4 checkum flag is set */\n-\t\t\t\t\tif (tx_ol_flags & 0xF0)\n+\t\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_CKSUM_MASK)\n \t\t\t\t\t\tol_flags |= PKT_TX_VXLAN_CKSUM;\n \n \t\t\t\t\tinner_l2_len  = sizeof(struct ether_hdr);\n@@ -381,7 +381,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\t\t\tunsigned char *) + len);\n \t\t\t\t\t\tinner_l4_proto = inner_ipv4_hdr->next_proto_id;\n \n-\t\t\t\t\t\tif (tx_ol_flags & 0x10) {\n+\t\t\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_IP_CKSUM) {\n \n \t\t\t\t\t\t\t/* Do not delete, this is required by HW*/\n \t\t\t\t\t\t\tinner_ipv4_hdr->hdr_checksum = 0;\n@@ -394,7 +394,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\t\t\tunsigned char *) + len);\n \t\t\t\t\t\tinner_l4_proto = inner_ipv6_hdr->proto;\n \t\t\t\t\t}\n-\t\t\t\t\tif ((inner_l4_proto == IPPROTO_UDP) && (tx_ol_flags & 0x20)) {\n+\t\t\t\t\tif ((inner_l4_proto == IPPROTO_UDP) &&\n+\t\t\t\t\t\t(tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_UDP_CKSUM)) {\n \n \t\t\t\t\t\t/* HW Offload */\n \t\t\t\t\t\tol_flags |= PKT_TX_UDP_CKSUM;\n@@ -405,7 +406,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\telse if (eth_type == ETHER_TYPE_IPv6)\n \t\t\t\t\t\t\tinner_udp_hdr->dgram_cksum = get_ipv6_psd_sum(inner_ipv6_hdr);\n \n-\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_TCP) && (tx_ol_flags & 0x40)) {\n+\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_TCP) &&\n+\t\t\t\t\t\t(tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_TCP_CKSUM)) {\n \t\t\t\t\t\t/* HW Offload */\n \t\t\t\t\t\tol_flags |= PKT_TX_TCP_CKSUM;\n \t\t\t\t\t\tinner_tcp_hdr = (struct tcp_hdr *) (rte_pktmbuf_mtod(mb,\n@@ -414,7 +416,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\t\tinner_tcp_hdr->cksum = get_ipv4_psd_sum(inner_ipv4_hdr);\n \t\t\t\t\t\telse if (eth_type == ETHER_TYPE_IPv6)\n \t\t\t\t\t\t\tinner_tcp_hdr->cksum = get_ipv6_psd_sum(inner_ipv6_hdr);\n-\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_SCTP) && (tx_ol_flags & 0x80)) {\n+\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_SCTP) &&\n+\t\t\t\t\t\t(tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_SCTP_CKSUM)) {\n \t\t\t\t\t\t/* HW Offload */\n \t\t\t\t\t\tol_flags |= PKT_TX_SCTP_CKSUM;\n \t\t\t\t\t\tinner_sctp_hdr = (struct sctp_hdr *) (rte_pktmbuf_mtod(mb,\n@@ -427,7 +430,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t} else if (l4_proto == IPPROTO_TCP) {\n \t\t\t\ttcp_hdr = (struct tcp_hdr*) (rte_pktmbuf_mtod(mb,\n \t\t\t\t\t\tunsigned char *) + l2_len + l3_len);\n-\t\t\t\tif (tx_ol_flags & 0x4) {\n+\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM) {\n \t\t\t\t\tol_flags |= PKT_TX_TCP_CKSUM;\n \t\t\t\t\ttcp_hdr->cksum = get_ipv4_psd_sum(ipv4_hdr);\n \t\t\t\t}\n@@ -440,7 +443,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\tsctp_hdr = (struct sctp_hdr*) (rte_pktmbuf_mtod(mb,\n \t\t\t\t\t\tunsigned char *) + l2_len + l3_len);\n \n-\t\t\t\tif (tx_ol_flags & 0x8) {\n+\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM) {\n \t\t\t\t\tol_flags |= PKT_TX_SCTP_CKSUM;\n \t\t\t\t\tsctp_hdr->cksum = 0;\n \n@@ -465,7 +468,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\tif (l4_proto == IPPROTO_UDP) {\n \t\t\t\tudp_hdr = (struct udp_hdr*) (rte_pktmbuf_mtod(mb,\n \t\t\t\t\t\tunsigned char *) + l2_len + l3_len);\n-\t\t\t\tif (tx_ol_flags & 0x2) {\n+\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_UDP_CKSUM) {\n \t\t\t\t\t/* HW Offload */\n \t\t\t\t\tol_flags |= PKT_TX_UDP_CKSUM;\n \t\t\t\t\tif (ipv6_tunnel)\n@@ -487,7 +490,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\tuint16_t len;\n \n \t\t\t\t\t/* Check if inner L3/L4 checksum flag is set */\n-\t\t\t\t\tif (tx_ol_flags & 0xF0)\n+\t\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_CKSUM_MASK)\n \t\t\t\t\t\tol_flags |= PKT_TX_VXLAN_CKSUM;\n \n \t\t\t\t\tinner_l2_len  = sizeof(struct ether_hdr);\n@@ -511,7 +514,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\tinner_l4_proto = inner_ipv4_hdr->next_proto_id;\n \n \t\t\t\t\t\t/* HW offload */\n-\t\t\t\t\t\tif (tx_ol_flags & 0x10) {\n+\t\t\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_IP_CKSUM) {\n \n \t\t\t\t\t\t\t/* Do not delete, this is required by HW*/\n \t\t\t\t\t\t\tinner_ipv4_hdr->hdr_checksum = 0;\n@@ -524,7 +527,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\tinner_l4_proto = inner_ipv6_hdr->proto;\n \t\t\t\t\t}\n \n-\t\t\t\t\tif ((inner_l4_proto == IPPROTO_UDP) && (tx_ol_flags & 0x20)) {\n+\t\t\t\t\tif ((inner_l4_proto == IPPROTO_UDP) &&\n+\t\t\t\t\t\t(tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_UDP_CKSUM)) {\n \t\t\t\t\t\tinner_udp_hdr = (struct udp_hdr *) (rte_pktmbuf_mtod(mb,\n \t\t\t\t\t\t\tunsigned char *) + len + inner_l3_len);\n \t\t\t\t\t\t/* HW offload */\n@@ -534,7 +538,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\t\tinner_udp_hdr->dgram_cksum = get_ipv4_psd_sum(inner_ipv4_hdr);\n \t\t\t\t\t\telse if (eth_type == ETHER_TYPE_IPv6)\n \t\t\t\t\t\t\tinner_udp_hdr->dgram_cksum = get_ipv6_psd_sum(inner_ipv6_hdr);\n-\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_TCP) && (tx_ol_flags & 0x40)) {\n+\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_TCP) &&\n+\t\t\t\t\t\t(tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_TCP_CKSUM)) {\n \t\t\t\t\t\t/* HW offload */\n \t\t\t\t\t\tol_flags |= PKT_TX_TCP_CKSUM;\n \t\t\t\t\t\tinner_tcp_hdr = (struct tcp_hdr *) (rte_pktmbuf_mtod(mb,\n@@ -545,7 +550,8 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\t\t\telse if (eth_type == ETHER_TYPE_IPv6)\n \t\t\t\t\t\t\tinner_tcp_hdr->cksum = get_ipv6_psd_sum(inner_ipv6_hdr);\n \n-\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_SCTP) && (tx_ol_flags & 0x80)) {\n+\t\t\t\t\t} else if ((inner_l4_proto == IPPROTO_SCTP) &&\n+\t\t\t\t\t\t(tx_ol_flags & TESTPMD_TX_OFFLOAD_INNER_SCTP_CKSUM)) {\n \t\t\t\t\t\t/* HW offload */\n \t\t\t\t\t\tol_flags |= PKT_TX_SCTP_CKSUM;\n \t\t\t\t\t\tinner_sctp_hdr = (struct sctp_hdr *) (rte_pktmbuf_mtod(mb,\n@@ -559,7 +565,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\telse if (l4_proto == IPPROTO_TCP) {\n \t\t\t\ttcp_hdr = (struct tcp_hdr*) (rte_pktmbuf_mtod(mb,\n \t\t\t\t\t\tunsigned char *) + l2_len + l3_len);\n-\t\t\t\tif (tx_ol_flags & 0x4) {\n+\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_TCP_CKSUM) {\n \t\t\t\t\tol_flags |= PKT_TX_TCP_CKSUM;\n \t\t\t\t\ttcp_hdr->cksum = get_ipv6_psd_sum(ipv6_hdr);\n \t\t\t\t}\n@@ -573,7 +579,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)\n \t\t\t\tsctp_hdr = (struct sctp_hdr*) (rte_pktmbuf_mtod(mb,\n \t\t\t\t\t\tunsigned char *) + l2_len + l3_len);\n \n-\t\t\t\tif (tx_ol_flags & 0x8) {\n+\t\t\t\tif (tx_ol_flags & TESTPMD_TX_OFFLOAD_SCTP_CKSUM) {\n \t\t\t\t\tol_flags |= PKT_TX_SCTP_CKSUM;\n \t\t\t\t\tsctp_hdr->cksum = 0;\n \t\t\t\t\t/* Sanity check, only number of 4 bytes supported by HW */\ndiff --git a/app/test-pmd/macfwd.c b/app/test-pmd/macfwd.c\nindex 38bae23..aa3d705 100644\n--- a/app/test-pmd/macfwd.c\n+++ b/app/test-pmd/macfwd.c\n@@ -85,6 +85,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs)\n \tuint16_t nb_rx;\n \tuint16_t nb_tx;\n \tuint16_t i;\n+\tuint64_t ol_flags = 0;\n #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n \tuint64_t start_tsc;\n \tuint64_t end_tsc;\n@@ -108,6 +109,8 @@ pkt_burst_mac_forward(struct fwd_stream *fs)\n #endif\n \tfs->rx_packets += nb_rx;\n \ttxp = &ports[fs->tx_port];\n+\tif (txp->tx_ol_flags & TESTPMD_TX_OFFLOAD_INSERT_VLAN)\n+\t\tol_flags = PKT_TX_VLAN_PKT;\n \tfor (i = 0; i < nb_rx; i++) {\n \t\tmb = pkts_burst[i];\n \t\teth_hdr = rte_pktmbuf_mtod(mb, struct ether_hdr *);\n@@ -115,7 +118,7 @@ pkt_burst_mac_forward(struct fwd_stream *fs)\n \t\t\t\t&eth_hdr->d_addr);\n \t\tether_addr_copy(&ports[fs->tx_port].eth_addr,\n \t\t\t\t&eth_hdr->s_addr);\n-\t\tmb->ol_flags = txp->tx_ol_flags;\n+\t\tmb->ol_flags = ol_flags;\n \t\tmb->l2_len = sizeof(struct ether_hdr);\n \t\tmb->l3_len = sizeof(struct ipv4_hdr);\n \t\tmb->vlan_tci = txp->tx_vlan_id;\ndiff --git a/app/test-pmd/macswap.c b/app/test-pmd/macswap.c\nindex 1786095..ec61657 100644\n--- a/app/test-pmd/macswap.c\n+++ b/app/test-pmd/macswap.c\n@@ -85,6 +85,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs)\n \tuint16_t nb_rx;\n \tuint16_t nb_tx;\n \tuint16_t i;\n+\tuint64_t ol_flags = 0;\n #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n \tuint64_t start_tsc;\n \tuint64_t end_tsc;\n@@ -108,6 +109,8 @@ pkt_burst_mac_swap(struct fwd_stream *fs)\n #endif\n \tfs->rx_packets += nb_rx;\n \ttxp = &ports[fs->tx_port];\n+\tif (txp->tx_ol_flags & TESTPMD_TX_OFFLOAD_INSERT_VLAN)\n+\t\tol_flags = PKT_TX_VLAN_PKT;\n \tfor (i = 0; i < nb_rx; i++) {\n \t\tmb = pkts_burst[i];\n \t\teth_hdr = rte_pktmbuf_mtod(mb, struct ether_hdr *);\n@@ -117,7 +120,7 @@ pkt_burst_mac_swap(struct fwd_stream *fs)\n \t\tether_addr_copy(&eth_hdr->s_addr, &eth_hdr->d_addr);\n \t\tether_addr_copy(&addr, &eth_hdr->s_addr);\n \n-\t\tmb->ol_flags = txp->tx_ol_flags;\n+\t\tmb->ol_flags = ol_flags;\n \t\tmb->l2_len = sizeof(struct ether_hdr);\n \t\tmb->l3_len = sizeof(struct ipv4_hdr);\n \t\tmb->vlan_tci = txp->tx_vlan_id;\ndiff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h\nindex 9cbfeac..82af2bd 100644\n--- a/app/test-pmd/testpmd.h\n+++ b/app/test-pmd/testpmd.h\n@@ -123,14 +123,28 @@ struct fwd_stream {\n #endif\n };\n \n+/** Offload IP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_IP_CKSUM          0x0001\n+/** Offload UDP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_UDP_CKSUM         0x0002\n+/** Offload TCP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_TCP_CKSUM         0x0004\n+/** Offload SCTP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_SCTP_CKSUM        0x0008\n+/** Offload inner IP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_INNER_IP_CKSUM    0x0010\n+/** Offload inner UDP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_INNER_UDP_CKSUM   0x0020\n+/** Offload inner TCP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_INNER_TCP_CKSUM   0x0040\n+/** Offload inner SCTP checksum in csum forward engine */\n+#define TESTPMD_TX_OFFLOAD_INNER_SCTP_CKSUM  0x0080\n+/** Offload inner IP checksum mask */\n+#define TESTPMD_TX_OFFLOAD_INNER_CKSUM_MASK  0x00F0\n+/** Insert VLAN header in forward engine */\n+#define TESTPMD_TX_OFFLOAD_INSERT_VLAN       0x0100\n /**\n  * The data structure associated with each port.\n- * tx_ol_flags is slightly different from ol_flags of rte_mbuf.\n- *   Bit  0: Insert IP checksum\n- *   Bit  1: Insert UDP checksum\n- *   Bit  2: Insert TCP checksum\n- *   Bit  3: Insert SCTP checksum\n- *   Bit 11: Insert VLAN Label\n  */\n struct rte_port {\n \tstruct rte_eth_dev_info dev_info;   /**< PCI info + driver name */\n@@ -141,7 +155,7 @@ struct rte_port {\n \tstruct fwd_stream       *rx_stream; /**< Port RX stream, if unique */\n \tstruct fwd_stream       *tx_stream; /**< Port TX stream, if unique */\n \tunsigned int            socket_id;  /**< For NUMA support */\n-\tuint64_t                tx_ol_flags;/**< Offload Flags of TX packets. */\n+\tuint16_t                tx_ol_flags;/**< TX Offload Flags (TESTPMD_TX_OFFLOAD...). */\n \tuint16_t                tx_vlan_id; /**< Tag Id. in TX VLAN packets. */\n \tvoid                    *fwd_ctx;   /**< Forwarding mode context */\n \tuint64_t                rx_bad_ip_csum; /**< rx pkts with bad ip checksum  */\ndiff --git a/app/test-pmd/txonly.c b/app/test-pmd/txonly.c\nindex 3d08005..c984670 100644\n--- a/app/test-pmd/txonly.c\n+++ b/app/test-pmd/txonly.c\n@@ -196,6 +196,7 @@ static void\n pkt_burst_transmit(struct fwd_stream *fs)\n {\n \tstruct rte_mbuf *pkts_burst[MAX_PKT_BURST];\n+\tstruct rte_port *txp;\n \tstruct rte_mbuf *pkt;\n \tstruct rte_mbuf *pkt_seg;\n \tstruct rte_mempool *mbp;\n@@ -203,7 +204,7 @@ pkt_burst_transmit(struct fwd_stream *fs)\n \tuint16_t nb_tx;\n \tuint16_t nb_pkt;\n \tuint16_t vlan_tci;\n-\tuint64_t ol_flags;\n+\tuint64_t ol_flags = 0;\n \tuint8_t  i;\n #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES\n \tuint64_t start_tsc;\n@@ -216,8 +217,10 @@ pkt_burst_transmit(struct fwd_stream *fs)\n #endif\n \n \tmbp = current_fwd_lcore()->mbp;\n-\tvlan_tci = ports[fs->tx_port].tx_vlan_id;\n-\tol_flags = ports[fs->tx_port].tx_ol_flags;\n+\ttxp = &ports[fs->tx_port];\n+\tvlan_tci = txp->tx_vlan_id;\n+\tif (txp->tx_ol_flags & TESTPMD_TX_OFFLOAD_INSERT_VLAN)\n+\t\tol_flags = PKT_TX_VLAN_PKT;\n \tfor (nb_pkt = 0; nb_pkt < nb_pkt_per_burst; nb_pkt++) {\n \t\tpkt = tx_mbuf_alloc(mbp);\n \t\tif (pkt == NULL) {\n",
    "prefixes": [
        "dpdk-dev",
        "09/12"
    ]
}