From patchwork Mon Nov 10 15:59:26 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olivier Matz X-Patchwork-Id: 1247 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id B839B7FA0; Mon, 10 Nov 2014 16:50:31 +0100 (CET) Received: from mail-wi0-f179.google.com (mail-wi0-f179.google.com [209.85.212.179]) by dpdk.org (Postfix) with ESMTP id 4A8F27F80 for ; Mon, 10 Nov 2014 16:50:19 +0100 (CET) Received: by mail-wi0-f179.google.com with SMTP id h11so10924328wiw.12 for ; Mon, 10 Nov 2014 08:00:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=azJM1kN9qcQY2WQDZYgc/ImxPDud3Qvfj+Sn1ebgHbY=; b=fO5yLqgxOQGBw3pbA2NKdsZAoS2eFsNlbc0zMY4pHYyZcZ/QMoLIa9XBPY5CcoTsTm LfINQhRW2TNiMcMwSeiACztbixUBc43alCxufetzSCR6sJ0vN50OKGts5EUfoy7b8Jbd SZuBECoRBgfeq/4OOVYia68ZWDEAMZHicjoM7mbkAY/1qyIhb7x/x+H39BW5hqAdeDWV Jd3f+F8/UjCXBfBtHGb7pZOUgAVCxloL6x8REle2STT4o+zVupB64bJgjwU/cKBRooao 0hgFQcCOn/vwreJ8YxDM/zF2oaaxSbZ2brnih5zzq4LWfGeL/meXJIcTb1MiJto6b+Tw rjdw== X-Gm-Message-State: ALoCoQlhK4M6PjCUE1gR/My4y0DylVh0cOTpYAFfkduXZ5bwPHRd0eQPUN9ejf4fv4ZWznbHtOkX X-Received: by 10.194.92.47 with SMTP id cj15mr4163957wjb.29.1415635205117; Mon, 10 Nov 2014 08:00:05 -0800 (PST) Received: from glumotte.dev.6wind.com (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by mx.google.com with ESMTPSA id ll2sm10966561wjb.11.2014.11.10.08.00.03 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 10 Nov 2014 08:00:04 -0800 (PST) From: Olivier Matz To: dev@dpdk.org Date: Mon, 10 Nov 2014 16:59:26 +0100 Message-Id: <1415635166-1364-13-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 12/12] testpmd: add a verbose mode csum forward engine X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" If the user specifies 'set verbose 1' in testpmd command line, the csum forward engine will dump some informations about received and transmitted packets, especially which flags are set and what values are assigned to l2_len, l3_len, l4_len and tso_segsz. This can help someone implementing TSO or hardware checksum offload to understand how to configure the mbufs. Example of output for one packet: -------------- rx: l2_len=14 ethertype=800 l3_len=20 l4_proto=6 l4_len=20 tx: m->l2_len=14 m->l3_len=20 m->l4_len=20 tx: m->tso_segsz=800 tx: flags=PKT_TX_IP_CKSUM PKT_TX_TCP_SEG -------------- Signed-off-by: Olivier Matz --- app/test-pmd/csumonly.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c index 7995ff5..74521d4 100644 --- a/app/test-pmd/csumonly.c +++ b/app/test-pmd/csumonly.c @@ -575,6 +575,57 @@ pkt_burst_checksum_forward(struct fwd_stream *fs) m->tso_segsz = tso_segsz; m->ol_flags = ol_flags; + /* if verbose mode is enabled, dump debug info */ + if (verbose_level > 0) { + struct { + uint64_t flag; + uint64_t mask; + } tx_flags[] = { + { PKT_TX_IP_CKSUM, PKT_TX_IP_CKSUM }, + { PKT_TX_UDP_CKSUM, PKT_TX_L4_MASK }, + { PKT_TX_TCP_CKSUM, PKT_TX_L4_MASK }, + { PKT_TX_SCTP_CKSUM, PKT_TX_L4_MASK }, + { PKT_TX_VXLAN_CKSUM, PKT_TX_VXLAN_CKSUM }, + { PKT_TX_TCP_SEG, PKT_TX_TCP_SEG }, + }; + unsigned j; + const char *name; + + printf("-----------------\n"); + /* dump rx parsed packet info */ + printf("rx: l2_len=%d ethertype=%x l3_len=%d " + "l4_proto=%d l4_len=%d\n", + l2_len, rte_be_to_cpu_16(ethertype), + l3_len, l4_proto, l4_len); + if (tunnel == 1) + printf("rx: outer_l2_len=%d outer_ethertype=%x " + "outer_l3_len=%d\n", outer_l2_len, + rte_be_to_cpu_16(outer_ethertype), + 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)) || + 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 ((tunnel == 1) && + (testpmd_ol_flags & TESTPMD_TX_OFFLOAD_VXLAN_CKSUM)) + printf("tx: m->inner_l2_len=%d m->inner_l3_len=%d\n", + m->inner_l2_len, m->inner_l3_len); + if (tso_segsz != 0) + printf("tx: m->tso_segsz=%d\n", m->tso_segsz); + printf("tx: flags="); + for (j = 0; j < sizeof(tx_flags)/sizeof(*tx_flags); j++) { + name = rte_get_tx_ol_flag_name(tx_flags[j].flag); + if ((m->ol_flags & tx_flags[j].mask) == + tx_flags[j].flag) + printf("%s ", name); + } + printf("\n"); + } } nb_tx = rte_eth_tx_burst(fs->tx_port, fs->tx_queue, pkts_burst, nb_rx); fs->tx_packets += nb_tx;