Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=18f02545a9a16c9a89778b91a162ad16d510bb32
Commit:     18f02545a9a16c9a89778b91a162ad16d510bb32
Parent:     5b3c98821a8753239aefc1c217409aa3e5c90787
Author:     Ilpo Järvinen <[EMAIL PROTECTED]>
AuthorDate: Fri Aug 24 22:55:52 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:48:30 2007 -0700

    [TCP] MIB: Add counters for discarded SACK blocks
    
    In DSACK case, some events are not extraordinary, such as packet
    duplication generated DSACK. They can arrive easily below
    snd_una when undo_marker is not set (TCP being in CA_Open),
    counting such DSACKs amoung SACK discards will likely just
    mislead if they occur in some scenario when there are other
    problems as well. Similarly, excessively delayed packets could
    cause "normal" DSACKs. Therefore, separate counters are
    allocated for DSACK events.
    
    Signed-off-by: Ilpo Järvinen <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 include/linux/snmp.h |    3 +++
 net/ipv4/proc.c      |    3 +++
 net/ipv4/tcp_input.c |   10 +++++++++-
 3 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/include/linux/snmp.h b/include/linux/snmp.h
index 802b3a3..d24c554 100644
--- a/include/linux/snmp.h
+++ b/include/linux/snmp.h
@@ -231,6 +231,9 @@ enum
        LINUX_MIB_TCPABORTONLINGER,             /* TCPAbortOnLinger */
        LINUX_MIB_TCPABORTFAILED,               /* TCPAbortFailed */
        LINUX_MIB_TCPMEMORYPRESSURES,           /* TCPMemoryPressures */
+       LINUX_MIB_TCPSACKDISCARD,               /* TCPSACKDiscard */
+       LINUX_MIB_TCPDSACKIGNOREDOLD,           /* TCPSACKIgnoredOld */
+       LINUX_MIB_TCPDSACKIGNOREDNOUNDO,        /* TCPSACKIgnoredNoUndo */
        __LINUX_MIB_MAX
 };
 
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
index 3b690cf..986d1c8 100644
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -244,6 +244,9 @@ static const struct snmp_mib snmp4_net_list[] = {
        SNMP_MIB_ITEM("TCPAbortOnLinger", LINUX_MIB_TCPABORTONLINGER),
        SNMP_MIB_ITEM("TCPAbortFailed", LINUX_MIB_TCPABORTFAILED),
        SNMP_MIB_ITEM("TCPMemoryPressures", LINUX_MIB_TCPMEMORYPRESSURES),
+       SNMP_MIB_ITEM("TCPSACKDiscard", LINUX_MIB_TCPSACKDISCARD),
+       SNMP_MIB_ITEM("TCPDSACKIgnoredOld", LINUX_MIB_TCPDSACKIGNOREDOLD),
+       SNMP_MIB_ITEM("TCPDSACKIgnoredNoUndo", LINUX_MIB_TCPDSACKIGNOREDNOUNDO),
        SNMP_MIB_SENTINEL
 };
 
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index a2364eb..f9e4d7a 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -1240,8 +1240,16 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff 
*ack_skb, u32 prior_snd_
                int fack_count;
                int dup_sack = (found_dup_sack && (i == first_sack_index));
 
-               if (!tcp_is_sackblock_valid(tp, dup_sack, start_seq, end_seq))
+               if (!tcp_is_sackblock_valid(tp, dup_sack, start_seq, end_seq)) {
+                       if (dup_sack) {
+                               if (!tp->undo_marker)
+                                       
NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDNOUNDO);
+                               else
+                                       
NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDOLD);
+                       } else
+                               NET_INC_STATS_BH(LINUX_MIB_TCPSACKDISCARD);
                        continue;
+               }
 
                skb = cached_skb;
                fack_count = cached_fack_count;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to