aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/snmp.h3
-rw-r--r--net/ipv4/proc.c3
-rw-r--r--net/ipv4/tcp_input.c10
3 files changed, 15 insertions, 1 deletions
diff --git a/include/linux/snmp.h b/include/linux/snmp.h
index 802b3a38b041..d24c55473821 100644
--- a/include/linux/snmp.h
+++ b/include/linux/snmp.h
@@ -231,6 +231,9 @@ enum
231 LINUX_MIB_TCPABORTONLINGER, /* TCPAbortOnLinger */ 231 LINUX_MIB_TCPABORTONLINGER, /* TCPAbortOnLinger */
232 LINUX_MIB_TCPABORTFAILED, /* TCPAbortFailed */ 232 LINUX_MIB_TCPABORTFAILED, /* TCPAbortFailed */
233 LINUX_MIB_TCPMEMORYPRESSURES, /* TCPMemoryPressures */ 233 LINUX_MIB_TCPMEMORYPRESSURES, /* TCPMemoryPressures */
234 LINUX_MIB_TCPSACKDISCARD, /* TCPSACKDiscard */
235 LINUX_MIB_TCPDSACKIGNOREDOLD, /* TCPSACKIgnoredOld */
236 LINUX_MIB_TCPDSACKIGNOREDNOUNDO, /* TCPSACKIgnoredNoUndo */
234 __LINUX_MIB_MAX 237 __LINUX_MIB_MAX
235}; 238};
236 239
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
index 3b690cf2a4ee..986d1c83a000 100644
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -244,6 +244,9 @@ static const struct snmp_mib snmp4_net_list[] = {
244 SNMP_MIB_ITEM("TCPAbortOnLinger", LINUX_MIB_TCPABORTONLINGER), 244 SNMP_MIB_ITEM("TCPAbortOnLinger", LINUX_MIB_TCPABORTONLINGER),
245 SNMP_MIB_ITEM("TCPAbortFailed", LINUX_MIB_TCPABORTFAILED), 245 SNMP_MIB_ITEM("TCPAbortFailed", LINUX_MIB_TCPABORTFAILED),
246 SNMP_MIB_ITEM("TCPMemoryPressures", LINUX_MIB_TCPMEMORYPRESSURES), 246 SNMP_MIB_ITEM("TCPMemoryPressures", LINUX_MIB_TCPMEMORYPRESSURES),
247 SNMP_MIB_ITEM("TCPSACKDiscard", LINUX_MIB_TCPSACKDISCARD),
248 SNMP_MIB_ITEM("TCPDSACKIgnoredOld", LINUX_MIB_TCPDSACKIGNOREDOLD),
249 SNMP_MIB_ITEM("TCPDSACKIgnoredNoUndo", LINUX_MIB_TCPDSACKIGNOREDNOUNDO),
247 SNMP_MIB_SENTINEL 250 SNMP_MIB_SENTINEL
248}; 251};
249 252
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index a2364ebf8585..f9e4d7ad68b7 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_
1240 int fack_count; 1240 int fack_count;
1241 int dup_sack = (found_dup_sack && (i == first_sack_index)); 1241 int dup_sack = (found_dup_sack && (i == first_sack_index));
1242 1242
1243 if (!tcp_is_sackblock_valid(tp, dup_sack, start_seq, end_seq)) 1243 if (!tcp_is_sackblock_valid(tp, dup_sack, start_seq, end_seq)) {
1244 if (dup_sack) {
1245 if (!tp->undo_marker)
1246 NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDNOUNDO);
1247 else
1248 NET_INC_STATS_BH(LINUX_MIB_TCPDSACKIGNOREDOLD);
1249 } else
1250 NET_INC_STATS_BH(LINUX_MIB_TCPSACKDISCARD);
1244 continue; 1251 continue;
1252 }
1245 1253
1246 skb = cached_skb; 1254 skb = cached_skb;
1247 fack_count = cached_fack_count; 1255 fack_count = cached_fack_count;