From 1e8d949781a44846dabbf56e1aab80bbf4cc8d59 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 10 Apr 2020 14:51:46 +0000 Subject: [PATCH] tcp: allow local port sharing if 5-tuple available Type: improvement Signed-off-by: Florin Coras Change-Id: Id0c4b46247e7419a328387678a4753cfb1e42d75 --- src/vnet/tcp/tcp.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c index b1ae37409fd..e4335e06769 100644 --- a/src/vnet/tcp/tcp.c +++ b/src/vnet/tcp/tcp.c @@ -764,7 +764,20 @@ tcp_session_open (transport_endpoint_cfg_t * rmt) rmt, &lcl_addr, &lcl_port); if (rv) - return rv; + { + if (rv != SESSION_E_PORTINUSE) + return rv; + + if (session_lookup_connection (rmt->fib_index, &lcl_addr, &rmt->ip, + lcl_port, rmt->port, TRANSPORT_PROTO_UDP, + rmt->is_ip4)) + return SESSION_E_PORTINUSE; + + /* 5-tuple is available so increase lcl endpoint refcount and proceed + * with connection allocation */ + transport_share_local_endpoint (TRANSPORT_PROTO_UDP, &lcl_addr, + lcl_port); + } /* * Create connection and send SYN -- 2.16.6