path select

This commit is contained in:
Jop Zitman 2025-01-23 02:03:35 +08:00
parent 9af4c5b952
commit 9045ebb1c8
3 changed files with 8 additions and 5 deletions

2
extern/picoquic vendored

@ -1 +1 @@
Subproject commit e00c93d0a6375a41cf25e1ddf24d891632f77cca
Subproject commit 544f9a4d2925abfe3747c6fa11a3eeb748982073

View file

@ -10,8 +10,8 @@ typedef struct st_slot_t {
struct sockaddr_storage peer_addr;
struct sockaddr_storage local_addr;
picoquic_cnx_t* cnx;
int path_id;
bool is_poll_packet;
bool responded;
} slot_t;
#endif // SLIPSTREAM_SLOT

View file

@ -123,6 +123,7 @@ int slipstream_packet_loop_(picoquic_network_thread_ctx_t* thread_ctx, picoquic_
slot_t* slot = &slots[nb_slots_written];
assert(slot != NULL);
memset(slot, 0, sizeof(slot_t));
slot->path_id = -1;
nb_slots_written++;
unsigned char* decoded;
@ -144,14 +145,16 @@ int slipstream_packet_loop_(picoquic_network_thread_ctx_t* thread_ctx, picoquic_
uint8_t* received_buffer = buffer;
uint64_t current_time = picoquic_current_time();
picoquic_cnx_t* last_cnx = NULL;
int last_path_id = -1;
int ret = picoquic_incoming_packet_ex(quic, received_buffer,
(size_t)bytes_recv, (struct sockaddr*)&peer_addr,
(struct sockaddr*)&local_addr, if_index_to, received_ecn,
&last_cnx, current_time);
&last_cnx, &last_path_id, current_time);
if (ret < 0) {
return ret;
}
slot->cnx = last_cnx;
slot->path_id = last_path_id;
nb_packet_received++;
if (!param->is_client) {
@ -177,7 +180,7 @@ int slipstream_packet_loop_(picoquic_network_thread_ctx_t* thread_ctx, picoquic_
picoquic_connection_id_t log_cid;
int ret;
if (!param->is_client && slot->cnx) {
ret = picoquic_prepare_packet_ex(slot->cnx, loop_time,
ret = picoquic_prepare_packet_ex(slot->cnx, slot->path_id, loop_time,
send_buffer, send_buffer_size, &send_length,
&peer_addr, &local_addr, &if_index, send_msg_ptr);
}
@ -256,7 +259,7 @@ int slipstream_packet_loop_(picoquic_network_thread_ctx_t* thread_ctx, picoquic_
struct sockaddr_storage peer_addr = {0};
struct sockaddr_storage local_addr = {0};
int if_index = param->dest_if;
int ret = picoquic_prepare_packet_ex(slot->cnx, loop_time,
int ret = picoquic_prepare_packet_ex(slot->cnx, -1, loop_time,
send_buffer, send_buffer_size, &send_length,
&peer_addr, &local_addr, &if_index, send_msg_ptr);
if (ret < 0) {