udp: use transport port refcnt on accept

Use udp transport refcnt instead of local port refcnt when accepting new
connections.

Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ibc34677b1138682497f98e96b6fddb5b96094ff9
This commit is contained in:
Florin Coras
2024-02-17 11:45:25 -08:00
committed by Dave Barach
parent 9a97fb8ad7
commit 37127f7bcc
3 changed files with 11 additions and 2 deletions

View File

@ -43,6 +43,14 @@ udp_connection_register_port (u16 lcl_port, u8 is_ip4)
__ATOMIC_RELAXED);
}
void
udp_connection_share_port (u16 lcl_port, u8 is_ip4)
{
udp_main_t *um = &udp_main;
__atomic_add_fetch (&um->transport_ports_refcnt[is_ip4][lcl_port], 1,
__ATOMIC_RELAXED);
}
static void
udp_connection_unregister_port (u16 lcl_port, u8 is_ip4)
{

View File

@ -205,6 +205,7 @@ udp_connection_from_transport (transport_connection_t * tc)
void udp_connection_free (udp_connection_t * uc);
udp_connection_t *udp_connection_alloc (u32 thread_index);
void udp_connection_share_port (u16 lcl_port, u8 is_ip4);
always_inline udp_connection_t *
udp_connection_clone_safe (u32 connection_index, u32 thread_index)

View File

@ -123,8 +123,8 @@ udp_connection_accept (udp_connection_t * listener, session_dgram_hdr_t * hdr,
udp_connection_free (uc);
return 0;
}
transport_share_local_endpoint (TRANSPORT_PROTO_UDP, &uc->c_lcl_ip,
uc->c_lcl_port);
udp_connection_share_port (uc->c_lcl_port, uc->c_is_ip4);
return uc;
}