From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wi0-f176.google.com (mail-wi0-f176.google.com [209.85.212.176]) by dpdk.org (Postfix) with ESMTP id 6A647C370 for ; Wed, 22 Apr 2015 11:57:54 +0200 (CEST) Received: by widdi4 with SMTP id di4so50928055wid.0 for ; Wed, 22 Apr 2015 02:57:54 -0700 (PDT) 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=L2JDZd0KfW6xUH+7ay+4UwIJ7Y1Y/7k6rKSnJnankwI=; b=dEN+2allIllBuryVfD/qEfWRAmiEOJVX67hF7zGTOvq5rmv3BS/uAnUHqxWFT0NKw7 XAECJTthjLN12Vfsc4/HByb3jyqzA9MweB5xfgpRctBBISWpsJrOPRqylOhZACzAmjoe N1I73F5PLt0zIs7GLtYHUbdVemIJvYeTUPOexYP1Ruwa1Rwii/vwQRkK9yJl2EXMszg6 iKDijw4RK/eO3DyBlavQpfQ8+7YlBmGXOJ/5tFZN8obMxJn9L0KCXjta2bgJW9ob6oGg 67YuSJNUPHsKRdw94bc4wVtyIkrLzUcmUM//nCHWckpkIv8QL2LPlG9LrmLSUNnLIZOk NHQQ== X-Gm-Message-State: ALoCoQllrcvh4pXJi9FPLkfDvUTm64HcP8mHL0UDcJRlwEBlRH11NotZ/UViJwY712gH6KGZjSmU X-Received: by 10.180.91.40 with SMTP id cb8mr4360707wib.64.1429696674333; Wed, 22 Apr 2015 02:57:54 -0700 (PDT) Received: from glumotte.dev.6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPSA id yr1sm6570006wjc.37.2015.04.22.02.57.53 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 22 Apr 2015 02:57:53 -0700 (PDT) From: Olivier Matz To: dev@dpdk.org Date: Wed, 22 Apr 2015 11:57:28 +0200 Message-Id: <1429696650-9043-12-git-send-email-olivier.matz@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1429696650-9043-1-git-send-email-olivier.matz@6wind.com> References: <1429610122-30943-1-git-send-email-olivier.matz@6wind.com> <1429696650-9043-1-git-send-email-olivier.matz@6wind.com> Subject: [dpdk-dev] [PATCH v6 11/13] test/mbuf: enhance mbuf refcnt test 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: , X-List-Received-Date: Wed, 22 Apr 2015 09:57:54 -0000 Check that the data in the cloned mbuf is the same than in the reference mbuf. Check that the reference counter is incremented for each segment. Signed-off-by: Olivier Matz Acked-by: Neil Horman --- app/test/test_mbuf.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/app/test/test_mbuf.c b/app/test/test_mbuf.c index 2614598..a16ec53 100644 --- a/app/test/test_mbuf.c +++ b/app/test/test_mbuf.c @@ -75,6 +75,8 @@ #define REFCNT_MBUF_NUM 64 #define REFCNT_RING_SIZE (REFCNT_MBUF_NUM * REFCNT_MAX_REF) +#define MAGIC_DATA 0x42424242 + #define MAKE_STRING(x) # x static struct rte_mempool *pktmbuf_pool = NULL; @@ -122,6 +124,8 @@ static unsigned refcnt_lcore[RTE_MAX_LCORE]; * - Repeat the test to check that allocation operations * reinitialize the mbuf correctly. * + * #. Test packet cloning + * - Clone a mbuf and verify the data */ #define GOTO_FAIL(str, ...) do { \ @@ -322,6 +326,7 @@ testclone_testupdate_testdetach(void) { struct rte_mbuf *m = NULL; struct rte_mbuf *clone = NULL; + uint32_t *data; /* alloc a mbuf */ m = rte_pktmbuf_alloc(pktmbuf_pool); @@ -331,21 +336,53 @@ testclone_testupdate_testdetach(void) if (rte_pktmbuf_pkt_len(m) != 0) GOTO_FAIL("Bad length"); + rte_pktmbuf_append(m, sizeof(uint32_t)); + data = rte_pktmbuf_mtod(m, uint32_t *); + *data = MAGIC_DATA; /* clone the allocated mbuf */ clone = rte_pktmbuf_clone(m, pktmbuf_pool); if (clone == NULL) GOTO_FAIL("cannot clone data\n"); + + data = rte_pktmbuf_mtod(clone, uint32_t *); + if (*data != MAGIC_DATA) + GOTO_FAIL("invalid data in clone\n"); + + if (rte_mbuf_refcnt_read(m) != 2) + GOTO_FAIL("invalid refcnt in m\n"); + + /* free the clone */ rte_pktmbuf_free(clone); + clone = NULL; + /* same test with a chained mbuf */ m->next = rte_pktmbuf_alloc(pktmbuf_pool); if (m->next == NULL) GOTO_FAIL("Next Pkt Null\n"); + rte_pktmbuf_append(m->next, sizeof(uint32_t)); + data = rte_pktmbuf_mtod(m->next, uint32_t *); + *data = MAGIC_DATA; + clone = rte_pktmbuf_clone(m, pktmbuf_pool); if (clone == NULL) GOTO_FAIL("cannot clone data\n"); + data = rte_pktmbuf_mtod(clone, uint32_t *); + if (*data != MAGIC_DATA) + GOTO_FAIL("invalid data in clone\n"); + + data = rte_pktmbuf_mtod(clone->next, uint32_t *); + if (*data != MAGIC_DATA) + GOTO_FAIL("invalid data in clone->next\n"); + + if (rte_mbuf_refcnt_read(m) != 2) + GOTO_FAIL("invalid refcnt in m\n"); + + if (rte_mbuf_refcnt_read(m->next) != 2) + GOTO_FAIL("invalid refcnt in m->next\n"); + /* free mbuf */ rte_pktmbuf_free(m); rte_pktmbuf_free(clone); @@ -356,6 +393,8 @@ testclone_testupdate_testdetach(void) fail: if (m) rte_pktmbuf_free(m); + if (clone) + rte_pktmbuf_free(clone); return -1; } #undef GOTO_FAIL -- 2.1.4