From patchwork Thu Jan 18 18:31:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 863072 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b="eElP7dD8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zMszN1Bq9z9sNr for ; Fri, 19 Jan 2018 05:33:36 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755981AbeARSdW (ORCPT ); Thu, 18 Jan 2018 13:33:22 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:38674 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755692AbeARSbl (ORCPT ); Thu, 18 Jan 2018 13:31:41 -0500 Received: by mail-wm0-f68.google.com with SMTP id 141so24703696wme.3 for ; Thu, 18 Jan 2018 10:31:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8r+pm1ZKSFayI9u6Q8PLvhF6cMQo5S2NlrXZUWwoubk=; b=eElP7dD8yoeGYvl+OC9gMi/g2SIFjoNzMepzGYja9dwAdsk4LHpLQQTb+6kLhbEV1f ra4RsgqdyAemQ7sSAt/nd1yOhaCRgyloXskX9lRNDqxtdv7r6h7B7Kp+NYUO7Qf4BvA0 fjF2geRjBtXt3BB6Uut3O8hHHoehq+xwQkBK4= 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=8r+pm1ZKSFayI9u6Q8PLvhF6cMQo5S2NlrXZUWwoubk=; b=nx5iHsFQzquVrLOURObyBt78q3lsW8lsKJog1VoaH//OsyyYctc2eeG8mVz0Bk2qLs /dEFh93/kJl1rDpjcovEGQTE+DNKIVLnXi1UpstXTgl1Ao0uKzCRQn7Rb68azqpFVd5G pqDOhjUpPE8p4fOOXrDMNFZ3lbA6NqbMy4KV/YZgPUrExxpG5dsHMfB62rdgBGtNMH78 njS95bKCSUQZxOSUgEkJMmN69drladHKqhFOo3UFwZ5KZ/iDWc1kFfB4WSzicWlhIGGT gK2kq637razC93L6lE+ZFCR5rO7FHUQfnQ++QvwHX5CEiOBX+PsFWrJ3l20D/UMl1Po0 8VIw== X-Gm-Message-State: AKwxytdZUsMVpNWyNQXpmnm20eirkCueV+kOXCaimHkaXMmHsgkRA5Iu gDczxvB/8iTOc99QvO8IabaTVA== X-Google-Smtp-Source: ACJfBosCrl2uV4XNq5w/cdQo9QyQu8cVUuGMhMJ6joileDWJ67WCUYkqC/zB+MGJmcLGVGOVKSOQeA== X-Received: by 10.80.218.201 with SMTP id s9mr9241688edj.273.1516300299921; Thu, 18 Jan 2018 10:31:39 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id k90sm4528935edc.20.2018.01.18.10.31.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jan 2018 10:31:39 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: Dmitry Safonov , Arnd Bergmann , "David S. Miller" , David Windsor , Eric Dumazet , Ingo Molnar , Johannes Berg , Mark Rutland , Radu Rendec , "Reshetova, Elena" , netdev@vger.kernel.org, Jonathan Corbet , linux-doc@vger.kernel.org Subject: [PATCHv2 1/5] Documentation/pktgen: Clearify how-to use pktgen samples Date: Thu, 18 Jan 2018 18:31:33 +0000 Message-Id: <20180118183137.16053-2-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180118183137.16053-1-dima@arista.com> References: <20180118183137.16053-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org o Change process name in ps output: looks like, these days the process is named kpktgend_, rather than pktgen/. o Use pg_ctrl for start/stop as it can work well with pgset without changes to $(PGDEV) variable. o Clarify a bit needed $(PGDEV) definition for sample scripts and that one needs to `source functions.sh`. o Document how-to unset a behaviour flag, note about history expansion. o Fix pgset spi parameter value. Cc: Jonathan Corbet Cc: linux-doc@vger.kernel.org Signed-off-by: Dmitry Safonov --- Documentation/networking/pktgen.txt | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Documentation/networking/pktgen.txt b/Documentation/networking/pktgen.txt index 2c4e3354e128..d2fd78f85aa4 100644 --- a/Documentation/networking/pktgen.txt +++ b/Documentation/networking/pktgen.txt @@ -12,8 +12,8 @@ suitable sample script and configure that. On a dual CPU: ps aux | grep pkt -root 129 0.3 0.0 0 0 ? SW 2003 523:20 [pktgen/0] -root 130 0.3 0.0 0 0 ? SW 2003 509:50 [pktgen/1] +root 129 0.3 0.0 0 0 ? SW 2003 523:20 [kpktgend_0] +root 130 0.3 0.0 0 0 ? SW 2003 509:50 [kpktgend_1] For monitoring and control pktgen creates: @@ -113,9 +113,16 @@ Configuring devices =================== This is done via the /proc interface, and most easily done via pgset as defined in the sample scripts. +You need to specify PGDEV environment variable to use functions from sample +scripts, i.e.: +export PGDEV=/proc/net/pktgen/eth4@0 +source samples/pktgen/functions.sh Examples: + pg_ctrl start starts injection. + pg_ctrl stop aborts injection. Also, ^C aborts generator. + pgset "clone_skb 1" sets the number of copies of the same packet pgset "clone_skb 0" use single SKB for all transmits pgset "burst 8" uses xmit_more API to queue 8 copies of the same @@ -165,8 +172,12 @@ Examples: IPSEC # IPsec encapsulation (needs CONFIG_XFRM) NODE_ALLOC # node specific memory allocation NO_TIMESTAMP # disable timestamping + pgset 'flag ![name]' Clear a flag to determine behaviour. + Note that you might need to use single quote in + interactive mode, so that your shell wouldn't expand + the specified flag as a history command. - pgset spi SPI_VALUE Set specific SA used to transform packet. + pgset "spi [SPI_VALUE]" Set specific SA used to transform packet. pgset "udp_src_min 9" set UDP source port min, If < udp_src_max, then cycle through the port range. @@ -207,8 +218,6 @@ Examples: pgset "tos XX" set former IPv4 TOS field (e.g. "tos 28" for AF11 no ECN, default 00) pgset "traffic_class XX" set former IPv6 TRAFFIC CLASS (e.g. "traffic_class B8" for EF no ECN, default 00) - pgset stop aborts injection. Also, ^C aborts generator. - pgset "rate 300M" set rate to 300 Mb/s pgset "ratep 1000000" set rate to 1Mpps From patchwork Thu Jan 18 18:31:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 863070 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b="Z6hr+Dyj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zMsyx06sKz9sNr for ; Fri, 19 Jan 2018 05:33:13 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755607AbeARSdK (ORCPT ); Thu, 18 Jan 2018 13:33:10 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:43871 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755671AbeARSbm (ORCPT ); Thu, 18 Jan 2018 13:31:42 -0500 Received: by mail-wm0-f65.google.com with SMTP id g1so23778248wmg.2 for ; Thu, 18 Jan 2018 10:31:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=QcdIxUXTbs6zS0PSfgY3KEKjxTLcKiJmFL4gcZ8qPXw=; b=Z6hr+Dyj2clRBvNmRT0md4X0DrcYN6O8WZ5cDM2FpaT71fdxJUaqU1+nvPP2crTLXu Dns4OyIsPqoNAZx2i/zGksfjwsHJNzCNuWRyfkINEoCX6J5f+sglaELRT3oYK/taPpha 68I/acl/psQCbmVBrHEtyyh7XvXoo1T9WN8Sc= 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=QcdIxUXTbs6zS0PSfgY3KEKjxTLcKiJmFL4gcZ8qPXw=; b=posRC8obBBRSDJ/NNUmYi4hcSxgt4bCjb/ndOXFk2EQSgrGDv5wgc7PyjUDG5B7t8h lFndcAV3hOTZPYUJGLybvj3sRU3xR8JH16AHfPOGfFbqC0q7ct/CaamaPrdnHyNExS6r /ADumaySG/aHOpAe/0LFZiSnH5QoH6e4FletK3g1nq9iELCLduALpduMgiweqpmpg+ey 9/spPFUAQBNBFsT1ehhARZ0Xgt/RCY1zdaKTJnfk2cx2P9tafLxE1lT61R5+ztCf2Tcy UiI38fwwYfNGxfEw0xcNE3Kdu6cH/eD4BX/kEm6esyo3bzVTVJb2mOCVxv5Mr+F+vl8O n/pw== X-Gm-Message-State: AKwxyterjf7kxsTjR84jCsvDyjddnDVGX5uSGYo5pM2O8jfYKoTqnkoO VBWBjoNx9h1Wrpd6GLNSjUNPLA== X-Google-Smtp-Source: ACJfBoucnj5sw5Km9KsSVBmD0Fkm0cZHQK/yfMTFWRBnZ2X9MUOng1CtnbP5vLaXNfavhzrm4BE27A== X-Received: by 10.80.137.233 with SMTP id h38mr9477991edh.39.1516300300965; Thu, 18 Jan 2018 10:31:40 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id k90sm4528935edc.20.2018.01.18.10.31.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jan 2018 10:31:40 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: Dmitry Safonov , Arnd Bergmann , "David S. Miller" , David Windsor , Eric Dumazet , Ingo Molnar , Johannes Berg , Mark Rutland , Radu Rendec , "Reshetova, Elena" , netdev@vger.kernel.org Subject: [PATCHv2 2/5] pktgen: Add missing !flag parameters Date: Thu, 18 Jan 2018 18:31:34 +0000 Message-Id: <20180118183137.16053-3-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180118183137.16053-1-dima@arista.com> References: <20180118183137.16053-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org o FLOW_SEQ now can be disabled with pgset "flag !FLOW_SEQ" o FLOW_SEQ and FLOW_RND are antonyms, as it's shown by pktgen_if_show() o IPSEC now may be disabled Note, that IPV6 is enabled with dst6/src6 parameters, not with a flag parameter. Signed-off-by: Dmitry Safonov --- net/core/pktgen.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index f95a15086225..ab63943ffd03 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -1285,9 +1285,12 @@ static ssize_t pktgen_if_write(struct file *file, else if (strcmp(f, "!SVID_RND") == 0) pkt_dev->flags &= ~F_SVID_RND; - else if (strcmp(f, "FLOW_SEQ") == 0) + else if (strcmp(f, "FLOW_SEQ") == 0 || strcmp(f, "!FLOW_RND") == 0) pkt_dev->flags |= F_FLOW_SEQ; + else if (strcmp(f, "FLOW_RND") == 0 || strcmp(f, "!FLOW_SEQ") == 0) + pkt_dev->flags &= ~F_FLOW_SEQ; + else if (strcmp(f, "QUEUE_MAP_RND") == 0) pkt_dev->flags |= F_QUEUE_MAP_RND; @@ -1302,6 +1305,9 @@ static ssize_t pktgen_if_write(struct file *file, #ifdef CONFIG_XFRM else if (strcmp(f, "IPSEC") == 0) pkt_dev->flags |= F_IPSEC_ON; + + else if (strcmp(f, "!IPSEC") == 0) + pkt_dev->flags &= ~F_IPSEC_ON; #endif else if (strcmp(f, "!IPV6") == 0) From patchwork Thu Jan 18 18:31:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 863065 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b="PCYcXOUf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zMsxs4Z30z9s72 for ; Fri, 19 Jan 2018 05:32:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932103AbeARSbp (ORCPT ); Thu, 18 Jan 2018 13:31:45 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:46126 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755804AbeARSbn (ORCPT ); Thu, 18 Jan 2018 13:31:43 -0500 Received: by mail-wm0-f66.google.com with SMTP id 143so23754537wma.5 for ; Thu, 18 Jan 2018 10:31:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=KpbRRNWmt8tXspnX8pBGpk1eptaoUFnuzIZg981EPjY=; b=PCYcXOUfklScIt4VkSH/Vz0SHIo1QckRtYWrtEtUMI+L+3JL1NRaY9mPkjrwNZ0Fhz rGnWHgNAgunqBzYwFaPmnpzLo9KGqAnNN5f+DoNuj/dlaPTMu4zdFYoxH2spmnfIjYdy DIe0+NxEnmvRwSCGcgzeqmFTM5uAlDO1Gt6aE= 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=KpbRRNWmt8tXspnX8pBGpk1eptaoUFnuzIZg981EPjY=; b=rTLz3ECj5o+XTOcQbKl9SzJX8AIFIa6Y/6lZprKw44EkUVzoxAKOFbSLmLBMJRyd/x BIztUzy6rxjt+yJRDaJBXn6gQY5QTFy+CwSYZupy92tM0YweocvzS/bbj179XH4o3XCF ulnY6vzyiyyUPsS1mG5/2Nx8V6eJgBCLY1fRxxo4cuFBGbdvbzVQNBcrkJ6NV4xMEZC/ 4r/ZX+13gY87t7jjsEcksddQ6cocj9/hTr0mi8R5FcGnU8cJGFCXhtVX8L4oT8bN6Rsb YpsPC7aZNE3qdV3fM0tymWWQqrfMBMsBiiPAbUZ789kuYNqdTXSh2VM0bRQ3n+ZMez0t w2mA== X-Gm-Message-State: AKwxytcMBwSREuYM54ubHm15jbLUkWRlP1Lfzv2Ls3pCIbYzlUZN/IOW hmc5p2BrS6gOX+wx3Eer0WRHdw== X-Google-Smtp-Source: ACJfBovB7HZ29ZMErT/HKT2OTSCWJ3Pke4rO6WITLKRxg3zAaNpmTaMSUUwPFUWa1EjyCIeNmr5ejg== X-Received: by 10.80.144.13 with SMTP id b13mr9254494eda.165.1516300302079; Thu, 18 Jan 2018 10:31:42 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id k90sm4528935edc.20.2018.01.18.10.31.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jan 2018 10:31:41 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: Dmitry Safonov , Arnd Bergmann , "David S. Miller" , David Windsor , Eric Dumazet , Ingo Molnar , Johannes Berg , Mark Rutland , Radu Rendec , "Reshetova, Elena" , netdev@vger.kernel.org Subject: [PATCHv2 3/5] pktgen: Add behaviour flags macro to generate flags/names Date: Thu, 18 Jan 2018 18:31:35 +0000 Message-Id: <20180118183137.16053-4-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180118183137.16053-1-dima@arista.com> References: <20180118183137.16053-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org PKT_FALGS macro will be used to add package behavior names definitions to simplify the code that prints/reads pkg flags. Sorted the array in order of printing the flags in pktgen_if_show() Note: Renamed IPSEC_ON => IPSEC for simplicity. No visible behavior change expected. Signed-off-by: Dmitry Safonov --- net/core/pktgen.c | 57 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index ab63943ffd03..596fadcd8bb8 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -184,25 +184,36 @@ #define func_enter() pr_debug("entering %s\n", __func__); +#define PKT_FLAGS \ + pf(IPV6) /* Interface in IPV6 Mode */ \ + pf(IPSRC_RND) /* IP-Src Random */ \ + pf(IPDST_RND) /* IP-Dst Random */ \ + pf(TXSIZE_RND) /* Transmit size is random */ \ + pf(UDPSRC_RND) /* UDP-Src Random */ \ + pf(UDPDST_RND) /* UDP-Dst Random */ \ + pf(UDPCSUM) /* Include UDP checksum */ \ + pf(NO_TIMESTAMP) /* Don't timestamp packets (default TS) */ \ + pf(MPLS_RND) /* Random MPLS labels */ \ + pf(QUEUE_MAP_RND) /* queue map Random */ \ + pf(QUEUE_MAP_CPU) /* queue map mirrors smp_processor_id() */ \ + pf(FLOW_SEQ) /* Sequential flows */ \ + pf(IPSEC) /* ipsec on for flows */ \ + pf(MACSRC_RND) /* MAC-Src Random */ \ + pf(MACDST_RND) /* MAC-Dst Random */ \ + pf(VID_RND) /* Random VLAN ID */ \ + pf(SVID_RND) /* Random SVLAN ID */ \ + pf(NODE) /* Node memory alloc*/ \ + +#define pf(flag) flag##_SHIFT, +enum pkt_flags { + PKT_FLAGS +}; +#undef pf + /* Device flag bits */ -#define F_IPSRC_RND (1<<0) /* IP-Src Random */ -#define F_IPDST_RND (1<<1) /* IP-Dst Random */ -#define F_UDPSRC_RND (1<<2) /* UDP-Src Random */ -#define F_UDPDST_RND (1<<3) /* UDP-Dst Random */ -#define F_MACSRC_RND (1<<4) /* MAC-Src Random */ -#define F_MACDST_RND (1<<5) /* MAC-Dst Random */ -#define F_TXSIZE_RND (1<<6) /* Transmit size is random */ -#define F_IPV6 (1<<7) /* Interface in IPV6 Mode */ -#define F_MPLS_RND (1<<8) /* Random MPLS labels */ -#define F_VID_RND (1<<9) /* Random VLAN ID */ -#define F_SVID_RND (1<<10) /* Random SVLAN ID */ -#define F_FLOW_SEQ (1<<11) /* Sequential flows */ -#define F_IPSEC_ON (1<<12) /* ipsec on for flows */ -#define F_QUEUE_MAP_RND (1<<13) /* queue map Random */ -#define F_QUEUE_MAP_CPU (1<<14) /* queue map mirrors smp_processor_id() */ -#define F_NODE (1<<15) /* Node memory alloc*/ -#define F_UDPCSUM (1<<16) /* Include UDP checksum */ -#define F_NO_TIMESTAMP (1<<17) /* Don't timestamp packets (default TS) */ +#define pf(flag) static const __u32 F_##flag = (1<flags & F_IPSEC_ON) { + if (pkt_dev->flags & F_IPSEC) { seq_puts(seq, "IPSEC "); if (pkt_dev->spi) seq_printf(seq, "spi:%u", pkt_dev->spi); @@ -1304,10 +1315,10 @@ static ssize_t pktgen_if_write(struct file *file, pkt_dev->flags &= ~F_QUEUE_MAP_CPU; #ifdef CONFIG_XFRM else if (strcmp(f, "IPSEC") == 0) - pkt_dev->flags |= F_IPSEC_ON; + pkt_dev->flags |= F_IPSEC; else if (strcmp(f, "!IPSEC") == 0) - pkt_dev->flags &= ~F_IPSEC_ON; + pkt_dev->flags &= ~F_IPSEC; #endif else if (strcmp(f, "!IPV6") == 0) @@ -2550,7 +2561,7 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev) pkt_dev->flows[flow].cur_daddr = pkt_dev->cur_daddr; #ifdef CONFIG_XFRM - if (pkt_dev->flags & F_IPSEC_ON) + if (pkt_dev->flags & F_IPSEC) get_ipsec_sa(pkt_dev, flow); #endif pkt_dev->nflows++; @@ -2655,7 +2666,7 @@ static void free_SAs(struct pktgen_dev *pkt_dev) static int process_ipsec(struct pktgen_dev *pkt_dev, struct sk_buff *skb, __be16 protocol) { - if (pkt_dev->flags & F_IPSEC_ON) { + if (pkt_dev->flags & F_IPSEC) { struct xfrm_state *x = pkt_dev->flows[pkt_dev->curfl].x; int nhead = 0; if (x) { From patchwork Thu Jan 18 18:31:36 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 863066 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b="Xn2TTs64"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zMsy26mfcz9sNr for ; Fri, 19 Jan 2018 05:32:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755891AbeARScW (ORCPT ); Thu, 18 Jan 2018 13:32:22 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:42593 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755683AbeARSbo (ORCPT ); Thu, 18 Jan 2018 13:31:44 -0500 Received: by mail-wm0-f66.google.com with SMTP id b141so23993419wme.1 for ; Thu, 18 Jan 2018 10:31:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=99YlOWnOoUKVxmW8ynS+SOLCYQl0CaHs2iIJrS+/Yfc=; b=Xn2TTs64CUvSudDcjrsf/dVXeDJa9ayfz3MRudEwNpbw7XTj6FeULD3/UQRBZ6xrZd LJ86jrgUQnu4iQsl98GIe3h8PBPFNppPgV+cuPHxRXoMbSwqrGlsn4Ytep7ujGhdDj+7 pl+VtZQA161xEOrpVp7nYddFpS18wgz3OpebM= 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=99YlOWnOoUKVxmW8ynS+SOLCYQl0CaHs2iIJrS+/Yfc=; b=PJzVDxZ7JWsdsjaCtCyjajuDLQfQJW0aHU2QLCYeercJfypfffMjodR08GhpUC5Ngp sw1W+2P/RAbdNsfNchPtM1srYqQ3FLGFD3arKDyQskJ9lDsgpUlvxpA8zgLG8ChslanK H12JprUiNTZGySoXgT7lC5AxV7VXZlou4N94pS+XYkk7xlfTT9znm3NUIgd0yZQM/f1h H88P/bhzf98bh8AQ0P/szz4LMfmB38sUMr/ftwB5Np/4MAwqj5x1RRLSKJzyaBtFuon/ TlIxzHa2V0BxIzJazxnGbLGLjGvXicEZre1VlokqYALL+JdRS/gD23HpSnuQKpaREs7v GZNw== X-Gm-Message-State: AKwxytfNuqhB8pyo5A8sC8/diis2lpYN6NMerNixRjoJVApy4J00Ndi+ F7fQW1A8EqbKKMFl7wqQ6Mv8zw== X-Google-Smtp-Source: ACJfBotQ6UgB52mKB3B/HjWA1Dc8zbNHQKa4f42LNfj1gKou+XS9n5Q8Q6OALXDQcV9Sfvyw5ckdQA== X-Received: by 10.80.204.140 with SMTP id q12mr9237212edi.176.1516300303268; Thu, 18 Jan 2018 10:31:43 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id k90sm4528935edc.20.2018.01.18.10.31.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jan 2018 10:31:42 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: Dmitry Safonov , Arnd Bergmann , "David S. Miller" , David Windsor , Eric Dumazet , Ingo Molnar , Johannes Berg , Mark Rutland , Radu Rendec , "Reshetova, Elena" , netdev@vger.kernel.org Subject: [PATCHv2 4/5] pktgen: Remove brute-force printing of flags Date: Thu, 18 Jan 2018 18:31:36 +0000 Message-Id: <20180118183137.16053-5-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180118183137.16053-1-dima@arista.com> References: <20180118183137.16053-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add macro generated pkt_flag_names array, with a little help of which the flags can be printed by using an index. Signed-off-by: Dmitry Safonov --- net/core/pktgen.c | 77 ++++++++++++++----------------------------------------- 1 file changed, 19 insertions(+), 58 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 596fadcd8bb8..f9883139e311 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -215,6 +215,14 @@ enum pkt_flags { PKT_FLAGS #undef pf +#define pf(flag) __stringify(flag), +static char *pkt_flag_names[] = { + PKT_FLAGS +}; +#undef pf + +#define NR_PKT_FLAGS ARRAY_SIZE(pkt_flag_names) + /* Thread control flag bits */ #define T_STOP (1<<0) /* Stop run */ #define T_RUN (1<<1) /* Start run */ @@ -546,6 +554,7 @@ static int pktgen_if_show(struct seq_file *seq, void *v) { const struct pktgen_dev *pkt_dev = seq->private; ktime_t stopped; + unsigned int i; u64 idle; seq_printf(seq, @@ -607,7 +616,6 @@ static int pktgen_if_show(struct seq_file *seq, void *v) pkt_dev->src_mac_count, pkt_dev->dst_mac_count); if (pkt_dev->nr_labels) { - unsigned int i; seq_puts(seq, " mpls: "); for (i = 0; i < pkt_dev->nr_labels; i++) seq_printf(seq, "%08x%s", ntohl(pkt_dev->labels[i]), @@ -643,68 +651,21 @@ static int pktgen_if_show(struct seq_file *seq, void *v) seq_puts(seq, " Flags: "); - if (pkt_dev->flags & F_IPV6) - seq_puts(seq, "IPV6 "); - - if (pkt_dev->flags & F_IPSRC_RND) - seq_puts(seq, "IPSRC_RND "); - - if (pkt_dev->flags & F_IPDST_RND) - seq_puts(seq, "IPDST_RND "); - - if (pkt_dev->flags & F_TXSIZE_RND) - seq_puts(seq, "TXSIZE_RND "); - - if (pkt_dev->flags & F_UDPSRC_RND) - seq_puts(seq, "UDPSRC_RND "); - - if (pkt_dev->flags & F_UDPDST_RND) - seq_puts(seq, "UDPDST_RND "); - - if (pkt_dev->flags & F_UDPCSUM) - seq_puts(seq, "UDPCSUM "); - - if (pkt_dev->flags & F_NO_TIMESTAMP) - seq_puts(seq, "NO_TIMESTAMP "); - - if (pkt_dev->flags & F_MPLS_RND) - seq_puts(seq, "MPLS_RND "); - - if (pkt_dev->flags & F_QUEUE_MAP_RND) - seq_puts(seq, "QUEUE_MAP_RND "); - - if (pkt_dev->flags & F_QUEUE_MAP_CPU) - seq_puts(seq, "QUEUE_MAP_CPU "); + for (i = 0; i < NR_PKT_FLAGS; i++) { + if (i == F_FLOW_SEQ) + if (!pkt_dev->cflows) + continue; - if (pkt_dev->cflows) { - if (pkt_dev->flags & F_FLOW_SEQ) - seq_puts(seq, "FLOW_SEQ "); /*in sequence flows*/ - else - seq_puts(seq, "FLOW_RND "); - } + if (pkt_dev->flags & (1 << i)) + seq_printf(seq, "%s ", pkt_flag_names[i]); + else if (i == F_FLOW_SEQ) + seq_puts(seq, "FLOW_RND "); #ifdef CONFIG_XFRM - if (pkt_dev->flags & F_IPSEC) { - seq_puts(seq, "IPSEC "); - if (pkt_dev->spi) + if (i == F_IPSEC && pkt_dev->spi) seq_printf(seq, "spi:%u", pkt_dev->spi); - } #endif - - if (pkt_dev->flags & F_MACSRC_RND) - seq_puts(seq, "MACSRC_RND "); - - if (pkt_dev->flags & F_MACDST_RND) - seq_puts(seq, "MACDST_RND "); - - if (pkt_dev->flags & F_VID_RND) - seq_puts(seq, "VID_RND "); - - if (pkt_dev->flags & F_SVID_RND) - seq_puts(seq, "SVID_RND "); - - if (pkt_dev->flags & F_NODE) - seq_puts(seq, "NODE_ALLOC "); + } seq_puts(seq, "\n"); From patchwork Thu Jan 18 18:31:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 863064 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b="DID7MbHm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zMsxj34Qcz9sNr for ; Fri, 19 Jan 2018 05:32:09 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932497AbeARSb4 (ORCPT ); Thu, 18 Jan 2018 13:31:56 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:43887 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755826AbeARSbp (ORCPT ); Thu, 18 Jan 2018 13:31:45 -0500 Received: by mail-wm0-f67.google.com with SMTP id g1so23778562wmg.2 for ; Thu, 18 Jan 2018 10:31:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Olmsd5cJVUBHSvJJ1R8B+AqeSmEN7+yt7gVxKfIrs6Y=; b=DID7MbHmaYMg0D2qAhxgVr8TMLw3+v2dEJzeqD/4DCaCrqMeHfS1wy13Fsh64P/Yq7 VUI0PRTLSrTVWxDQlvs2AQnIXY8Q6FK9Qz01XH4fcJjmkx4RR3NVMDlMZcrd9/FeARCZ 8DMpO/3Af59yCXx/m5kAgvtLu5bEYFPnROPko= 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=Olmsd5cJVUBHSvJJ1R8B+AqeSmEN7+yt7gVxKfIrs6Y=; b=mBdJYmK+U8Es7gybB3IJ/mQNQ6VxYvxa3m4PQ51QqUhp2MEvkihZbXKdSAUueGSZ/b ucReyj0okC7vQfUacC2su3AAsB37etYHhaLvXBoMMDg7tSH3eWQOdsfj4/4WVlrJoMEt AgjRgAL0JqfqiQgZZHMC27MAw7JP+nvWIoioijwlqAuA/fCa00CEzvrcZf/arQ6FgmWC Z/5dII3zra/JlYbfPLpC5nkpYXENYHRSaqNVpFqFV/7iHWvL8ctpdRqnw0Ec5HrCQrnC 8aJR/UpFIbzT0UrPEkGqWo5Qvr9sPuHmFu/DMtSo0fSUR9APrDauwEwEThcKLy2+hKi6 kszQ== X-Gm-Message-State: AKwxytc/+FiJkCA8Rp7AMCbDnygqj8mbvD6rMPs0RTwKfQ4xxDK2v2ak TZ7m+S1kjq6mSjeE0UIs3rdKGg== X-Google-Smtp-Source: ACJfBotxAfArhzjD5B3wic08ETGOLx2LJi8jOuTmIb6O3NtPLHYPczU9iGP8aAA3nadK6tl3dwmbsw== X-Received: by 10.80.173.110 with SMTP id z43mr9178354edc.305.1516300304291; Thu, 18 Jan 2018 10:31:44 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id k90sm4528935edc.20.2018.01.18.10.31.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 18 Jan 2018 10:31:43 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: Dmitry Safonov , Arnd Bergmann , "David S. Miller" , David Windsor , Eric Dumazet , Ingo Molnar , Johannes Berg , Mark Rutland , Radu Rendec , "Reshetova, Elena" , netdev@vger.kernel.org Subject: [PATCHv2 5/5] pktgen: Clean read user supplied flag mess Date: Thu, 18 Jan 2018 18:31:37 +0000 Message-Id: <20180118183137.16053-6-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180118183137.16053-1-dima@arista.com> References: <20180118183137.16053-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Don't use error-prone-brute-force way. Signed-off-by: Dmitry Safonov --- net/core/pktgen.c | 144 +++++++++++++++--------------------------------------- 1 file changed, 39 insertions(+), 105 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index f9883139e311..e335daa40211 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -831,6 +831,35 @@ static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) return i; } +static __u32 pktgen_read_flag(const char *f, bool *disable) +{ + __u32 i; + + if (f[0] == '!') { + *disable = true; + f++; + } + + for (i = 0; i < NR_PKT_FLAGS; i++) { + if (!IS_ENABLED(CONFIG_XFRM) && i == IPSEC_SHIFT) + continue; + + /* allow only disabling ipv6 flag */ + if (!*disable && i == IPV6_SHIFT) + continue; + + if (strcmp(f, pkt_flag_names[i]) == 0) + return 1 << i; + } + + if (strcmp(f, "FLOW_RND") == 0) { + *disable = !*disable; + return F_FLOW_SEQ; + } + + return 0; +} + static ssize_t pktgen_if_write(struct file *file, const char __user * user_buffer, size_t count, loff_t * offset) @@ -1188,7 +1217,10 @@ static ssize_t pktgen_if_write(struct file *file, return count; } if (!strcmp(name, "flag")) { + __u32 flag; char f[32]; + bool disable = false; + memset(f, 0, 32); len = strn_len(&user_buffer[i], sizeof(f) - 1); if (len < 0) @@ -1197,113 +1229,15 @@ static ssize_t pktgen_if_write(struct file *file, if (copy_from_user(f, &user_buffer[i], len)) return -EFAULT; i += len; - if (strcmp(f, "IPSRC_RND") == 0) - pkt_dev->flags |= F_IPSRC_RND; - - else if (strcmp(f, "!IPSRC_RND") == 0) - pkt_dev->flags &= ~F_IPSRC_RND; - - else if (strcmp(f, "TXSIZE_RND") == 0) - pkt_dev->flags |= F_TXSIZE_RND; - - else if (strcmp(f, "!TXSIZE_RND") == 0) - pkt_dev->flags &= ~F_TXSIZE_RND; - - else if (strcmp(f, "IPDST_RND") == 0) - pkt_dev->flags |= F_IPDST_RND; - - else if (strcmp(f, "!IPDST_RND") == 0) - pkt_dev->flags &= ~F_IPDST_RND; - - else if (strcmp(f, "UDPSRC_RND") == 0) - pkt_dev->flags |= F_UDPSRC_RND; - - else if (strcmp(f, "!UDPSRC_RND") == 0) - pkt_dev->flags &= ~F_UDPSRC_RND; - - else if (strcmp(f, "UDPDST_RND") == 0) - pkt_dev->flags |= F_UDPDST_RND; - - else if (strcmp(f, "!UDPDST_RND") == 0) - pkt_dev->flags &= ~F_UDPDST_RND; - - else if (strcmp(f, "MACSRC_RND") == 0) - pkt_dev->flags |= F_MACSRC_RND; - - else if (strcmp(f, "!MACSRC_RND") == 0) - pkt_dev->flags &= ~F_MACSRC_RND; - else if (strcmp(f, "MACDST_RND") == 0) - pkt_dev->flags |= F_MACDST_RND; + flag = pktgen_read_flag(f, &disable); - else if (strcmp(f, "!MACDST_RND") == 0) - pkt_dev->flags &= ~F_MACDST_RND; - - else if (strcmp(f, "MPLS_RND") == 0) - pkt_dev->flags |= F_MPLS_RND; - - else if (strcmp(f, "!MPLS_RND") == 0) - pkt_dev->flags &= ~F_MPLS_RND; - - else if (strcmp(f, "VID_RND") == 0) - pkt_dev->flags |= F_VID_RND; - - else if (strcmp(f, "!VID_RND") == 0) - pkt_dev->flags &= ~F_VID_RND; - - else if (strcmp(f, "SVID_RND") == 0) - pkt_dev->flags |= F_SVID_RND; - - else if (strcmp(f, "!SVID_RND") == 0) - pkt_dev->flags &= ~F_SVID_RND; - - else if (strcmp(f, "FLOW_SEQ") == 0 || strcmp(f, "!FLOW_RND") == 0) - pkt_dev->flags |= F_FLOW_SEQ; - - else if (strcmp(f, "FLOW_RND") == 0 || strcmp(f, "!FLOW_SEQ") == 0) - pkt_dev->flags &= ~F_FLOW_SEQ; - - else if (strcmp(f, "QUEUE_MAP_RND") == 0) - pkt_dev->flags |= F_QUEUE_MAP_RND; - - else if (strcmp(f, "!QUEUE_MAP_RND") == 0) - pkt_dev->flags &= ~F_QUEUE_MAP_RND; - - else if (strcmp(f, "QUEUE_MAP_CPU") == 0) - pkt_dev->flags |= F_QUEUE_MAP_CPU; - - else if (strcmp(f, "!QUEUE_MAP_CPU") == 0) - pkt_dev->flags &= ~F_QUEUE_MAP_CPU; -#ifdef CONFIG_XFRM - else if (strcmp(f, "IPSEC") == 0) - pkt_dev->flags |= F_IPSEC; - - else if (strcmp(f, "!IPSEC") == 0) - pkt_dev->flags &= ~F_IPSEC; -#endif - - else if (strcmp(f, "!IPV6") == 0) - pkt_dev->flags &= ~F_IPV6; - - else if (strcmp(f, "NODE_ALLOC") == 0) - pkt_dev->flags |= F_NODE; - - else if (strcmp(f, "!NODE_ALLOC") == 0) - pkt_dev->flags &= ~F_NODE; - - else if (strcmp(f, "UDPCSUM") == 0) - pkt_dev->flags |= F_UDPCSUM; - - else if (strcmp(f, "!UDPCSUM") == 0) - pkt_dev->flags &= ~F_UDPCSUM; - - else if (strcmp(f, "NO_TIMESTAMP") == 0) - pkt_dev->flags |= F_NO_TIMESTAMP; - - else if (strcmp(f, "!NO_TIMESTAMP") == 0) - pkt_dev->flags &= ~F_NO_TIMESTAMP; - - else { + if (flag) { + if (disable) + pkt_dev->flags &= ~flag; + else + pkt_dev->flags |= flag; + } else { sprintf(pg_result, "Flag -:%s:- unknown\nAvailable flags, (prepend ! to un-set flag):\n%s", f,