[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1572132594-2006-4-git-send-email-aroulin@cumulusnetworks.com>
Date: Sat, 26 Oct 2019 16:29:54 -0700
From: Andy Roulin <aroulin@...ulusnetworks.com>
To: netdev@...r.kernel.org
Cc: dsahern@...il.com, nikolay@...ulusnetworks.com,
roopa@...ulusnetworks.com, j.vosburgh@...il.com, vfalico@...il.com,
andy@...yhouse.net
Subject: [PATCH iproute2-next 3/3] iplink: bond: print 3ad actor/partner oper states as strings
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)
+{
+
+ 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,
--
2.20.1
Powered by blists - more mailing lists