tcp: allow local port sharing if 5-tuple available 73/26473/4
authorFlorin Coras <fcoras@cisco.com>
Fri, 10 Apr 2020 14:51:46 +0000 (14:51 +0000)
committerDave Barach <openvpp@barachs.net>
Wed, 15 Apr 2020 14:04:04 +0000 (14:04 +0000)
Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Id0c4b46247e7419a328387678a4753cfb1e42d75

src/vnet/tcp/tcp.c

index b1ae374..e4335e0 100644 (file)
@@ -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