From patchwork Tue May 2 06:10:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Qiu X-Patchwork-Id: 757403 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 3wH9xh3zLJz9sDB for ; Tue, 2 May 2017 16:15:04 +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="AUeraoJQ"; dkim-atps=neutral Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 862B0B62; Tue, 2 May 2017 06:12:54 +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 511ACB59 for ; Tue, 2 May 2017 06:12:53 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pg0-f65.google.com (mail-pg0-f65.google.com [74.125.83.65]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 139081FC for ; Tue, 2 May 2017 06:12:53 +0000 (UTC) Received: by mail-pg0-f65.google.com with SMTP id t7so19400205pgt.1 for ; Mon, 01 May 2017 23:12:52 -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=u9oS+PcgDlB2AH1VeZXqJrTTuroO6ShWofL+xeehMZI=; b=AUeraoJQzCBkvwCHwWZZ91+QY/uyv8RIGNjIV0xcM/PnbdFwbenEOCP+L1oZ5RQifq jd7QADI2jGNBVLslvKxV00JU+ky/ojKxkjnMLyk5pL5PEOA2E3jtH2mT/GBYmIvCabXQ 8hEzvqwS+oTXIPWt/ika+LWKZ1cHD37pPXt0W6Fo9gGJD2AUo5ixS9F4Gx2+DjlM/5WN pK9W3pJQldmhPLC+PsRBQWXwAzl7E/y6RndlM79tcO/ujE1FrNGYDLdgd7P7DFp2i+eJ AGIJni9XvmfJMAeg3fjvV8KkiMUb98JATGgfq9At0MQA9025F1TiIU7m6g2Kk9oMIAsn 03NQ== 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=u9oS+PcgDlB2AH1VeZXqJrTTuroO6ShWofL+xeehMZI=; b=oKG2UpiSwiMoDp+e938UiZQxtbn5SKVVSv/rwR0+Rl4Cj2UObjO4CZaCsIprgaRYZq QYw7va1U6eTnp82CwJxJILid06d6xS+8NAguLxJLg52ppeZayrMVV81Ib+93Tpn6+AG3 LTEm2XkVk/TufpqUHq0eKdwvFb3dfdNEqLLLmUssEoeaO3DK8oKdTyZ7Obr4SYggZH5T ZXtnVyRIwVizijFZ9XOTNvMQm10ieAERFPl9VzEinwYVWLv9wN1WE7V012lqviRC9ErK I0NejZH38ys73WbFA/bWo4BWZ42lL/Tq5AXOPFCT19ldltVRGayaDHFEutAQRKJgAFA2 vvMw== X-Gm-Message-State: AN3rC/5cGc3YLbYm4ywTvYqKXfbVq68ashrcCZDvI4juXbfaaDkBdR6X n1x/+9eBgOn58YH0jJYcvg== X-Received: by 10.84.134.35 with SMTP id 32mr38261998plg.178.1493705572585; Mon, 01 May 2017 23:12:52 -0700 (PDT) Received: from localhost.localdomain ([219.248.5.111]) by smtp.gmail.com with ESMTPSA id l62sm1394784pfb.91.2017.05.01.23.12.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 01 May 2017 23:12:52 -0700 (PDT) From: Michael Qiu To: dev@openvswitch.org Date: Tue, 2 May 2017 14:10:44 +0800 Message-Id: <1493705445-5774-5-git-send-email-qdy220091330@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493705445-5774-1-git-send-email-qdy220091330@gmail.com> References: <1493705445-5774-1-git-send-email-qdy220091330@gmail.com> X-Spam-Status: No, score=0.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_HTTP, RCVD_IN_SORBS_SOCKS, RCVD_IN_SORBS_SPAM autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Cc: Michael Qiu Subject: [ovs-dev] [PATCH 4/5] lib/dp-packet: copy multi-segments data from DPDK mbuf 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 doing packet clone, if packet source is from DPDK driver, multi-segment must be considered, and copy the segment's data one by one. Signed-off-by: Michael Qiu --- lib/dp-packet.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/dp-packet.c b/lib/dp-packet.c index 79f6e7e..1093e4a 100644 --- a/lib/dp-packet.c +++ b/lib/dp-packet.c @@ -165,9 +165,30 @@ dp_packet_clone_with_headroom(const struct dp_packet *buffer, size_t headroom) { struct dp_packet *new_buffer; - new_buffer = dp_packet_clone_data_with_headroom(dp_packet_data(buffer), - dp_packet_size(buffer), - headroom); + uint32_t size = dp_packet_size(buffer); + + /* copy multi-seg data */ +#ifdef DPDK_NETDEV + if (buffer->source == DPBUF_DPDK && buffer->mbuf.nb_segs > 1) { + uint32_t off_set = 0; + void *dst = NULL; + struct rte_mbuf *tmbuf = CONST_CAST(struct rte_mbuf *, &(buffer->mbuf)); + + new_buffer = dp_packet_new_with_headroom(size, headroom); + dst = dp_packet_put_uninit(new_buffer, size); + + while (tmbuf) { + rte_memcpy((char *)dst + off_set, + rte_pktmbuf_mtod(tmbuf, void *), tmbuf->data_len); + off_set += tmbuf->data_len; + tmbuf = tmbuf->next; + } + } + else +#endif + new_buffer = dp_packet_clone_data_with_headroom(dp_packet_data(buffer), + size, headroom); + new_buffer->l2_pad_size = buffer->l2_pad_size; new_buffer->l2_5_ofs = buffer->l2_5_ofs; new_buffer->l3_ofs = buffer->l3_ofs;