From patchwork Tue Jan 9 13:55:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 857497 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="SdhMP56z"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zGDHp5ZCnz9s75 for ; Wed, 10 Jan 2018 00:58:14 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758473AbeAIN6M (ORCPT ); Tue, 9 Jan 2018 08:58:12 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:41556 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754494AbeAINzj (ORCPT ); Tue, 9 Jan 2018 08:55:39 -0500 Received: by mail-wm0-f66.google.com with SMTP id g75so20695517wme.0 for ; Tue, 09 Jan 2018 05:55:39 -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=SdhMP56zzPon5dQmtPrQ1vox9vYeL3rRFeI4smiUbQ1DOISIiF3sBnQDllYnB70gHx 7y88ya+iEwsNTglAVV4ymq88M1FL+5j278/u55jEkbAh8UiMpankYcUrE1QYzaaRclMt vv4vBpo1uwbpzGZ4Lwji5RUj44s8QZyF11UQE= 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=ek+w0S8YpugU6G+/fA4A53j68T2UREn0Jm14E9KN5wdaWyV/OgAX4kQ6xTWCdAZkE4 wa2tMjihsMiclvCn28T5nckkFgNrR+pr+OsECexqlRsjgCqhejFSyOC+eOv4Y/9vA2oW 8zORLPabTdj9zvoBIhAzy+emCSg0F8ZS9cMfKwOcj44AeVD1disM0Emb/93QQofgfP+J 1+6gDhkXuwmR7Ds/xA0GNomM7BR6ygW3OJCxQV99wA6PWd331XLqZFGulTk8qRKa3AqZ O20D8j2s5Or2i32d4VvgVqCOwsME9rofquaZQHh8FA0Z8zRhk+h29wDmS7XJpNmzbhNj ZQFA== X-Gm-Message-State: AKGB3mLRMMFFvqZM3/GwCq8HPLIcBw0eGItvOwjJhk70V+3ezwuReYHX vswUMLmfuyV8QfKKQc17NdgEkQ== X-Google-Smtp-Source: ACJfBosLHuKH+Qr/wMIJiLRnKoUSK1WX3pnwtp1N/86UKDiskaYetKBheYG75d6nauo3aijM33jHqw== X-Received: by 10.80.163.153 with SMTP id s25mr21625997edb.7.1515506138436; Tue, 09 Jan 2018 05:55:38 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id n49sm1161697edd.37.2018.01.09.05.55.37 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 09 Jan 2018 05:55:37 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: 0x7f454c46@gmail.com, 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: [PATCH 1/5] Documentation/pktgen: Clearify how-to use pktgen samples Date: Tue, 9 Jan 2018 13:55:31 +0000 Message-Id: <20180109135535.15237-2-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180109135535.15237-1-dima@arista.com> References: <20180109135535.15237-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 Tue Jan 9 13:55:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Safonov X-Patchwork-Id: 857494 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="Di7m5XEm"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zGDFr01Qyz9s75 for ; Wed, 10 Jan 2018 00:56:32 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753142AbeAINzn (ORCPT ); Tue, 9 Jan 2018 08:55:43 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:44021 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758133AbeAINzl (ORCPT ); Tue, 9 Jan 2018 08:55:41 -0500 Received: by mail-wm0-f65.google.com with SMTP id g1so2776698wmg.2 for ; Tue, 09 Jan 2018 05:55: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=QcdIxUXTbs6zS0PSfgY3KEKjxTLcKiJmFL4gcZ8qPXw=; b=Di7m5XEms0RICdEsOw4TUmOe+RM4xluW7NkiicZTT8U8k2I5S4UU+O0HI878NHwWuM XlKF0WxF1JBD11sCJNDlp0XzljqmpixIPfVXMZ88dzCi+JGPa2CNeTLwNsbRIQqPxx5t 9iKUX3c285iQJFrnxWeHh+/1YrpJQTb0WruTE= 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=pOmaYmPlVeQCAhLLd+5AKT0Q3bL15lnStXcaL87fEfENb0tEELDgcLUX+w/NAjz/2O DCxrbnX2ZH7dBPSGBSLipTGbTWrauZE2iVMi7oWhMjiQq5wu67iMKEg7Zzy2U8FX1NDo dl6sIq23rAcUxWnBNw+hRDiFNez9E3tK9kd0K75ZEZVwdOlY8kyNB9CosbvO6yw5mQme CMO/YSJvD0gl2QFYYAygt1QUwgsZYJxQqmOBIY6nZEVJg4mzKtChzc4iLon94mnRlcDZ Y0lEtfVCXLiwsUVHpniuOBGmRJK0e6axGwboEQFJNYInR1XZj4ZKO1dpiBR0i50+rw2T Ex3A== X-Gm-Message-State: AKGB3mIVv6dYBpVk0gbFYzqWeGjMKBmO/iRL6upCkXXo/3++jBynCkiQ dbo0kw4QM1l2ljTm4GN/Ldw3yQ== X-Google-Smtp-Source: ACJfBosB3+EbGnUd5KAeGj5A2voUl2s7BcjWeKgA+02yjIvB5WT/rAj6CRzJY1xMBoHo7J/MW4sW+A== X-Received: by 10.80.186.3 with SMTP id g3mr21049228edc.25.1515506139900; Tue, 09 Jan 2018 05:55:39 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id n49sm1161697edd.37.2018.01.09.05.55.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 09 Jan 2018 05:55:39 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: 0x7f454c46@gmail.com, 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: [PATCH 2/5] pktgen: Add missing !flag parameters Date: Tue, 9 Jan 2018 13:55:32 +0000 Message-Id: <20180109135535.15237-3-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180109135535.15237-1-dima@arista.com> References: <20180109135535.15237-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 Tue Jan 9 13:55: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: 857495 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="ZCFiPR1l"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zGDGk0CV6z9s75 for ; Wed, 10 Jan 2018 00:57:18 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758332AbeAIN4l (ORCPT ); Tue, 9 Jan 2018 08:56:41 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:41570 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758217AbeAINzm (ORCPT ); Tue, 9 Jan 2018 08:55:42 -0500 Received: by mail-wm0-f67.google.com with SMTP id g75so20695816wme.0 for ; Tue, 09 Jan 2018 05:55: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=iMNcXdGO+a457mI+Fp3z9KFMl2StCMAQT2Ur2njVPFo=; b=ZCFiPR1lgh/ENvYzfCmFFOFBGAzuCutaQeMR9pfErsjUMErKUAPKRbAXF6LwaA1RG5 BithSA4xYe+IPJs0xlrsyvNUxiGuzxMeZeLN+xKiokNVat5QvfY9IObV7aPI1sfWC0fE /OQAucrYKGBi6+PKG+hFcaKDgIXESj27D1R3E= 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=iMNcXdGO+a457mI+Fp3z9KFMl2StCMAQT2Ur2njVPFo=; b=QCcNJJO6ghUKCcMuWAVPN+ZkCvm7uTsOevycpdJul/MqHTyf9zc80bz4gzyb3XIr4N kVjfvJcbthwo5VhzJGoc2C0bWlF5wHUXHiY/bicVAhdD/3uQr0I7UL/adfelhD6kyqQi e3C3PrdQqLkjttWEmPaGiUqJbtv8mzT/xXrMZhaZZnf6N2sbGigy24gZK3xUTYzIelKa e6LQvsskFjdmIIk8GmWPrgV3vhvu3S807iGynpt7Sa6Apu/ibhaiKjjPaZKAJDljAHcq A9i6RHZILkc+GxQRM9OjXVINY4mu6laiDtriSLz6HmwCUxRNJyly2ddLKI4oplh+tk4h WMlA== X-Gm-Message-State: AKwxytfADf3/fpgPiMQC3o7iZOEjb64k/7EIsv19lQPW5GbsD94U513g L72t9CNutxPxCLmyDM7Eyj2DGA== X-Google-Smtp-Source: ACJfBosOuqJp2er1NmSNfDqY9KBItJNdeg2b/YdOaR+hUlPIKZJubDrWT98IyQpX5WcWV/MOir+T/w== X-Received: by 10.80.186.65 with SMTP id 1mr3702276eds.10.1515506141032; Tue, 09 Jan 2018 05:55:41 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id n49sm1161697edd.37.2018.01.09.05.55.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 09 Jan 2018 05:55:40 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: 0x7f454c46@gmail.com, 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: [PATCH 3/5] pktgen: Add behavior flag names array - pkt_flag_names Date: Tue, 9 Jan 2018 13:55:33 +0000 Message-Id: <20180109135535.15237-4-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180109135535.15237-1-dima@arista.com> References: <20180109135535.15237-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The array will be used 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 | 64 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 23 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index ab63943ffd03..51f273319baf 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -184,25 +184,43 @@ #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 + +#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 +1322,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 +2568,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 +2673,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 Tue Jan 9 13:55: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: 857493 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="aDrSag+Q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zGDFg0Ccjz9s75 for ; Wed, 10 Jan 2018 00:56:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758285AbeAIN4N (ORCPT ); Tue, 9 Jan 2018 08:56:13 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:34496 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752241AbeAINzn (ORCPT ); Tue, 9 Jan 2018 08:55:43 -0500 Received: by mail-wm0-f66.google.com with SMTP id y82so20410556wmg.1 for ; Tue, 09 Jan 2018 05:55: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=+Em2UWc0aWbqqCOjokdvcY2IEpXHvQ+k9g+y8cAhJ1k=; b=aDrSag+QM3dClkw+vu4lgo1nFYlSd4ly59QsF9pNqUWUBt3bTrTv25DOL2PMcrwI5x o36ji9LwTBpYiC66peAmZtuvKh3QfvC/OJJc3k46v6dzOP4kAx01hg0oV6FGy09rHdHi PrimmIMsCXG1QoeaMURNEQGr5Xn9nXEmyJsfw= 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=+Em2UWc0aWbqqCOjokdvcY2IEpXHvQ+k9g+y8cAhJ1k=; b=hJ1Ja2n6YWbAbYNYFAX6RE0h0/yrs132rrKkPmnIjCUBN6TsrT11dfeHGGhfuee4n5 VOhxf0ilCiCQDNgkoHuUKZOvhjVUX+cE/SHOPmws0arUU1Dwc+sfPIrqfP3ZOBNTWz7t DDcx6FaC4SKsmSNi3Y6ao01/MYjPbSs423wvziujrVvO1AIvta6LaIX9GvbcX2qVNy0N m/0P3JKYiVJOMU+eEVQ+q3qGo6WObPQwNRbKh8c3CVtEE335grZS168kSzUt4m9xF1+p 9WellHLHa6rfRZuKLtxjzNKPkrDhYqmdJW/aMRuBSERW5KkCLv74jOCe5O5STZY/Zd4y aEUQ== X-Gm-Message-State: AKGB3mJ9T7KyL5RjDZS4MNnwEG52SkufY9cgEid31N3zHMJR776fLfxx KBp3ghIuQkFtf0dlZWa35LhkFA== X-Google-Smtp-Source: ACJfBoumwW1riHMUsZhHTJAXwBmWprQSMSSaa4rbYKXhJ894EZtfWI0/V3nzEfpWSQVQVWCsFIlTfw== X-Received: by 10.80.164.77 with SMTP id v13mr21436463edb.115.1515506142234; Tue, 09 Jan 2018 05:55:42 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id n49sm1161697edd.37.2018.01.09.05.55.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 09 Jan 2018 05:55:41 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: 0x7f454c46@gmail.com, 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: [PATCH 4/5] pktgen: Remove brute-force printing of flags Date: Tue, 9 Jan 2018 13:55:34 +0000 Message-Id: <20180109135535.15237-5-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180109135535.15237-1-dima@arista.com> References: <20180109135535.15237-1-dima@arista.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Like, we can do it using index. Signed-off-by: Dmitry Safonov --- net/core/pktgen.c | 71 ++++++++++--------------------------------------------- 1 file changed, 13 insertions(+), 58 deletions(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 51f273319baf..e320f0cbfd62 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -220,6 +220,8 @@ char *pkt_flag_names[] = { }; #undef pf +#define NR_PKT_FLAGS ARRAY_SIZE(pkt_flag_names) + /* Device flag bits */ /* Thread control flag bits */ @@ -553,6 +555,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, @@ -614,7 +617,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]), @@ -650,68 +652,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 Tue Jan 9 13:55: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: 857492 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="ReEn+pUj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zGDFC1fPYz9sBW for ; Wed, 10 Jan 2018 00:55:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758263AbeAINzr (ORCPT ); Tue, 9 Jan 2018 08:55:47 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:43013 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758241AbeAINzo (ORCPT ); Tue, 9 Jan 2018 08:55:44 -0500 Received: by mail-wm0-f68.google.com with SMTP id g1so2777028wmg.2 for ; Tue, 09 Jan 2018 05:55:44 -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=PdODGYXL1naxOt5KhItwE8gO4MVmUzW1jbtFBvr6IB0=; b=ReEn+pUjoN29JtcMb00es4/nOWsvsaOdYbRT8x20xq+uDf7pfwdRRXFOE5t+sgf1yx ibUFUtPHmm426nVqsdXiTzid2yB9YaaNUfNAiXpVLv7o/w4ctVO3p5LiNVaM+m83FY/o 7FGMjFhP7vw9+V27dzcgNvxBluPHA9ujISMeM= 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=PdODGYXL1naxOt5KhItwE8gO4MVmUzW1jbtFBvr6IB0=; b=Z2p6+7OxVna4IrKfqlvEWCgWPBSO+jHALZ02vlSUzumBVVx3zhdikYjNEADlJP2H0w AfIf2CP5jqUHRylJtomRIka8P44Joo82qTuScn7wn+HN253ZKTLZX4pedbXXCUq0T/bY lxuFFIB3BsekszTwmPOFH9gbMw0AiWK9rEY4AuI6xd65redoaqIBbu5Izm05Wq5InkKI bkscLhXyvjFtrqbsOzXXU+aYZTGEntANzsSK/GzUDrbznILV0tDOdjtzwl6lmGBcgDxC eyg9DjLQInmzZMcunhk/VEfeuo5HxdbTKP4IJOnV1lh1kgbcETE+6CL4+BBMztmnPJwE 0ylA== X-Gm-Message-State: AKwxytdOoaCggo7Fo6YttZBMj0HA5FWJ6BcBJ7vW/Tb57SCqOAmMxP3O L1WrpXl541A7kgl5B93lvf+6UA== X-Google-Smtp-Source: ACJfBot5dsLyg7xfiDmUas9kd3urY1CeDW7cPxuokOlfYOBE+uDleeETF9FS8u3LO/AqFVmmoH/gmw== X-Received: by 10.80.166.147 with SMTP id e19mr1633893edc.97.1515506143438; Tue, 09 Jan 2018 05:55:43 -0800 (PST) Received: from dhcp.ire.aristanetworks.com ([217.173.96.166]) by smtp.gmail.com with ESMTPSA id n49sm1161697edd.37.2018.01.09.05.55.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 09 Jan 2018 05:55:42 -0800 (PST) From: Dmitry Safonov To: linux-kernel@vger.kernel.org Cc: 0x7f454c46@gmail.com, 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: [PATCH 5/5] pktgen: Clean read user supplied flag mess Date: Tue, 9 Jan 2018 13:55:35 +0000 Message-Id: <20180109135535.15237-6-dima@arista.com> X-Mailer: git-send-email 2.13.6 In-Reply-To: <20180109135535.15237-1-dima@arista.com> References: <20180109135535.15237-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 e320f0cbfd62..a3862e500643 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -832,6 +832,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) @@ -1189,7 +1218,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) @@ -1198,113 +1230,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,