summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp/tcp.c
diff options
context:
space:
mode:
authorJon Anderson <Jonathan.Anderson@Sun.COM>2008-12-22 09:03:55 -0800
committerJon Anderson <Jonathan.Anderson@Sun.COM>2008-12-22 09:03:55 -0800
commita12220b361a75184d0264af9191a61f30c5293d8 (patch)
treef3ee87583b2a3414a1521eef58fd5a29bb48facf /usr/src/uts/common/inet/tcp/tcp.c
parenta9489f613f667faf21ee68381b627b28ddb22188 (diff)
downloadillumos-gate-a12220b361a75184d0264af9191a61f30c5293d8.tar.gz
6763730 port in use detection incorrect for different local ip addresses
6670527 Simultaneous connect() issued from multiple shared stack zones fails with EADDRINUSE
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp.c')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp.c b/usr/src/uts/common/inet/tcp/tcp.c
index 16dea2a7e0..f4c440fd94 100644
--- a/usr/src/uts/common/inet/tcp/tcp.c
+++ b/usr/src/uts/common/inet/tcp/tcp.c
@@ -4570,6 +4570,8 @@ tcp_conn_create_v6(conn_t *lconnp, conn_t *connp, mblk_t *mp,
connp->conn_send = ip_output;
connp->conn_recv = tcp_input;
+ IN6_IPADDR_TO_V4MAPPED(ipha->ipha_dst,
+ &connp->conn_bound_source_v6);
IN6_IPADDR_TO_V4MAPPED(ipha->ipha_dst, &connp->conn_srcv6);
IN6_IPADDR_TO_V4MAPPED(ipha->ipha_src, &connp->conn_remv6);
@@ -4606,6 +4608,7 @@ tcp_conn_create_v6(conn_t *lconnp, conn_t *connp, mblk_t *mp,
connp->conn_send = ip_output_v6;
connp->conn_recv = tcp_input;
+ connp->conn_bound_source_v6 = ip6h->ip6_dst;
connp->conn_srcv6 = ip6h->ip6_dst;
connp->conn_remv6 = ip6h->ip6_src;
@@ -4868,6 +4871,7 @@ tcp_conn_create_v4(conn_t *lconnp, conn_t *connp, ipha_t *ipha,
connp->conn_recv = tcp_input;
connp->conn_fully_bound = B_FALSE;
+ IN6_IPADDR_TO_V4MAPPED(ipha->ipha_dst, &connp->conn_bound_source_v6);
IN6_IPADDR_TO_V4MAPPED(ipha->ipha_dst, &connp->conn_srcv6);
IN6_IPADDR_TO_V4MAPPED(ipha->ipha_src, &connp->conn_remv6);
connp->conn_fport = *(uint16_t *)tcph->th_lport;