iplink: bridge_slave: export read-only values
Export all the read-only values that get returned about a bridge port such as the timers, the ids, designated_port and cost, topology_change_ack and config_pending. For the bridge ids the br_dump_bridge_id function is exported from iplink_bridge. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
This commit is contained in:
parent
a1b4a274d4
commit
3069539fb8
|
|
@ -87,6 +87,8 @@ struct link_util
|
||||||
struct link_util *get_link_kind(const char *kind);
|
struct link_util *get_link_kind(const char *kind);
|
||||||
struct link_util *get_link_slave_kind(const char *slave_kind);
|
struct link_util *get_link_slave_kind(const char *slave_kind);
|
||||||
|
|
||||||
|
void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf, size_t len);
|
||||||
|
|
||||||
#ifndef INFINITY_LIFE_TIME
|
#ifndef INFINITY_LIFE_TIME
|
||||||
#define INFINITY_LIFE_TIME 0xFFFFFFFFU
|
#define INFINITY_LIFE_TIME 0xFFFFFFFFU
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -60,8 +60,7 @@ static void explain(void)
|
||||||
print_explain(stderr);
|
print_explain(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf,
|
void br_dump_bridge_id(const struct ifla_bridge_id *id, char *buf, size_t len)
|
||||||
size_t len)
|
|
||||||
{
|
{
|
||||||
char eaddr[32];
|
char eaddr[32];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,6 +98,76 @@ static void bridge_slave_print_opt(struct link_util *lu, FILE *f,
|
||||||
if (tb[IFLA_BRPORT_UNICAST_FLOOD])
|
if (tb[IFLA_BRPORT_UNICAST_FLOOD])
|
||||||
print_onoff(f, "flood",
|
print_onoff(f, "flood",
|
||||||
rta_getattr_u8(tb[IFLA_BRPORT_UNICAST_FLOOD]));
|
rta_getattr_u8(tb[IFLA_BRPORT_UNICAST_FLOOD]));
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_ID])
|
||||||
|
fprintf(f, "port_id 0x%x ",
|
||||||
|
rta_getattr_u16(tb[IFLA_BRPORT_ID]));
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_NO])
|
||||||
|
fprintf(f, "port_no 0x%x ",
|
||||||
|
rta_getattr_u16(tb[IFLA_BRPORT_NO]));
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_DESIGNATED_PORT])
|
||||||
|
fprintf(f, "designated_port %u ",
|
||||||
|
rta_getattr_u16(tb[IFLA_BRPORT_DESIGNATED_PORT]));
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_DESIGNATED_COST])
|
||||||
|
fprintf(f, "designated_cost %u ",
|
||||||
|
rta_getattr_u16(tb[IFLA_BRPORT_DESIGNATED_COST]));
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_BRIDGE_ID]) {
|
||||||
|
char bridge_id[32];
|
||||||
|
|
||||||
|
br_dump_bridge_id(RTA_DATA(tb[IFLA_BRPORT_BRIDGE_ID]),
|
||||||
|
bridge_id, sizeof(bridge_id));
|
||||||
|
fprintf(f, "designated_bridge %s ", bridge_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_ROOT_ID]) {
|
||||||
|
char root_id[32];
|
||||||
|
|
||||||
|
br_dump_bridge_id(RTA_DATA(tb[IFLA_BRPORT_ROOT_ID]),
|
||||||
|
root_id, sizeof(root_id));
|
||||||
|
fprintf(f, "designated_root %s ", root_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_HOLD_TIMER]) {
|
||||||
|
struct timeval tv;
|
||||||
|
__u64 htimer;
|
||||||
|
|
||||||
|
htimer = rta_getattr_u64(tb[IFLA_BRPORT_HOLD_TIMER]);
|
||||||
|
__jiffies_to_tv(&tv, htimer);
|
||||||
|
fprintf(f, "hold_timer %4i.%.2i ", (int)tv.tv_sec,
|
||||||
|
(int)tv.tv_usec/10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_MESSAGE_AGE_TIMER]) {
|
||||||
|
struct timeval tv;
|
||||||
|
__u64 agetimer;
|
||||||
|
|
||||||
|
agetimer = rta_getattr_u64(tb[IFLA_BRPORT_MESSAGE_AGE_TIMER]);
|
||||||
|
__jiffies_to_tv(&tv, agetimer);
|
||||||
|
fprintf(f, "message_age_timer %4i.%.2i ", (int)tv.tv_sec,
|
||||||
|
(int)tv.tv_usec/10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_FORWARD_DELAY_TIMER]) {
|
||||||
|
struct timeval tv;
|
||||||
|
__u64 fwdtimer;
|
||||||
|
|
||||||
|
fwdtimer = rta_getattr_u64(tb[IFLA_BRPORT_FORWARD_DELAY_TIMER]);
|
||||||
|
__jiffies_to_tv(&tv, fwdtimer);
|
||||||
|
fprintf(f, "forward_delay_timer %4i.%.2i ", (int)tv.tv_sec,
|
||||||
|
(int)tv.tv_usec/10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_TOPOLOGY_CHANGE_ACK])
|
||||||
|
fprintf(f, "topology_change_ack %u ",
|
||||||
|
rta_getattr_u8(tb[IFLA_BRPORT_TOPOLOGY_CHANGE_ACK]));
|
||||||
|
|
||||||
|
if (tb[IFLA_BRPORT_CONFIG_PENDING])
|
||||||
|
fprintf(f, "config_pending %u ",
|
||||||
|
rta_getattr_u8(tb[IFLA_BRPORT_CONFIG_PENDING]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bridge_slave_parse_on_off(char *arg_name, char *arg_val,
|
static void bridge_slave_parse_on_off(char *arg_name, char *arg_val,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue