netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jacob Keller <jacob.e.keller@intel.com>
To: Jakub Kicinski <kuba@kernel.org>
Cc: mkubecek@suse.cz, netdev@vger.kernel.org
Subject: Re: [PATCH ethtool-next 2/5] pause: add --json support
Date: Thu, 24 Sep 2020 13:41:18 -0700	[thread overview]
Message-ID: <110b6abf-8317-0a60-56e7-a8d9473d04e6@intel.com> (raw)
In-Reply-To: <20200924083627.613e5c59@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com>



On 9/24/2020 8:36 AM, Jakub Kicinski wrote:
> On Wed, 23 Sep 2020 17:10:30 -0700 Jacob Keller wrote:
>>> -	printf("RX negotiated: %s\nTX negotiated: %s\n",
>>> -	       rx_status ? "on" : "off", tx_status ? "on" : "off");
>>> +
>>> +	if (is_json_context()) {
>>> +		open_json_object("negotiated");
>>> +		print_bool(PRINT_JSON, "rx", NULL, rx_status);
>>> +		print_bool(PRINT_JSON, "tx", NULL, tx_status);
>>> +		close_json_object();
>>> +	} else {
>>> +		printf("RX negotiated: %s\nTX negotiated: %s\n",
>>> +		       rx_status ? "on" : "off", tx_status ? "on" : "off");
>>> +	}
>>
>> Why not use print_string here like show_bool did?
> 
> Yeah.. I did not come up with a good way of reusing the show_bool code
> so I gave up. Taking another swing at it - how does this look?
> 
> diff --git a/netlink/coalesce.c b/netlink/coalesce.c
> index 65f75cf9a8dd..07a92d04b7a1 100644
> --- a/netlink/coalesce.c
> +++ b/netlink/coalesce.c
> @@ -36,9 +36,9 @@ int coalesce_reply_cb(const struct nlmsghdr *nlhdr, void *data)
>  	if (silent)
>  		putchar('\n');
>  	printf("Coalesce parameters for %s:\n", nlctx->devname);
> -	printf("Adaptive RX: %s  TX: %s\n",
> -	       u8_to_bool(tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX]),
> -	       u8_to_bool(tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX]));
> +	show_bool("rx", "Adaptive RX: %s  ",
> +		  tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX]);
> +	show_bool("tx", "TX: %s\n", tb[ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX]);
>  	show_u32(tb[ETHTOOL_A_COALESCE_STATS_BLOCK_USECS],
>  		 "stats-block-usecs: ");
>  	show_u32(tb[ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL],
> diff --git a/netlink/netlink.h b/netlink/netlink.h
> index 4916d25ed5c0..1012e8e32cd8 100644
> --- a/netlink/netlink.h
> +++ b/netlink/netlink.h
> @@ -98,27 +98,30 @@ static inline void show_u32(const struct nlattr *attr, const char *label)
>  		printf("%sn/a\n", label);
>  }
>  
> -static inline const char *u8_to_bool(const struct nlattr *attr)
> +static inline const char *u8_to_bool(const uint8_t *val)
>  {
> -	if (attr)
> -		return mnl_attr_get_u8(attr) ? "on" : "off";
> +	if (val)
> +		return *val ? "on" : "off";
>  	else
>  		return "n/a";
>  }
>  
> -static inline void show_bool(const char *key, const char *fmt,
> -			     const struct nlattr *attr)
> +static inline void show_bool_val(const char *key, const char *fmt, uint8_t *val)
>  {
>  	if (is_json_context()) {
> -		if (attr) {
> -			print_bool(PRINT_JSON, key, NULL,
> -				   mnl_attr_get_u8(attr));
> -		}
> +		if (val)
> +			print_bool(PRINT_JSON, key, NULL, val);
>  	} else {
> -		print_string(PRINT_FP, NULL, fmt, u8_to_bool(attr));
> +		print_string(PRINT_FP, NULL, fmt, u8_to_bool(val));
>  	}
>  }
>  
> +static inline void show_bool(const char *key, const char *fmt,
> +			     const struct nlattr *attr)
> +{
> +	show_bool_val(key, fmt, attr ? mnl_attr_get_payload(attr) : NULL);
> +}
> +
>  /* misc */
>  
>  static inline void copy_devname(char *dst, const char *src)
> diff --git a/netlink/pause.c b/netlink/pause.c
> index f9dec9fe887a..5395398ba948 100644
> --- a/netlink/pause.c
> +++ b/netlink/pause.c
> @@ -41,8 +41,8 @@ static int pause_autoneg_cb(const struct nlmsghdr *nlhdr, void *data)
>  	struct pause_autoneg_status ours = {};
>  	struct pause_autoneg_status peer = {};
>  	struct nl_context *nlctx = data;
> -	bool rx_status = false;
> -	bool tx_status = false;
> +	uint8_t rx_status = false;
> +	uint8_t tx_status = false;
>  	bool silent;
>  	int err_ret;
>  	int ret;
> @@ -74,15 +74,10 @@ static int pause_autoneg_cb(const struct nlmsghdr *nlhdr, void *data)
>  			tx_status = true;
>  	}
>  
> -	if (is_json_context()) {
> -		open_json_object("negotiated");
> -		print_bool(PRINT_JSON, "rx", NULL, rx_status);
> -		print_bool(PRINT_JSON, "tx", NULL, tx_status);
> -		close_json_object();
> -	} else {
> -		printf("RX negotiated: %s\nTX negotiated: %s\n",
> -		       rx_status ? "on" : "off", tx_status ? "on" : "off");
> -	}
> +	open_json_object("negotiated");
> +	show_bool_val("rx", "RX negotiated: %s\n", &rx_status);
> +	show_bool_val("tx", "TX negotiated: %s\n", &tx_status);
> +	close_json_object();
>  
>  	return MNL_CB_OK;
>  }
> 

This looks good!

Thanks,
Jake

  reply	other threads:[~2020-09-24 20:41 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-15 23:52 [PATCH ethtool-next 0/5] pause frame stats Jakub Kicinski
2020-09-15 23:52 ` [PATCH ethtool-next 1/5] update UAPI header copies Jakub Kicinski
2020-09-15 23:52 ` [PATCH ethtool-next 2/5] pause: add --json support Jakub Kicinski
2020-09-24  0:10   ` Jacob Keller
2020-09-24 15:36     ` Jakub Kicinski
2020-09-24 20:41       ` Jacob Keller [this message]
2020-09-15 23:52 ` [PATCH ethtool-next 3/5] separate FLAGS out in -h Jakub Kicinski
2020-09-24  0:12   ` Jacob Keller
2020-09-15 23:52 ` [PATCH ethtool-next 4/5] add support for stats in subcommands Jakub Kicinski
2020-09-15 23:52 ` [PATCH ethtool-next 5/5] pause: add support for dumping statistics Jakub Kicinski
2020-09-23 22:45   ` Michal Kubecek
2020-09-23 23:36     ` Jakub Kicinski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=110b6abf-8317-0a60-56e7-a8d9473d04e6@intel.com \
    --to=jacob.e.keller@intel.com \
    --cc=kuba@kernel.org \
    --cc=mkubecek@suse.cz \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).