From patchwork Thu Jun 21 12:24:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ido Goshen X-Patchwork-Id: 41374 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9BD051BB21; Thu, 21 Jun 2018 22:58:38 +0200 (CEST) Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01on0090.outbound.protection.outlook.com [104.47.2.90]) by dpdk.org (Postfix) with ESMTP id AAB661BA9A for ; Thu, 21 Jun 2018 14:25:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cgstowernetworks.onmicrosoft.com; s=selector1-cgstowernetworks-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BkQSy/YB20qMjzSXl2Bzd3+Nt2qUsivXpRqNMUeP2ME=; b=RLEcV2diIoWjZfoBuZLeHTyB0CH/LtRtze7ZIkGJ3Y7aXb/qiSRw2DPdVWn79Gz+C58lxNWBEvMcIV+DLpFR5YGkOnR4JPph8U6Vt7q2b/KkdxXqJ2ZV5XyCocwNHIVNl8+4oPOQsrQoGOTtaiaesOqtttzH0BwfouWfo9ZwZ0U= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Ido@cgstowernetworks.com; Received: from ubuntu.localdomain (81.218.57.230) by HE1PR0901MB1436.eurprd09.prod.outlook.com (2603:10a6:3:54::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.863.19; Thu, 21 Jun 2018 12:25:32 +0000 From: ido goshen To: Ferruh Yigit Cc: dev@dpdk.org, ido goshen Date: Thu, 21 Jun 2018 15:24:33 +0300 Message-Id: <1529583874-71745-1-git-send-email-ido@cgstowernetworks.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [81.218.57.230] X-ClientProxiedBy: CWLP265CA0033.GBRP265.PROD.OUTLOOK.COM (2603:10a6:401:11::21) To HE1PR0901MB1436.eurprd09.prod.outlook.com (2603:10a6:3:54::8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a1187c07-0139-46e3-78a9-08d5d77215d9 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(711020)(2017052603328)(7153060)(7193020); SRVR:HE1PR0901MB1436; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0901MB1436; 3:fsJ2QvyHorKqw/O/7FdSB+RRh+XqdhmgJV+zhImGoVkbLVXovTv5YgqAhvEdawda/EnV1zTWZOTIhJgqeELHe5pcuHJkRhBDN9kr8RQJ4Erw1WVvWHosTRFVYTW5yVmPj04Jmw2SKTxtYmiTQX5frGvxG78G9R6xS3B41N3ra4Xdql++3gmMD1siyVDOBcv0Mrem7ROhxnMwz1Lz102TkZjXm15xj9/2xO+1pqWQTrSiBuKKfo3jWVtKS8Qpr8cw; 25:MRQaHo5G0zkbuGbNMl6bhIyjpmeLX6MIofov1d2qnHM6LCzoXjWajp/QHnvLa2Fin8Ro1PNYDvv6LL340+OqKKXQ6O99nkjfLiQxs5AZ1OoKAvaMaN+15SZvefDAyZs1poqXMB7Pm4cWiIx6IITLnHKdClNRpqywAhrfJ6QLt3RsF9+lvwghPdr5saIXlF6h6+d2KdaHub7lx6bcTeNE0fxNuHOTv+NSbv+fVkRsfW+nkePD1WQQXCKcjIu2EhYAvqX+yiRCAzd8FBXDKTOSbUvfFgU+m/tmfNvpAGyaLj9OROKrbJDeFlq5BxQLDwpjO4cmBZcUxp5oCcLBzXd2TA==; 31:8SxO9fVXyFRy30masX2VA/QNrWq5C4arDarjMw6P4hvFTwTRCojfqDXjFOIeusU+AJ0NLQOJnNIRRM+r76wV9Emn5UTQNXfNKmqOXqyJWxbPc/ivZnb0hVT8gRKSc7z5JDuedJH44BcdamB91Wm32mj/uN4Zm8BmCYjOT29lGmjFaReZ/M7pjWcUClWEsL5iJep5yGKQNfm7bbDjNxMmeTYm/LF4Ss5XfKjujnDKdrs= X-MS-TrafficTypeDiagnostic: HE1PR0901MB1436: X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(228905959029699); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040522)(2401047)(8121501046)(5005006)(3231254)(944501410)(52105095)(3002001)(93006095)(93001095)(10201501046)(149027)(150027)(6041310)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011)(7699016); SRVR:HE1PR0901MB1436; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0901MB1436; X-Microsoft-Exchange-Diagnostics: 1; HE1PR0901MB1436; 4:1TP9h3Ivouq+OJ9mK+lbjKtZtZzSJs2r1ghiK9q6Z6mMRkxcEl9JtgX9h1W0Kltr4lhIztcVZEVwrHH/PeD3g9DlDqTcn3kbpLwqSCxAvB/YNtmtd3GXm0ERqdSleZFA4xWmu+bwmtO3NdST62ZwWliV/YgYuu8mwR9jZJ80PNUXLyKY99clUbNLvK7+Ld/xefkt0t9VAJqNjR51fsYRd/c4AVsLAjenntZNtY6DVnzsjB0tOSairLA9SQJaQ1hxmmzF/WhF0sZwGmzJv3M+eFncwp1Hra9jM2YKBdSvWwn3/QkfKdTPpMbHVcwsXP+R X-Forefront-PRVS: 07106EF9B9 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(366004)(396003)(346002)(39840400004)(376002)(39380400002)(199004)(189003)(86362001)(6512007)(476003)(2906002)(26005)(8676002)(6116002)(66066001)(47776003)(52116002)(51416003)(36756003)(106356001)(107886003)(53936002)(105586002)(48376002)(8936002)(386003)(6506007)(50466002)(3846002)(50226002)(81166006)(4326008)(81156014)(25786009)(2616005)(956004)(59450400001)(486006)(316002)(5660300001)(68736007)(97736004)(80792005)(6916009)(86152003)(7736002)(305945005)(16526019)(478600001)(16586007)(6486002)(72206003)(186003); DIR:OUT; SFP:1102; SCL:1; SRVR:HE1PR0901MB1436; H:ubuntu.localdomain; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: cgstowernetworks.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; HE1PR0901MB1436; 23:KY+WSpUW/RFCkYD0WUuTV5I/p7C5PiTJiizCPol?= cIez9zi2d7UcyR8YcxPNwE2KLpEQndRnklxffm+pCjIcWk/NXk98vfkuE+taN3DfuAlGR4C72BsId7T4R074f5F492II+U+adK82KENpZzQZcjJ20EF/QaaFZENwyUSc7IRU6Kl64NzNSxvvZE8YSKNmfvGqSJ6HmPva6NgrW3cAAepqQ91a6QD1zbONFOEcXfytsISNqJOxf2KPOOKxc2k/duQuZ0UIzKGQuWHqanwXBNCQJecdFd9yqoLGoxHY7YU2HcKtLa9UYmNrTG1iyPZRo4EC/N16yzbEA4OF0LztOdz0a07pRyh3f7+4GocKf1GzFSpF3Wgw0C1F5+fMTZDa3XdqJqU8m66XBpq6cNOsFP45YIZx5DUz94BJXmq0m3Gb9wmYxqsR3/35bBdsec7Xi5BfKetKr8ZYQj63NoP6FwhNjbVX3oIdQzcjyGMXiDTvsCROpZwUzUeAdGaRFA9oMPHpmyaNuDZTO4ujh7Wx8KqSyngOqBk4ZVGfDUFwWeiZ/Uo+fzRtXMc7AHfq2PMCkyl+a6CSjsLxnc0a5rAfMDP0H/7jDsiq5M3uhsiwVjCpf2vgQNWhANLlka0aMAeaELun7itKR8psfwC8L2jw7kSQYnQh1ehBJbcxxKgShUS9WUmGDcuVi9ucOTFmwZ/l5mWePSj1n2GnbFXAg7nIdoqHI2WRJIKgftgvXcMYrCdE3u2+Zc3zPSFPAHvms2bdSLkLE91PQWIR1H+b4nSOfizmkmJOsX1zG86fzA6GZ2D0OdTdrzkZYnIbyZyUm8eYG2QaqsO9rqN0MzeYoX9TSmvIXblxN//PcRj7yyfHs7gR3nJM340ge5dL1hReX9wj+ZKW9vNKnO5K/Eufy77yF1GZ2/xizC6CxHpt1be3hmirMjD2QpO70qqq4eaLx1iN07A0efoyp0LE957B8wL1JmVVHhRgAu41Z/4Gv7mDY87N1ywD67IyZYaZ5CU1U/zbRGBVIcOnbOQUIZBCgZaB3PR6dmbRQkOljVJs8VTBM747Uhu4u6mqbtk/FtVFXg+xteh4rxupRvn8+0/Xx24eDcBmjVNRic5ubq75yb9IOC53eW1M6jxf1HJS+JLYXPPPrx60wBq4kgemBTRTYRFLq9LAbrqj/+zrkOXugZMLK25arbBaDvdI0MYs7MUqfXIrd X-Microsoft-Antispam-Message-Info: YNeZrSd9oiSjgC2Av0eLnQ7zTZbSirq5nnvD3jxncDj94LbK18Fnv/289PCTc1byvWyQkJckbW90lyKGCRK1rXtQlfsENK1kHyk9I3VtUjUmMgj8UrhLKXtYilc3odKqFsDrCnvJvCwdObAkV3BsCfi1jbF8dAfSsOAdfWCghrLIIPxkGfRPUEt7y9ZXhUpr+uKOtBctZBuNVzp2/lHKM90H+1ZEIJ0C8N8rtplsiq0C9QY2GfieFfFpZaYeteSKy08hBPz22RAKEF5+5O4iDs70UiT8RyzuYCJr+qLGaV5Q9EmPoVuGJUtNoULxYsCKNg3bwjKljIITx+gctuXJrw== X-Microsoft-Exchange-Diagnostics: 1; HE1PR0901MB1436; 6:aycb0Qki91+QrFC1NAHeyE4nTsNghKwcjwrDZTFMedXF5mRDhFO0qq2QV/0b0hwvkyU1ZmmcVqTfHfjfJvEoe7AGn3tUYVegmjrCmu58manaeevgohNPHTASZdj5r7S7h67mVllyl0e2VecwPLOhSUXkL+34lbvttt83P/zTp+uDyxcIHh/LF2MAoITRJsZ0T+ty+zuqOYzgQ+jYMh1Mbm4QEG9wD9fB4CWEiGSk2y9hd+TbnR1qoTxiHParN9xdU0HiN15bovu51/q4Pn45P08ULF/AhMKWy4at9gIu+vq6hbE+0wnH3nZIHLZ+bWcrzjmP+ygVb0CGnyz6Rmpq/dG3xb2aa3fFdZw/zrkEjTXPovx2pjitXeIHeVMfZAT1HXAN5X0JcNwdL7fN+Hq+qTZAJlOLdz/JR5feXN7yfe+O2iDxLT+v6q9WiofUUsHC2tLChxsjzghSGyPxg5ViSg==; 5:VMsnoLDWTOI0n9+XD9Xg1Wf+BN1LjBZi6GUTHj1Q8K+XjabADbdpw91X7AfC9P5uKxS40PASRAGFU/1kOAkm2oEBDPzxRYuYjnXMh+SAkhSoZsRieBIiwdx3PbHXjxTolYJcpCBtM2e4Gtr27LkNrpAqn4FiOWX3xX5uT4N247Y=; 24:zxIGDm4YXn0O7qz6SOwYh7tbzo2oEWMw4YR0Z0GRkZKiHC/0HYT7yBy+i7daj+KSexhMl4o091w/kQ0aOpNdw8t5MZHWgcEB9vMofggsczo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; HE1PR0901MB1436; 7:OuUUuerWpqog0hclJz5f2TBB9nv1DnaVAaKnCnM0oaKWHVpQb5d0GVBajnsj/Mta0UzPhwxGHH4D9bMI0ItaBINx8dTjXt5QCE5p/E8wFtNVB+m0cnX+IxZvUVuxPR5Wz9K0GdnzOgAKs/g0Exa2CT0pW5t52Xbu90fhOuEF5aSJ9Zs5aKlUfdpw3aZu82aZ1MaB6UiozATiSmDH9P+iNmNaUI3UIjywCbmN4aEUwlLRrdJ0iZdcMwZdTO9t5hTf X-OriginatorOrg: cgstowernetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2018 12:25:32.8204 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a1187c07-0139-46e3-78a9-08d5d77215d9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fc9e9498-07e8-4b82-b4cf-365bba23cbbf X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0901MB1436 X-Mailman-Approved-At: Thu, 21 Jun 2018 22:58:35 +0200 Subject: [dpdk-dev] [PATCH v2 3/3] net/pcap: support pcap files and ifaces mix X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Suggested-by: Ferruh Yigit Signed-off-by: ido goshen --- drivers/net/pcap/rte_eth_pcap.c | 82 +++++++++++++++++++++++++---------------- 1 file changed, 50 insertions(+), 32 deletions(-) diff --git a/drivers/net/pcap/rte_eth_pcap.c b/drivers/net/pcap/rte_eth_pcap.c index b21930b..33c5366 100644 --- a/drivers/net/pcap/rte_eth_pcap.c +++ b/drivers/net/pcap/rte_eth_pcap.c @@ -232,7 +232,7 @@ struct pmd_devargs { /* * Callback to handle writing packets to a pcap file. */ -static uint16_t +static inline uint16_t eth_pcap_tx_dumper(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { unsigned int i; @@ -293,7 +293,7 @@ struct pmd_devargs { /* * Callback to handle sending packets through a real NIC. */ -static uint16_t +static inline uint16_t eth_pcap_tx(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) { unsigned int i; @@ -343,6 +343,16 @@ struct pmd_devargs { return num_tx; } +static uint16_t +eth_pcap_tx_mux(void *queue, struct rte_mbuf **bufs, uint16_t nb_pkts) +{ + struct pcap_tx_queue *tx_queue = queue; + if (tx_queue->dumper) + return eth_pcap_tx_dumper(queue, bufs, nb_pkts); + else + return eth_pcap_tx(queue, bufs, nb_pkts); +} + /* * pcap_open_live wrapper function */ @@ -773,6 +783,31 @@ struct pmd_devargs { return open_iface(key, value, extra_args); } +static int +open_pcap_rx_mux(const char *key, const char *value, void *extra_args) +{ + struct pmd_devargs *pcaps = extra_args; + + if (strcmp(key, ETH_PCAP_RX_PCAP_ARG) == 0) + return open_rx_pcap(key, value, pcaps); + if (strcmp(key, ETH_PCAP_RX_IFACE_ARG) == 0) + return open_rx_iface(key, value, pcaps); + return 0; +} + +static int +open_pcap_tx_mux(const char *key, const char *value, void *extra_args) +{ + struct pmd_devargs *dumpers = extra_args; + + if (strcmp(key, ETH_PCAP_TX_PCAP_ARG) == 0) + return open_tx_pcap(key, value, dumpers); + if (strcmp(key, ETH_PCAP_TX_IFACE_ARG) == 0) + return open_tx_iface(key, value, dumpers); + return 0; +} + + static struct rte_vdev_driver pmd_pcap_drv; static int @@ -873,8 +908,7 @@ struct pmd_devargs { eth_from_pcaps(struct rte_vdev_device *vdev, struct pmd_devargs *rx_queues, const unsigned int nb_rx_queues, struct pmd_devargs *tx_queues, const unsigned int nb_tx_queues, - struct rte_kvargs *kvlist, int single_iface, - unsigned int using_dumpers) + struct rte_kvargs *kvlist, int single_iface) { struct pmd_internals *internals = NULL; struct rte_eth_dev *eth_dev = NULL; @@ -891,10 +925,7 @@ struct pmd_devargs { eth_dev->rx_pkt_burst = eth_pcap_rx; - if (using_dumpers) - eth_dev->tx_pkt_burst = eth_pcap_tx_dumper; - else - eth_dev->tx_pkt_burst = eth_pcap_tx; + eth_dev->tx_pkt_burst = eth_pcap_tx_mux; rte_eth_dev_probing_finish(eth_dev); return 0; @@ -904,7 +935,6 @@ struct pmd_devargs { pmd_pcap_probe(struct rte_vdev_device *dev) { const char *name; - unsigned int is_rx_pcap = 0, is_tx_pcap = 0; struct rte_kvargs *kvlist; struct pmd_devargs pcaps = {0}; struct pmd_devargs dumpers = {0}; @@ -958,42 +988,30 @@ struct pmd_devargs { } /* - * We check whether we want to open a RX stream from a real NIC or a - * pcap file + * Open RX streams for pcap files and real NICs + * Need to be parsed together for the queues to maintain + * the input args order */ - is_rx_pcap = rte_kvargs_count(kvlist, ETH_PCAP_RX_PCAP_ARG) ? 1 : 0; pcaps.num_of_queue = 0; - - if (is_rx_pcap) - ret = rte_kvargs_process(kvlist, ETH_PCAP_RX_PCAP_ARG, - &open_rx_pcap, &pcaps); - else - ret = rte_kvargs_process(kvlist, ETH_PCAP_RX_IFACE_ARG, - &open_rx_iface, &pcaps); - + ret = rte_kvargs_process(kvlist, NULL, + &open_pcap_rx_mux, &pcaps); if (ret < 0) goto free_kvlist; /* - * We check whether we want to open a TX stream to a real NIC or a - * pcap file + * Open TX streams for pcap files and real NICs + * Need to be parsed together for the queues to maintain + * the input args order */ - is_tx_pcap = rte_kvargs_count(kvlist, ETH_PCAP_TX_PCAP_ARG) ? 1 : 0; dumpers.num_of_queue = 0; - - if (is_tx_pcap) - ret = rte_kvargs_process(kvlist, ETH_PCAP_TX_PCAP_ARG, - &open_tx_pcap, &dumpers); - else - ret = rte_kvargs_process(kvlist, ETH_PCAP_TX_IFACE_ARG, - &open_tx_iface, &dumpers); - + ret = rte_kvargs_process(kvlist, NULL, + &open_pcap_tx_mux, &dumpers); if (ret < 0) goto free_kvlist; create_eth: ret = eth_from_pcaps(dev, &pcaps, pcaps.num_of_queue, &dumpers, - dumpers.num_of_queue, kvlist, single_iface, is_tx_pcap); + dumpers.num_of_queue, kvlist, single_iface); free_kvlist: rte_kvargs_free(kvlist);