diff options
-rw-r--r-- | include/linux/snmp.h | 3 | ||||
-rw-r--r-- | net/ipv4/proc.c | 3 | ||||
-rw-r--r-- | 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 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; |