From patchwork Tue Jul 17 15:36:38 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 945162 X-Patchwork-Delegate: linville@tuxdriver.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="THH7Z9ya"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41VPXt1zLGz9s4Z for ; Wed, 18 Jul 2018 01:37:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731557AbeGQQK2 (ORCPT ); Tue, 17 Jul 2018 12:10:28 -0400 Received: from mail-wm0-f53.google.com ([74.125.82.53]:53939 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731455AbeGQQK1 (ORCPT ); Tue, 17 Jul 2018 12:10:27 -0400 Received: by mail-wm0-f53.google.com with SMTP id s9-v6so1975139wmh.3 for ; Tue, 17 Jul 2018 08:37:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=mDov4FJsuCE9EG1fED1lBhWsWSnrfOl5+Y0JN+jIBV0=; b=THH7Z9yaWsnnfcScXT2SVz/1JpuY8eokJAW7KY6zXP7RSy9ktexG7Blvnd8ROF1Y4K OwE7o1tJVe2T96auy5f6NYlGxZAOuqVGd2WbDJYACOjIs/MhhFxA9nhxnspqB1jUuKVl PEBfVy5k9VwYJCe8DWSOUxAlHpdZ5xDeM9lxG2tJ6rwdztLMcTu9JbeKCREPTU28aMof 22icPJc0+xvR51Ecv3Tm2tg+lvn6yzb6k+EH+9rYK8ZdOm8kZEESNJtyOT3i0vAzab5B ubirWtFxATMGvGT1brrTqqz37jslz3F61vteH0gQdacT+0BkYVZc6NqXR9zv96sEnnN8 1DBQ== 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=mDov4FJsuCE9EG1fED1lBhWsWSnrfOl5+Y0JN+jIBV0=; b=ZHc2snE0fTO/Q6Njajsc9EdW+rE4mfeHBWjtLwdBRlOH0AD87FmlAkeusJwafTUGbV F95+ftl0XXMfsgGwUPtEzLSR5/IOP6f776I70aN7MGgafzkSKSie2e9rNlL/qBcBmuEe e/jMotGOy5s/+nY8ezC8iFTA8NYaLOSbuL8XMXvskr5JtGT/o8S3Q+KzXFPWCr0gpPdA BzJZK87Q+Glhp30lf83SDXQUFzgjgiohrf56q7W2qQKQYbKAXaCmNzeNQzmFNxnlJoxI VMLpQCV6dn45sn3WEwDYAv0MfEdWBG8OUlQXk5SAuwPI0iYu2prSMJvffMqla5WDTAwh u0Aw== X-Gm-Message-State: AOUpUlHXwUGfJvdozXmlGV+TXKR8EcZDvObRykxuDntjFsmRo4LM6MB/ Anq8wEz2QhRMSiCsfL5DjML9tbUW X-Google-Smtp-Source: AAOMgpceEzWu8YsDEJ1Rs9mBnmUMyVJtlWqRtoEQHMDFYOHh7DsAZE2KH0O8SwGWk4d2PmJU3uPUQg== X-Received: by 2002:a1c:6f88:: with SMTP id c8-v6mr1656897wmi.49.1531841833721; Tue, 17 Jul 2018 08:37:13 -0700 (PDT) Received: from fainelli-desktop.igp.broadcom.net ([192.19.223.250]) by smtp.gmail.com with ESMTPSA id u73-v6sm2850513wmd.4.2018.07.17.08.37.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 17 Jul 2018 08:37:12 -0700 (PDT) From: Florian Fainelli To: netdev@vger.kernel.org Cc: Florian Fainelli , linville@tuxdriver.com, davem@davemloft.net, andrew@lunn.ch, vivien.didelot@savoirfairelinux.com Subject: [PATCH ethtool] ethtool: Add support for WAKE_FILTER Date: Tue, 17 Jul 2018 08:36:38 -0700 Message-Id: <20180717153645.7500-2-f.fainelli@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180717153645.7500-1-f.fainelli@gmail.com> References: <20180717153645.7500-1-f.fainelli@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Allow re-purposing the wol->sopass storage area to specify a bitmask of filters (programmed previously via ethtool::rxnfc) to be used as wake-up patterns. Signed-off-by: Florian Fainelli --- ethtool-copy.h | 1 + ethtool.c | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/ethtool-copy.h b/ethtool-copy.h index 8cc61e9ab40b..dbfaca15dca5 100644 --- a/ethtool-copy.h +++ b/ethtool-copy.h @@ -1628,6 +1628,7 @@ static __inline__ int ethtool_validate_duplex(__u8 duplex) #define WAKE_ARP (1 << 4) #define WAKE_MAGIC (1 << 5) #define WAKE_MAGICSECURE (1 << 6) /* only meaningful if WAKE_MAGIC */ +#define WAKE_FILTER (1 << 7) /* L2-L4 network traffic flow types */ #define TCP_V4_FLOW 0x01 /* hash or spec (tcp_ip4_spec) */ diff --git a/ethtool.c b/ethtool.c index fb93ae898312..322fc8d98ee5 100644 --- a/ethtool.c +++ b/ethtool.c @@ -931,6 +931,9 @@ static int parse_wolopts(char *optstr, u32 *data) case 's': *data |= WAKE_MAGICSECURE; break; + case 'f': + *data |= WAKE_FILTER; + break; case 'd': *data = 0; break; @@ -964,6 +967,8 @@ static char *unparse_wolopts(int wolopts) *p++ = 'g'; if (wolopts & WAKE_MAGICSECURE) *p++ = 's'; + if (wolopts & WAKE_FILTER) + *p++ = 'f'; } else { *p = 'd'; } @@ -989,6 +994,21 @@ static int dump_wol(struct ethtool_wolinfo *wol) fprintf(stdout, "\n"); } + if (wol->supported & WAKE_FILTER) { + int i, j; + int delim = 0; + fprintf(stdout, " Filter(s) enabled: "); + for (i = 0; i < SOPASS_MAX; i++) { + for (j = 0; j < 8; j++) { + if (wol->sopass[i] & (1 << j)) { + fprintf(stdout, "%s%d", delim?",":"", i * 8 + j); + delim=1; + } + } + } + fprintf(stdout, "\n"); + } + return 0; } @@ -2897,6 +2917,16 @@ static int do_sset(struct cmd_context *ctx) exit_bad_args(); get_mac_addr(argp[i], sopass_wanted); sopass_change = 1; + } else if (!strcmp(argp[i], "filters")) { + gwol_changed = 1; + i++; + if (i >= argc) + exit_bad_args(); + if (parse_hex_u32_bitmap(argp[i], + SOPASS_MAX * 8, + (unsigned int *)sopass_wanted)) + exit_bad_args(); + sopass_change = 1; } else if (!strcmp(argp[i], "msglvl")) { i++; if (i >= argc) @@ -3112,8 +3142,10 @@ static int do_sset(struct cmd_context *ctx) if (err < 0) { if (wol_change) fprintf(stderr, " not setting wol\n"); - if (sopass_change) + if (sopass_change & wol.wolopts & WAKE_MAGICSECURE) fprintf(stderr, " not setting sopass\n"); + if (sopass_change & wol.wolopts & WAKE_FILTER) + fprintf(stderr, " not setting filters\n"); } } @@ -5066,6 +5098,7 @@ static const struct option { " [ xcvr internal|external ]\n" " [ wol p|u|m|b|a|g|s|d... ]\n" " [ sopass %x:%x:%x:%x:%x:%x ]\n" + " [ filters %x ]\n" " [ msglvl %d | msglvl type on|off ... ]\n" }, { "-a|--show-pause", 1, do_gpause, "Show pause options" }, { "-A|--pause", 1, do_spause, "Set pause options",