netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH iproute2-next v2 0/2] pretty-print 802.3ad slave state
@ 2019-12-11 22:33 Andy Roulin
  2019-12-11 22:33 ` [PATCH iproute2-next v2 1/2] include/uapi: update bonding kernel header Andy Roulin
  2019-12-11 22:33 ` [PATCH iproute2-next v2 2/2] iplink: bond: print 3ad actor/partner oper states as strings Andy Roulin
  0 siblings, 2 replies; 4+ messages in thread
From: Andy Roulin @ 2019-12-11 22:33 UTC (permalink / raw)
  To: netdev; +Cc: dsahern, nikolay, roopa, j.vosburgh, vfalico, andy, stephen

Print the bond slave 802.3ad state in a human-readable way.
The 802.3ad bond slave actor/partner state definitions are exported
to userspace in the kernel include/uapi (dependent on the related
patch posted to net-next)

rtnetlink sends the bond slave state to userspace, see
 - IFLA_BOND_SLAVE_AD_ACTOR_OPER_PORT_STATE; and
 - IFLA_BOND_SLAVE_AD_PARTNER_OPER_PORT_STATE

and these 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.

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"]

These changes are dependent on a kernel change to uapi/
The following patch is the kernel change sent to net-next:
[PATCH net-next v2] bonding: move 802.3ad port state flags to uapi

v2:
 - address patch format and comments

Andy Roulin (2):
  include/uapi: update bonding kernel header
  iplink: bond: print 3ad actor/partner oper states as strings

 include/uapi/linux/if_bonding.h | 10 +++++++++
 ip/iplink_bond_slave.c          | 36 +++++++++++++++++++++++++++++----
 2 files changed, 42 insertions(+), 4 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH iproute2-next v2 1/2] include/uapi: update bonding kernel header
  2019-12-11 22:33 [PATCH iproute2-next v2 0/2] pretty-print 802.3ad slave state Andy Roulin
@ 2019-12-11 22:33 ` Andy Roulin
  2019-12-11 22:33 ` [PATCH iproute2-next v2 2/2] iplink: bond: print 3ad actor/partner oper states as strings Andy Roulin
  1 sibling, 0 replies; 4+ messages in thread
From: Andy Roulin @ 2019-12-11 22:33 UTC (permalink / raw)
  To: netdev; +Cc: dsahern, nikolay, roopa, j.vosburgh, vfalico, andy, stephen

The kernel now exports the 802.3ad bond slave state definitions
in uapi. This commit updates the iproute2 bonding uapi to include
these changes.

Signed-off-by: Andy Roulin <aroulin@cumulusnetworks.com>
Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com>
---
 include/uapi/linux/if_bonding.h | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/include/uapi/linux/if_bonding.h b/include/uapi/linux/if_bonding.h
index 790585f0..6829213a 100644
--- a/include/uapi/linux/if_bonding.h
+++ b/include/uapi/linux/if_bonding.h
@@ -95,6 +95,16 @@
 #define BOND_XMIT_POLICY_ENCAP23	3 /* encapsulated layer 2+3 */
 #define BOND_XMIT_POLICY_ENCAP34	4 /* encapsulated layer 3+4 */
 
+/* 802.3ad port state definitions (43.4.2.2 in the 802.3ad standard) */
+#define AD_STATE_LACP_ACTIVITY   0x1
+#define AD_STATE_LACP_TIMEOUT    0x2
+#define AD_STATE_AGGREGATION     0x4
+#define AD_STATE_SYNCHRONIZATION 0x8
+#define AD_STATE_COLLECTING      0x10
+#define AD_STATE_DISTRIBUTING    0x20
+#define AD_STATE_DEFAULTED       0x40
+#define AD_STATE_EXPIRED         0x80
+
 typedef struct ifbond {
 	__s32 bond_mode;
 	__s32 num_slaves;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH iproute2-next v2 2/2] iplink: bond: print 3ad actor/partner oper states as strings
  2019-12-11 22:33 [PATCH iproute2-next v2 0/2] pretty-print 802.3ad slave state Andy Roulin
  2019-12-11 22:33 ` [PATCH iproute2-next v2 1/2] include/uapi: update bonding kernel header Andy Roulin
@ 2019-12-11 22:33 ` Andy Roulin
  2019-12-17 16:36   ` David Ahern
  1 sibling, 1 reply; 4+ messages in thread
From: Andy Roulin @ 2019-12-11 22:33 UTC (permalink / raw)
  To: netdev; +Cc: dsahern, nikolay, roopa, j.vosburgh, vfalico, andy, stephen

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@cumulusnetworks.com>
Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com>
---
 ip/iplink_bond_slave.c | 36 ++++++++++++++++++++++++++++++++----
 1 file changed, 32 insertions(+), 4 deletions(-)

diff --git a/ip/iplink_bond_slave.c b/ip/iplink_bond_slave.c
index 4eaf72b8..6ecf4ba2 100644
--- a/ip/iplink_bond_slave.c
+++ b/ip/iplink_bond_slave.c
@@ -68,6 +68,26 @@ 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)
+{
+	open_json_array(PRINT_ANY, name);
+	print_string(PRINT_FP, NULL, " <", NULL);
+#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 +126,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,
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH iproute2-next v2 2/2] iplink: bond: print 3ad actor/partner oper states as strings
  2019-12-11 22:33 ` [PATCH iproute2-next v2 2/2] iplink: bond: print 3ad actor/partner oper states as strings Andy Roulin
@ 2019-12-17 16:36   ` David Ahern
  0 siblings, 0 replies; 4+ messages in thread
From: David Ahern @ 2019-12-17 16:36 UTC (permalink / raw)
  To: Andy Roulin, netdev
  Cc: dsahern, nikolay, roopa, j.vosburgh, vfalico, andy, stephen

On 12/11/19 3:33 PM, 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@cumulusnetworks.com>
> Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com>
> ---
>  ip/iplink_bond_slave.c | 36 ++++++++++++++++++++++++++++++++----
>  1 file changed, 32 insertions(+), 4 deletions(-)
> 

Andy: Update the uapi file per the comments on that thread and resubmit
this patch with the updated names.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-12-17 16:36 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-11 22:33 [PATCH iproute2-next v2 0/2] pretty-print 802.3ad slave state Andy Roulin
2019-12-11 22:33 ` [PATCH iproute2-next v2 1/2] include/uapi: update bonding kernel header Andy Roulin
2019-12-11 22:33 ` [PATCH iproute2-next v2 2/2] iplink: bond: print 3ad actor/partner oper states as strings Andy Roulin
2019-12-17 16:36   ` David Ahern

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).