@@ -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
780786static 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
9721020static 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