FD.io VPP  v19.04.1-1-ge4a0f9f
Vector Packet Processing
quic.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2019 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef __included_quic_h__
17 #define __included_quic_h__
18 
20 
21 #include <vppinfra/lock.h>
23 
24 #include <quicly.h>
25 
26 #define QUIC_DEBUG 1
27 #define QUIC_DEBUG_LEVEL_CLIENT 0
28 #define QUIC_DEBUG_LEVEL_SERVER 0
29 
30 #define QUIC_DEFAULT_CA_CERT_PATH "/etc/ssl/certs/ca-certificates.crt"
31 
32 #define QUIC_TIMER_HANDLE_INVALID ((u32) ~0)
33 
34 #define QUIC_TSTAMP_RESOLUTION 0.001 /* QUIC tick resolution (1ms) */
35 
36 
37 #if QUIC_DEBUG
38 #define QUIC_DBG(_lvl, _fmt, _args...) \
39  if (_lvl <= QUIC_DEBUG) \
40  clib_warning (_fmt, ##_args)
41 #else
42 #define QUIC_DBG(_lvl, _fmt, _args...)
43 #endif
44 
45 #define QUIC_CONN_STATE_HANDSHAKE 0
46 #define QUIC_CONN_STATE_READY 1
47 
48 
49 /* *INDENT-OFF* */
50 typedef CLIB_PACKED (struct quic_ctx_id_
51 {
52  session_handle_t app_session;
53  session_handle_t quic_session;
54  u32 parent_app_wrk_idx;
55  u32 parent_app_id;
56  u32 listener_ctx_id;
57  u32 timer_handle;
58  quicly_conn_t *conn;
59  u8 udp_is_ip4;
60  u8 conn_state;
61 }) quic_ctx_id_t;
62 /* *INDENT-ON* */
63 
64 STATIC_ASSERT (sizeof (quic_ctx_id_t) <= 42, "ctx id must be less than 42");
65 
66 typedef struct quic_ctx_
67 {
68  union
69  {
71  quic_ctx_id_t c_quic_ctx_id;
72  };
73 
74  quicly_stream_t *stream;
78 } quic_ctx_t;
79 
80 typedef struct quic_worker_ctx_
81 {
82  CLIB_CACHE_LINE_ALIGN_MARK (cacheline0);
83  u32 time_now; /**< worker time */
84  tw_timer_wheel_1t_3w_1024sl_ov_t timer_wheel; /**< worker timer wheel */
85  u32 *tx_buffers; /**< tx buffer free list */
87 
88 typedef struct quic_main_
89 {
96 
97 
98  /*
99  * Config
100  */
101  quicly_context_t quicly_ctx;
102  ptls_handshake_properties_t hs_properties;
103  quicly_cid_plaintext_t next_cid;
106 } quic_main_t;
107 
109 
110 #endif /* __included_quic_h__ */
111 
112 /*
113  * fd.io coding-style-patch-verification: ON
114  *
115  * Local Variables:
116  * eval: (c-set-style "gnu")
117  * End:
118  */
u8 use_test_cert_in_ca
Definition: quic.h:104
#define CLIB_CACHE_LINE_ALIGN_MARK(mark)
Definition: cache.h:60
quic_worker_ctx_t * wrk_ctx
Definition: quic.h:94
quicly_stream_t * stream
Definition: quic.h:74
clib_rwlock_t half_open_rwlock
Definition: quic.h:93
quicly_cid_plaintext_t next_cid
Definition: quic.h:103
char * ca_cert_path
Definition: quic.h:105
u32 client_opaque
Definition: quic.h:76
struct quic_ctx_ quic_ctx_t
struct quic_worker_ctx_ quic_worker_ctx_t
f64 tstamp_ticks_per_clock
Definition: quic.h:95
unsigned char u8
Definition: types.h:56
double f64
Definition: types.h:142
unsigned int u32
Definition: types.h:88
u32 time_now
worker time
Definition: quic.h:83
ptls_handshake_properties_t hs_properties
Definition: quic.h:102
quic_ctx_id_t c_quic_ctx_id
Definition: quic.h:71
STATIC_ASSERT(sizeof(quic_ctx_id_t)<=42,"ctx id must be less than 42")
u32 app_index
Definition: quic.h:90
Definition: quic.h:66
transport_connection_t connection
Definition: quic.h:70
quicly_context_t quicly_ctx
Definition: quic.h:101
struct quic_main_ quic_main_t
struct _transport_connection transport_connection_t
u32 * tx_buffers
tx buffer free list
Definition: quic.h:85
tw_timer_wheel_1t_3w_1024sl_ov_t timer_wheel
worker timer wheel
Definition: quic.h:84
quic_main_t * vnet_quic_get_main(void)
Definition: quic.c:1577
u8 * srv_hostname
Definition: quic.h:75
u64 session_handle_t
u8 is_listener
Definition: quic.h:77
quic_ctx_t ** ctx_pool
Definition: quic.h:92
typedef CLIB_PACKED(struct quic_ctx_id_{session_handle_t app_session;session_handle_t quic_session;u32 parent_app_wrk_idx;u32 parent_app_id;u32 listener_ctx_id;u32 timer_handle;quicly_conn_t *conn;u8 udp_is_ip4;u8 conn_state;}) quic_ctx_id_t
quic_ctx_t * half_open_ctx_pool
Definition: quic.h:91