From patchwork Thu Nov 9 17:34:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Stephen Hemminger X-Patchwork-Id: 134021 X-Patchwork-Delegate: thomas@monjalon.net Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id DE3E9432E9; Thu, 9 Nov 2023 18:34:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2AEB84021E; Thu, 9 Nov 2023 18:34:28 +0100 (CET) Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by mails.dpdk.org (Postfix) with ESMTP id B9B2940DF5 for ; Thu, 9 Nov 2023 18:34:26 +0100 (CET) Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-1cc2575dfc7so9500885ad.1 for ; Thu, 09 Nov 2023 09:34:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=networkplumber-org.20230601.gappssmtp.com; s=20230601; t=1699551266; x=1700156066; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=o2G/RbxCtbubJZD6MEODF5wEL/gqk9pJIsV2iv3V91Q=; b=gCT2vo9vEGkh+F1wl8YpRsTuh/GkKs7HpLw9wOkCCIz3CkzZ1TWBevpxjkEB0GFueb BravMqoP0JHeyWfo8nVR6XvliD+Na0UWhSgAtt72ui4zoc/KeNHhksjiGqevzhb7g2+A V2nYQMYLTRkr0ESkTedFRstpEMMAAXorA1G+o1DwqPplfRJV09sAG/txuUiw4fTsH3Ku Vn2J7an0LZFImmi8sqxHUQA+MtkpDmVKzEjwvwIJmXf4xSWYtcqmLLd6af7DHHGg/dDr tR8BYhLYtJX+7I77Dr2TZa2GAIyCROie1446tVYLrwSlva1j3l2EyMK+w/U3/D92Dep4 UGDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699551266; x=1700156066; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=o2G/RbxCtbubJZD6MEODF5wEL/gqk9pJIsV2iv3V91Q=; b=KSd4AAsCoFdbOYNxRl7OW88u9TqoQ1Wrwbmio7uqd02S0TxAINKCUADflJNVlgAWFL T1g3EMkcMpHWxNSoyoVn5myA8j1FOLowBSZFp7NL/U4H/hP3jmtEuHdj0PAGqQ/GFJb6 /XLCZLlBdKPTad54r6SVHRZ+42/hK5COuXOiIZgem/U1H0i0RK/+/O/9Yw2D73Mua3+v Lg/5NUHeH/2xRERiXSwCfXjHQDwtVPRJtWnd6aX387eWVWdDmXF9yyqC0kCPC3tZ3iH6 8Mm8RzsOKyUqHoW07fOdLCzDRVM5D7JDB2JxMwLm7fu3De8Bmtv4ibBxvXf5g39FzdP0 COHQ== X-Gm-Message-State: AOJu0YywMWpkcgOfJFzelTUUv3fzK7I3aaDvnxoiS90AVIovUUJrz9Mt KWhA99za4SD9l5wymvzX92WRrb+zAhYqvh/6AsE= X-Google-Smtp-Source: AGHT+IGYlnW+RlP3RorSnVVkqvohHeYrGV5gHyvzZEA4ZdXUAoSV50KltHAJk0m8fOWZgJjIxeU5Lg== X-Received: by 2002:a17:903:11cd:b0:1ca:362b:166c with SMTP id q13-20020a17090311cd00b001ca362b166cmr6266754plh.61.1699551265711; Thu, 09 Nov 2023 09:34:25 -0800 (PST) Received: from hermes.local (204-195-123-141.wavecable.com. [204.195.123.141]) by smtp.gmail.com with ESMTPSA id f7-20020a170902ab8700b001c76fcccee8sm3787356plr.156.2023.11.09.09.34.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 09:34:24 -0800 (PST) From: Stephen Hemminger To: dev@dpdk.org Cc: Stephen Hemminger , Isaac Boukris , Reshma Pattan Subject: [PATCH v4 2/5] dumpcap: allow multiple invocations Date: Thu, 9 Nov 2023 09:34:09 -0800 Message-Id: <20231109173412.108093-3-stephen@networkplumber.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231109173412.108093-1-stephen@networkplumber.org> References: <20230921042349.104150-1-stephen@networkplumber.org> <20231109173412.108093-1-stephen@networkplumber.org> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org If dumpcap is run twice with each instance pointing a different interface, it would fail because of overlap in ring a pool names. Fix by putting process id in the name. It is still not allowed to do multiple invocations on the same interface because only one callback is allowed and only one copy of mbuf is done. Dumpcap will fail with error in this case: pdump_prepare_client_request(): client request for pdump enable/disable failed EAL: Error - exiting with code: 1 Cause: Packet dump enable on 0:net_null0 failed File exists Fixes: cbb44143be74 ("app/dumpcap: add new packet capture application") Reported-by: Isaac Boukris Signed-off-by: Stephen Hemminger Reviewed-by: Morten Brørup --- app/dumpcap/main.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index 64294bbfb3e6..74c754e272c5 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -44,7 +44,6 @@ #include #include -#define RING_NAME "capture-ring" #define MONITOR_INTERVAL (500 * 1000) #define MBUF_POOL_CACHE_SIZE 32 #define BURST_SIZE 32 @@ -647,6 +646,7 @@ static void dpdk_init(void) static struct rte_ring *create_ring(void) { struct rte_ring *ring; + char ring_name[RTE_RING_NAMESIZE]; size_t size, log2; /* Find next power of 2 >= size. */ @@ -660,28 +660,28 @@ static struct rte_ring *create_ring(void) ring_size = size; } - ring = rte_ring_lookup(RING_NAME); - if (ring == NULL) { - ring = rte_ring_create(RING_NAME, ring_size, - rte_socket_id(), 0); - if (ring == NULL) - rte_exit(EXIT_FAILURE, "Could not create ring :%s\n", - rte_strerror(rte_errno)); - } + /* Want one ring per invocation of program */ + snprintf(ring_name, sizeof(ring_name), + "dumpcap-%d", getpid()); + + ring = rte_ring_create(ring_name, ring_size, + rte_socket_id(), 0); + if (ring == NULL) + rte_exit(EXIT_FAILURE, "Could not create ring :%s\n", + rte_strerror(rte_errno)); + return ring; } static struct rte_mempool *create_mempool(void) { const struct interface *intf; - static const char pool_name[] = "capture_mbufs"; + char pool_name[RTE_MEMPOOL_NAMESIZE]; size_t num_mbufs = 2 * ring_size; struct rte_mempool *mp; uint32_t data_size = 128; - mp = rte_mempool_lookup(pool_name); - if (mp) - return mp; + snprintf(pool_name, sizeof(pool_name), "capture_%u", getpid()); /* Common pool so size mbuf for biggest snap length */ TAILQ_FOREACH(intf, &interfaces, next) { @@ -826,7 +826,7 @@ static void enable_pdump(struct rte_ring *r, struct rte_mempool *mp) rte_exit(EXIT_FAILURE, "Packet dump enable on %u:%s failed %s\n", intf->port, intf->name, - rte_strerror(-ret)); + rte_strerror(rte_errno)); } if (intf->opts.promisc_mode) {