Skip to content

Commit 7e4df51

Browse files
Nikolay Aleksandrovdavem330
authored andcommitted
bridge: netlink: add support for igmp's intervals
Add support to set/get all of the igmp's configurable intervals via netlink. These currently are: IFLA_BR_MCAST_LAST_MEMBER_INTVL IFLA_BR_MCAST_MEMBERSHIP_INTVL IFLA_BR_MCAST_QUERIER_INTVL IFLA_BR_MCAST_QUERY_INTVL IFLA_BR_MCAST_QUERY_RESPONSE_INTVL IFLA_BR_MCAST_STARTUP_QUERY_INTVL Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent b89e6ba commit 7e4df51

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed

include/uapi/linux/if_link.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@ enum {
253253
IFLA_BR_MCAST_HASH_MAX,
254254
IFLA_BR_MCAST_LAST_MEMBER_CNT,
255255
IFLA_BR_MCAST_STARTUP_QUERY_CNT,
256+
IFLA_BR_MCAST_LAST_MEMBER_INTVL,
257+
IFLA_BR_MCAST_MEMBERSHIP_INTVL,
258+
IFLA_BR_MCAST_QUERIER_INTVL,
259+
IFLA_BR_MCAST_QUERY_INTVL,
260+
IFLA_BR_MCAST_QUERY_RESPONSE_INTVL,
261+
IFLA_BR_MCAST_STARTUP_QUERY_INTVL,
256262
__IFLA_BR_MAX,
257263
};
258264

net/bridge/br_netlink.c

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,12 @@ static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
775775
[IFLA_BR_MCAST_HASH_MAX] = { .type = NLA_U32 },
776776
[IFLA_BR_MCAST_LAST_MEMBER_CNT] = { .type = NLA_U32 },
777777
[IFLA_BR_MCAST_STARTUP_QUERY_CNT] = { .type = NLA_U32 },
778+
[IFLA_BR_MCAST_LAST_MEMBER_INTVL] = { .type = NLA_U64 },
779+
[IFLA_BR_MCAST_MEMBERSHIP_INTVL] = { .type = NLA_U64 },
780+
[IFLA_BR_MCAST_QUERIER_INTVL] = { .type = NLA_U64 },
781+
[IFLA_BR_MCAST_QUERY_INTVL] = { .type = NLA_U64 },
782+
[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL] = { .type = NLA_U64 },
783+
[IFLA_BR_MCAST_STARTUP_QUERY_INTVL] = { .type = NLA_U64 },
778784
};
779785

780786
static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
@@ -927,6 +933,42 @@ static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
927933

928934
br->multicast_startup_query_count = val;
929935
}
936+
937+
if (data[IFLA_BR_MCAST_LAST_MEMBER_INTVL]) {
938+
u64 val = nla_get_u64(data[IFLA_BR_MCAST_LAST_MEMBER_INTVL]);
939+
940+
br->multicast_last_member_interval = clock_t_to_jiffies(val);
941+
}
942+
943+
if (data[IFLA_BR_MCAST_MEMBERSHIP_INTVL]) {
944+
u64 val = nla_get_u64(data[IFLA_BR_MCAST_MEMBERSHIP_INTVL]);
945+
946+
br->multicast_membership_interval = clock_t_to_jiffies(val);
947+
}
948+
949+
if (data[IFLA_BR_MCAST_QUERIER_INTVL]) {
950+
u64 val = nla_get_u64(data[IFLA_BR_MCAST_QUERIER_INTVL]);
951+
952+
br->multicast_querier_interval = clock_t_to_jiffies(val);
953+
}
954+
955+
if (data[IFLA_BR_MCAST_QUERY_INTVL]) {
956+
u64 val = nla_get_u64(data[IFLA_BR_MCAST_QUERY_INTVL]);
957+
958+
br->multicast_query_interval = clock_t_to_jiffies(val);
959+
}
960+
961+
if (data[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL]) {
962+
u64 val = nla_get_u64(data[IFLA_BR_MCAST_QUERY_RESPONSE_INTVL]);
963+
964+
br->multicast_query_response_interval = clock_t_to_jiffies(val);
965+
}
966+
967+
if (data[IFLA_BR_MCAST_STARTUP_QUERY_INTVL]) {
968+
u64 val = nla_get_u64(data[IFLA_BR_MCAST_STARTUP_QUERY_INTVL]);
969+
970+
br->multicast_startup_query_interval = clock_t_to_jiffies(val);
971+
}
930972
#endif
931973

932974
return 0;
@@ -965,14 +1007,20 @@ static size_t br_get_size(const struct net_device *brdev)
9651007
nla_total_size(sizeof(u32)) + /* IFLA_BR_MCAST_HASH_MAX */
9661008
nla_total_size(sizeof(u32)) + /* IFLA_BR_MCAST_LAST_MEMBER_CNT */
9671009
nla_total_size(sizeof(u32)) + /* IFLA_BR_MCAST_STARTUP_QUERY_CNT */
1010+
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_LAST_MEMBER_INTVL */
1011+
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_MEMBERSHIP_INTVL */
1012+
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_QUERIER_INTVL */
1013+
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_QUERY_INTVL */
1014+
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_QUERY_RESPONSE_INTVL */
1015+
nla_total_size(sizeof(u64)) + /* IFLA_BR_MCAST_STARTUP_QUERY_INTVL */
9681016
#endif
9691017
0;
9701018
}
9711019

9721020
static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
9731021
{
9741022
struct net_bridge *br = netdev_priv(brdev);
975-
u64 hello_timer, tcn_timer, topology_change_timer, gc_timer;
1023+
u64 hello_timer, tcn_timer, topology_change_timer, gc_timer, clockval;
9761024
u32 forward_delay = jiffies_to_clock_t(br->forward_delay);
9771025
u32 hello_time = jiffies_to_clock_t(br->hello_time);
9781026
u32 age_time = jiffies_to_clock_t(br->max_age);
@@ -993,6 +1041,7 @@ static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
9931041
tcn_timer = br_timer_value(&br->tcn_timer);
9941042
topology_change_timer = br_timer_value(&br->topology_change_timer);
9951043
gc_timer = br_timer_value(&br->gc_timer);
1044+
clockval = 0;
9961045

9971046
if (nla_put_u32(skb, IFLA_BR_FORWARD_DELAY, forward_delay) ||
9981047
nla_put_u32(skb, IFLA_BR_HELLO_TIME, hello_time) ||
@@ -1036,6 +1085,25 @@ static int br_fill_info(struct sk_buff *skb, const struct net_device *brdev)
10361085
nla_put_u32(skb, IFLA_BR_MCAST_STARTUP_QUERY_CNT,
10371086
br->multicast_startup_query_count))
10381087
return -EMSGSIZE;
1088+
1089+
clockval = jiffies_to_clock_t(br->multicast_last_member_interval);
1090+
if (nla_put_u64(skb, IFLA_BR_MCAST_LAST_MEMBER_INTVL, clockval))
1091+
return -EMSGSIZE;
1092+
clockval = jiffies_to_clock_t(br->multicast_membership_interval);
1093+
if (nla_put_u64(skb, IFLA_BR_MCAST_MEMBERSHIP_INTVL, clockval))
1094+
return -EMSGSIZE;
1095+
clockval = jiffies_to_clock_t(br->multicast_querier_interval);
1096+
if (nla_put_u64(skb, IFLA_BR_MCAST_QUERIER_INTVL, clockval))
1097+
return -EMSGSIZE;
1098+
clockval = jiffies_to_clock_t(br->multicast_query_interval);
1099+
if (nla_put_u64(skb, IFLA_BR_MCAST_QUERY_INTVL, clockval))
1100+
return -EMSGSIZE;
1101+
clockval = jiffies_to_clock_t(br->multicast_query_response_interval);
1102+
if (nla_put_u64(skb, IFLA_BR_MCAST_QUERY_RESPONSE_INTVL, clockval))
1103+
return -EMSGSIZE;
1104+
clockval = jiffies_to_clock_t(br->multicast_startup_query_interval);
1105+
if (nla_put_u64(skb, IFLA_BR_MCAST_STARTUP_QUERY_INTVL, clockval))
1106+
return -EMSGSIZE;
10391107
#endif
10401108

10411109
return 0;

0 commit comments

Comments
 (0)