comparison src/event/quic/ngx_event_quic_connection.h @ 9147:58afcd72446f

QUIC: path MTU discovery. MTU selection starts by doubling the initial MTU until the first failure. Then binary search is used to find the path MTU.
author Roman Arutyunyan <arut@nginx.com>
date Mon, 14 Aug 2023 09:21:27 +0400
parents bba136612fe4
children 2880f60a80c3
comparison
equal deleted inserted replaced
9146:f3412ec3b6d1 9147:58afcd72446f
64 (((c)->udp) ? (((ngx_quic_socket_t *)((c)->udp))->quic) : NULL) 64 (((c)->udp) ? (((ngx_quic_socket_t *)((c)->udp))->quic) : NULL)
65 65
66 #define ngx_quic_get_socket(c) ((ngx_quic_socket_t *)((c)->udp)) 66 #define ngx_quic_get_socket(c) ((ngx_quic_socket_t *)((c)->udp))
67 67
68 68
69 typedef enum {
70 NGX_QUIC_PATH_IDLE = 0,
71 NGX_QUIC_PATH_VALIDATING,
72 NGX_QUIC_PATH_WAITING,
73 NGX_QUIC_PATH_MTUD
74 } ngx_quic_path_state_e;
75
76
69 struct ngx_quic_client_id_s { 77 struct ngx_quic_client_id_s {
70 ngx_queue_t queue; 78 ngx_queue_t queue;
71 uint64_t seqnum; 79 uint64_t seqnum;
72 size_t len; 80 size_t len;
73 u_char id[NGX_QUIC_CID_LEN_MAX]; 81 u_char id[NGX_QUIC_CID_LEN_MAX];
87 ngx_queue_t queue; 95 ngx_queue_t queue;
88 struct sockaddr *sockaddr; 96 struct sockaddr *sockaddr;
89 ngx_sockaddr_t sa; 97 ngx_sockaddr_t sa;
90 socklen_t socklen; 98 socklen_t socklen;
91 ngx_quic_client_id_t *cid; 99 ngx_quic_client_id_t *cid;
100 ngx_quic_path_state_e state;
92 ngx_msec_t expires; 101 ngx_msec_t expires;
93 ngx_uint_t tries; 102 ngx_uint_t tries;
94 ngx_uint_t tag; 103 ngx_uint_t tag;
104 size_t mtu;
105 size_t mtud;
106 size_t max_mtu;
95 off_t sent; 107 off_t sent;
96 off_t received; 108 off_t received;
97 u_char challenge1[8]; 109 u_char challenge1[8];
98 u_char challenge2[8]; 110 u_char challenge2[8];
99 uint64_t seqnum; 111 uint64_t seqnum;
112 uint64_t mtu_pnum[NGX_QUIC_PATH_RETRIES];
100 ngx_str_t addr_text; 113 ngx_str_t addr_text;
101 u_char text[NGX_SOCKADDR_STRLEN]; 114 u_char text[NGX_SOCKADDR_STRLEN];
102 unsigned validated:1; 115 ngx_uint_t validated; /* unsigned validated:1; */
103 unsigned validating:1;
104 }; 116 };
105 117
106 118
107 struct ngx_quic_socket_s { 119 struct ngx_quic_socket_s {
108 ngx_udp_connection_t udp; 120 ngx_udp_connection_t udp;