mirror of
				https://gitea.invidious.io/iv-org/litespeed-quic.git
				synced 2024-08-15 00:53:43 +00:00 
			
		
		
		
	Release 2.19.0
- [FEATURE] DPLPMTUD support. IETF connections now search for the maximum packet size, improving throughput. - [DEBUG] Record event in stream history when on_close() is called in dtor.
This commit is contained in:
		
							parent
							
								
									b329a00e5e
								
							
						
					
					
						commit
						b8fa619567
					
				
					 46 changed files with 3629 additions and 854 deletions
				
			
		| 
						 | 
				
			
			@ -140,8 +140,8 @@ prog_print_common_options (const struct prog *prog, FILE *out)
 | 
			
		|||
#if LSQUIC_DONTFRAG_SUPPORTED
 | 
			
		||||
"   -D          Do not set `do not fragment' flag on outgoing UDP packets\n"
 | 
			
		||||
#endif
 | 
			
		||||
"   -z BYTES    Maximum size of outgoing UDP packets.  The default is 1370\n"
 | 
			
		||||
"                 bytes for IPv4 socket and 1350 bytes for IPv6 socket\n"
 | 
			
		||||
"   -z BYTES    Maximum size of outgoing UDP packets (client only).\n"
 | 
			
		||||
"                 Overrides -o base_plpmtu.\n"
 | 
			
		||||
"   -L LEVEL    Log level for all modules.  Possible values are `debug',\n"
 | 
			
		||||
"                 `info', `notice', `warn', `error', `alert', `emerg',\n"
 | 
			
		||||
"                 and `crit'.\n"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1816,6 +1816,11 @@ set_engine_option (struct lsquic_engine_settings *settings,
 | 
			
		|||
            settings->es_scid_len = atoi(val);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (0 == strncmp(name, "dplpmtud", 8))
 | 
			
		||||
        {
 | 
			
		||||
            settings->es_dplpmtud = atoi(val);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case 9:
 | 
			
		||||
        if (0 == strncmp(name, "send_prst", 9))
 | 
			
		||||
| 
						 | 
				
			
			@ -1835,6 +1840,11 @@ set_engine_option (struct lsquic_engine_settings *settings,
 | 
			
		|||
            settings->es_timestamps = atoi(val);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (0 == strncmp(name, "max_plpmtu", 10))
 | 
			
		||||
        {
 | 
			
		||||
            settings->es_max_plpmtu = atoi(val);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case 11:
 | 
			
		||||
        if (0 == strncmp(name, "ping_period", 11))
 | 
			
		||||
| 
						 | 
				
			
			@ -1842,6 +1852,11 @@ set_engine_option (struct lsquic_engine_settings *settings,
 | 
			
		|||
            settings->es_ping_period = atoi(val);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        if (0 == strncmp(name, "base_plpmtu", 11))
 | 
			
		||||
        {
 | 
			
		||||
            settings->es_base_plpmtu = atoi(val);
 | 
			
		||||
            return 0;
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case 12:
 | 
			
		||||
        if (0 == strncmp(name, "idle_conn_to", 12))
 | 
			
		||||
| 
						 | 
				
			
			@ -1975,7 +1990,7 @@ set_engine_option (struct lsquic_engine_settings *settings,
 | 
			
		|||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case 23:
 | 
			
		||||
        if (0 == strncmp(name, "max_udp_payload_size_rx", 18))
 | 
			
		||||
        if (0 == strncmp(name, "max_udp_payload_size_rx", 23))
 | 
			
		||||
        {
 | 
			
		||||
            settings->es_max_udp_payload_size_rx = atoi(val);
 | 
			
		||||
            return 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -2008,7 +2023,9 @@ set_engine_option (struct lsquic_engine_settings *settings,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define MAX_PACKOUT_BUF_SZ 1370
 | 
			
		||||
/* So that largest allocation in PBA fits in 4KB */
 | 
			
		||||
#define PBA_SIZE_MAX 0x1000
 | 
			
		||||
#define PBA_SIZE_THRESH (PBA_SIZE_MAX - sizeof(uintptr_t))
 | 
			
		||||
 | 
			
		||||
struct packout_buf
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -2032,12 +2049,6 @@ pba_allocate (void *packout_buf_allocator, void *peer_ctx, unsigned short size,
 | 
			
		|||
    struct packout_buf_allocator *const pba = packout_buf_allocator;
 | 
			
		||||
    struct packout_buf *pb;
 | 
			
		||||
 | 
			
		||||
    if (size > MAX_PACKOUT_BUF_SZ)
 | 
			
		||||
    {
 | 
			
		||||
        fprintf(stderr, "packout buf size too large: %hu", size);
 | 
			
		||||
        abort();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (pba->max && pba->n_out >= pba->max)
 | 
			
		||||
    {
 | 
			
		||||
        LSQ_DEBUG("# outstanding packout bufs reached the limit of %u, "
 | 
			
		||||
| 
						 | 
				
			
			@ -2047,16 +2058,24 @@ pba_allocate (void *packout_buf_allocator, void *peer_ctx, unsigned short size,
 | 
			
		|||
 | 
			
		||||
#if LSQUIC_USE_POOLS
 | 
			
		||||
    pb = SLIST_FIRST(&pba->free_packout_bufs);
 | 
			
		||||
    if (pb)
 | 
			
		||||
    if (pb && size <= PBA_SIZE_THRESH)
 | 
			
		||||
        SLIST_REMOVE_HEAD(&pba->free_packout_bufs, next_free_pb);
 | 
			
		||||
    else if (size <= PBA_SIZE_THRESH)
 | 
			
		||||
        pb = malloc(PBA_SIZE_MAX);
 | 
			
		||||
    else
 | 
			
		||||
        pb = malloc(sizeof(uintptr_t) + size);
 | 
			
		||||
#else
 | 
			
		||||
    pb = malloc(sizeof(uintptr_t) + size);
 | 
			
		||||
#endif
 | 
			
		||||
        pb = malloc(MAX_PACKOUT_BUF_SZ);
 | 
			
		||||
 | 
			
		||||
    if (pb)
 | 
			
		||||
    {
 | 
			
		||||
        * (uintptr_t *) pb = size;
 | 
			
		||||
        ++pba->n_out;
 | 
			
		||||
 | 
			
		||||
    return pb;
 | 
			
		||||
        return (uintptr_t *) pb + 1;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
        return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2064,12 +2083,16 @@ void
 | 
			
		|||
pba_release (void *packout_buf_allocator, void *peer_ctx, void *obj, char ipv6)
 | 
			
		||||
{
 | 
			
		||||
    struct packout_buf_allocator *const pba = packout_buf_allocator;
 | 
			
		||||
    obj = (uintptr_t *) obj - 1;
 | 
			
		||||
#if LSQUIC_USE_POOLS
 | 
			
		||||
    struct packout_buf *const pb = obj;
 | 
			
		||||
    SLIST_INSERT_HEAD(&pba->free_packout_bufs, pb, next_free_pb);
 | 
			
		||||
#else
 | 
			
		||||
    free(obj);
 | 
			
		||||
    if (* (uintptr_t *) obj <= PBA_SIZE_THRESH)
 | 
			
		||||
    {
 | 
			
		||||
        struct packout_buf *const pb = obj;
 | 
			
		||||
        SLIST_INSERT_HEAD(&pba->free_packout_bufs, pb, next_free_pb);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
#endif
 | 
			
		||||
        free(obj);
 | 
			
		||||
    --pba->n_out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue