From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 328BBC282D7 for ; Sat, 2 Feb 2019 22:06:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E534920855 for ; Sat, 2 Feb 2019 22:06:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="Wr3nUv6K" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726721AbfBBWGR (ORCPT ); Sat, 2 Feb 2019 17:06:17 -0500 Received: from mail-ot1-f68.google.com ([209.85.210.68]:38597 "EHLO mail-ot1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726690AbfBBWGR (ORCPT ); Sat, 2 Feb 2019 17:06:17 -0500 Received: by mail-ot1-f68.google.com with SMTP id e12so9159777otl.5 for ; Sat, 02 Feb 2019 14:06:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:in-reply-to:references :organization:mime-version:content-transfer-encoding; bh=SMqjUKaeoXXyY6HU+ylpLoZ1X1lSUIM6W/FOCdYxFGk=; b=Wr3nUv6KAI1oKtLW9VvuHhKSjCx5vUswjAocWGdLoxiVnkSMq5p1etNLecPIxyfhih vlzpbluZ+LfrhpPvAANVbQ/qvjDQfpd+SvpkQk1tcFysQrTxVo/r33qj+dXgMqYWdPR+ Bb7xRijY+cuSaiATfIXvTe8E6LIWAYPmPwFwQKMNPw/fzO6hCAt5sPZ5oDnyBwKlcixM 6U27xli/Aqj+otJf4YMbBZ9lYGp5qEo1dZ4oLpjofgPpXMK4SPNqnNlGevYW8+135AFS fhZzpz7Ht8W9piSSHkWxqWwuwiGwiKfF8sfqSE7pNHJ3JAmlBbksN6F7ICttqTxZ/5XR AvNw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:organization:mime-version:content-transfer-encoding; bh=SMqjUKaeoXXyY6HU+ylpLoZ1X1lSUIM6W/FOCdYxFGk=; b=db+sQFnVDWMrS0RUxgIKvuh+YGbSGX4C/9MOxKn6ACtcgsqCkGrco549IqkeGnvCNC ANo+XXmgqJi+nAiEvoMpVI1fHyC/e99fsOQvOD9m+9vQjAnHVpubX5CcJovZDHK3MtWe JlKzqMuVvSsjk9ZZXYzHBwcX/nsynp1KqQluQRlTraAPGo5HXLb16ibH1fYo/zSM38Gm RYlp3kGQnWjmEWHictprXfa3LsaLIfy733hQPxLLrz8fgYLnXu4uVeuvqAMJvCvXqmQ3 HQBZOjFXRhC/gaU5Sij/g5WVjJwRUN8L/FYKjFTM2JxlimXKOnaiI+wNe+GEKbEOGC0S fM/g== X-Gm-Message-State: AJcUukepD+uVBkJQl8NwFon4BdfCsmno08Eoj8eTYyCk5J4B4gjFYjf3 3mEdKO/LHzuNU6aCc3+84ha93A== X-Google-Smtp-Source: ALg8bN7VnnUqujmj/7ToVHgbpNeXdjAQag9cdviigvwm5yJG2XJJONe/5GEWOF8KkZ0EVeP9bjr7Yw== X-Received: by 2002:a9d:7001:: with SMTP id k1mr31306258otj.173.1549145176378; Sat, 02 Feb 2019 14:06:16 -0800 (PST) Received: from cakuba.hsd1.ca.comcast.net ([2600:1702:3ad0:a560::27]) by smtp.gmail.com with ESMTPSA id m26sm4762646otl.32.2019.02.02.14.06.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 02 Feb 2019 14:06:16 -0800 (PST) Date: Sat, 2 Feb 2019 14:06:08 -0800 From: Jakub Kicinski To: Jiri Pirko Cc: dsahern@gmail.com, stephen@networkplumber.org, netdev@vger.kernel.org, oss-drivers@netronome.com Subject: Re: [PATCH iproute2-next] devlink: add info subcommand Message-ID: <20190202140608.27691bbc@cakuba.hsd1.ca.comcast.net> In-Reply-To: <20190202155938.GE2778@nanopsycho> References: <20190202000338.30820-1-jakub.kicinski@netronome.com> <20190202155938.GE2778@nanopsycho> Organization: Netronome Systems, Ltd. MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On Sat, 2 Feb 2019 16:59:38 +0100, Jiri Pirko wrote: > Sat, Feb 02, 2019 at 01:03:38AM CET, jakub.kicinski@netronome.com wrote: > >Add support for reading the device serial number and versions > >from the kernel. > > > >RFCv2: > > - make info subcommand of dev. > > Please add some examples of inputs and outputs. Sorry, yes, will do. > >Signed-off-by: Jakub Kicinski > >--- > > devlink/devlink.c | 207 +++++++++++++++++++++++++++++++++++++++++ > > man/man8/devlink-dev.8 | 36 +++++++ > > 2 files changed, 243 insertions(+) > > > >diff --git a/devlink/devlink.c b/devlink/devlink.c > >index 3651e90c1159..3ab046ace8f8 100644 > >--- a/devlink/devlink.c > >+++ b/devlink/devlink.c > >@@ -199,6 +199,7 @@ static void ifname_map_free(struct ifname_map *ifname_map) > > #define DL_OPT_REGION_SNAPSHOT_ID BIT(22) > > #define DL_OPT_REGION_ADDRESS BIT(23) > > #define DL_OPT_REGION_LENGTH BIT(24) > >+#define DL_OPT_VERSIONS_TYPE BIT(25) > > Why "type"? Confusing. Right, I think this dates back to day 1 when the whole thing was called versions not info. How about DL_OPT_INFO_VERSION_TYPE? > > > > struct dl_opts { > > uint32_t present; /* flags of present items */ > >@@ -943,6 +952,21 @@ static int param_cmode_get(const char *cmodestr, > > return 0; > > } > > > >+static int versions_type_get(const char *typestr, int *p_attr) > >+{ > >+ if (strcmp(typestr, "fixed") == 0) { > >+ *p_attr = DEVLINK_ATTR_INFO_VERSION_FIXED; > >+ } else if (strcmp(typestr, "stored") == 0) { > >+ *p_attr = DEVLINK_ATTR_INFO_VERSION_STORED; > >+ } else if (strcmp(typestr, "running") == 0) { > >+ *p_attr = DEVLINK_ATTR_INFO_VERSION_RUNNING; > >+ } else { > >+ pr_err("Unknown versions type \"%s\"\n", typestr); > >+ return -EINVAL; > >+ } > >+ return 0; > >+} > >+ > > static int dl_argv_parse(struct dl *dl, uint32_t o_required, > > uint32_t o_optional) > > { > >@@ -1178,6 +1202,19 @@ static int dl_argv_parse(struct dl *dl, uint32_t o_required, > > if (err) > > return err; > > o_found |= DL_OPT_REGION_LENGTH; > >+ } else if (dl_argv_match(dl, "versions") && > >+ (o_all & DL_OPT_VERSIONS_TYPE)) { > >+ const char *versionstr; > >+ > >+ dl_arg_inc(dl); > >+ err = dl_argv_str(dl, &versionstr); > >+ if (err) > >+ return err; > >+ err = versions_type_get(versionstr, > >+ &opts->versions_attr); > >+ if (err) > >+ return err; > >+ o_found |= DL_OPT_VERSIONS_TYPE; > > } else { > > pr_err("Unknown option \"%s\"\n", dl_argv(dl)); > > return -EINVAL; > >@@ -1443,6 +1480,9 @@ static void cmd_dev_help(void) > > pr_err(" devlink dev param set DEV name PARAMETER value VALUE cmode { permanent | driverinit | runtime }\n"); > > pr_err(" devlink dev param show [DEV name PARAMETER]\n"); > > pr_err(" devlink dev reload DEV\n"); > >+ pr_err(" devlink dev info [ DEV [ { versions [ VTYPE ] } ] ]\n"); > >+ pr_err("\n"); > >+ pr_err(" VTYPE := { fixed | running | stored }\n"); > > So you would like to filter according to the version type? Why? if devlink dev info bus/train versions stored != devlink ... running then reboot is needed. That one of main uses for reporting running vs stored in sections, it's nice to be able to just compare the outputs.