Add IFLA_SLAVE support.
Subsystems (2)
PATCH 1/1 Add IFLA_SLAVE support.
Show slave details for link when slave has IFLA_SLAVE attributes, e.g.:
ip -d link show eth4
6: eth4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond1 state UP mode DEFAULT group default qlen 1000
link/ether 00:02:00:00:04:03 brd ff:ff:ff:ff:ff:ff promiscuity 1
slave state ACTIVE mii_status UP link_failure_count 0 perm_hwaddr 00:02:00:00:04:03 queue_id 0 ad_aggregator_id 1
--- include/linux/if_link.h | 13 +++++++++ ip/ipaddress.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+)
include/linux/if_link.h +13 -0
@@ -144,6 +144,7 @@ enum {IFLA_NUM_RX_QUEUES ,IFLA_CARRIER ,IFLA_PHYS_PORT_ID , +IFLA_SLAVE , __IFLA_MAX };
@@ -366,6 +367,18 @@ enum {#define IFLA_BOND_AD_INFO_MAX (__IFLA_BOND_AD_INFO_MAX - 1) +enum { +IFLA_SLAVE_STATE , +IFLA_SLAVE_MII_STATUS , +IFLA_SLAVE_LINK_FAILURE_COUNT , +IFLA_SLAVE_PERM_HWADDR , +IFLA_SLAVE_QUEUE_ID , +IFLA_SLAVE_AD_AGGREGATOR_ID , + __IFLA_SLAVE_MAX, +}; + +#define IFLA_SLAVE_MAX (__IFLA_SLAVE_MAX - 1) +/* SR-IOV virtual function management section */ enum {
ip/ipaddress.c +71 -0
89 lines not on this page · raw message
Quoted 26 lines · Mon, Jan 20, 2014 at 11:25:05PM CET, [email protected] wrote:
Show slave details for link when slave has
IFLA_SLAVEattributes, e.g.:ip -d link show eth4
6: eth4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdiscpfifo_fastmaster bond1 state UP mode DEFAULT group default qlen 1000
link/ether 00:02:00:00:04:03 brd ff:ff:ff:ff:ff:ff promiscuity 1
slave state ACTIVEmii_statusUPlink_failure_count0perm_hwaddr00:02:00:00:04:03queue_id0ad_aggregator_id1
---include/linux/if_link.h | 13 +++++++++ ip/ipaddress.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+)include/linux/if_link.h +1
-0@@ -144,6 +144,7 @@ enum {IFLA_NUM_RX_QUEUES ,IFLA_CARRIER ,IFLA_PHYS_PORT_ID , +IFLA_SLAVE , __IFLA_MAX };@@ -366,6 +367,18 @@ enum {#define IFLA_BOND_AD_INFO_MAX (__IFLA_BOND_AD_INFO_MAX - 1)
include/linux/if_link.h enum { · line 378
Quoted 10 lines
include/linux/if_link.h +9
-0+enum { +IFLA_SLAVE_STATE , +IFLA_SLAVE_MII_STATUS , +IFLA_SLAVE_LINK_FAILURE_COUNT , +IFLA_SLAVE_PERM_HWADDR , +IFLA_SLAVE_QUEUE_ID , +IFLA_SLAVE_AD_AGGREGATOR_ID , + __IFLA_SLAVE_MAX, +};
I don't like this. Its not clear that this is related to bond only... misleading
Quoted 107 lines
include/linux/if_link.h +3
-0+ +#define IFLA_SLAVE_MAX (__IFLA_SLAVE_MAX - 1) +/* SR-IOV virtual function management section */ enum {ip/ipaddress.c +71
-1@@ -27,6 +27,7 @@#include <linux/netdevice.h> #include <linux/if_arp.h> +#include <linux/if_bonding.h> #include <linux/sockios.h> #include "rt_names.h" @@ -223,6 +224,73 @@ static void print_linktype(FILE *fp, struct rtattr *tb) } } +static const char *slave_states[] = { + [BOND_STATE_ACTIVE ] ="ACTIVE" , + [BOND_STATE_BACKUP ] ="BACKUP" , +}; + +static void print_slave_state (FILE *f,struct rtattr *tb) +{ +unsigned int state =rta_getattr_u8 (tb); + +if (state >=sizeof (slave_states) /sizeof (slave_states[0 ])) +fprintf (f,"state %d " , state); +else +fprintf (f,"state %s " , slave_states[state]); +} + +static const char *slave_mii_status[] = { + [BOND_LINK_UP ] ="UP" , + [BOND_LINK_FAIL ] ="GOING_DOWN" , + [BOND_LINK_DOWN ] ="DOWN" , + [BOND_LINK_BACK ] ="GOING_BACK" , +}; + +static void print_slave_mii_status (FILE *f,struct rtattr *tb) +{ +unsigned int status =rta_getattr_u8 (tb); + +if (status >=sizeof (slave_mii_status) /sizeof (slave_mii_status[0 ])) +fprintf (f,"mii_status %d " , status); +else +fprintf (f,"mii_status %s " , slave_mii_status[status]); +} + +static void print_slave (FILE *fp,struct rtattr *tb) +{ +struct rtattr *slave[IFLA_SLAVE_MAX +1 ]; +SPRINT_BUF (b1); + +parse_rtattr_nested (slave,IFLA_SLAVE_MAX , tb); + +if (!slave[IFLA_SLAVE_STATE ]) +return ; + +fprintf (fp,"%s slave " , _SL_); +print_slave_state (fp, slave[IFLA_SLAVE_STATE ]); + +if (slave[IFLA_SLAVE_MII_STATUS ]) +print_slave_mii_status (fp, slave[IFLA_SLAVE_MII_STATUS ]); + +if (slave[IFLA_SLAVE_LINK_FAILURE_COUNT ]) +fprintf (fp,"link_failure_count %d " , +rta_getattr_u32 (slave[IFLA_SLAVE_LINK_FAILURE_COUNT ])); + +if (slave[IFLA_SLAVE_PERM_HWADDR ]) +fprintf (fp,"perm_hwaddr %s " , +ll_addr_n2a (RTA_DATA (slave[IFLA_SLAVE_PERM_HWADDR ]), +RTA_PAYLOAD (slave[IFLA_SLAVE_PERM_HWADDR ]), +0 , b1,sizeof (b1))); + +if (slave[IFLA_SLAVE_QUEUE_ID ]) +fprintf (fp,"queue_id %d " , +rta_getattr_u16 (slave[IFLA_SLAVE_QUEUE_ID ])); + +if (slave[IFLA_SLAVE_AD_AGGREGATOR_ID ]) +fprintf (fp,"ad_aggregator_id %d " , +rta_getattr_u16 (slave[IFLA_SLAVE_AD_AGGREGATOR_ID ])); +} +static void print_vfinfo (FILE *fp,struct rtattr *vfinfo) {struct ifla_vf_mac *vf_mac;@@ -516,6 +584,9 @@ int print_linkinfo(const struct sockaddr_nl *who,print_vfinfo (fp, i); } +if (do_link && tb[IFLA_SLAVE ] && show_details) +print_slave (fp, tb[IFLA_SLAVE ]); +fprintf (fp,"\n" );fflush (fp);return 0 ; --To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Stephen, please note that this patch was replaced by following patchset:
[patch iproute2 net-next-for-3.13 0/2] iplink: add support for bonding slave
[patch iproute2 net-next-for-3.13 1/2] introduce support for slave info data [patch iproute2 net-next-for-3.13 2/2] iplink: add support for bonding slave
Thanks.
Quoted 143 lines · Mon, Jan 20, 2014 at 11:25:05PM CET, [email protected] wrote:
Show slave details for link when slave has
IFLA_SLAVEattributes, e.g.:ip -d link show eth4
6: eth4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdiscpfifo_fastmaster bond1 state UP mode DEFAULT group default qlen 1000
link/ether 00:02:00:00:04:03 brd ff:ff:ff:ff:ff:ff promiscuity 1
slave state ACTIVEmii_statusUPlink_failure_count0perm_hwaddr00:02:00:00:04:03queue_id0ad_aggregator_id1
---include/linux/if_link.h | 13 +++++++++ ip/ipaddress.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+)include/linux/if_link.h +13
-0@@ -144,6 +144,7 @@ enum {IFLA_NUM_RX_QUEUES ,IFLA_CARRIER ,IFLA_PHYS_PORT_ID , +IFLA_SLAVE , __IFLA_MAX };@@ -366,6 +367,18 @@ enum {#define IFLA_BOND_AD_INFO_MAX (__IFLA_BOND_AD_INFO_MAX - 1) +enum { +IFLA_SLAVE_STATE , +IFLA_SLAVE_MII_STATUS , +IFLA_SLAVE_LINK_FAILURE_COUNT , +IFLA_SLAVE_PERM_HWADDR , +IFLA_SLAVE_QUEUE_ID , +IFLA_SLAVE_AD_AGGREGATOR_ID , + __IFLA_SLAVE_MAX, +}; + +#define IFLA_SLAVE_MAX (__IFLA_SLAVE_MAX - 1) +/* SR-IOV virtual function management section */ enum {ip/ipaddress.c +71
-1@@ -27,6 +27,7 @@#include <linux/netdevice.h> #include <linux/if_arp.h> +#include <linux/if_bonding.h> #include <linux/sockios.h> #include "rt_names.h" @@ -223,6 +224,73 @@ static void print_linktype(FILE *fp, struct rtattr *tb) } } +static const char *slave_states[] = { + [BOND_STATE_ACTIVE ] ="ACTIVE" , + [BOND_STATE_BACKUP ] ="BACKUP" , +}; + +static void print_slave_state (FILE *f,struct rtattr *tb) +{ +unsigned int state =rta_getattr_u8 (tb); + +if (state >=sizeof (slave_states) /sizeof (slave_states[0 ])) +fprintf (f,"state %d " , state); +else +fprintf (f,"state %s " , slave_states[state]); +} + +static const char *slave_mii_status[] = { + [BOND_LINK_UP ] ="UP" , + [BOND_LINK_FAIL ] ="GOING_DOWN" , + [BOND_LINK_DOWN ] ="DOWN" , + [BOND_LINK_BACK ] ="GOING_BACK" , +}; + +static void print_slave_mii_status (FILE *f,struct rtattr *tb) +{ +unsigned int status =rta_getattr_u8 (tb); + +if (status >=sizeof (slave_mii_status) /sizeof (slave_mii_status[0 ])) +fprintf (f,"mii_status %d " , status); +else +fprintf (f,"mii_status %s " , slave_mii_status[status]); +} + +static void print_slave (FILE *fp,struct rtattr *tb) +{ +struct rtattr *slave[IFLA_SLAVE_MAX +1 ]; +SPRINT_BUF (b1); + +parse_rtattr_nested (slave,IFLA_SLAVE_MAX , tb); + +if (!slave[IFLA_SLAVE_STATE ]) +return ; + +fprintf (fp,"%s slave " , _SL_); +print_slave_state (fp, slave[IFLA_SLAVE_STATE ]); + +if (slave[IFLA_SLAVE_MII_STATUS ]) +print_slave_mii_status (fp, slave[IFLA_SLAVE_MII_STATUS ]); + +if (slave[IFLA_SLAVE_LINK_FAILURE_COUNT ]) +fprintf (fp,"link_failure_count %d " , +rta_getattr_u32 (slave[IFLA_SLAVE_LINK_FAILURE_COUNT ])); + +if (slave[IFLA_SLAVE_PERM_HWADDR ]) +fprintf (fp,"perm_hwaddr %s " , +ll_addr_n2a (RTA_DATA (slave[IFLA_SLAVE_PERM_HWADDR ]), +RTA_PAYLOAD (slave[IFLA_SLAVE_PERM_HWADDR ]), +0 , b1,sizeof (b1))); + +if (slave[IFLA_SLAVE_QUEUE_ID ]) +fprintf (fp,"queue_id %d " , +rta_getattr_u16 (slave[IFLA_SLAVE_QUEUE_ID ])); + +if (slave[IFLA_SLAVE_AD_AGGREGATOR_ID ]) +fprintf (fp,"ad_aggregator_id %d " , +rta_getattr_u16 (slave[IFLA_SLAVE_AD_AGGREGATOR_ID ])); +} +static void print_vfinfo (FILE *fp,struct rtattr *vfinfo) {struct ifla_vf_mac *vf_mac;@@ -516,6 +584,9 @@ int print_linkinfo(const struct sockaddr_nl *who,print_vfinfo (fp, i); } +if (do_link && tb[IFLA_SLAVE ] && show_details) +print_slave (fp, tb[IFLA_SLAVE ]); +fprintf (fp,"\n" );fflush (fp);return 0 ; --To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html