net: bridge: vlan: dump mcast ctx querier state
[linux-2.6-microblaze.git] / net / bridge / br_vlan_options.c
index 6ba45b7..49dec53 100644 (file)
@@ -272,6 +272,7 @@ bool br_vlan_global_opts_can_enter_range(const struct net_bridge_vlan *v_curr,
 bool br_vlan_global_opts_fill(struct sk_buff *skb, u16 vid, u16 vid_range,
                              const struct net_bridge_vlan *v_opts)
 {
+       struct nlattr *nest2 __maybe_unused;
        u64 clockval __maybe_unused;
        struct nlattr *nest;
 
@@ -298,7 +299,9 @@ bool br_vlan_global_opts_fill(struct sk_buff *skb, u16 vid, u16 vid_range,
            nla_put_u8(skb, BRIDGE_VLANDB_GOPTS_MCAST_QUERIER,
                       v_opts->br_mcast_ctx.multicast_querier) ||
            nla_put_u8(skb, BRIDGE_VLANDB_GOPTS_MCAST_ROUTER,
-                      v_opts->br_mcast_ctx.multicast_router))
+                      v_opts->br_mcast_ctx.multicast_router) ||
+           br_multicast_dump_querier_state(skb, &v_opts->br_mcast_ctx,
+                                           BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE))
                goto out_err;
 
        clockval = jiffies_to_clock_t(v_opts->br_mcast_ctx.multicast_last_member_interval);
@@ -326,6 +329,23 @@ bool br_vlan_global_opts_fill(struct sk_buff *skb, u16 vid, u16 vid_range,
                              clockval, BRIDGE_VLANDB_GOPTS_PAD))
                goto out_err;
 
+       if (br_rports_have_mc_router(&v_opts->br_mcast_ctx)) {
+               nest2 = nla_nest_start(skb,
+                                      BRIDGE_VLANDB_GOPTS_MCAST_ROUTER_PORTS);
+               if (!nest2)
+                       goto out_err;
+
+               rcu_read_lock();
+               if (br_rports_fill_info(skb, &v_opts->br_mcast_ctx)) {
+                       rcu_read_unlock();
+                       nla_nest_cancel(skb, nest2);
+                       goto out_err;
+               }
+               rcu_read_unlock();
+
+               nla_nest_end(skb, nest2);
+       }
+
 #if IS_ENABLED(CONFIG_IPV6)
        if (nla_put_u8(skb, BRIDGE_VLANDB_GOPTS_MCAST_MLD_VERSION,
                       v_opts->br_mcast_ctx.multicast_mld_version))
@@ -361,6 +381,7 @@ static size_t rtnl_vlan_global_opts_nlmsg_size(void)
                + nla_total_size(sizeof(u64)) /* BRIDGE_VLANDB_GOPTS_MCAST_STARTUP_QUERY_INTVL */
                + nla_total_size(sizeof(u8)) /* BRIDGE_VLANDB_GOPTS_MCAST_QUERIER */
                + nla_total_size(sizeof(u8)) /* BRIDGE_VLANDB_GOPTS_MCAST_ROUTER */
+               + br_multicast_querier_state_size() /* BRIDGE_VLANDB_GOPTS_MCAST_QUERIER_STATE */
 #endif
                + nla_total_size(sizeof(u16)); /* BRIDGE_VLANDB_GOPTS_RANGE */
 }