From patchwork Mon Jan 2 16:24:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Magistro X-Patchwork-Id: 121505 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 7148AA00C2; Mon, 2 Jan 2023 17:25:30 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 422DA40693; Mon, 2 Jan 2023 17:25:29 +0100 (CET) Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by mails.dpdk.org (Postfix) with ESMTP id 026D540689 for ; Mon, 2 Jan 2023 17:25:26 +0100 (CET) Received: by mail-qt1-f174.google.com with SMTP id jr11so22724822qtb.7 for ; Mon, 02 Jan 2023 08:25:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=is+q+TG7ppkZD9qvwc7nI3GZkXHXynO4Svqbr8x3NMM=; b=ZBLDiVw6BOj+RLukjyr17R/7f2umOa6Ri+fe/wtiCzFzYz0ojVqMFRnIJxhhJF/3TB 30We8wbNUl9K3X01P05JMz++ACBvx586/WKj/2GVcIzu7+yRLJ3cSRzOL21mRtMG9Ic1 7RSr79hNDQqjutmfhpIsMyNSimO8V7xR5/mXH+XEo7AQ3svA784rv1pn0TkHataMRPOx pDHd10/KZTg7T4S8y63BP7lnZ9Nk//M+iouvwvauVgjt/lJqGhdvnURC6vLpFHvkFNNt jzdzX1KJUjlIyTMB8Tl+2ut8YlZpjAjJXZTguF3liG9RMIRpZRSBlpZq+SF7qbJqqgDT IqVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=is+q+TG7ppkZD9qvwc7nI3GZkXHXynO4Svqbr8x3NMM=; b=sZ5uswcDIOgY0+5+UI5uz/c4MHAAOH5hccp9BMflWoIZ59/CEf5TlnZqlFUkfT1Xzi YnD1vIbRbRdT7KbZ/kZXF5817H05Ita1cWGUTOquUeH980F2xhJwCXdKd13dmxn/pnW3 QrxqKYEjKnO54KWGLsJHIji5tY6W83W4peervRvYmDrGhc/alc7tsCm8B5xUHrZWebzg GSCRCJK/BX4Ki6M2ibMFgTy9s57mtjXB+GkAuvQrGwMdIcx0i2LbWOhcyvUwK2mmKBOk Zca2iF9ueJiHocXmP9uVAkXrxitqOyfD8iJPEsCVwT4T9wlLiyG4GK0ZjkiGtQS/DdR+ q6lA== X-Gm-Message-State: AFqh2kogK6NRkzh4GbISYz8HGhqChdGgQunlq6u9RO2F2w14Oruw7503 LXCvWPCCDuNDuQz4tYCJKvlW8UUYgAQ= X-Google-Smtp-Source: AMrXdXupI9jjurggTOZaYFcbh5JAdl+8EY+LB1vsq8NF5e9x+c4m33nb8xqgd47Od7YXOB5Xti7dfQ== X-Received: by 2002:a05:622a:90e:b0:3a9:7332:3f75 with SMTP id bx14-20020a05622a090e00b003a973323f75mr59119214qtb.47.1672676725900; Mon, 02 Jan 2023 08:25:25 -0800 (PST) Received: from lvdi-01-iad-l.blue.trinitycyber.com ([38.142.224.194]) by smtp.gmail.com with ESMTPSA id u2-20020ac80502000000b003a81eef14efsm17678091qtg.45.2023.01.02.08.25.25 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2023 08:25:25 -0800 (PST) From: Ben Magistro To: dev@dpdk.org, stephen@networkplumber.org Cc: ben.magistro@trinitycyber.com, Ben Magistro Subject: [PATCH 1/6] app/dumpcap: add additional dump info Date: Mon, 2 Jan 2023 16:24:36 +0000 Message-Id: <20230102162441.6205-1-koncept1@gmail.com> X-Mailer: git-send-email 2.27.0 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 This change increases the information returned when listing interfaces to include link state and promiscuous mode. Additionally, the information is formatted to be easily consumed by a machine or a person. This change is/was utilized while troubleshooting and developing the subsequent patches to address the issues identified on the mailing list [1]. [1] http://mails.dpdk.org/archives/dev/2022-December/258317.html Signed-off-by: Ben Magistro --- app/dumpcap/main.c | 27 ++++++++++++++++++++++++++- doc/guides/tools/dumpcap.rst | 9 ++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index 2eb8414efa..b9096f050c 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -266,11 +266,36 @@ static void dump_interfaces(void) { char name[RTE_ETH_NAME_MAX_LEN]; uint16_t p; + struct rte_eth_link link_info; + char link_state[8]; + char promisc_mode[9]; + printf("%-4s\t%-40s\t%-8s\t%-12s\n", + "Port", "Name", "Link", "Promiscuous"); RTE_ETH_FOREACH_DEV(p) { if (rte_eth_dev_get_name_by_port(p, name) < 0) continue; - printf("%u. %s\n", p, name); + + if (rte_eth_link_get_nowait(p, &link_info) < 0) { + rte_strscpy(link_state, "Unknown", sizeof(link_state)); + } + else if (link_info.link_status == RTE_ETH_LINK_UP) { + rte_strscpy(link_state, "Up", sizeof(link_state)); + } + else { + rte_strscpy(link_state, "Down", sizeof(link_state)); + } + + // not checking error here; should only error if given an invalid port id + if (rte_eth_promiscuous_get(p) == 1) { + rte_strscpy(promisc_mode, "Enabled", sizeof(promisc_mode)); + } + else { + rte_strscpy(promisc_mode, "Disabled", sizeof(promisc_mode)); + } + + printf("%-4u\t%-40s\t%-8s\t%-12s\n", + p, name, link_state, promisc_mode); } exit(0); diff --git a/doc/guides/tools/dumpcap.rst b/doc/guides/tools/dumpcap.rst index d8a137b1cd..0f89e6c5ca 100644 --- a/doc/guides/tools/dumpcap.rst +++ b/doc/guides/tools/dumpcap.rst @@ -39,7 +39,7 @@ If ``-w`` option is specified, then that file is used. Running the Application ----------------------- -To list interfaces available for capture, use ``--list-interfaces``. +To list interfaces available for capture, use ``-D`` or ``--list-interfaces``. To filter packets in style of *tshark*, use the ``-f`` flag. @@ -52,8 +52,11 @@ Example .. code-block:: console # /app/dpdk-dumpcap --list-interfaces - 0. 000:00:03.0 - 1. 000:00:03.1 + Port Name Link Promiscuous + 0 0000:00:03.0 Up Enabled + 1 0000:00:03.1 Up Disabled + 2 0000:00:03.2 Down Disabled + 3 0000:00:03.3 Down Disabled # /app/dpdk-dumpcap -i 0000:00:03.0 -c 6 -w /tmp/sample.pcapng Packets captured: 6 From patchwork Mon Jan 2 16:24:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Magistro X-Patchwork-Id: 121506 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 32CD5A00C2; Mon, 2 Jan 2023 17:25:35 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1C3DF42D0C; Mon, 2 Jan 2023 17:25:35 +0100 (CET) Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) by mails.dpdk.org (Postfix) with ESMTP id 01F2C42D0C; Mon, 2 Jan 2023 17:25:34 +0100 (CET) Received: by mail-qt1-f181.google.com with SMTP id c7so22722329qtw.8; Mon, 02 Jan 2023 08:25:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=rNiptyipccaYx9siVWXHOCaJfzcTCqDDOOOO7GwmBKQ=; b=dE9Uz+mlzKe9qi1QPwtGEi+pbl/NcdnhfVTjyFJ7lvnOFj1TtIrreS/D91rth53CD2 hqJZdZOJDJyHCnkRuFJ4R6g0HafcIcrl34YNM5xB/JuvG3r7EawlAFv1ugz44HSWYT1Z YxMTeZTWwOlgUEl/sDsdV5QHLo/hlyzMR3rpSJsH7zBFI9zLuhY0/TV6Q3bNRuvxr+Tn TF9/iguSoYie3g0Ft1K+DPVQrPJcR+Ir3nl2hHhbTjWKjbl5JSEiPOHdFvO5eoT7lfZ5 XBGRyENaQsQ1lp/lTVi3orEYA5HpFCV3zK17m3kwsLElQIOoOcQE2UJud4gwHe/38hzZ ZxmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=rNiptyipccaYx9siVWXHOCaJfzcTCqDDOOOO7GwmBKQ=; b=VYOBHrdkcT5jknfKyNHI2eNqxYrdwNCQrAmv1oEaIwYFukrwehg6IYivmwy9ZZa+pq Q98Ns8y0eZYAKnjmF/y5DcX+fVQ8obz8e/eI+wAjegkwwnZR35537stWuOPe9PzPHZmq tbV04G7ei/R3HgvG3ij65xXb4jsIvKh9P2XyShgh+4FKO2y00++ROomjoE9zjIdEQRXg dQP2p2tMpPEbF4AV9AT4F4Ot4oxtBQYNQWhmr55PeuR1q+gg6deCKCvJFDeAEx/xsiUG 8GsNiik7TkLatXaWdqjULUw2ByLvF079MRF5PLDHic20achJbdlEn/M1pk1X+c4Bp+7q 28AQ== X-Gm-Message-State: AFqh2kptCzK3euG8zhw1cm6EieGTeMqmnRyFJlzcCmIQs+x7h6NSqn8s OBfYOD2ZPlaKZmlQldvU42Mr1cETZHs= X-Google-Smtp-Source: AMrXdXs/yULLvHZ1m4sxIFR+LsQUbwP0XdkRtwVNRPtRUjOjUg5UHrfZqwcs+gPh0wd9nc4kIUrtdg== X-Received: by 2002:ac8:128b:0:b0:3a5:758d:8f5e with SMTP id y11-20020ac8128b000000b003a5758d8f5emr55056038qti.19.1672676733261; Mon, 02 Jan 2023 08:25:33 -0800 (PST) Received: from lvdi-01-iad-l.blue.trinitycyber.com ([38.142.224.194]) by smtp.gmail.com with ESMTPSA id u2-20020ac80502000000b003a81eef14efsm17678091qtg.45.2023.01.02.08.25.32 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2023 08:25:32 -0800 (PST) From: Ben Magistro To: dev@dpdk.org, stephen@networkplumber.org Cc: ben.magistro@trinitycyber.com, Ben Magistro , stable@dpdk.org Subject: [PATCH 2/6] app/dumpcap: fix storing port identifier Date: Mon, 2 Jan 2023 16:24:37 +0000 Message-Id: <20230102162441.6205-2-koncept1@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20230102162441.6205-1-koncept1@gmail.com> References: <20230102162441.6205-1-koncept1@gmail.com> 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 When dumpcap adds an interface, the port was not being preserved. This results in the structure being initialized and the port field being set to 0 regardless of what port was actually selected. This unset field is then used in both the enable and cleanup calls. This could result in the capture occurring on the wrong interface. Fixes: d59fb4d ("app/dumpcap: add new packet capture application") Cc: stephen@networkplumber.org Cc: stable@dpdk.org Signed-off-by: Ben Magistro --- app/dumpcap/main.c | 1 + 1 file changed, 1 insertion(+) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index b9096f050c..aaee9349b1 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -202,6 +202,7 @@ static void add_interface(uint16_t port, const char *name) rte_exit(EXIT_FAILURE, "no memory for interface\n"); memset(intf, 0, sizeof(*intf)); + intf->port = port; rte_strscpy(intf->name, name, sizeof(intf->name)); printf("Capturing on '%s'\n", name); From patchwork Mon Jan 2 16:24:38 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Magistro X-Patchwork-Id: 121507 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 0F996A00C2; Mon, 2 Jan 2023 17:25:45 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AB6EB42D31; Mon, 2 Jan 2023 17:25:40 +0100 (CET) Received: from mail-qt1-f174.google.com (mail-qt1-f174.google.com [209.85.160.174]) by mails.dpdk.org (Postfix) with ESMTP id 8D2B742D25; Mon, 2 Jan 2023 17:25:39 +0100 (CET) Received: by mail-qt1-f174.google.com with SMTP id jr11so22725275qtb.7; Mon, 02 Jan 2023 08:25:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=cue4JR6FMX+/pboXGHKDBnXpQ6NC2EgNI7ka72U7IZo=; b=kbbDcCE7XbXsZ3o4X0PKRDQp/YmxH5o+I0yDd2mGbb6dyqIJ/9yijDG7b6EDFBTTrq 3ZKQYbLhoaI3obdor6uQh1706LMccWNDjcW7r0yeaZSXPg2PmHHj8deBvxLLq8Dto4EC 91vMW3AYMWi4QjwZ8YqNijd5tsS7jeDHkh8buFqB7tykZGeOwZgzfUfXhPP9BZ5oK9d3 UhM6iw3LSNk7AxhDdH55BX6cNFeMdBPIFQREcf6lhK69h/WlJYLHrvHi0v7g/EThuXit VjalTAlENz2K5/OJhBpD4Oe+i2gYkDmgjirp1E4ija1l/dV3FpR0/mjGRMDf0LcgICQK vOUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=cue4JR6FMX+/pboXGHKDBnXpQ6NC2EgNI7ka72U7IZo=; b=th5ahP1glctPTqI0n6P+4ukEMDiK/dmdR0O76IY4IQ0NxOC9DkTHNe0SCjdjehKTSx +AHkt10QNVqgOGZfHk4YlM3EwkUySX4eWWOytC2Eja4KHftmuv8b6IhuK/9OHFH7yp3W 14t/3LOtJwRPrHICip3o8OBLz1jNcMbCwpOU5DUAAlQXZeWJFFEiaBXNHl4D3FdlUATX cB+UOyLoiBozqLANVXTKpMcrRLy5Gg1KmABtJUdKsqp4VZk5q/neFnHvAQ/E9kQfN1bE GkMnNKw7SUwwWNwxCwCMJeFiEBul5XD5zXlInZkm32KxN3OQNlNZW6VvJfPRJzQiGpTf 0hPg== X-Gm-Message-State: AFqh2koOPMcbflHHPQ30SJmfY/lk0DcC0zHF31/p05kbSMmRqADZMAqY RRHqkv/V8559xzyMtGw3NI0Knh+q9dE= X-Google-Smtp-Source: AMrXdXvSa3wr54btlYR4ftmXw8d+86Cz7lUEF6ocvdPONnQeHl9G+Qm8IwkpC5/5X6LXN4hR/iCHBQ== X-Received: by 2002:ac8:47cd:0:b0:3a7:e4ad:5499 with SMTP id d13-20020ac847cd000000b003a7e4ad5499mr62110128qtr.32.1672676739037; Mon, 02 Jan 2023 08:25:39 -0800 (PST) Received: from lvdi-01-iad-l.blue.trinitycyber.com ([38.142.224.194]) by smtp.gmail.com with ESMTPSA id u2-20020ac80502000000b003a81eef14efsm17678091qtg.45.2023.01.02.08.25.38 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2023 08:25:38 -0800 (PST) From: Ben Magistro To: dev@dpdk.org, stephen@networkplumber.org Cc: ben.magistro@trinitycyber.com, Ben Magistro , stable@dpdk.org Subject: [PATCH 3/6] app/dumpcap: fix preserving promiscuous mode Date: Mon, 2 Jan 2023 16:24:38 +0000 Message-Id: <20230102162441.6205-3-koncept1@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20230102162441.6205-1-koncept1@gmail.com> References: <20230102162441.6205-1-koncept1@gmail.com> 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 When stopping dumpcap and the main application set an interface to promiscuous mode, it would be disabled when dumpcap performed its cleanup. This results in a change of behavior for the main application after running/utilizing dumpcap. The initial promiscuous mode is now stored and compared when cleaning up allowing that to be preserved. Fixes: d59fb4d ("app/dumpcap: add new packet capture application") Cc: stephen@networkplumber.org Cc: stable@dpdk.org Signed-off-by: Ben Magistro --- app/dumpcap/main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index aaee9349b1..26c641df61 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -84,6 +84,7 @@ struct interface { TAILQ_ENTRY(interface) next; uint16_t port; char name[RTE_ETH_NAME_MAX_LEN]; + int promiscuous_exit; /* 1 when promicuous is set prior to starting dumpcap */ struct rte_rxtx_callback *rx_cb[RTE_MAX_QUEUES_PER_PORT]; }; @@ -204,6 +205,8 @@ static void add_interface(uint16_t port, const char *name) memset(intf, 0, sizeof(*intf)); intf->port = port; rte_strscpy(intf->name, name, sizeof(intf->name)); + // not checking error here; should only error if given an invalid port id + intf->promiscuous_exit = rte_eth_promiscuous_get(port); printf("Capturing on '%s'\n", name); @@ -462,7 +465,7 @@ cleanup_pdump_resources(void) TAILQ_FOREACH(intf, &interfaces, next) { rte_pdump_disable(intf->port, RTE_PDUMP_ALL_QUEUES, RTE_PDUMP_FLAG_RXTX); - if (promiscuous_mode) + if (!intf->promiscuous_exit && promiscuous_mode) rte_eth_promiscuous_disable(intf->port); } } From patchwork Mon Jan 2 16:24:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Magistro X-Patchwork-Id: 121508 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 9FD72A00C2; Mon, 2 Jan 2023 17:25:50 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8C7B642D2A; Mon, 2 Jan 2023 17:25:44 +0100 (CET) Received: from mail-qt1-f172.google.com (mail-qt1-f172.google.com [209.85.160.172]) by mails.dpdk.org (Postfix) with ESMTP id 344C442D25; Mon, 2 Jan 2023 17:25:43 +0100 (CET) Received: by mail-qt1-f172.google.com with SMTP id h26so22743522qtu.2; Mon, 02 Jan 2023 08:25:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=JiOCt4RhgzdVAPmdZIT0PmFXn6dg91pzan3MBaKrWtM=; b=I4Rpqa5lY2f/vwwD9E4HMxeE7mlGdX/4XsIGNVNtVnqG+axWF1byRgXbZhbQmZf8we 24ap4UaPN0CSFaZB7opmWdBc7gxvNDCS37aOkta5304EIlJhMUFnDPDHaSNLJWnbH1zo fsvO0b3hNPF87vA6H03k3rhVBEDV3tcM7eMlVp6csOnNUrXp4F1/pYC7dq1S5fDHKZd8 tsph8bTa2Gj9+FeYPa1ETzKOdMOcgU37hqQk4bMYN2yX/1pjJCuUCRjY9FgNrC2cWC1r DKGhZWT6x0le1CN1TJKhF+HqNZL+2UrVoLZErY+JaB2xX+uX5IRVA01jvibIZ3hr/vhK mOrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=JiOCt4RhgzdVAPmdZIT0PmFXn6dg91pzan3MBaKrWtM=; b=vXNja2ybRuf/kIbqCxm0CoaANlORASiugAalGoKgfJoacC6K3mhI8OtF7zNCakszce TYqGrkoXjTJuQeLJoBsM8XQDEzpUSE9EmQaYVbq3VkW6wofs5MBnlI3RarwzwpNWaCQQ +WcROVXcAX7jBUzGIxjbR3Y5mdoQZVWZZ5NhXmWoifTi3IUqIXEN6C2QPltrztMul1Fj wqOARvx/W8gJl6oU1NCQzTCegi2Ya9GSdySLe+3E7p+Y1uTDk3hPauBQeWOis00natv0 LNnaWOicHoDALPnZVQu+PVeVTDtobKGQhS0JXr7lEtYp8n3k+Ma0tXUtm7l3oQDFUkbj vFDQ== X-Gm-Message-State: AFqh2koBbDJrk5/gopvKy7MvwakmH4qNCmM5HNYn9NzbUSzOK+H4HP+U rziRxlT4XLwffiz5OC1isudkYZR9y9E= X-Google-Smtp-Source: AMrXdXvRPTdaK7QsiipflcPLeXAf5rKaJTT1VSbl01/1QQF1+yB5n9i77ezmxWfeEjVadLrwtdIDdQ== X-Received: by 2002:ac8:5295:0:b0:3a8:fdf:8ff8 with SMTP id s21-20020ac85295000000b003a80fdf8ff8mr53477730qtn.36.1672676742489; Mon, 02 Jan 2023 08:25:42 -0800 (PST) Received: from lvdi-01-iad-l.blue.trinitycyber.com ([38.142.224.194]) by smtp.gmail.com with ESMTPSA id u2-20020ac80502000000b003a81eef14efsm17678091qtg.45.2023.01.02.08.25.41 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2023 08:25:42 -0800 (PST) From: Ben Magistro To: dev@dpdk.org, stephen@networkplumber.org Cc: ben.magistro@trinitycyber.com, Ben Magistro , arshdeep.kaur@intel.com, stable@dpdk.org Subject: [PATCH 4/6] app/dumpcap: fix capturing on multiple interfaces Date: Mon, 2 Jan 2023 16:24:39 +0000 Message-Id: <20230102162441.6205-4-koncept1@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20230102162441.6205-1-koncept1@gmail.com> References: <20230102162441.6205-1-koncept1@gmail.com> 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 When selecting interfaces to capture traffic on, only the last interface specified was being preserved for selection. This turns the interface argument into an array allowing multiple interfaces to be selected. This also adds checks for the capture format so that if multiple interfaces are selected, the interface information is included in the capture file. Fixes: 7f3623a ("app/dumpcap: fix select interface") Cc: arshdeep.kaur@intel.com Cc: stephen@networkplumber.org Cc: stable@dpdk.org Signed-off-by: Ben Magistro --- app/dumpcap/main.c | 47 +++++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index 26c641df61..dc4d69ff6b 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -65,8 +65,8 @@ static const char *file_prefix; static uint32_t snaplen = RTE_MBUF_DEFAULT_BUF_SIZE; static bool dump_bpf; static bool show_interfaces; -static bool select_interfaces; -const char *interface_arg; +static uint8_t interface_arg_count = 0; /* count of interfaces configured via -i */ +static const char *interface_arg[RTE_MAX_ETHPORTS]; /*array of interface parameters */ static struct { uint64_t duration; /* nanoseconds */ @@ -242,7 +242,6 @@ static void set_default_interface(void) add_interface(p, name); return; } - rte_exit(EXIT_FAILURE, "No usable interfaces found\n"); } /* Lookup interface by name or port and add it to the list */ @@ -265,6 +264,32 @@ static void select_interface(const char *arg) } } +/** + * builds list of interfacs that capture will occur on + * this also validates the save format based on the number of interfaces + */ +static void collect_interfaces(void) +{ + uint8_t active; + struct interface *intf; + + active = 0; + + if (interface_arg_count == 0) + set_default_interface(); + else + for (uint8_t i = 0; i < interface_arg_count; ++i) + select_interface(interface_arg[i]); + + TAILQ_FOREACH(intf, &interfaces, next) + active++; + + if ((!use_pcapng) && (active > 1)) { + printf("Requested pcap format, but options require pcapng; overriding\n"); + use_pcapng = true; + } +} + /* Display list of possible interfaces that can be used. */ static void dump_interfaces(void) { @@ -406,8 +431,8 @@ static void parse_opts(int argc, char **argv) usage(); exit(0); case 'i': - select_interfaces = true; - interface_arg = optarg; + interface_arg_count++; + interface_arg[interface_arg_count - 1] = optarg; break; case 'n': use_pcapng = true; @@ -840,21 +865,17 @@ int main(int argc, char **argv) parse_opts(argc, argv); dpdk_init(); + if (rte_eth_dev_count_avail() == 0) + rte_exit(EXIT_FAILURE, "No usable ports found\n"); + if (show_interfaces) dump_interfaces(); - if (rte_eth_dev_count_avail() == 0) - rte_exit(EXIT_FAILURE, "No Ethernet ports found\n"); - - if (select_interfaces) - select_interface(interface_arg); + collect_interfaces(); if (filter_str) compile_filter(); - if (TAILQ_EMPTY(&interfaces)) - set_default_interface(); - r = create_ring(); mp = create_mempool(); out = create_output(); From patchwork Mon Jan 2 16:24:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Magistro X-Patchwork-Id: 121509 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 33DC3A00C2; Mon, 2 Jan 2023 17:25:57 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AEED042D35; Mon, 2 Jan 2023 17:25:47 +0100 (CET) Received: from mail-qt1-f175.google.com (mail-qt1-f175.google.com [209.85.160.175]) by mails.dpdk.org (Postfix) with ESMTP id 7415542D38 for ; Mon, 2 Jan 2023 17:25:45 +0100 (CET) Received: by mail-qt1-f175.google.com with SMTP id x11so22703764qtv.13 for ; Mon, 02 Jan 2023 08:25:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=/rfvV0SH0PF79XBv7684OENYNgtbC4BVg0Oj9c7c0rM=; b=En0KlrbzTGweeIKgsKERxtzVPGeYz9sbkI2BCwx1xcMxfJwqIo+WmHsyWZS+chJaMu NfuZIy7SFTOqIEvRzb4Ab47Fp+eF85vWuunUZ2QJJVK0gYAW9dDI8jpnPDDM4XUAPMBF f7UFbuA48w0FIc94SRR+bOdjuVZ4g056EUtTV7TU9ZoE1V0QoRujwrlJp7zb5ECoNkrf neFXvthMou2yqY/CraVqmij1oAzcE1himB8e0xlyH2yGFDIwKoTfWtXQemO6ARubuZQR 1k4Xq605LMCjOFN/rOn0BI3u6ta0S11N80tGuj9K+gQ+Z8hwn3gSDqUSlPGA3WxIH4mW 6rFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=/rfvV0SH0PF79XBv7684OENYNgtbC4BVg0Oj9c7c0rM=; b=G8d3khEQQ8X6xxz/SnuVNbCoqZRL1+9IfNfJs5B/VfzFq1JLRvaFlHyCAHdIc4D8QN oDtG5jpo0396vfS2+CPpryuC2Yq/MQS+oaEIj+pn0w70bBrbR2A/aioDXahKDXB9N35B KkCuTx6KJqYhT/ui3k97MlIgWQjo8lfoAp1nhpkNfwYdxd+jODBZ3HckCmt5VFJxWV5d uAbkPOjrowF6sECEgwCNgs1n3yt7EHxbzDGkPjrQU2bljxvn1/uhS31D4iYdaRbIse1+ Aol0w1OOwLXg/GI9tUgLPGQTkJytycL7dEekJdYNEVdD20FlDfC3mq1J1LZ/trG0ddJt bWdg== X-Gm-Message-State: AFqh2kr73wWD/2KJGactDG4gC5aq7ULWPSH4Go6klYEFNG+n5dPggZaF Sc29neKwx19P2OnpRhiVvQKoBfXERrM= X-Google-Smtp-Source: AMrXdXsqSANB7yF/SP6fULlwuqLJ582oZjB+si5u3FKD0vs98RyYNgV3oHe+VPDSLeR0856tGuzpVQ== X-Received: by 2002:ac8:73cc:0:b0:3a7:e2d2:5030 with SMTP id v12-20020ac873cc000000b003a7e2d25030mr62392242qtp.2.1672676744640; Mon, 02 Jan 2023 08:25:44 -0800 (PST) Received: from lvdi-01-iad-l.blue.trinitycyber.com ([38.142.224.194]) by smtp.gmail.com with ESMTPSA id u2-20020ac80502000000b003a81eef14efsm17678091qtg.45.2023.01.02.08.25.44 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2023 08:25:44 -0800 (PST) From: Ben Magistro To: dev@dpdk.org, stephen@networkplumber.org Cc: ben.magistro@trinitycyber.com, Ben Magistro Subject: [PATCH 5/6] app/dumpcap: improve per interface arg parsing Date: Mon, 2 Jan 2023 16:24:40 +0000 Message-Id: <20230102162441.6205-5-koncept1@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20230102162441.6205-1-koncept1@gmail.com> References: <20230102162441.6205-1-koncept1@gmail.com> 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 This change improves the argument parsing to align closer to that of Wireshark dumpcap allowing for per interface settings on promiscuous mode and the filter string. Cc: stephen@networkplumber.org Signed-off-by: Ben Magistro --- app/dumpcap/main.c | 149 +++++++++++++++++++++++------------ doc/guides/tools/dumpcap.rst | 17 +++- 2 files changed, 112 insertions(+), 54 deletions(-) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index dc4d69ff6b..1dc4a38adb 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -55,18 +55,32 @@ static const char *progname; static bool quit_signal; static bool group_read; static bool quiet; -static bool promiscuous_mode = true; static bool use_pcapng = true; static char *output_name; -static const char *filter_str; static unsigned int ring_size = 2048; static const char *capture_comment; static const char *file_prefix; -static uint32_t snaplen = RTE_MBUF_DEFAULT_BUF_SIZE; static bool dump_bpf; static bool show_interfaces; static uint8_t interface_arg_count = 0; /* count of interfaces configured via -i */ -static const char *interface_arg[RTE_MAX_ETHPORTS]; /*array of interface parameters */ + +/* struct representing args for each interface */ +struct interface_opts { + const char *intf_arg; + const char *filter_str; + bool promiscuous_mode; + uint32_t snaplen; +}; +/* default parameters for interfaces */ +static struct interface_opts interface_defaults = { + .promiscuous_mode = true, + .snaplen = RTE_MBUF_DEFAULT_BUF_SIZE +}; +//TODO this can be specified per interface but there are a few places +// that need more review and possibly refactoring so leaving this one out +uint32_t snaplen = RTE_MBUF_DEFAULT_BUF_SIZE; +/* array of interface parameters */ +static struct interface_opts interface_args[RTE_MAX_ETHPORTS]; static struct { uint64_t duration; /* nanoseconds */ @@ -75,7 +89,6 @@ static struct { } stop; /* Running state */ -static struct rte_bpf_prm *bpf_prm; static uint64_t start_time, end_time; static uint64_t packets_received; static size_t file_size; @@ -85,6 +98,8 @@ struct interface { uint16_t port; char name[RTE_ETH_NAME_MAX_LEN]; int promiscuous_exit; /* 1 when promicuous is set prior to starting dumpcap */ + struct interface_opts *start_opts; /* cli parameters associated with interface */ + struct rte_bpf_prm *bpf_prm; struct rte_rxtx_callback *rx_cb[RTE_MAX_QUEUES_PER_PORT]; }; @@ -194,7 +209,7 @@ static void auto_stop(char *opt) } /* Add interface to list of interfaces to capture */ -static void add_interface(uint16_t port, const char *name) +static void add_interface(uint16_t port, const char *name, struct interface_opts *opts) { struct interface *intf; @@ -207,6 +222,7 @@ static void add_interface(uint16_t port, const char *name) rte_strscpy(intf->name, name, sizeof(intf->name)); // not checking error here; should only error if given an invalid port id intf->promiscuous_exit = rte_eth_promiscuous_get(port); + intf->start_opts = opts; printf("Capturing on '%s'\n", name); @@ -215,7 +231,7 @@ static void add_interface(uint16_t port, const char *name) } /* Select all valid DPDK interfaces */ -static void select_all_interfaces(void) +static void select_all_interfaces(struct interface_opts *opts) { char name[RTE_ETH_NAME_MAX_LEN]; uint16_t p; @@ -223,7 +239,7 @@ static void select_all_interfaces(void) RTE_ETH_FOREACH_DEV(p) { if (rte_eth_dev_get_name_by_port(p, name) < 0) continue; - add_interface(p, name); + add_interface(p, name, opts); } } @@ -231,7 +247,7 @@ static void select_all_interfaces(void) * Choose interface to capture if no -i option given. * Select the first DPDK port, this matches what dumpcap does. */ -static void set_default_interface(void) +static void set_default_interface(struct interface_opts *opts) { char name[RTE_ETH_NAME_MAX_LEN]; uint16_t p; @@ -239,28 +255,28 @@ static void set_default_interface(void) RTE_ETH_FOREACH_DEV(p) { if (rte_eth_dev_get_name_by_port(p, name) < 0) continue; - add_interface(p, name); + add_interface(p, name, opts); return; } } /* Lookup interface by name or port and add it to the list */ -static void select_interface(const char *arg) +static void select_interface(struct interface_opts *opts) { uint16_t port; - if (strcmp(arg, "*") == 0) - select_all_interfaces(); - else if (rte_eth_dev_get_port_by_name(arg, &port) == 0) - add_interface(port, arg); + if (strcmp(opts->intf_arg, "*") == 0) + select_all_interfaces(opts); + else if (rte_eth_dev_get_port_by_name(opts->intf_arg, &port) == 0) + add_interface(port, opts->intf_arg, opts); else { char name[RTE_ETH_NAME_MAX_LEN]; - port = get_uint(arg, "port_number", UINT16_MAX); + port = get_uint(opts->intf_arg, "port_number", UINT16_MAX); if (rte_eth_dev_get_name_by_port(port, name) < 0) rte_exit(EXIT_FAILURE, "Invalid port number %u\n", port); - add_interface(port, name); + add_interface(port, name, opts); } } @@ -276,10 +292,10 @@ static void collect_interfaces(void) active = 0; if (interface_arg_count == 0) - set_default_interface(); + set_default_interface(&interface_defaults); else for (uint8_t i = 0; i < interface_arg_count; ++i) - select_interface(interface_arg[i]); + select_interface(&interface_args[i]); TAILQ_FOREACH(intf, &interfaces, next) active++; @@ -330,37 +346,48 @@ static void dump_interfaces(void) exit(0); } -static void compile_filter(void) +static void compile_filters(void) { - struct bpf_program bf; - pcap_t *pcap; + struct interface *intf; - pcap = pcap_open_dead(DLT_EN10MB, snaplen); - if (!pcap) - rte_exit(EXIT_FAILURE, "can not open pcap\n"); + TAILQ_FOREACH(intf, &interfaces, next) { + if (!intf->start_opts->filter_str) + continue; - if (pcap_compile(pcap, &bf, filter_str, - 1, PCAP_NETMASK_UNKNOWN) != 0) - rte_exit(EXIT_FAILURE, "pcap filter string not valid (%s)\n", - pcap_geterr(pcap)); + struct bpf_program bf; + pcap_t *pcap; - bpf_prm = rte_bpf_convert(&bf); - if (bpf_prm == NULL) - rte_exit(EXIT_FAILURE, - "bpf convert failed: %s(%d)\n", - rte_strerror(rte_errno), rte_errno); - - if (dump_bpf) { - printf("cBPF program (%u insns)\n", bf.bf_len); - bpf_dump(&bf, 1); - printf("\neBPF program (%u insns)\n", bpf_prm->nb_ins); - rte_bpf_dump(stdout, bpf_prm->ins, bpf_prm->nb_ins); - exit(0); + // pcap = pcap_open_dead(DLT_EN10MB, intf->start_opts->snaplen); + pcap = pcap_open_dead(DLT_EN10MB, snaplen); + if (!pcap) + rte_exit(EXIT_FAILURE, "can not open pcap\n"); + + if (pcap_compile(pcap, &bf, intf->start_opts->filter_str, + 1, PCAP_NETMASK_UNKNOWN) != 0) + rte_exit(EXIT_FAILURE, "pcap filter string not valid (%s)\n", + pcap_geterr(pcap)); + + intf->bpf_prm = rte_bpf_convert(&bf); + if (intf->bpf_prm == NULL) + rte_exit(EXIT_FAILURE, + "bpf convert failed: %s(%d)\n", + rte_strerror(rte_errno), rte_errno); + + if (dump_bpf) { + printf("\nPort: %d; Name: %s\n", intf->port, intf->name); + printf("cBPF program (%u insns)\n", bf.bf_len); + bpf_dump(&bf, 1); + printf("\neBPF program (%u insns)\n", intf->bpf_prm->nb_ins); + rte_bpf_dump(stdout, intf->bpf_prm->ins, intf->bpf_prm->nb_ins); + } + + /* Don't care about original program any more */ + pcap_freecode(&bf); + pcap_close(pcap); } - /* Don't care about original program any more */ - pcap_freecode(&bf); - pcap_close(pcap); + if (dump_bpf) + exit(0); } /* @@ -421,7 +448,10 @@ static void parse_opts(int argc, char **argv) show_interfaces = true; break; case 'f': - filter_str = optarg; + if (interface_arg_count == 0 ) + interface_defaults.filter_str = optarg; + else + interface_args[interface_arg_count - 1].filter_str = optarg; break; case 'g': group_read = true; @@ -432,7 +462,13 @@ static void parse_opts(int argc, char **argv) exit(0); case 'i': interface_arg_count++; - interface_arg[interface_arg_count - 1] = optarg; + interface_args[interface_arg_count - 1].intf_arg = optarg; + // set interface to global parameters when new interface is configured + interface_args[interface_arg_count - 1].filter_str = + interface_defaults.filter_str; + interface_args[interface_arg_count - 1].promiscuous_mode = + interface_defaults.promiscuous_mode; + // interface_args[interface_arg_count - 1].snaplen = interface_defaults.snaplen; break; case 'n': use_pcapng = true; @@ -441,7 +477,10 @@ static void parse_opts(int argc, char **argv) ring_size = get_uint(optarg, "packet_limit", 0); break; case 'p': - promiscuous_mode = false; + if (interface_arg_count == 0 ) + interface_defaults.promiscuous_mode = false; + else + interface_args[interface_arg_count - 1].promiscuous_mode = false; break; case 'P': use_pcapng = false; @@ -451,6 +490,12 @@ static void parse_opts(int argc, char **argv) break; case 's': snaplen = get_uint(optarg, "snap_len", 0); + /* + if (interface_arg_count == 0 ) + interface_defaults.snaplen = get_uint(optarg, "snap_len", 0); + else + interface_args[interface_arg_count - 1].snaplen = get_uint(optarg, "snap_len", 0); + */ break; case 'w': output_name = optarg; @@ -490,7 +535,7 @@ cleanup_pdump_resources(void) TAILQ_FOREACH(intf, &interfaces, next) { rte_pdump_disable(intf->port, RTE_PDUMP_ALL_QUEUES, RTE_PDUMP_FLAG_RXTX); - if (!intf->promiscuous_exit && promiscuous_mode) + if (!intf->promiscuous_exit && intf->start_opts->promiscuous_mode) rte_eth_promiscuous_disable(intf->port); } } @@ -750,7 +795,7 @@ static void enable_pdump(struct rte_ring *r, struct rte_mempool *mp) flags |= RTE_PDUMP_FLAG_PCAPNG; TAILQ_FOREACH(intf, &interfaces, next) { - if (promiscuous_mode) { + if (intf->start_opts->promiscuous_mode) { ret = rte_eth_promiscuous_enable(intf->port); if (ret != 0) fprintf(stderr, @@ -759,8 +804,9 @@ static void enable_pdump(struct rte_ring *r, struct rte_mempool *mp) } ret = rte_pdump_enable_bpf(intf->port, RTE_PDUMP_ALL_QUEUES, + // flags, intf->start_opts->snaplen, flags, snaplen, - r, mp, bpf_prm); + r, mp, intf->bpf_prm); if (ret < 0) rte_exit(EXIT_FAILURE, "Packet dump enable failed: %s\n", @@ -873,8 +919,7 @@ int main(int argc, char **argv) collect_interfaces(); - if (filter_str) - compile_filter(); + compile_filters(); r = create_ring(); mp = create_mempool(); diff --git a/doc/guides/tools/dumpcap.rst b/doc/guides/tools/dumpcap.rst index 0f89e6c5ca..0538f5833b 100644 --- a/doc/guides/tools/dumpcap.rst +++ b/doc/guides/tools/dumpcap.rst @@ -41,10 +41,19 @@ Running the Application To list interfaces available for capture, use ``-D`` or ``--list-interfaces``. -To filter packets in style of *tshark*, use the ``-f`` flag. - To capture on multiple interfaces at once, use multiple ``-i`` flags. +To filter packets in style of *tshark*, use the ``-f`` flag. This flag +can be specified multiple times. If this flag is specified prior to ``-i`` +it sets a default filter that will be used with all interfaces. If this +flag is specified after ``-i`` it defines a filter for that interface only. + +To control the promiscuous mode of an interface, use the ``-p`` flag. This flag +can be specified multiple times. If this flag is specified prior to ``-i`` it +sets the default mode for all interfaces. If this flag is specified after ``-i`` +it sets the mode for that interface. If you want to allow some interfaces to +remain in promiscuous mode, this must flag must be associated with an interface. + Example ------- @@ -70,6 +79,10 @@ Example Limitations ----------- +The following option of Wireshark ``dumpcap`` has a different behavior: + + * ``-s`` -- snaplen is not per interface + The following option of Wireshark ``dumpcap`` is not yet implemented: * ``-b|--ring-buffer`` -- more complex file management. From patchwork Mon Jan 2 16:24:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Magistro X-Patchwork-Id: 121510 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 C39C9A00C2; Mon, 2 Jan 2023 17:26:02 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AEC0F42D3F; Mon, 2 Jan 2023 17:25:48 +0100 (CET) Received: from mail-qt1-f180.google.com (mail-qt1-f180.google.com [209.85.160.180]) by mails.dpdk.org (Postfix) with ESMTP id 4E25442D29 for ; Mon, 2 Jan 2023 17:25:47 +0100 (CET) Received: by mail-qt1-f180.google.com with SMTP id i20so22711836qtw.9 for ; Mon, 02 Jan 2023 08:25:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; 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=BF1mUY7A/zN96ubkRAr/TTL6Ea216ssTqlumP6n1NfM=; b=JJXtcmEeGi+6OELvKRFFBP9DqhbaD+Mb1iIn8VEL1DnCtbZbO1WDizyMKs4j5TIvPw 4SbtWCbeog5GME+uiswJfMNdHDjaAZaqj69kZEyv0AuNTN7bLBlM5v6ZNqJn0/esVC+v dUf52VA1ngjh8EOpYLrabnNNSr0GB72tu9DXm7Upl1kcB/Czmm2u7YW++fLiIcMOWKzE OU63MMGz7DMcdVhOOs3Cvjv+kzEsRsTD2Mt1Wf1G8j3QpRM3hkbZfwMuqkhj7Lydjxir 6koYBnDDsVOcmwNs9ry7wLpwKQIlAsoVcjYSxiEaxviYz7Hv7AmBdsqhLW7JsevJFlG2 aLeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; 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=BF1mUY7A/zN96ubkRAr/TTL6Ea216ssTqlumP6n1NfM=; b=yffoR99NLIIV1x29J/t0wNjWX5q3Rg8NTNfgtKeudGQhfcjULWNc6eOUqQbfaEaOIP liaggrZzddjQ79uvPLG3ghvWVLe7CJtlfwfFRLJvnwo1lojk85yK0Km9iL7gdS5/db5T INa5MnoJ5O4adhqbUGuP4I28m8CQN/7h3ll++EjTZlEyxL7buaH6ee5qmq/eJ2NJaf7p 0XpD6aGEy8vyQ6I9mfchXem697oGdxcAibstgsoTKqXhwhPzu0MV+KsRZ0uVKW5/fXEk HfhAVVQlBXR1eALsFOHrI6ySj8O47D3CjusVsFjfS/LTrVieIwRa1LE4FizpLcgSmjFa I+WA== X-Gm-Message-State: AFqh2kr5ep7isuCdG1+E6oRyIjtPEvCXA5Zgc6493FbZVMfgMT1/cajr Cb0jVBItOaTQLwE4Ep+nS7XvatIfYVM= X-Google-Smtp-Source: AMrXdXvr+4x0+FHtg1R14jN18U/p4I5bxMgEoqGYuOHsaZ7dNjkVboV1/ExTYxH/xUEYD/4HuZejvA== X-Received: by 2002:a05:622a:5143:b0:3ab:4221:44e9 with SMTP id ew3-20020a05622a514300b003ab422144e9mr65819058qtb.36.1672676746588; Mon, 02 Jan 2023 08:25:46 -0800 (PST) Received: from lvdi-01-iad-l.blue.trinitycyber.com ([38.142.224.194]) by smtp.gmail.com with ESMTPSA id u2-20020ac80502000000b003a81eef14efsm17678091qtg.45.2023.01.02.08.25.46 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Jan 2023 08:25:46 -0800 (PST) From: Ben Magistro To: dev@dpdk.org, stephen@networkplumber.org Cc: ben.magistro@trinitycyber.com, Ben Magistro Subject: [PATCH 6/6] app/dumpcap: refactor add all and default Date: Mon, 2 Jan 2023 16:24:41 +0000 Message-Id: <20230102162441.6205-6-koncept1@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20230102162441.6205-1-koncept1@gmail.com> References: <20230102162441.6205-1-koncept1@gmail.com> 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 This refactors the add all and default interface functions to reduce code duplication. Cc: stephen@networkplumber.org Signed-off-by: Ben Magistro --- app/dumpcap/main.c | 29 ++++++++--------------------- 1 file changed, 8 insertions(+), 21 deletions(-) diff --git a/app/dumpcap/main.c b/app/dumpcap/main.c index 1dc4a38adb..d85839a550 100644 --- a/app/dumpcap/main.c +++ b/app/dumpcap/main.c @@ -230,33 +230,20 @@ static void add_interface(uint16_t port, const char *name, struct interface_opts TAILQ_INSERT_TAIL(&interfaces, intf, next); } -/* Select all valid DPDK interfaces */ -static void select_all_interfaces(struct interface_opts *opts) +/* Select available DPDK interfaces up to the limit */ +static void select_available_interfaces(uint8_t limit, struct interface_opts *opts) { char name[RTE_ETH_NAME_MAX_LEN]; uint16_t p; + uint8_t added = 0; RTE_ETH_FOREACH_DEV(p) { if (rte_eth_dev_get_name_by_port(p, name) < 0) continue; add_interface(p, name, opts); - } -} - -/* - * Choose interface to capture if no -i option given. - * Select the first DPDK port, this matches what dumpcap does. - */ -static void set_default_interface(struct interface_opts *opts) -{ - char name[RTE_ETH_NAME_MAX_LEN]; - uint16_t p; - - RTE_ETH_FOREACH_DEV(p) { - if (rte_eth_dev_get_name_by_port(p, name) < 0) - continue; - add_interface(p, name, opts); - return; + added++; + if (added == limit) + break; } } @@ -266,7 +253,7 @@ static void select_interface(struct interface_opts *opts) uint16_t port; if (strcmp(opts->intf_arg, "*") == 0) - select_all_interfaces(opts); + select_available_interfaces(RTE_MAX_ETHPORTS, opts); else if (rte_eth_dev_get_port_by_name(opts->intf_arg, &port) == 0) add_interface(port, opts->intf_arg, opts); else { @@ -292,7 +279,7 @@ static void collect_interfaces(void) active = 0; if (interface_arg_count == 0) - set_default_interface(&interface_defaults); + select_available_interfaces(1, &interface_defaults); else for (uint8_t i = 0; i < interface_arg_count; ++i) select_interface(&interface_args[i]);