bridge: mcast: add MLDv2 querier support
This patch adds basic support for MLDv2 queries, the default is MLDv1 as before. A new multicast option - multicast_mld_version, adds the ability to change it between 1 and 2 via netlink and sysfs. The MLD option is disabled if CONFIG_IPV6 is disabled. Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
5e9235853d
commit
aa2ae3e71c
@@ -859,6 +859,7 @@ static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
|
||||
[IFLA_BR_VLAN_STATS_ENABLED] = { .type = NLA_U8 },
|
||||
[IFLA_BR_MCAST_STATS_ENABLED] = { .type = NLA_U8 },
|
||||
[IFLA_BR_MCAST_IGMP_VERSION] = { .type = NLA_U8 },
|
||||
[IFLA_BR_MCAST_MLD_VERSION] = { .type = NLA_U8 },
|
||||
};
|
||||
|
||||
static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
|
||||
@@ -1079,6 +1080,17 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
if (data[IFLA_BR_MCAST_MLD_VERSION]) {
|
||||
__u8 mld_version;
|
||||
|
||||
mld_version = nla_get_u8(data[IFLA_BR_MCAST_MLD_VERSION]);
|
||||
err = br_multicast_set_mld_version(br, mld_version);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||
if (data[IFLA_BR_NF_CALL_IPTABLES]) {
|
||||
@@ -1146,6 +1158,7 @@ static size_t br_get_size(const struct net_device *brdev)
|
||||
nla_total_size_64bit(sizeof(u64)) + /* IFLA_BR_MCAST_QUERY_RESPONSE_INTVL */
|
||||
nla_total_size_64bit(sizeof(u64)) + /* IFLA_BR_MCAST_STARTUP_QUERY_INTVL */
|
||||
nla_total_size(sizeof(u8)) + /* IFLA_BR_MCAST_IGMP_VERSION */
|
||||
nla_total_size(sizeof(u8)) + /* IFLA_BR_MCAST_MLD_VERSION */
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||
nla_total_size(sizeof(u8)) + /* IFLA_BR_NF_CALL_IPTABLES */
|
||||
@@ -1225,7 +1238,11 @@ static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
|
||||
nla_put_u8(skb, IFLA_BR_MCAST_IGMP_VERSION,
|
||||
br->multicast_igmp_version))
|
||||
return -EMSGSIZE;
|
||||
|
||||
#if IS_ENABLED(CONFIG_IPV6)
|
||||
if (nla_put_u8(skb, IFLA_BR_MCAST_MLD_VERSION,
|
||||
br->multicast_mld_version))
|
||||
return -EMSGSIZE;
|
||||
#endif
|
||||
clockval = jiffies_to_clock_t(br->multicast_last_member_interval);
|
||||
if (nla_put_u64_64bit(skb, IFLA_BR_MCAST_LAST_MEMBER_INTVL, clockval,
|
||||
IFLA_BR_PAD))
|
||||
|
Reference in New Issue
Block a user