* [PATCH v2] bridge: dump mcast querier state per vlan
@ 2025-06-11 12:11 Fabian Pfitzner
2025-06-11 12:20 ` Ido Schimmel
0 siblings, 1 reply; 3+ messages in thread
From: Fabian Pfitzner @ 2025-06-11 12:11 UTC (permalink / raw)
To: netdev; +Cc: dsahern, idosch, bridge, entwicklung, razor, Fabian Pfitzner
Dump the multicast querier state per vlan.
This commit is almost identical to [1].
The querier state can be seen with:
bridge -d vlan global
The options for vlan filtering and vlan mcast snooping have to be enabled
in order to see the output:
ip link set [dev] type bridge mcast_vlan_snooping 1 vlan_filtering 1
The querier state shows the following information for IPv4 and IPv6
respectively:
1) The ip address of the current querier in the network. This could be
ourselves or an external querier.
2) The port on which the querier was seen
3) Querier timeout in seconds
[1] https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=16aa4494d7fc6543e5e92beb2ce01648b79f8fa2
Signed-off-by: Fabian Pfitzner <f.pfitzner@pengutronix.de>
---
v1->v2
- refactor code
- link to v1: https://lore.kernel.org/netdev/20250604105322.1185872-1-f.pfitzner@pengutronix.de/
bridge/vlan.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/bridge/vlan.c b/bridge/vlan.c
index ea4aff93..2afdc7c7 100644
--- a/bridge/vlan.c
+++ b/bridge/vlan.c
@@ -892,6 +892,61 @@ static void print_vlan_global_opts(struct rtattr *a, int ifindex)
print_uint(PRINT_ANY, "mcast_querier", "mcast_querier %u ",
rta_getattr_u8(vattr));
}
+ if (vtb[BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE]) {
+ struct rtattr *bqtb[BRIDGE_QUERIER_MAX + 1];
+ const char *querier_ip;
+ SPRINT_BUF(other_time);
+ __u64 tval;
+
+ parse_rtattr_nested(bqtb, BRIDGE_QUERIER_MAX,
+ vtb[BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE]);
+ memset(other_time, 0, sizeof(other_time));
+
+ open_json_object("mcast_querier_state_ipv4");
+ if (bqtb[BRIDGE_QUERIER_IP_ADDRESS]) {
+ querier_ip = format_host_rta(AF_INET,
+ 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 ",
+ querier_ip);
+ }
+ 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]) {
+ tval = rta_getattr_u64(bqtb[BRIDGE_QUERIER_IP_OTHER_TIMER]);
+ print_string(PRINT_ANY,
+ "mcast_querier_ipv4_other_timer",
+ "mcast_querier_ipv4_other_timer %s ",
+ sprint_time64(tval, other_time));
+ }
+ close_json_object();
+ open_json_object("mcast_querier_state_ipv6");
+ if (bqtb[BRIDGE_QUERIER_IPV6_ADDRESS]) {
+ querier_ip = format_host_rta(AF_INET6,
+ 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 ",
+ querier_ip);
+ }
+ 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]) {
+ tval = rta_getattr_u64(bqtb[BRIDGE_QUERIER_IPV6_OTHER_TIMER]);
+ print_string(PRINT_ANY,
+ "mcast_querier_ipv6_other_timer",
+ "mcast_querier_ipv6_other_timer %s ",
+ sprint_time64(tval, other_time));
+ }
+ close_json_object();
+ }
if (vtb[BRIDGE_VLANDB_GOPTS_MCAST_IGMP_VERSION]) {
vattr = vtb[BRIDGE_VLANDB_GOPTS_MCAST_IGMP_VERSION];
print_uint(PRINT_ANY, "mcast_igmp_version",
--
2.39.5
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH v2] bridge: dump mcast querier state per vlan
2025-06-11 12:11 [PATCH v2] bridge: dump mcast querier state per vlan Fabian Pfitzner
@ 2025-06-11 12:20 ` Ido Schimmel
2025-06-11 12:26 ` Fabian Pfitzner
0 siblings, 1 reply; 3+ messages in thread
From: Ido Schimmel @ 2025-06-11 12:20 UTC (permalink / raw)
To: Fabian Pfitzner; +Cc: netdev, dsahern, bridge, entwicklung, razor
On Wed, Jun 11, 2025 at 02:11:52PM +0200, Fabian Pfitzner wrote:
> Dump the multicast querier state per vlan.
> This commit is almost identical to [1].
>
> The querier state can be seen with:
>
> bridge -d vlan global
>
> The options for vlan filtering and vlan mcast snooping have to be enabled
> in order to see the output:
>
> ip link set [dev] type bridge mcast_vlan_snooping 1 vlan_filtering 1
>
> The querier state shows the following information for IPv4 and IPv6
> respectively:
>
> 1) The ip address of the current querier in the network. This could be
> ourselves or an external querier.
> 2) The port on which the querier was seen
> 3) Querier timeout in seconds
>
> [1] https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=16aa4494d7fc6543e5e92beb2ce01648b79f8fa2
>
> Signed-off-by: Fabian Pfitzner <f.pfitzner@pengutronix.de>
> ---
>
> v1->v2
> - refactor code
> - link to v1: https://lore.kernel.org/netdev/20250604105322.1185872-1-f.pfitzner@pengutronix.de/
Regarding your note on v1, there is a patch under review to add a bridge
lib file:
https://lore.kernel.org/netdev/8a4999a27c11934f75086354314269f295ee998a.1749567243.git.petrm@nvidia.com/
Maybe wait until it's accepted and then submit v3 with a shared helper
function?
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] bridge: dump mcast querier state per vlan
2025-06-11 12:20 ` Ido Schimmel
@ 2025-06-11 12:26 ` Fabian Pfitzner
0 siblings, 0 replies; 3+ messages in thread
From: Fabian Pfitzner @ 2025-06-11 12:26 UTC (permalink / raw)
To: Ido Schimmel; +Cc: netdev, dsahern, bridge, entwicklung, razor
On 6/11/25 14:20, Ido Schimmel wrote:
> On Wed, Jun 11, 2025 at 02:11:52PM +0200, Fabian Pfitzner wrote:
>> Dump the multicast querier state per vlan.
>> This commit is almost identical to [1].
>>
>> The querier state can be seen with:
>>
>> bridge -d vlan global
>>
>> The options for vlan filtering and vlan mcast snooping have to be enabled
>> in order to see the output:
>>
>> ip link set [dev] type bridge mcast_vlan_snooping 1 vlan_filtering 1
>>
>> The querier state shows the following information for IPv4 and IPv6
>> respectively:
>>
>> 1) The ip address of the current querier in the network. This could be
>> ourselves or an external querier.
>> 2) The port on which the querier was seen
>> 3) Querier timeout in seconds
>>
>> [1] https://git.kernel.org/pub/scm/network/iproute2/iproute2.git/commit/?id=16aa4494d7fc6543e5e92beb2ce01648b79f8fa2
>>
>> Signed-off-by: Fabian Pfitzner <f.pfitzner@pengutronix.de>
>> ---
>>
>> v1->v2
>> - refactor code
>> - link to v1: https://lore.kernel.org/netdev/20250604105322.1185872-1-f.pfitzner@pengutronix.de/
> Regarding your note on v1, there is a patch under review to add a bridge
> lib file:
>
> https://lore.kernel.org/netdev/8a4999a27c11934f75086354314269f295ee998a.1749567243.git.petrm@nvidia.com/
>
> Maybe wait until it's accepted and then submit v3 with a shared helper
> function?
Sounds good to me. I'll submit a v3 then.
>
--
Pengutronix e.K. | Fabian Pfitzner |
Steuerwalder Str. 21 | https://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-06-11 12:26 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-11 12:11 [PATCH v2] bridge: dump mcast querier state per vlan Fabian Pfitzner
2025-06-11 12:20 ` Ido Schimmel
2025-06-11 12:26 ` Fabian Pfitzner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox