From patchwork Sun Apr 30 16:15:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Qiu X-Patchwork-Id: 756894 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 3wGCQw0V50z9s7p for ; Mon, 1 May 2017 02:18:32 +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="fOOvIimH"; dkim-atps=neutral Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 6A48B959; Sun, 30 Apr 2017 16:16:32 +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 4D352955 for ; Sun, 30 Apr 2017 16:16:31 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-pf0-f194.google.com (mail-pf0-f194.google.com [209.85.192.194]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 09A49143 for ; Sun, 30 Apr 2017 16:16:30 +0000 (UTC) Received: by mail-pf0-f194.google.com with SMTP id o68so5794085pfj.2 for ; Sun, 30 Apr 2017 09:16:30 -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=lB2hqLbiQsv4EOBCzCC42Ce6cmTU+0bSL3oOIFnj180=; b=fOOvIimHIqKW3MC84DNVzLGphqZN3B2ikP+ECI6V4n0CI3LwGkh5AEQ3GrzZ7AYSd9 BbYt2YzGILFHU6+XBoEeJEf0taq6gM49ysG/X2ByWjpEivevR7LLm7kikjZKH1dyON8v FplUltkQGDEs6q+UZktwx0XOgw7SUsJE+kpoZHG7KrhHMhQjXXE121kCsPvn3Cz7v42a +tIcJEWS7NwS9P7R8cLd1nz7+XHjJZpdMR60vTWhkqNZya66ujelXfHs+3+Ry13hGIrM vVLvajnUY6SJmDorBNAsv+bZzZ7Mlyb4JvFIjIKE6rBkxZNfkIwmIOhOqDTB+oqgrBrx gGhA== 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=lB2hqLbiQsv4EOBCzCC42Ce6cmTU+0bSL3oOIFnj180=; b=THceEObYY6cuwIt/P4vC+tHw+JrA7dGmYwEOtvtlhmtQLZpWPm/oHBzc931Y/8SUzF bPTeV80Fx8ErblVSti5l0UkO1AdGis09xrbPSdXKIui6jyE2NJwI8UC9GySR4cmpw/Sl WEiaOD5+Ui7xs3StgjFXj6tPMJ2PJ7UqS4eQsXvrBW77/8B1udiLpRtodUiR3XUTVdtp qU7BjQvG6cwpK4eGpRwa0WjVxXXTN4v3DRaTKcfNcmFhBb8pxj6+GQzLFQ1nhRHtFI2W r2eQLo7NHpOFyPtxYtm1ZH4jd5hK9POTTx1EGZn/7k5gE8FtK6lwUZz0yQ2Ibod0OgZh ZnhQ== X-Gm-Message-State: AN3rC/7VEGV2UfMlyhkRv91FVomr2BWc247MObWJuPjC0hSxmn+nbSg9 mvQOiMfSZs0HRg== X-Received: by 10.99.104.199 with SMTP id d190mr22316402pgc.141.1493568990638; Sun, 30 Apr 2017 09:16:30 -0700 (PDT) Received: from localhost.localdomain (softbank060067191191.bbtec.net. [60.67.191.191]) by smtp.gmail.com with ESMTPSA id b74sm20900540pfl.58.2017.04.30.09.16.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 30 Apr 2017 09:16:30 -0700 (PDT) From: Michael Qiu To: dev@openvswitch.org Date: Mon, 1 May 2017 00:15:33 +0800 Message-Id: <1493568934-3099-5-git-send-email-qdy220091330@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493568934-3099-1-git-send-email-qdy220091330@gmail.com> References: <1493568934-3099-1-git-send-email-qdy220091330@gmail.com> X-Spam-Status: No, score=-1.2 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_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 24d418f..fc28972 100644 --- a/lib/dp-packet.c +++ b/lib/dp-packet.c @@ -164,9 +164,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;