@@ -85,7 +85,6 @@ static const struct snmp_mib snmp6_ipstats_list[] = {
8585 SNMP_MIB_ITEM ("Ip6InECT0Pkts" , IPSTATS_MIB_ECT0PKTS ),
8686 SNMP_MIB_ITEM ("Ip6InCEPkts" , IPSTATS_MIB_CEPKTS ),
8787 SNMP_MIB_ITEM ("Ip6OutTransmits" , IPSTATS_MIB_OUTPKTS ),
88- SNMP_MIB_SENTINEL
8988};
9089
9190static const struct snmp_mib snmp6_icmp6_list [] = {
@@ -96,7 +95,6 @@ static const struct snmp_mib snmp6_icmp6_list[] = {
9695 SNMP_MIB_ITEM ("Icmp6OutErrors" , ICMP6_MIB_OUTERRORS ),
9796 SNMP_MIB_ITEM ("Icmp6InCsumErrors" , ICMP6_MIB_CSUMERRORS ),
9897 SNMP_MIB_ITEM ("Icmp6OutRateLimitHost" , ICMP6_MIB_RATELIMITHOST ),
99- SNMP_MIB_SENTINEL
10098};
10199
102100/* RFC 4293 v6 ICMPMsgStatsTable; named items for RFC 2466 compatibility */
@@ -129,7 +127,6 @@ static const struct snmp_mib snmp6_udp6_list[] = {
129127 SNMP_MIB_ITEM ("Udp6InCsumErrors" , UDP_MIB_CSUMERRORS ),
130128 SNMP_MIB_ITEM ("Udp6IgnoredMulti" , UDP_MIB_IGNOREDMULTI ),
131129 SNMP_MIB_ITEM ("Udp6MemErrors" , UDP_MIB_MEMERRORS ),
132- SNMP_MIB_SENTINEL
133130};
134131
135132static const struct snmp_mib snmp6_udplite6_list [] = {
@@ -141,7 +138,6 @@ static const struct snmp_mib snmp6_udplite6_list[] = {
141138 SNMP_MIB_ITEM ("UdpLite6SndbufErrors" , UDP_MIB_SNDBUFERRORS ),
142139 SNMP_MIB_ITEM ("UdpLite6InCsumErrors" , UDP_MIB_CSUMERRORS ),
143140 SNMP_MIB_ITEM ("UdpLite6MemErrors" , UDP_MIB_MEMERRORS ),
144- SNMP_MIB_SENTINEL
145141};
146142
147143static void snmp6_seq_show_icmpv6msg (struct seq_file * seq , atomic_long_t * smib )
@@ -182,35 +178,37 @@ static void snmp6_seq_show_icmpv6msg(struct seq_file *seq, atomic_long_t *smib)
182178 */
183179static void snmp6_seq_show_item (struct seq_file * seq , void __percpu * pcpumib ,
184180 atomic_long_t * smib ,
185- const struct snmp_mib * itemlist )
181+ const struct snmp_mib * itemlist ,
182+ int cnt )
186183{
187184 unsigned long buff [SNMP_MIB_MAX ];
188185 int i ;
189186
190187 if (pcpumib ) {
191- memset (buff , 0 , sizeof (unsigned long ) * SNMP_MIB_MAX );
188+ memset (buff , 0 , sizeof (unsigned long ) * cnt );
192189
193- snmp_get_cpu_field_batch (buff , itemlist , pcpumib );
194- for (i = 0 ; itemlist [ i ]. name ; i ++ )
190+ snmp_get_cpu_field_batch_cnt (buff , itemlist , cnt , pcpumib );
191+ for (i = 0 ; i < cnt ; i ++ )
195192 seq_printf (seq , "%-32s\t%lu\n" ,
196193 itemlist [i ].name , buff [i ]);
197194 } else {
198- for (i = 0 ; itemlist [ i ]. name ; i ++ )
195+ for (i = 0 ; i < cnt ; i ++ )
199196 seq_printf (seq , "%-32s\t%lu\n" , itemlist [i ].name ,
200197 atomic_long_read (smib + itemlist [i ].entry ));
201198 }
202199}
203200
204201static void snmp6_seq_show_item64 (struct seq_file * seq , void __percpu * mib ,
205- const struct snmp_mib * itemlist , size_t syncpoff )
202+ const struct snmp_mib * itemlist ,
203+ int cnt , size_t syncpoff )
206204{
207205 u64 buff64 [SNMP_MIB_MAX ];
208206 int i ;
209207
210- memset (buff64 , 0 , sizeof (u64 ) * SNMP_MIB_MAX );
208+ memset (buff64 , 0 , sizeof (u64 ) * cnt );
211209
212- snmp_get_cpu_field64_batch (buff64 , itemlist , mib , syncpoff );
213- for (i = 0 ; itemlist [ i ]. name ; i ++ )
210+ snmp_get_cpu_field64_batch_cnt (buff64 , itemlist , cnt , mib , syncpoff );
211+ for (i = 0 ; i < cnt ; i ++ )
214212 seq_printf (seq , "%-32s\t%llu\n" , itemlist [i ].name , buff64 [i ]);
215213}
216214
@@ -219,14 +217,19 @@ static int snmp6_seq_show(struct seq_file *seq, void *v)
219217 struct net * net = (struct net * )seq -> private ;
220218
221219 snmp6_seq_show_item64 (seq , net -> mib .ipv6_statistics ,
222- snmp6_ipstats_list , offsetof(struct ipstats_mib , syncp ));
220+ snmp6_ipstats_list ,
221+ ARRAY_SIZE (snmp6_ipstats_list ),
222+ offsetof(struct ipstats_mib , syncp ));
223223 snmp6_seq_show_item (seq , net -> mib .icmpv6_statistics ,
224- NULL , snmp6_icmp6_list );
224+ NULL , snmp6_icmp6_list ,
225+ ARRAY_SIZE (snmp6_icmp6_list ));
225226 snmp6_seq_show_icmpv6msg (seq , net -> mib .icmpv6msg_statistics -> mibs );
226227 snmp6_seq_show_item (seq , net -> mib .udp_stats_in6 ,
227- NULL , snmp6_udp6_list );
228+ NULL , snmp6_udp6_list ,
229+ ARRAY_SIZE (snmp6_udp6_list ));
228230 snmp6_seq_show_item (seq , net -> mib .udplite_stats_in6 ,
229- NULL , snmp6_udplite6_list );
231+ NULL , snmp6_udplite6_list ,
232+ ARRAY_SIZE (snmp6_udplite6_list ));
230233 return 0 ;
231234}
232235
@@ -236,9 +239,11 @@ static int snmp6_dev_seq_show(struct seq_file *seq, void *v)
236239
237240 seq_printf (seq , "%-32s\t%u\n" , "ifIndex" , idev -> dev -> ifindex );
238241 snmp6_seq_show_item64 (seq , idev -> stats .ipv6 ,
239- snmp6_ipstats_list , offsetof(struct ipstats_mib , syncp ));
242+ snmp6_ipstats_list ,
243+ ARRAY_SIZE (snmp6_ipstats_list ),
244+ offsetof(struct ipstats_mib , syncp ));
240245 snmp6_seq_show_item (seq , NULL , idev -> stats .icmpv6dev -> mibs ,
241- snmp6_icmp6_list );
246+ snmp6_icmp6_list , ARRAY_SIZE ( snmp6_icmp6_list ) );
242247 snmp6_seq_show_icmpv6msg (seq , idev -> stats .icmpv6msgdev -> mibs );
243248 return 0 ;
244249}
0 commit comments