mirror of
https://gitea.invidious.io/iv-org/litespeed-quic.git
synced 2024-08-15 00:53:43 +00:00
GSO-Friendly Packet Memory (#175)
This commit is contained in:
parent
2f4629f27d
commit
fecdd10417
11 changed files with 19 additions and 60 deletions
|
@ -2043,7 +2043,7 @@ pba_init (struct packout_buf_allocator *pba, unsigned max)
|
|||
|
||||
|
||||
void *
|
||||
pba_allocate (void *packout_buf_allocator, void *peer_ctx, unsigned short size,
|
||||
pba_allocate (void *packout_buf_allocator, void *peer_ctx, void *conn_ctx, unsigned short size,
|
||||
char is_ipv6)
|
||||
{
|
||||
struct packout_buf_allocator *const pba = packout_buf_allocator;
|
||||
|
|
|
@ -115,7 +115,7 @@ void
|
|||
pba_init (struct packout_buf_allocator *, unsigned max);
|
||||
|
||||
void *
|
||||
pba_allocate (void *packout_buf_allocator, void*, unsigned short, char);
|
||||
pba_allocate (void *packout_buf_allocator, void*, void *conn_ctx, unsigned short, char);
|
||||
|
||||
void
|
||||
pba_release (void *packout_buf_allocator, void *, void *obj, char);
|
||||
|
|
|
@ -2016,7 +2016,7 @@ Miscellaneous Types
|
|||
|
||||
If not specified, malloc() and free() are used.
|
||||
|
||||
.. member:: void * (*pmi_allocate) (void *pmi_ctx, void *peer_ctx, unsigned short sz, char is_ipv6)
|
||||
.. member:: void * (*pmi_allocate) (void *pmi_ctx, void *peer_ctx, lsquic_conn_get_ctx *conn_ctx, unsigned short sz, char is_ipv6)
|
||||
|
||||
Allocate buffer for sending.
|
||||
|
||||
|
|
|
@ -974,7 +974,8 @@ struct lsquic_out_spec
|
|||
const struct sockaddr *local_sa;
|
||||
const struct sockaddr *dest_sa;
|
||||
void *peer_ctx;
|
||||
int ecn; /* Valid values are 0 - 3. See RFC 3168 */
|
||||
lsquic_conn_ctx_t *conn_ctx; /* will be NULL when sending out the first batch of handshake packets */
|
||||
int ecn; /* Valid values are 0 - 3. See RFC 3168 */
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1043,7 +1044,7 @@ struct lsquic_packout_mem_if
|
|||
/**
|
||||
* Allocate buffer for sending.
|
||||
*/
|
||||
void * (*pmi_allocate) (void *pmi_ctx, void *peer_ctx, unsigned short sz,
|
||||
void * (*pmi_allocate) (void *pmi_ctx, void *peer_ctx, lsquic_conn_ctx_t *, unsigned short sz,
|
||||
char is_ipv6);
|
||||
/**
|
||||
* This function is used to release the allocated buffer after it is
|
||||
|
|
|
@ -205,14 +205,14 @@ lsquic_conn_push_stream (struct lsquic_conn *lconn, void *hset,
|
|||
lsquic_conn_ctx_t *
|
||||
lsquic_conn_get_ctx (const struct lsquic_conn *lconn)
|
||||
{
|
||||
return lconn->cn_if->ci_get_ctx(lconn);
|
||||
return lconn->conn_ctx;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
lsquic_conn_set_ctx (struct lsquic_conn *lconn, lsquic_conn_ctx_t *ctx)
|
||||
{
|
||||
lconn->cn_if->ci_set_ctx(lconn, ctx);
|
||||
lconn->conn_ctx = ctx;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -178,12 +178,6 @@ struct conn_iface
|
|||
struct lsquic_engine *
|
||||
(*ci_get_engine) (struct lsquic_conn *);
|
||||
|
||||
struct lsquic_conn_ctx *
|
||||
(*ci_get_ctx) (const struct lsquic_conn *);
|
||||
|
||||
void
|
||||
(*ci_set_ctx) (struct lsquic_conn *, struct lsquic_conn_ctx *);
|
||||
|
||||
void
|
||||
(*ci_make_stream) (struct lsquic_conn *);
|
||||
|
||||
|
@ -318,6 +312,7 @@ struct conn_cid_elem
|
|||
struct lsquic_conn
|
||||
{
|
||||
void *cn_enc_session;
|
||||
lsquic_conn_ctx_t *conn_ctx;
|
||||
const struct enc_session_funcs_common
|
||||
*cn_esf_c;
|
||||
union {
|
||||
|
|
|
@ -1976,7 +1976,7 @@ iquic_esf_encrypt_packet (enc_session_t *enc_session_p,
|
|||
dst_sz = lconn->cn_pf->pf_packout_size(lconn, packet_out);
|
||||
ipv6 = NP_IS_IPv6(packet_out->po_path);
|
||||
dst = enpub->enp_pmi->pmi_allocate(enpub->enp_pmi_ctx,
|
||||
packet_out->po_path->np_peer_ctx, dst_sz, ipv6);
|
||||
packet_out->po_path->np_peer_ctx, lconn->conn_ctx, dst_sz, ipv6);
|
||||
if (!dst)
|
||||
{
|
||||
LSQ_DEBUG("could not allocate memory for outgoing packet of size %zd",
|
||||
|
|
|
@ -467,7 +467,7 @@ free_packet (void *ctx, void *conn_ctx, void *packet_data, char is_ipv6)
|
|||
|
||||
|
||||
static void *
|
||||
malloc_buf (void *ctx, void *conn_ctx, unsigned short size, char is_ipv6)
|
||||
malloc_buf (void *ctx, void *peer_ctx, lsquic_conn_ctx_t *conn_ctx, unsigned short size, char is_ipv6)
|
||||
{
|
||||
return malloc(size);
|
||||
}
|
||||
|
@ -1969,7 +1969,7 @@ copy_packet (struct lsquic_engine *engine, struct lsquic_conn *conn,
|
|||
}
|
||||
|
||||
packet_out->po_enc_data = engine->pub.enp_pmi->pmi_allocate(
|
||||
engine->pub.enp_pmi_ctx, packet_out->po_path->np_peer_ctx,
|
||||
engine->pub.enp_pmi_ctx, packet_out->po_path->np_peer_ctx, conn->conn_ctx,
|
||||
packet_out->po_data_sz, ipv6);
|
||||
if (!packet_out->po_enc_data)
|
||||
{
|
||||
|
@ -2477,6 +2477,7 @@ send_packets_out (struct lsquic_engine *engine,
|
|||
batch->outs [n].peer_ctx = packet_out->po_path->np_peer_ctx;
|
||||
batch->outs [n].local_sa = NP_LOCAL_SA(packet_out->po_path);
|
||||
batch->outs [n].dest_sa = NP_PEER_SA(packet_out->po_path);
|
||||
batch->outs [n].conn_ctx = conn->conn_ctx;
|
||||
batch->conns [n] = conn;
|
||||
}
|
||||
*packet = packet_out;
|
||||
|
|
|
@ -172,7 +172,6 @@ struct full_conn
|
|||
const struct lsquic_stream_if *stream_if;
|
||||
void *stream_if_ctx;
|
||||
} fc_stream_ifs[N_STREAM_IFS];
|
||||
lsquic_conn_ctx_t *fc_conn_ctx;
|
||||
struct lsquic_send_ctl fc_send_ctl;
|
||||
struct lsquic_conn_public fc_pub;
|
||||
lsquic_alarmset_t fc_alset;
|
||||
|
@ -798,7 +797,7 @@ full_conn_ci_client_call_on_new (struct lsquic_conn *lconn)
|
|||
{
|
||||
struct full_conn *const conn = (struct full_conn *) lconn;
|
||||
assert(conn->fc_flags & FC_CREATED_OK);
|
||||
conn->fc_conn_ctx = conn->fc_stream_ifs[STREAM_IF_STD].stream_if
|
||||
lconn->conn_ctx = conn->fc_stream_ifs[STREAM_IF_STD].stream_if
|
||||
->on_new_conn(conn->fc_stream_ifs[STREAM_IF_STD].stream_if_ctx, lconn);
|
||||
}
|
||||
|
||||
|
@ -972,7 +971,7 @@ lsquic_gquic_full_conn_server_new (struct lsquic_engine_public *enpub,
|
|||
lsquic_send_ctl_turn_nstp_on(&conn->fc_send_ctl);
|
||||
}
|
||||
LSQ_DEBUG("Calling on_new_conn callback");
|
||||
conn->fc_conn_ctx = enpub->enp_stream_if->on_new_conn(
|
||||
lconn_full->conn_ctx = enpub->enp_stream_if->on_new_conn(
|
||||
enpub->enp_stream_if_ctx, &conn->fc_conn);
|
||||
/* Now that user code knows about this connection, process incoming
|
||||
* packets, if any.
|
||||
|
@ -4176,22 +4175,6 @@ full_conn_ci_tls_alert (struct lsquic_conn *lconn, uint8_t alert)
|
|||
}
|
||||
|
||||
|
||||
static struct lsquic_conn_ctx *
|
||||
full_conn_ci_get_ctx (const struct lsquic_conn *lconn)
|
||||
{
|
||||
struct full_conn *const conn = (struct full_conn *) lconn;
|
||||
return conn->fc_conn_ctx;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
full_conn_ci_set_ctx (struct lsquic_conn *lconn, lsquic_conn_ctx_t *ctx)
|
||||
{
|
||||
struct full_conn *const conn = (struct full_conn *) lconn;
|
||||
conn->fc_conn_ctx = ctx;
|
||||
}
|
||||
|
||||
|
||||
static enum LSQUIC_CONN_STATUS
|
||||
full_conn_ci_status (struct lsquic_conn *lconn, char *errbuf, size_t bufsz)
|
||||
{
|
||||
|
@ -4477,7 +4460,6 @@ static const struct conn_iface full_conn_iface = {
|
|||
.ci_client_call_on_new = full_conn_ci_client_call_on_new,
|
||||
.ci_close = full_conn_ci_close,
|
||||
.ci_destroy = full_conn_ci_destroy,
|
||||
.ci_get_ctx = full_conn_ci_get_ctx,
|
||||
.ci_get_stream_by_id = full_conn_ci_get_stream_by_id,
|
||||
.ci_get_engine = full_conn_ci_get_engine,
|
||||
.ci_get_path = full_conn_ci_get_path,
|
||||
|
@ -4503,7 +4485,6 @@ static const struct conn_iface full_conn_iface = {
|
|||
* caller when packets come in.
|
||||
*/
|
||||
.ci_report_live = NULL,
|
||||
.ci_set_ctx = full_conn_ci_set_ctx,
|
||||
.ci_status = full_conn_ci_status,
|
||||
.ci_tick = full_conn_ci_tick,
|
||||
.ci_write_ack = full_conn_ci_write_ack,
|
||||
|
|
|
@ -376,7 +376,6 @@ struct ietf_full_conn
|
|||
*ifc_enpub;
|
||||
const struct lsquic_engine_settings
|
||||
*ifc_settings;
|
||||
lsquic_conn_ctx_t *ifc_conn_ctx;
|
||||
STAILQ_HEAD(, stream_id_to_ss)
|
||||
ifc_stream_ids_to_ss;
|
||||
lsquic_time_t ifc_created;
|
||||
|
@ -1552,7 +1551,7 @@ lsquic_ietf_full_conn_server_new (struct lsquic_engine_public *enpub,
|
|||
conn->ifc_last_live_update = now;
|
||||
|
||||
LSQ_DEBUG("Calling on_new_conn callback");
|
||||
conn->ifc_conn_ctx = conn->ifc_enpub->enp_stream_if->on_new_conn(
|
||||
conn->ifc_conn.conn_ctx = conn->ifc_enpub->enp_stream_if->on_new_conn(
|
||||
conn->ifc_enpub->enp_stream_if_ctx, &conn->ifc_conn);
|
||||
|
||||
if (0 != handshake_ok(&conn->ifc_conn))
|
||||
|
@ -2761,7 +2760,7 @@ ietf_full_conn_ci_client_call_on_new (struct lsquic_conn *lconn)
|
|||
{
|
||||
struct ietf_full_conn *conn = (struct ietf_full_conn *) lconn;
|
||||
assert(conn->ifc_flags & IFC_CREATED_OK);
|
||||
conn->ifc_conn_ctx = conn->ifc_enpub->enp_stream_if->on_new_conn(
|
||||
lconn->conn_ctx = conn->ifc_enpub->enp_stream_if->on_new_conn(
|
||||
conn->ifc_enpub->enp_stream_if_ctx, lconn);
|
||||
}
|
||||
|
||||
|
@ -7908,14 +7907,6 @@ ietf_full_conn_ci_stateless_reset (struct lsquic_conn *lconn)
|
|||
}
|
||||
|
||||
|
||||
static struct lsquic_conn_ctx *
|
||||
ietf_full_conn_ci_get_ctx (const struct lsquic_conn *lconn)
|
||||
{
|
||||
struct ietf_full_conn *const conn = (struct ietf_full_conn *) lconn;
|
||||
return conn->ifc_conn_ctx;
|
||||
}
|
||||
|
||||
|
||||
static struct lsquic_engine *
|
||||
ietf_full_conn_ci_get_engine (struct lsquic_conn *lconn)
|
||||
{
|
||||
|
@ -7924,14 +7915,6 @@ ietf_full_conn_ci_get_engine (struct lsquic_conn *lconn)
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
ietf_full_conn_ci_set_ctx (struct lsquic_conn *lconn, lsquic_conn_ctx_t *ctx)
|
||||
{
|
||||
struct ietf_full_conn *const conn = (struct ietf_full_conn *) lconn;
|
||||
conn->ifc_conn_ctx = ctx;
|
||||
}
|
||||
|
||||
|
||||
static unsigned
|
||||
ietf_full_conn_ci_n_pending_streams (const struct lsquic_conn *lconn)
|
||||
{
|
||||
|
@ -8194,7 +8177,6 @@ ietf_full_conn_ci_count_garbage (struct lsquic_conn *lconn, size_t garbage_sz)
|
|||
.ci_destroy = ietf_full_conn_ci_destroy, \
|
||||
.ci_drain_time = ietf_full_conn_ci_drain_time, \
|
||||
.ci_drop_crypto_streams = ietf_full_conn_ci_drop_crypto_streams, \
|
||||
.ci_get_ctx = ietf_full_conn_ci_get_ctx, \
|
||||
.ci_get_engine = ietf_full_conn_ci_get_engine, \
|
||||
.ci_get_log_cid = ietf_full_conn_ci_get_log_cid, \
|
||||
.ci_get_min_datagram_size= ietf_full_conn_ci_get_min_datagram_size, \
|
||||
|
@ -8214,7 +8196,6 @@ ietf_full_conn_ci_count_garbage (struct lsquic_conn *lconn, size_t garbage_sz)
|
|||
.ci_record_addrs = ietf_full_conn_ci_record_addrs, \
|
||||
.ci_report_live = ietf_full_conn_ci_report_live, \
|
||||
.ci_retx_timeout = ietf_full_conn_ci_retx_timeout, \
|
||||
.ci_set_ctx = ietf_full_conn_ci_set_ctx, \
|
||||
.ci_set_min_datagram_size= ietf_full_conn_ci_set_min_datagram_size, \
|
||||
.ci_status = ietf_full_conn_ci_status, \
|
||||
.ci_stateless_reset = ietf_full_conn_ci_stateless_reset, \
|
||||
|
|
|
@ -3738,7 +3738,7 @@ gquic_encrypt_packet (enc_session_t *enc_session_p,
|
|||
return ENCPA_BADCRYPT; /* To cause connection to close */
|
||||
ipv6 = NP_IS_IPv6(packet_out->po_path);
|
||||
buf = enpub->enp_pmi->pmi_allocate(enpub->enp_pmi_ctx,
|
||||
packet_out->po_path->np_peer_ctx, bufsz, ipv6);
|
||||
packet_out->po_path->np_peer_ctx, lconn->conn_ctx, bufsz, ipv6);
|
||||
if (!buf)
|
||||
{
|
||||
LSQ_DEBUG("could not allocate memory for outgoing packet of size %zd",
|
||||
|
@ -3936,7 +3936,7 @@ gquic2_esf_encrypt_packet (enc_session_t *enc_session_p,
|
|||
dst_sz = lconn->cn_pf->pf_packout_size(lconn, packet_out);
|
||||
ipv6 = NP_IS_IPv6(packet_out->po_path);
|
||||
dst = enpub->enp_pmi->pmi_allocate(enpub->enp_pmi_ctx,
|
||||
packet_out->po_path->np_peer_ctx, dst_sz, ipv6);
|
||||
packet_out->po_path->np_peer_ctx, lconn->conn_ctx, dst_sz, ipv6);
|
||||
if (!dst)
|
||||
{
|
||||
LSQ_DEBUG("could not allocate memory for outgoing packet of size %zd",
|
||||
|
|
Loading…
Reference in a new issue