lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cd73c11e-e8bd-615d-0513-bb3e3797f342@cumulusnetworks.com>
Date:   Sun, 27 Oct 2019 11:41:46 +0200
From:   Nikolay Aleksandrov <nikolay@...ulusnetworks.com>
To:     Andy Roulin <aroulin@...ulusnetworks.com>, netdev@...r.kernel.org
Cc:     dsahern@...il.com, roopa@...ulusnetworks.com, j.vosburgh@...il.com,
        vfalico@...il.com, andy@...yhouse.net
Subject: Re: [PATCH iproute2-next 3/3] iplink: bond: print 3ad actor/partner
 oper states as strings

On 27/10/2019 02:29, Andy Roulin wrote:
> The 802.3ad actor/partner operating states are only printed as
> numbers, e.g,
> 
> ad_actor_oper_port_state 15
> 
> Add an additional output in ip link show that prints a string describing
> the individual 3ad bit meanings in the following way:
> 
> ad_actor_oper_port_state_str <active,short_timeout,aggregating,in_sync>
> 
> JSON output is also supported, the field becomes a json array:
> 
> "ad_actor_oper_port_state_str":
> 	["active","short_timeout","aggregating","in_sync"]
> 
> Signed-off-by: Andy Roulin <aroulin@...ulusnetworks.com>
> Acked-by: Nikolay Aleksandrov <nikolay@...ulusnetworks.com>
> Acked-by: Roopa Prabhu <roopa@...ulusnetworks.com>
> ---
>  ip/iplink_bond_slave.c | 38 ++++++++++++++++++++++++++++++++++----
>  1 file changed, 34 insertions(+), 4 deletions(-)
> 
> diff --git a/ip/iplink_bond_slave.c b/ip/iplink_bond_slave.c
> index 4eaf72b8..99beeca1 100644
> --- a/ip/iplink_bond_slave.c
> +++ b/ip/iplink_bond_slave.c
> @@ -68,6 +68,28 @@ static void print_slave_mii_status(FILE *f, struct rtattr *tb)
>  			     slave_mii_status[status]);
>  }
>  
> +static void print_slave_oper_state(FILE *fp, const char *name, __u16 state)
> +{
> +

extra new line here

> +	open_json_array(PRINT_ANY, name);
> +	if (!is_json_context())
> +		fprintf(fp, " <");
> +#define _PF(s, str) if (state&AD_STATE_##s) {				\
> +			state &= ~AD_STATE_##s;				\
> +			print_string(PRINT_ANY, NULL,   		\
> +				     state ? "%s," : "%s", str); }
> +	_PF(LACP_ACTIVITY, "active");
> +	_PF(LACP_TIMEOUT, "short_timeout");
> +	_PF(AGGREGATION, "aggregating");
> +	_PF(SYNCHRONIZATION, "in_sync");
> +	_PF(COLLECTING, "collecting");
> +	_PF(DISTRIBUTING, "distributing");
> +	_PF(DEFAULTED, "defaulted");
> +	_PF(EXPIRED, "expired");
> +#undef _PF
> +	close_json_array(PRINT_ANY, "> ");
> +}
> +
>  static void bond_slave_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
>  {
>  	SPRINT_BUF(b1);
> @@ -106,17 +128,25 @@ static void bond_slave_print_opt(struct link_util *lu, FILE *f, struct rtattr *t
>  			  "ad_aggregator_id %d ",
>  			  rta_getattr_u16(tb[IFLA_BOND_SLAVE_AD_AGGREGATOR_ID]));
>  
> -	if (tb[IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE])
> +	if (tb[IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE]) {
> +		__u8 state = rta_getattr_u8(tb[IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE]);
> +
>  		print_int(PRINT_ANY,
>  			  "ad_actor_oper_port_state",
>  			  "ad_actor_oper_port_state %d ",
> -			  rta_getattr_u8(tb[IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE]));
> +			  state);
> +		print_slave_oper_state(f, "ad_actor_oper_port_state_str", state);
> +	}
> +
> +	if (tb[IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE]) {
> +		__u16 state = rta_getattr_u8(tb[IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE]);
>  
> -	if (tb[IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE])
>  		print_int(PRINT_ANY,
>  			  "ad_partner_oper_port_state",
>  			  "ad_partner_oper_port_state %d ",
> -			  rta_getattr_u16(tb[IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE]));
> +			  state);
> +		print_slave_oper_state(f, "ad_partner_oper_port_state_str", state);
> +	}
>  }
>  
>  static int bond_slave_parse_opt(struct link_util *lu, int argc, char **argv,
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ