]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - net/ipv4/proc.c
[DCCP]: Wait for CCID
[linux-2.6-omap-h63xx.git] / net / ipv4 / proc.c
index 95a8f8f2de71af73ce64beab13f28b2edebf8dd3..9dee70e1cf0d2a7de20f9fc4ff1d9214488ba7ae 100644 (file)
@@ -124,33 +124,30 @@ static const struct snmp_mib snmp4_ipextstats_list[] = {
 static const struct snmp_mib snmp4_icmp_list[] = {
        SNMP_MIB_ITEM("InMsgs", ICMP_MIB_INMSGS),
        SNMP_MIB_ITEM("InErrors", ICMP_MIB_INERRORS),
-       SNMP_MIB_ITEM("InDestUnreachs", ICMP_MIB_INDESTUNREACHS),
-       SNMP_MIB_ITEM("InTimeExcds", ICMP_MIB_INTIMEEXCDS),
-       SNMP_MIB_ITEM("InParmProbs", ICMP_MIB_INPARMPROBS),
-       SNMP_MIB_ITEM("InSrcQuenchs", ICMP_MIB_INSRCQUENCHS),
-       SNMP_MIB_ITEM("InRedirects", ICMP_MIB_INREDIRECTS),
-       SNMP_MIB_ITEM("InEchos", ICMP_MIB_INECHOS),
-       SNMP_MIB_ITEM("InEchoReps", ICMP_MIB_INECHOREPS),
-       SNMP_MIB_ITEM("InTimestamps", ICMP_MIB_INTIMESTAMPS),
-       SNMP_MIB_ITEM("InTimestampReps", ICMP_MIB_INTIMESTAMPREPS),
-       SNMP_MIB_ITEM("InAddrMasks", ICMP_MIB_INADDRMASKS),
-       SNMP_MIB_ITEM("InAddrMaskReps", ICMP_MIB_INADDRMASKREPS),
        SNMP_MIB_ITEM("OutMsgs", ICMP_MIB_OUTMSGS),
        SNMP_MIB_ITEM("OutErrors", ICMP_MIB_OUTERRORS),
-       SNMP_MIB_ITEM("OutDestUnreachs", ICMP_MIB_OUTDESTUNREACHS),
-       SNMP_MIB_ITEM("OutTimeExcds", ICMP_MIB_OUTTIMEEXCDS),
-       SNMP_MIB_ITEM("OutParmProbs", ICMP_MIB_OUTPARMPROBS),
-       SNMP_MIB_ITEM("OutSrcQuenchs", ICMP_MIB_OUTSRCQUENCHS),
-       SNMP_MIB_ITEM("OutRedirects", ICMP_MIB_OUTREDIRECTS),
-       SNMP_MIB_ITEM("OutEchos", ICMP_MIB_OUTECHOS),
-       SNMP_MIB_ITEM("OutEchoReps", ICMP_MIB_OUTECHOREPS),
-       SNMP_MIB_ITEM("OutTimestamps", ICMP_MIB_OUTTIMESTAMPS),
-       SNMP_MIB_ITEM("OutTimestampReps", ICMP_MIB_OUTTIMESTAMPREPS),
-       SNMP_MIB_ITEM("OutAddrMasks", ICMP_MIB_OUTADDRMASKS),
-       SNMP_MIB_ITEM("OutAddrMaskReps", ICMP_MIB_OUTADDRMASKREPS),
        SNMP_MIB_SENTINEL
 };
 
+static struct {
+       char *name;
+       int index;
+} icmpmibmap[] = {
+       { "DestUnreachs", ICMP_DEST_UNREACH },
+       { "TimeExcds", ICMP_TIME_EXCEEDED },
+       { "ParmProbs", ICMP_PARAMETERPROB },
+       { "SrcQuenchs", ICMP_SOURCE_QUENCH },
+       { "Redirects", ICMP_REDIRECT },
+       { "Echos", ICMP_ECHO },
+       { "EchoReps", ICMP_ECHOREPLY },
+       { "Timestamps", ICMP_TIMESTAMP },
+       { "TimestampReps", ICMP_TIMESTAMPREPLY },
+       { "AddrMasks", ICMP_ADDRESS },
+       { "AddrMaskReps", ICMP_ADDRESSREPLY },
+       { 0, 0 }
+};
+
+
 static const struct snmp_mib snmp4_tcp_list[] = {
        SNMP_MIB_ITEM("RtoAlgorithm", TCP_MIB_RTOALGORITHM),
        SNMP_MIB_ITEM("RtoMin", TCP_MIB_RTOMIN),
@@ -248,9 +245,76 @@ static const struct snmp_mib snmp4_net_list[] = {
        SNMP_MIB_ITEM("TCPSACKDiscard", LINUX_MIB_TCPSACKDISCARD),
        SNMP_MIB_ITEM("TCPDSACKIgnoredOld", LINUX_MIB_TCPDSACKIGNOREDOLD),
        SNMP_MIB_ITEM("TCPDSACKIgnoredNoUndo", LINUX_MIB_TCPDSACKIGNOREDNOUNDO),
+       SNMP_MIB_ITEM("TCPSpuriousRTOs", LINUX_MIB_TCPSPURIOUSRTOS),
        SNMP_MIB_SENTINEL
 };
 
+static void icmpmsg_put(struct seq_file *seq)
+{
+#define PERLINE        16
+
+       int j, i, count;
+       static int out[PERLINE];
+
+       count = 0;
+       for (i = 0; i < ICMPMSG_MIB_MAX; i++) {
+
+               if (snmp_fold_field((void **) icmpmsg_statistics, i))
+                       out[count++] = i;
+               if (count < PERLINE)
+                       continue;
+
+               seq_printf(seq, "\nIcmpMsg:");
+               for (j = 0; j < PERLINE; ++j)
+                       seq_printf(seq, " %sType%u", i & 0x100 ? "Out" : "In",
+                                       i & 0xff);
+               seq_printf(seq, "\nIcmpMsg: ");
+               for (j = 0; j < PERLINE; ++j)
+                       seq_printf(seq, " %lu",
+                               snmp_fold_field((void **) icmpmsg_statistics,
+                               out[j]));
+               seq_putc(seq, '\n');
+       }
+       if (count) {
+               seq_printf(seq, "\nIcmpMsg:");
+               for (j = 0; j < count; ++j)
+                       seq_printf(seq, " %sType%u", out[j] & 0x100 ? "Out" :
+                               "In", out[j] & 0xff);
+               seq_printf(seq, "\nIcmpMsg:");
+               for (j = 0; j < count; ++j)
+                       seq_printf(seq, " %lu", snmp_fold_field((void **)
+                               icmpmsg_statistics, out[j]));
+       }
+
+#undef PERLINE
+}
+
+static void icmp_put(struct seq_file *seq)
+{
+       int i;
+
+       seq_puts(seq, "\nIcmp: InMsgs InErrors");
+       for (i=0; icmpmibmap[i].name != NULL; i++)
+               seq_printf(seq, " In%s", icmpmibmap[i].name);
+       seq_printf(seq, " OutMsgs OutErrors");
+       for (i=0; icmpmibmap[i].name != NULL; i++)
+               seq_printf(seq, " Out%s", icmpmibmap[i].name);
+       seq_printf(seq, "\nIcmp: %lu %lu",
+               snmp_fold_field((void **) icmp_statistics, ICMP_MIB_INMSGS),
+               snmp_fold_field((void **) icmp_statistics, ICMP_MIB_INERRORS));
+       for (i=0; icmpmibmap[i].name != NULL; i++)
+               seq_printf(seq, " %lu",
+                       snmp_fold_field((void **) icmpmsg_statistics,
+                               icmpmibmap[i].index));
+       seq_printf(seq, " %lu %lu",
+               snmp_fold_field((void **) icmp_statistics, ICMP_MIB_OUTMSGS),
+               snmp_fold_field((void **) icmp_statistics, ICMP_MIB_OUTERRORS));
+       for (i=0; icmpmibmap[i].name != NULL; i++)
+               seq_printf(seq, " %lu",
+                       snmp_fold_field((void **) icmpmsg_statistics,
+                               icmpmibmap[i].index));
+}
+
 /*
  *     Called from the PROCfs module. This outputs /proc/net/snmp.
  */
@@ -271,15 +335,8 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
                           snmp_fold_field((void **)ip_statistics,
                                           snmp4_ipstats_list[i].entry));
 
-       seq_puts(seq, "\nIcmp:");
-       for (i = 0; snmp4_icmp_list[i].name != NULL; i++)
-               seq_printf(seq, " %s", snmp4_icmp_list[i].name);
-
-       seq_puts(seq, "\nIcmp:");
-       for (i = 0; snmp4_icmp_list[i].name != NULL; i++)
-               seq_printf(seq, " %lu",
-                          snmp_fold_field((void **)icmp_statistics,
-                                          snmp4_icmp_list[i].entry));
+       icmp_put(seq);  /* RFC 2011 compatibility */
+       icmpmsg_put(seq);
 
        seq_puts(seq, "\nTcp:");
        for (i = 0; snmp4_tcp_list[i].name != NULL; i++)
@@ -336,6 +393,8 @@ static const struct file_operations snmp_seq_fops = {
        .release = single_release,
 };
 
+
+
 /*
  *     Output /proc/net/netstat
  */