fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / net / ipv4 / proc.c
index 1b167c4..cd873da 100644 (file)
@@ -38,6 +38,7 @@
 #include <net/protocol.h>
 #include <net/tcp.h>
 #include <net/udp.h>
+#include <net/udplite.h>
 #include <linux/inetdevice.h>
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
@@ -49,7 +50,7 @@ static int fold_prot_inuse(struct proto *proto)
        int res = 0;
        int cpu;
 
-       for_each_cpu(cpu)
+       for_each_possible_cpu(cpu)
                res += proto->stats[cpu].inuse;
 
        return res;
@@ -66,6 +67,7 @@ static int sockstat_seq_show(struct seq_file *seq, void *v)
                   tcp_death_row.tw_count, atomic_read(&tcp_sockets_allocated),
                   atomic_read(&tcp_memory_allocated));
        seq_printf(seq, "UDP: inuse %d\n", fold_prot_inuse(&udp_prot));
+       seq_printf(seq, "UDPLITE: inuse %d\n", fold_prot_inuse(&udplite_prot));
        seq_printf(seq, "RAW: inuse %d\n", fold_prot_inuse(&raw_prot));
        seq_printf(seq,  "FRAG: inuse %d memory %d\n", ip_frag_nqueues,
                   atomic_read(&ip_frag_mem));
@@ -91,7 +93,7 @@ fold_field(void *mib[], int offt)
        unsigned long res = 0;
        int i;
 
-       for_each_cpu(i) {
+       for_each_possible_cpu(i) {
                res += *(((unsigned long *) per_cpu_ptr(mib[0], i)) + offt);
                res += *(((unsigned long *) per_cpu_ptr(mib[1], i)) + offt);
        }
@@ -173,6 +175,8 @@ static const struct snmp_mib snmp4_udp_list[] = {
        SNMP_MIB_ITEM("NoPorts", UDP_MIB_NOPORTS),
        SNMP_MIB_ITEM("InErrors", UDP_MIB_INERRORS),
        SNMP_MIB_ITEM("OutDatagrams", UDP_MIB_OUTDATAGRAMS),
+       SNMP_MIB_ITEM("RcvbufErrors", UDP_MIB_RCVBUFERRORS),
+       SNMP_MIB_ITEM("SndbufErrors", UDP_MIB_SNDBUFERRORS),
        SNMP_MIB_SENTINEL
 };
 
@@ -302,6 +306,17 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
                           fold_field((void **) udp_statistics, 
                                      snmp4_udp_list[i].entry));
 
+       /* the UDP and UDP-Lite MIBs are the same */
+       seq_puts(seq, "\nUdpLite:");
+       for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+               seq_printf(seq, " %s", snmp4_udp_list[i].name);
+
+       seq_puts(seq, "\nUdpLite:");
+       for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+               seq_printf(seq, " %lu",
+                          fold_field((void **) udplite_statistics,
+                                     snmp4_udp_list[i].entry)     );
+
        seq_putc(seq, '\n');
        return 0;
 }