net: bridge: Add netlink knobs for number / maximum MDB entries
[linux-block.git] / net / bridge / br_vlan.c
index bc75fa1e4666a6227d5beace3068ed9551d17e95..8a3dbc09ba388a65a933299ae1a883685dafb9a0 100644 (file)
@@ -1816,6 +1816,7 @@ out_err:
 /* v_opts is used to dump the options which must be equal in the whole range */
 static bool br_vlan_fill_vids(struct sk_buff *skb, u16 vid, u16 vid_range,
                              const struct net_bridge_vlan *v_opts,
+                             const struct net_bridge_port *p,
                              u16 flags,
                              bool dump_stats)
 {
@@ -1842,7 +1843,7 @@ static bool br_vlan_fill_vids(struct sk_buff *skb, u16 vid, u16 vid_range,
                goto out_err;
 
        if (v_opts) {
-               if (!br_vlan_opts_fill(skb, v_opts))
+               if (!br_vlan_opts_fill(skb, v_opts, p))
                        goto out_err;
 
                if (dump_stats && !br_vlan_stats_fill(skb, v_opts))
@@ -1925,7 +1926,7 @@ void br_vlan_notify(const struct net_bridge *br,
                goto out_kfree;
        }
 
-       if (!br_vlan_fill_vids(skb, vid, vid_range, v, flags, false))
+       if (!br_vlan_fill_vids(skb, vid, vid_range, v, p, flags, false))
                goto out_err;
 
        nlmsg_end(skb, nlh);
@@ -2030,7 +2031,7 @@ static int br_vlan_dump_dev(const struct net_device *dev,
 
                        if (!br_vlan_fill_vids(skb, range_start->vid,
                                               range_end->vid, range_start,
-                                              vlan_flags, dump_stats)) {
+                                              p, vlan_flags, dump_stats)) {
                                err = -EMSGSIZE;
                                break;
                        }
@@ -2056,7 +2057,7 @@ update_end:
                else if (!dump_global &&
                         !br_vlan_fill_vids(skb, range_start->vid,
                                            range_end->vid, range_start,
-                                           br_vlan_flags(range_start, pvid),
+                                           p, br_vlan_flags(range_start, pvid),
                                            dump_stats))
                        err = -EMSGSIZE;
        }
@@ -2131,6 +2132,8 @@ static const struct nla_policy br_vlan_db_policy[BRIDGE_VLANDB_ENTRY_MAX + 1] =
        [BRIDGE_VLANDB_ENTRY_STATE]     = { .type = NLA_U8 },
        [BRIDGE_VLANDB_ENTRY_TUNNEL_INFO] = { .type = NLA_NESTED },
        [BRIDGE_VLANDB_ENTRY_MCAST_ROUTER]      = { .type = NLA_U8 },
+       [BRIDGE_VLANDB_ENTRY_MCAST_N_GROUPS]    = { .type = NLA_REJECT },
+       [BRIDGE_VLANDB_ENTRY_MCAST_MAX_GROUPS]  = { .type = NLA_U32 },
 };
 
 static int br_vlan_rtm_process_one(struct net_device *dev,