This is an implementation of the client side of TCP Fast Open (TFO)
[RFC7413]. It also includes a pre-shared key mode of operation in which the server requires the client to be in possession of a shared secret in order to successfully open TFO connections with that server. The names of some existing fastopen sysctls have changed (e.g., net.inet.tcp.fastopen.enabled -> net.inet.tcp.fastopen.server_enable). Reviewed by: tuexen MFC after: 1 month Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D14047
This commit is contained in:
		
							parent
							
								
									b43341334e
								
							
						
					
					
						commit
						b4d6660d85
					
				|  | @ -101,8 +101,6 @@ struct tcphdr { | ||||||
| #define	   TCPOLEN_SIGNATURE		18 | #define	   TCPOLEN_SIGNATURE		18 | ||||||
| #define	TCPOPT_FAST_OPEN	34 | #define	TCPOPT_FAST_OPEN	34 | ||||||
| #define	   TCPOLEN_FAST_OPEN_EMPTY	2 | #define	   TCPOLEN_FAST_OPEN_EMPTY	2 | ||||||
| #define	   TCPOLEN_FAST_OPEN_MIN	6 |  | ||||||
| #define	   TCPOLEN_FAST_OPEN_MAX	18 |  | ||||||
| 
 | 
 | ||||||
| /* Miscellaneous constants */ | /* Miscellaneous constants */ | ||||||
| #define	MAX_SACK_BLKS	6	/* Max # SACK blocks stored at receiver side */ | #define	MAX_SACK_BLKS	6	/* Max # SACK blocks stored at receiver side */ | ||||||
|  | @ -152,6 +150,10 @@ struct tcphdr { | ||||||
| #define TCP_MAXHLEN	(0xf<<2)	/* max length of header in bytes */ | #define TCP_MAXHLEN	(0xf<<2)	/* max length of header in bytes */ | ||||||
| #define TCP_MAXOLEN	(TCP_MAXHLEN - sizeof(struct tcphdr)) | #define TCP_MAXOLEN	(TCP_MAXHLEN - sizeof(struct tcphdr)) | ||||||
| 					/* max space left for options */ | 					/* max space left for options */ | ||||||
|  | 
 | ||||||
|  | #define TCP_FASTOPEN_MIN_COOKIE_LEN	4	/* Per RFC7413 */ | ||||||
|  | #define TCP_FASTOPEN_MAX_COOKIE_LEN	16	/* Per RFC7413 */ | ||||||
|  | #define TCP_FASTOPEN_PSK_LEN		16	/* Same as TCP_FASTOPEN_KEY_LEN */ | ||||||
| #endif /* __BSD_VISIBLE */ | #endif /* __BSD_VISIBLE */ | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  | @ -252,6 +254,16 @@ struct tcp_info { | ||||||
| 	/* Padding to grow without breaking ABI. */ | 	/* Padding to grow without breaking ABI. */ | ||||||
| 	u_int32_t	__tcpi_pad[26];		/* Padding. */ | 	u_int32_t	__tcpi_pad[26];		/* Padding. */ | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * If this structure is provided when setting the TCP_FASTOPEN socket | ||||||
|  |  * option, and the enable member is non-zero, a subsequent connect will use | ||||||
|  |  * pre-shared key (PSK) mode using the provided key. | ||||||
|  |  */ | ||||||
|  | struct tcp_fastopen { | ||||||
|  | 	int enable; | ||||||
|  | 	uint8_t psk[TCP_FASTOPEN_PSK_LEN]; | ||||||
|  | }; | ||||||
| #endif | #endif | ||||||
| #define TCP_FUNCTION_NAME_LEN_MAX 32 | #define TCP_FUNCTION_NAME_LEN_MAX 32 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue