From patchwork Mon Jun 19 05:29:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Qiu X-Patchwork-Id: 777572 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wrfhr5Yw4z9s76 for ; Mon, 19 Jun 2017 15:31:08 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ah1m1N0t"; dkim-atps=neutral Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 9E862B7B; Mon, 19 Jun 2017 05:29:40 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 5C5F6B66 for ; Mon, 19 Jun 2017 05:29:39 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pf0-f195.google.com (mail-pf0-f195.google.com [209.85.192.195]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id E5414A6 for ; Mon, 19 Jun 2017 05:29:38 +0000 (UTC) Received: by mail-pf0-f195.google.com with SMTP id y7so15011708pfd.3 for ; Sun, 18 Jun 2017 22:29:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QFE2iJz682ZmpsD2fL3CScqRbC5cEz1kkJ0k7ymzK50=; b=ah1m1N0tGZkvHK6YbocsXkXbgWiDGQoUOyKAWChE67CJge3lQctREO6H2BD1PP18Ku pY22CL9TNmAHvLpV5+MwQas+Y+3x1O0IiGOMDn+vPTh+wghqTCjlN8P8OYb0/kcgQrbw PD01jb7GJizKzi/xd4AgwD8zPTbH3HhGUc6aTqTZV1+P0gUZPeXj1iojwJriUgCRZmFG i5V7JQOIOYIcswe+bzKVfjMOrdxrEjqy4/86xc5ROCq9Y+Yq99+SCm168IQNJzL1i/XM V5/ueQtHKca9ezpvuPElDVmJTbUbIvmYqd/cTXW2pfh5ARfpIPeMBw6vYImUZzoHIMbo ZCwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=QFE2iJz682ZmpsD2fL3CScqRbC5cEz1kkJ0k7ymzK50=; b=XtDQ4NH+lJ5Jwei1opnFQnTV0Pa79WZEd9o39VGII9MuOlsQZExpeVyrmT9DQm9yL8 5DRPtiz/NHWX01LhbYjjyGfVJ2QgmNKjlc7AbMfFtoBB4gQGujNJROc3MuJF0kHAQTGk iHMgbS/IVpRzfh4mgN+FvPQzHYtYeISp+e58DPV86RbleA10vMUzGIY2nymbUcdvnbZd vofOw1KO50XZPErTqQgygH9HU4LVgZcIjoFfjyHx3i8S+crkgcykoTJAKu5VtYe9RMC9 dZPlWTa2YEwhd54bajCud4Xf3fsiKB6uPytHKuKIcpJgzVHsaj6BRdc+5krOaaGgTpjh MXEw== X-Gm-Message-State: AKS2vOzFUVAWnBdF2hwdmyd23pwmKwkVNGcWBpaRIMcO2a45ChwVygY7 QBLnHUAVH6cZn0dj X-Received: by 10.84.131.1 with SMTP id 1mr27494248pld.232.1497850178421; Sun, 18 Jun 2017 22:29:38 -0700 (PDT) Received: from localhost.localdomain ([101.95.168.242]) by smtp.gmail.com with ESMTPSA id 189sm17869160pgj.67.2017.06.18.22.29.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 18 Jun 2017 22:29:38 -0700 (PDT) From: Michael Qiu To: dev@openvswitch.org Date: Mon, 19 Jun 2017 13:29:01 +0800 Message-Id: <1497850143-3116-4-git-send-email-qdy220091330@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1497850143-3116-1-git-send-email-qdy220091330@gmail.com> References: <1497850143-3116-1-git-send-email-qdy220091330@gmail.com> X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Marcin Ksiadz , Przemyslaw Lal , Michael Qiu Subject: [ovs-dev] [PATCH 3/5] lib/dp-packet: Fix data_len issue with multi-segments X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org From: Michael Qiu When a packet is from DPDK source, and it contains multiple segments, data_len is not equal to the packet size. This patch fix this issue. Co-authored-by: Mark Kavanagh Co-authored-by: Yuanhan Liu Co-authored-by: Przemyslaw Lal Signed-off-by: Michael Qiu Signed-off-by: Marcin Ksiadz Signed-off-by: Mark Kavanagh Signed-off-by: Przemyslaw Lal Signed-off-by: Yuanhan Liu --- lib/dp-packet.h | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/dp-packet.h b/lib/dp-packet.h index d2549b1..fc0b0b4 100644 --- a/lib/dp-packet.h +++ b/lib/dp-packet.h @@ -23,6 +23,7 @@ #ifdef DPDK_NETDEV #include #include +#include "rte_ether.h" #endif #include "netdev-dpdk.h" @@ -425,17 +426,14 @@ dp_packet_size(const struct dp_packet *b) static inline void dp_packet_set_size(struct dp_packet *b, uint32_t v) { - /* netdev-dpdk does not currently support segmentation; consequently, for - * all intents and purposes, 'data_len' (16 bit) and 'pkt_len' (32 bit) may - * be used interchangably. - * - * On the datapath, it is expected that the size of packets - * (and thus 'v') will always be <= UINT16_MAX; this means that there is no - * loss of accuracy in assigning 'v' to 'data_len'. + /* + * Assign current segment length. If total length is greater than + * max data length in a segment, additional calculation is needed */ - b->mbuf.data_len = (uint16_t)v; /* Current seg length. */ - b->mbuf.pkt_len = v; /* Total length of all segments linked to - * this segment. */ + b->mbuf.data_len = MIN(v, b->mbuf.buf_len - b->mbuf.data_off); + + /* Total length of all segments linked to this segment. */ + b->mbuf.pkt_len = v; } static inline uint16_t