[TCP]: MTU probing
Implementation of packetization layer path mtu discovery for TCP, based on the internet-draft currently found at <http://www.ietf.org/internet-drafts/draft-ietf-pmtud-method-05.txt>. Signed-off-by: John Heffner <jheffner@psc.edu> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
1d60290f27
commit
5d424d5a67
@@ -72,6 +72,7 @@ struct inet_connection_sock_af_ops {
|
||||
* @icsk_probes_out: unanswered 0 window probes
|
||||
* @icsk_ext_hdr_len: Network protocol overhead (IP/IPv6 options)
|
||||
* @icsk_ack: Delayed ACK control data
|
||||
* @icsk_mtup; MTU probing control data
|
||||
*/
|
||||
struct inet_connection_sock {
|
||||
/* inet_sock has to be the first member! */
|
||||
@@ -104,6 +105,18 @@ struct inet_connection_sock {
|
||||
__u16 last_seg_size; /* Size of last incoming segment */
|
||||
__u16 rcv_mss; /* MSS used for delayed ACK decisions */
|
||||
} icsk_ack;
|
||||
struct {
|
||||
int enabled;
|
||||
|
||||
/* Range of MTUs to search */
|
||||
int search_high;
|
||||
int search_low;
|
||||
|
||||
/* Information on the current probe. */
|
||||
int probe_size;
|
||||
__u32 probe_seq_start;
|
||||
__u32 probe_seq_end;
|
||||
} icsk_mtup;
|
||||
u32 icsk_ca_priv[16];
|
||||
#define ICSK_CA_PRIV_SIZE (16 * sizeof(u32))
|
||||
};
|
||||
|
@@ -60,6 +60,9 @@ extern void tcp_time_wait(struct sock *sk, int state, int timeo);
|
||||
/* Minimal RCV_MSS. */
|
||||
#define TCP_MIN_RCVMSS 536U
|
||||
|
||||
/* The least MTU to use for probing */
|
||||
#define TCP_BASE_MSS 512
|
||||
|
||||
/* After receiving this amount of duplicate ACKs fast retransmit starts. */
|
||||
#define TCP_FASTRETRANS_THRESH 3
|
||||
|
||||
@@ -219,6 +222,8 @@ extern int sysctl_tcp_nometrics_save;
|
||||
extern int sysctl_tcp_moderate_rcvbuf;
|
||||
extern int sysctl_tcp_tso_win_divisor;
|
||||
extern int sysctl_tcp_abc;
|
||||
extern int sysctl_tcp_mtu_probing;
|
||||
extern int sysctl_tcp_base_mss;
|
||||
|
||||
extern atomic_t tcp_memory_allocated;
|
||||
extern atomic_t tcp_sockets_allocated;
|
||||
@@ -447,6 +452,10 @@ extern int tcp_read_sock(struct sock *sk, read_descriptor_t *desc,
|
||||
|
||||
extern void tcp_initialize_rcv_mss(struct sock *sk);
|
||||
|
||||
extern int tcp_mtu_to_mss(struct sock *sk, int pmtu);
|
||||
extern int tcp_mss_to_mtu(struct sock *sk, int mss);
|
||||
extern void tcp_mtup_init(struct sock *sk);
|
||||
|
||||
static inline void __tcp_fast_path_on(struct tcp_sock *tp, u32 snd_wnd)
|
||||
{
|
||||
tp->pred_flags = htonl((tp->tcp_header_len << 26) |
|
||||
|
Reference in New Issue
Block a user