diff options
Diffstat (limited to 'net/ipv4/proc.c')
| -rw-r--r-- | net/ipv4/proc.c | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index f25542c48b7d..4ae1f203f7cb 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c | |||
| @@ -127,8 +127,8 @@ static const struct snmp_mib snmp4_ipextstats_list[] = { | |||
| 127 | SNMP_MIB_SENTINEL | 127 | SNMP_MIB_SENTINEL |
| 128 | }; | 128 | }; |
| 129 | 129 | ||
| 130 | static struct { | 130 | static const struct { |
| 131 | char *name; | 131 | const char *name; |
| 132 | int index; | 132 | int index; |
| 133 | } icmpmibmap[] = { | 133 | } icmpmibmap[] = { |
| 134 | { "DestUnreachs", ICMP_DEST_UNREACH }, | 134 | { "DestUnreachs", ICMP_DEST_UNREACH }, |
| @@ -249,6 +249,10 @@ static const struct snmp_mib snmp4_net_list[] = { | |||
| 249 | SNMP_MIB_ITEM("TCPSackShifted", LINUX_MIB_SACKSHIFTED), | 249 | SNMP_MIB_ITEM("TCPSackShifted", LINUX_MIB_SACKSHIFTED), |
| 250 | SNMP_MIB_ITEM("TCPSackMerged", LINUX_MIB_SACKMERGED), | 250 | SNMP_MIB_ITEM("TCPSackMerged", LINUX_MIB_SACKMERGED), |
| 251 | SNMP_MIB_ITEM("TCPSackShiftFallback", LINUX_MIB_SACKSHIFTFALLBACK), | 251 | SNMP_MIB_ITEM("TCPSackShiftFallback", LINUX_MIB_SACKSHIFTFALLBACK), |
| 252 | SNMP_MIB_ITEM("TCPBacklogDrop", LINUX_MIB_TCPBACKLOGDROP), | ||
| 253 | SNMP_MIB_ITEM("TCPMinTTLDrop", LINUX_MIB_TCPMINTTLDROP), | ||
| 254 | SNMP_MIB_ITEM("TCPDeferAcceptDrop", LINUX_MIB_TCPDEFERACCEPTDROP), | ||
| 255 | SNMP_MIB_ITEM("IPReversePathFilter", LINUX_MIB_IPRPFILTER), | ||
| 252 | SNMP_MIB_SENTINEL | 256 | SNMP_MIB_SENTINEL |
| 253 | }; | 257 | }; |
| 254 | 258 | ||
| @@ -280,7 +284,7 @@ static void icmpmsg_put(struct seq_file *seq) | |||
| 280 | 284 | ||
| 281 | count = 0; | 285 | count = 0; |
| 282 | for (i = 0; i < ICMPMSG_MIB_MAX; i++) { | 286 | for (i = 0; i < ICMPMSG_MIB_MAX; i++) { |
| 283 | val = snmp_fold_field((void **) net->mib.icmpmsg_statistics, i); | 287 | val = snmp_fold_field((void __percpu **) net->mib.icmpmsg_statistics, i); |
| 284 | if (val) { | 288 | if (val) { |
| 285 | type[count] = i; | 289 | type[count] = i; |
| 286 | vals[count++] = val; | 290 | vals[count++] = val; |
| @@ -307,18 +311,18 @@ static void icmp_put(struct seq_file *seq) | |||
| 307 | for (i=0; icmpmibmap[i].name != NULL; i++) | 311 | for (i=0; icmpmibmap[i].name != NULL; i++) |
| 308 | seq_printf(seq, " Out%s", icmpmibmap[i].name); | 312 | seq_printf(seq, " Out%s", icmpmibmap[i].name); |
| 309 | seq_printf(seq, "\nIcmp: %lu %lu", | 313 | seq_printf(seq, "\nIcmp: %lu %lu", |
| 310 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_INMSGS), | 314 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_INMSGS), |
| 311 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_INERRORS)); | 315 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_INERRORS)); |
| 312 | for (i=0; icmpmibmap[i].name != NULL; i++) | 316 | for (i=0; icmpmibmap[i].name != NULL; i++) |
| 313 | seq_printf(seq, " %lu", | 317 | seq_printf(seq, " %lu", |
| 314 | snmp_fold_field((void **) net->mib.icmpmsg_statistics, | 318 | snmp_fold_field((void __percpu **) net->mib.icmpmsg_statistics, |
| 315 | icmpmibmap[i].index)); | 319 | icmpmibmap[i].index)); |
| 316 | seq_printf(seq, " %lu %lu", | 320 | seq_printf(seq, " %lu %lu", |
| 317 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_OUTMSGS), | 321 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_OUTMSGS), |
| 318 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_OUTERRORS)); | 322 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_OUTERRORS)); |
| 319 | for (i=0; icmpmibmap[i].name != NULL; i++) | 323 | for (i=0; icmpmibmap[i].name != NULL; i++) |
| 320 | seq_printf(seq, " %lu", | 324 | seq_printf(seq, " %lu", |
| 321 | snmp_fold_field((void **) net->mib.icmpmsg_statistics, | 325 | snmp_fold_field((void __percpu **) net->mib.icmpmsg_statistics, |
| 322 | icmpmibmap[i].index | 0x100)); | 326 | icmpmibmap[i].index | 0x100)); |
| 323 | } | 327 | } |
| 324 | 328 | ||
| @@ -339,10 +343,12 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
| 339 | IPV4_DEVCONF_ALL(net, FORWARDING) ? 1 : 2, | 343 | IPV4_DEVCONF_ALL(net, FORWARDING) ? 1 : 2, |
| 340 | sysctl_ip_default_ttl); | 344 | sysctl_ip_default_ttl); |
| 341 | 345 | ||
| 346 | BUILD_BUG_ON(offsetof(struct ipstats_mib, mibs) != 0); | ||
| 342 | for (i = 0; snmp4_ipstats_list[i].name != NULL; i++) | 347 | for (i = 0; snmp4_ipstats_list[i].name != NULL; i++) |
| 343 | seq_printf(seq, " %lu", | 348 | seq_printf(seq, " %llu", |
| 344 | snmp_fold_field((void **)net->mib.ip_statistics, | 349 | snmp_fold_field64((void __percpu **)net->mib.ip_statistics, |
| 345 | snmp4_ipstats_list[i].entry)); | 350 | snmp4_ipstats_list[i].entry, |
| 351 | offsetof(struct ipstats_mib, syncp))); | ||
| 346 | 352 | ||
| 347 | icmp_put(seq); /* RFC 2011 compatibility */ | 353 | icmp_put(seq); /* RFC 2011 compatibility */ |
| 348 | icmpmsg_put(seq); | 354 | icmpmsg_put(seq); |
| @@ -356,11 +362,11 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
| 356 | /* MaxConn field is signed, RFC 2012 */ | 362 | /* MaxConn field is signed, RFC 2012 */ |
| 357 | if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN) | 363 | if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN) |
| 358 | seq_printf(seq, " %ld", | 364 | seq_printf(seq, " %ld", |
| 359 | snmp_fold_field((void **)net->mib.tcp_statistics, | 365 | snmp_fold_field((void __percpu **)net->mib.tcp_statistics, |
| 360 | snmp4_tcp_list[i].entry)); | 366 | snmp4_tcp_list[i].entry)); |
| 361 | else | 367 | else |
| 362 | seq_printf(seq, " %lu", | 368 | seq_printf(seq, " %lu", |
| 363 | snmp_fold_field((void **)net->mib.tcp_statistics, | 369 | snmp_fold_field((void __percpu **)net->mib.tcp_statistics, |
| 364 | snmp4_tcp_list[i].entry)); | 370 | snmp4_tcp_list[i].entry)); |
| 365 | } | 371 | } |
| 366 | 372 | ||
| @@ -371,7 +377,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
| 371 | seq_puts(seq, "\nUdp:"); | 377 | seq_puts(seq, "\nUdp:"); |
| 372 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) | 378 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) |
| 373 | seq_printf(seq, " %lu", | 379 | seq_printf(seq, " %lu", |
| 374 | snmp_fold_field((void **)net->mib.udp_statistics, | 380 | snmp_fold_field((void __percpu **)net->mib.udp_statistics, |
| 375 | snmp4_udp_list[i].entry)); | 381 | snmp4_udp_list[i].entry)); |
| 376 | 382 | ||
| 377 | /* the UDP and UDP-Lite MIBs are the same */ | 383 | /* the UDP and UDP-Lite MIBs are the same */ |
| @@ -382,7 +388,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
| 382 | seq_puts(seq, "\nUdpLite:"); | 388 | seq_puts(seq, "\nUdpLite:"); |
| 383 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) | 389 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) |
| 384 | seq_printf(seq, " %lu", | 390 | seq_printf(seq, " %lu", |
| 385 | snmp_fold_field((void **)net->mib.udplite_statistics, | 391 | snmp_fold_field((void __percpu **)net->mib.udplite_statistics, |
| 386 | snmp4_udp_list[i].entry)); | 392 | snmp4_udp_list[i].entry)); |
| 387 | 393 | ||
| 388 | seq_putc(seq, '\n'); | 394 | seq_putc(seq, '\n'); |
| @@ -419,7 +425,7 @@ static int netstat_seq_show(struct seq_file *seq, void *v) | |||
| 419 | seq_puts(seq, "\nTcpExt:"); | 425 | seq_puts(seq, "\nTcpExt:"); |
| 420 | for (i = 0; snmp4_net_list[i].name != NULL; i++) | 426 | for (i = 0; snmp4_net_list[i].name != NULL; i++) |
| 421 | seq_printf(seq, " %lu", | 427 | seq_printf(seq, " %lu", |
| 422 | snmp_fold_field((void **)net->mib.net_statistics, | 428 | snmp_fold_field((void __percpu **)net->mib.net_statistics, |
| 423 | snmp4_net_list[i].entry)); | 429 | snmp4_net_list[i].entry)); |
| 424 | 430 | ||
| 425 | seq_puts(seq, "\nIpExt:"); | 431 | seq_puts(seq, "\nIpExt:"); |
| @@ -428,9 +434,10 @@ static int netstat_seq_show(struct seq_file *seq, void *v) | |||
| 428 | 434 | ||
| 429 | seq_puts(seq, "\nIpExt:"); | 435 | seq_puts(seq, "\nIpExt:"); |
| 430 | for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++) | 436 | for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++) |
| 431 | seq_printf(seq, " %lu", | 437 | seq_printf(seq, " %llu", |
| 432 | snmp_fold_field((void **)net->mib.ip_statistics, | 438 | snmp_fold_field64((void __percpu **)net->mib.ip_statistics, |
| 433 | snmp4_ipextstats_list[i].entry)); | 439 | snmp4_ipextstats_list[i].entry, |
| 440 | offsetof(struct ipstats_mib, syncp))); | ||
| 434 | 441 | ||
| 435 | seq_putc(seq, '\n'); | 442 | seq_putc(seq, '\n'); |
| 436 | return 0; | 443 | return 0; |
