summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.davemloft.net>2004-09-06 19:20:50 -0700
committerPatrick McHardy <kaber@trash.net>2004-09-06 19:20:50 -0700
commit14a1f44569619b2dfda526dc0f73b9bf0df74171 (patch)
treef1200dfaf23a0013babab9fd458051b14d723ad1 /include/linux
parent10bc956350e6821a1a9757065962f1924649b12d (diff)
[TCP]: Make TSO play nice with congestion window.
Previously TSO would not abide by the congestion window properly. Essentially, each TSO packet would be trated just like 1 normal packet, even though a TSO packet generates more than 1 normal packet. This violates congestion window rules entirely. So now we record the TSO factor, a count of how many real packets a TSO packet will generate, and include this in all the packet counting routines. This initial version has a bug in that skb_entail() is not the correct time to figure out the TSO factor for the SKB, and tp->mss_tso_factor is not necessarily the right value for a given SKB. Will fix this up next. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/tcp.h17
1 files changed, 11 insertions, 6 deletions
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 9c42ac0b0322..ebf15b6a8162 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -201,6 +201,10 @@ struct tcp_sack_block {
__u32 end_seq;
};
+typedef struct tcp_pcount {
+ __u32 val;
+} tcp_pcount_t;
+
struct tcp_opt {
int tcp_header_len; /* Bytes of tcp header to send */
@@ -250,6 +254,7 @@ struct tcp_opt {
__u32 max_window; /* Maximal window ever seen from peer */
__u32 pmtu_cookie; /* Last pmtu seen by socket */
__u32 mss_cache; /* Cached effective mss, not including SACKS */
+ __u32 mss_tso_factor; /* Real packets per TSO packet */
__u16 mss_cache_std; /* Like mss_cache, but without TSO */
__u16 mss_clamp; /* Maximal mss, negotiated at connection setup */
__u16 ext_header_len; /* Network protocol overhead (IP/IPv6 options) */
@@ -274,9 +279,9 @@ struct tcp_opt {
__u32 rtt_seq; /* sequence number to update rttvar */
__u32 rto; /* retransmit timeout */
- __u32 packets_out; /* Packets which are "in flight" */
- __u32 left_out; /* Packets which leaved network */
- __u32 retrans_out; /* Retransmitted packets out */
+ tcp_pcount_t packets_out; /* Packets which are "in flight" */
+ tcp_pcount_t left_out; /* Packets which leaved network */
+ tcp_pcount_t retrans_out; /* Retransmitted packets out */
/*
@@ -337,9 +342,9 @@ struct tcp_opt {
__u8 syn_retries; /* num of allowed syn retries */
__u8 ecn_flags; /* ECN status bits. */
__u16 prior_ssthresh; /* ssthresh saved at recovery start */
- __u32 lost_out; /* Lost packets */
- __u32 sacked_out; /* SACK'd packets */
- __u32 fackets_out; /* FACK'd packets */
+ tcp_pcount_t lost_out; /* Lost packets */
+ tcp_pcount_t sacked_out;/* SACK'd packets */
+ tcp_pcount_t fackets_out;/* FACK'd packets */
__u32 high_seq; /* snd_nxt at onset of congestion */
__u32 retrans_stamp; /* Timestamp of the last retransmit,