blob: 4897441827a490a8762f4635010fd85249c95d12 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#ifndef _HAPROXY_QUIC_TP_T_H
#define _HAPROXY_QUIC_TP_T_H
#ifdef USE_QUIC
#ifndef USE_OPENSSL
#error "Must define USE_OPENSSL"
#endif
#include <inttypes.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define QUIC_STATELESS_RESET_TOKEN_LEN 16
/* Default QUIC connection transport parameters */
extern struct quic_transport_params quic_dflt_transport_params;
struct tp_cid {
uint8_t len;
uint8_t data[20];
};
struct tp_preferred_address {
uint16_t ipv4_port;
uint16_t ipv6_port;
struct in_addr ipv4_addr;
struct in6_addr ipv6_addr;
struct tp_cid cid;
uint8_t stateless_reset_token[QUIC_STATELESS_RESET_TOKEN_LEN];
};
struct tp_version_information {
uint32_t chosen;
const struct quic_version *negotiated_version;
};
/* Default values for the absent transport parameters */
#define QUIC_TP_DFLT_MAX_UDP_PAYLOAD_SIZE 65527 /* bytes */
#define QUIC_TP_DFLT_ACK_DELAY_COMPONENT 3 /* milliseconds */
#define QUIC_TP_DFLT_MAX_ACK_DELAY 25 /* milliseconds */
#define QUIC_TP_DFLT_ACTIVE_CONNECTION_ID_LIMIT 2 /* number of connections */
/* These ones are our implementation default values when not set
* by configuration
*/
#define QUIC_TP_DFLT_FRONT_MAX_IDLE_TIMEOUT 30000 /* milliseconds */
#define QUIC_TP_DFLT_FRONT_MAX_STREAMS_BIDI 100
#define QUIC_TP_DFLT_BACK_MAX_IDLE_TIMEOUT 30000 /* milliseconds */
/* Types of QUIC transport parameters */
#define QUIC_TP_ORIGINAL_DESTINATION_CONNECTION_ID 0x00
#define QUIC_TP_MAX_IDLE_TIMEOUT 0x01
#define QUIC_TP_STATELESS_RESET_TOKEN 0x02
#define QUIC_TP_MAX_UDP_PAYLOAD_SIZE 0x03
#define QUIC_TP_INITIAL_MAX_DATA 0x04
#define QUIC_TP_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL 0x05
#define QUIC_TP_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE 0x06
#define QUIC_TP_INITIAL_MAX_STREAM_DATA_UNI 0x07
#define QUIC_TP_INITIAL_MAX_STREAMS_BIDI 0x08
#define QUIC_TP_INITIAL_MAX_STREAMS_UNI 0x09
#define QUIC_TP_ACK_DELAY_EXPONENT 0x0a
#define QUIC_TP_MAX_ACK_DELAY 0x0b
#define QUIC_TP_DISABLE_ACTIVE_MIGRATION 0x0c
#define QUIC_TP_PREFERRED_ADDRESS 0x0d
#define QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT 0x0e
#define QUIC_TP_INITIAL_SOURCE_CONNECTION_ID 0x0f
#define QUIC_TP_RETRY_SOURCE_CONNECTION_ID 0x10
#define QUIC_TP_VERSION_INFORMATION 0x11
/*
* These defines are not for transport parameter type, but the maximum accepted value for
* transport parameter types.
*/
#define QUIC_TP_ACK_DELAY_EXPONENT_LIMIT 20
#define QUIC_TP_MAX_ACK_DELAY_LIMIT (1UL << 14)
/* The maximum length of encoded transport parameters for any QUIC peer. */
#define QUIC_TP_MAX_ENCLEN 128
/*
* QUIC transport parameters.
* Note that forbidden parameters sent by clients MUST generate TRANSPORT_PARAMETER_ERROR errors.
*/
struct quic_transport_params {
uint64_t max_idle_timeout;
uint64_t max_udp_payload_size; /* Default: 65527 bytes (max of UDP payload for IPv6) */
uint64_t initial_max_data;
uint64_t initial_max_stream_data_bidi_local;
uint64_t initial_max_stream_data_bidi_remote;
uint64_t initial_max_stream_data_uni;
uint64_t initial_max_streams_bidi;
uint64_t initial_max_streams_uni;
uint64_t ack_delay_exponent; /* Default: 3, max: 20 */
uint64_t max_ack_delay; /* Default: 3ms, max: 2^14ms*/
uint64_t active_connection_id_limit;
/* Booleans */
uint8_t disable_active_migration;
uint8_t with_stateless_reset_token;
uint8_t with_preferred_address;
uint8_t original_destination_connection_id_present;
uint8_t initial_source_connection_id_present;
uint8_t stateless_reset_token[QUIC_STATELESS_RESET_TOKEN_LEN]; /* Forbidden for clients */
/*
* MUST be sent by servers.
* When received by clients, must be set to 1 if present.
*/
struct tp_cid original_destination_connection_id; /* Forbidden for clients */
/*
* MUST be sent by servers after Retry.
*/
struct tp_cid retry_source_connection_id; /* Forbidden for clients */
/* MUST be present both for servers and clients. */
struct tp_cid initial_source_connection_id;
struct tp_preferred_address preferred_address; /* Forbidden for clients */
struct tp_version_information version_information;
};
#endif /* USE_QUIC */
#endif /* _HAPROXY_QUIC_TP_T_H */
|