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