* [PATCH iproute2-next v3 0/2] pretty-print LACP slave state @ 2019-12-31 12:15 Andy Roulin 2019-12-31 12:15 ` [PATCH iproute2-next v3 1/2] include/uapi: update bonding kernel header Andy Roulin 2019-12-31 12:15 ` [PATCH iproute2-next v3 2/2] iplink: bond: print lacp actor/partner oper states as strings Andy Roulin 0 siblings, 2 replies; 4+ messages in thread From: Andy Roulin @ 2019-12-31 12:15 UTC (permalink / raw) To: netdev; +Cc: dsahern, nikolay, roopa, j.vosburgh, vfalico, andy, aroulin Print the bond slave 802.3ad/LACP state in a human-readable way. The LACP bond slave actor/partner state definitions are exported to userspace in the kernel include/uapi. 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/ in net-next; the following patches are the changes and are already in net-next: [PATCH net-next v2] bonding: move 802.3ad port state flags to uapi [PATCH net-next v2] bonding: rename AD_STATE_* to LACP_STATE_* v2: - address patch format and comments v3: - prefix state defines with LACP_* 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 | 16 +++++++-------- ip/iplink_bond_slave.c | 36 +++++++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 12 deletions(-) -- 2.20.1 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH iproute2-next v3 1/2] include/uapi: update bonding kernel header 2019-12-31 12:15 [PATCH iproute2-next v3 0/2] pretty-print LACP slave state Andy Roulin @ 2019-12-31 12:15 ` Andy Roulin 2019-12-31 12:15 ` [PATCH iproute2-next v3 2/2] iplink: bond: print lacp actor/partner oper states as strings Andy Roulin 1 sibling, 0 replies; 4+ messages in thread From: Andy Roulin @ 2019-12-31 12:15 UTC (permalink / raw) To: netdev; +Cc: dsahern, nikolay, roopa, j.vosburgh, vfalico, andy, aroulin The kernel now exports the LACP bond slave state definitions in the uapi. This commit updates the iproute2 bonding uapi to include these changes. Signed-off-by: Andy Roulin <aroulin@cumulusnetworks.com> --- include/uapi/linux/if_bonding.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/include/uapi/linux/if_bonding.h b/include/uapi/linux/if_bonding.h index 6829213a..45f3750a 100644 --- a/include/uapi/linux/if_bonding.h +++ b/include/uapi/linux/if_bonding.h @@ -96,14 +96,14 @@ #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 +#define LACP_STATE_LACP_ACTIVITY 0x1 +#define LACP_STATE_LACP_TIMEOUT 0x2 +#define LACP_STATE_AGGREGATION 0x4 +#define LACP_STATE_SYNCHRONIZATION 0x8 +#define LACP_STATE_COLLECTING 0x10 +#define LACP_STATE_DISTRIBUTING 0x20 +#define LACP_STATE_DEFAULTED 0x40 +#define LACP_STATE_EXPIRED 0x80 typedef struct ifbond { __s32 bond_mode; -- 2.20.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH iproute2-next v3 2/2] iplink: bond: print lacp actor/partner oper states as strings 2019-12-31 12:15 [PATCH iproute2-next v3 0/2] pretty-print LACP slave state Andy Roulin 2019-12-31 12:15 ` [PATCH iproute2-next v3 1/2] include/uapi: update bonding kernel header Andy Roulin @ 2019-12-31 12:15 ` Andy Roulin 2020-01-02 17:56 ` David Ahern 1 sibling, 1 reply; 4+ messages in thread From: Andy Roulin @ 2019-12-31 12:15 UTC (permalink / raw) To: netdev; +Cc: dsahern, nikolay, roopa, j.vosburgh, vfalico, andy, aroulin The 802.3ad/LACP 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> --- 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..34e9d1d6 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 & LACP_STATE_##s) { \ + state &= ~LACP_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 v3 2/2] iplink: bond: print lacp actor/partner oper states as strings 2019-12-31 12:15 ` [PATCH iproute2-next v3 2/2] iplink: bond: print lacp actor/partner oper states as strings Andy Roulin @ 2020-01-02 17:56 ` David Ahern 0 siblings, 0 replies; 4+ messages in thread From: David Ahern @ 2020-01-02 17:56 UTC (permalink / raw) To: Andy Roulin, netdev; +Cc: nikolay, roopa, j.vosburgh, vfalico, andy On 12/31/19 5:15 AM, Andy Roulin wrote: > The 802.3ad/LACP 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> > --- > ip/iplink_bond_slave.c | 36 ++++++++++++++++++++++++++++++++---- > 1 file changed, 32 insertions(+), 4 deletions(-) > Fixed up a space before tabs in the macro and applied to iproute2-next. Please run checkpatch on patches. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-01-02 17:57 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-12-31 12:15 [PATCH iproute2-next v3 0/2] pretty-print LACP slave state Andy Roulin 2019-12-31 12:15 ` [PATCH iproute2-next v3 1/2] include/uapi: update bonding kernel header Andy Roulin 2019-12-31 12:15 ` [PATCH iproute2-next v3 2/2] iplink: bond: print lacp actor/partner oper states as strings Andy Roulin 2020-01-02 17:56 ` 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).