From: Fabian Pfitzner Date: Wed, 25 Jun 2025 08:39:13 +0000 (+0200) Subject: bridge: move mcast querier dumping code into a shared function X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da6fbcf63c1347f88ae91ca9f42aa2a6d4fe851a;p=thirdparty%2Fiproute2.git bridge: move mcast querier dumping code into a shared function Put mcast querier dumping code into a shared function. This function will be called from the bridge utility in a later patch. Adapt the code such that the vtb parameter is used instead of tb[IFLA_BR_MCAST_QUERIER_STATE]. Reviewed-by: Ido Schimmel Acked-by: Nikolay Aleksandrov Signed-off-by: Fabian Pfitzner Signed-off-by: David Ahern --- diff --git a/include/bridge.h b/include/bridge.h index 8bcd1e38..8b0942b5 100644 --- a/include/bridge.h +++ b/include/bridge.h @@ -3,9 +3,12 @@ #define __BRIDGE_H__ 1 #include +#include void bridge_print_vlan_flags(__u16 flags); void bridge_print_vlan_stats_only(const struct bridge_vlan_xstats *vstats); void bridge_print_vlan_stats(const struct bridge_vlan_xstats *vstats); +void bridge_print_mcast_querier_state(const struct rtattr *vtb); + #endif /* __BRIDGE_H__ */ diff --git a/ip/iplink_bridge.c b/ip/iplink_bridge.c index 31e7cb5e..76e69086 100644 --- a/ip/iplink_bridge.c +++ b/ip/iplink_bridge.c @@ -682,62 +682,9 @@ static void bridge_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) rta_getattr_u8(tb[IFLA_BR_MCAST_QUERIER])); if (tb[IFLA_BR_MCAST_QUERIER_STATE]) { - struct rtattr *bqtb[BRIDGE_QUERIER_MAX + 1]; - SPRINT_BUF(other_time); - - parse_rtattr_nested(bqtb, BRIDGE_QUERIER_MAX, tb[IFLA_BR_MCAST_QUERIER_STATE]); - memset(other_time, 0, sizeof(other_time)); - - open_json_object("mcast_querier_state_ipv4"); - if (bqtb[BRIDGE_QUERIER_IP_ADDRESS]) { - print_string(PRINT_FP, - NULL, - "%s ", - "mcast_querier_ipv4_addr"); - print_color_string(PRINT_ANY, - COLOR_INET, - "mcast_querier_ipv4_addr", - "%s ", - format_host_rta(AF_INET, bqtb[BRIDGE_QUERIER_IP_ADDRESS])); - } - if (bqtb[BRIDGE_QUERIER_IP_PORT]) - print_uint(PRINT_ANY, - "mcast_querier_ipv4_port", - "mcast_querier_ipv4_port %u ", - rta_getattr_u32(bqtb[BRIDGE_QUERIER_IP_PORT])); - if (bqtb[BRIDGE_QUERIER_IP_OTHER_TIMER]) - print_string(PRINT_ANY, - "mcast_querier_ipv4_other_timer", - "mcast_querier_ipv4_other_timer %s ", - sprint_time64( - rta_getattr_u64(bqtb[BRIDGE_QUERIER_IP_OTHER_TIMER]), - other_time)); - close_json_object(); - open_json_object("mcast_querier_state_ipv6"); - if (bqtb[BRIDGE_QUERIER_IPV6_ADDRESS]) { - print_string(PRINT_FP, - NULL, - "%s ", - "mcast_querier_ipv6_addr"); - print_color_string(PRINT_ANY, - COLOR_INET6, - "mcast_querier_ipv6_addr", - "%s ", - format_host_rta(AF_INET6, bqtb[BRIDGE_QUERIER_IPV6_ADDRESS])); - } - if (bqtb[BRIDGE_QUERIER_IPV6_PORT]) - print_uint(PRINT_ANY, - "mcast_querier_ipv6_port", - "mcast_querier_ipv6_port %u ", - rta_getattr_u32(bqtb[BRIDGE_QUERIER_IPV6_PORT])); - if (bqtb[BRIDGE_QUERIER_IPV6_OTHER_TIMER]) - print_string(PRINT_ANY, - "mcast_querier_ipv6_other_timer", - "mcast_querier_ipv6_other_timer %s ", - sprint_time64( - rta_getattr_u64(bqtb[BRIDGE_QUERIER_IPV6_OTHER_TIMER]), - other_time)); - close_json_object(); + struct rtattr *vtb = tb[IFLA_BR_MCAST_QUERIER_STATE]; + + bridge_print_mcast_querier_state(vtb); } if (tb[IFLA_BR_MCAST_HASH_ELASTICITY]) diff --git a/lib/bridge.c b/lib/bridge.c index a888a20e..480693c9 100644 --- a/lib/bridge.c +++ b/lib/bridge.c @@ -45,3 +45,64 @@ void bridge_print_vlan_stats(const struct bridge_vlan_xstats *vstats) close_json_object(); } + +void bridge_print_mcast_querier_state(const struct rtattr *vtb) +{ + struct rtattr *bqtb[BRIDGE_QUERIER_MAX + 1]; + + SPRINT_BUF(other_time); + + parse_rtattr_nested(bqtb, BRIDGE_QUERIER_MAX, vtb); + memset(other_time, 0, sizeof(other_time)); + + open_json_object("mcast_querier_state_ipv4"); + if (bqtb[BRIDGE_QUERIER_IP_ADDRESS]) { + print_string(PRINT_FP, + NULL, + "%s ", + "mcast_querier_ipv4_addr"); + print_color_string(PRINT_ANY, + COLOR_INET, + "mcast_querier_ipv4_addr", + "%s ", + format_host_rta(AF_INET, bqtb[BRIDGE_QUERIER_IP_ADDRESS])); + } + if (bqtb[BRIDGE_QUERIER_IP_PORT]) + print_uint(PRINT_ANY, + "mcast_querier_ipv4_port", + "mcast_querier_ipv4_port %u ", + rta_getattr_u32(bqtb[BRIDGE_QUERIER_IP_PORT])); + if (bqtb[BRIDGE_QUERIER_IP_OTHER_TIMER]) + print_string(PRINT_ANY, + "mcast_querier_ipv4_other_timer", + "mcast_querier_ipv4_other_timer %s ", + sprint_time64( + rta_getattr_u64(bqtb[BRIDGE_QUERIER_IP_OTHER_TIMER]), + other_time)); + close_json_object(); + open_json_object("mcast_querier_state_ipv6"); + if (bqtb[BRIDGE_QUERIER_IPV6_ADDRESS]) { + print_string(PRINT_FP, + NULL, + "%s ", + "mcast_querier_ipv6_addr"); + print_color_string(PRINT_ANY, + COLOR_INET6, + "mcast_querier_ipv6_addr", + "%s ", + format_host_rta(AF_INET6, bqtb[BRIDGE_QUERIER_IPV6_ADDRESS])); + } + if (bqtb[BRIDGE_QUERIER_IPV6_PORT]) + print_uint(PRINT_ANY, + "mcast_querier_ipv6_port", + "mcast_querier_ipv6_port %u ", + rta_getattr_u32(bqtb[BRIDGE_QUERIER_IPV6_PORT])); + if (bqtb[BRIDGE_QUERIER_IPV6_OTHER_TIMER]) + print_string(PRINT_ANY, + "mcast_querier_ipv6_other_timer", + "mcast_querier_ipv6_other_timer %s ", + sprint_time64( + rta_getattr_u64(bqtb[BRIDGE_QUERIER_IPV6_OTHER_TIMER]), + other_time)); + close_json_object(); +}