From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202502 header.b=Q/8WngYg; dkim-atps=neutral Received: from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by passt.top (Postfix) with ESMTPS id 0D99C5A026F for ; Tue, 04 Feb 2025 06:42:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202502; t=1738647727; bh=nEfIerSiNd7/tpd8piCynhWtmZPB/lKB+Xo9kwvf64Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Q/8WngYgawQ+JxzesBN7erD1ar9b2bQshRCg+/NfnYSF5mlLxkV/QElBjmhsp0QGo diNxJSaQjK/J187W5yK6O7cMijRVaibK6wJZ4MT8G5SnDIKqPYgYgeWKvg7wWm3HKy zr3cuVpB8Uzk19VuqYKiVF+IhhxPDUVKnW/3c8kmfl93OO3AknL9b0+uLfZ3katlVq 3YmuGSfQ8xgd9KftZXOHFtHADJFwM7gMNyYvB0y89yRGm8qObPWxriHyNkI4epkphU /vkBTL/ogO2pk5Jt+Crc6Y0yMI/hFjSDVDOkQsS5iX9EZrnXR82y2oWQWG/O1ZTTvL XRNolwBSTXKaA== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4YnC1C2Pl6z4wcD; Tue, 4 Feb 2025 16:42:07 +1100 (AEDT) From: David Gibson To: passt-dev@passt.top, Stefano Brivio Subject: [PATCH v2 3/3] tcp: Simplify handling of getsockname() Date: Tue, 4 Feb 2025 16:42:15 +1100 Message-ID: <20250204054215.644811-4-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250204054215.644811-1-david@gibson.dropbear.id.au> References: <20250204054215.644811-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: R6QKEQP7P2EQ54UE4M6QJYV6EHZIKP4H X-Message-ID-Hash: R6QKEQP7P2EQ54UE4M6QJYV6EHZIKP4H X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: For migration we need to get the specific local address and port for connected sockets with getsockname(). We currently open code marshalling the results into the flow entry. However, we already have inany_from_sockaddr() which handles the fiddly parts of this, so use it. Also report failures, which may make debugging problems easier. Signed-off-by: David Gibson --- tcp.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/tcp.c b/tcp.c index 7ce0f4cb..dbdaa9d9 100644 --- a/tcp.c +++ b/tcp.c @@ -1712,24 +1712,14 @@ static void tcp_conn_from_tap(const struct ctx *c, sa_family_t af, tcp_epoll_ctl(c, conn); if (c->mode == MODE_VU) { /* To rebind to same oport after migration */ - if (af == AF_INET) { - struct sockaddr_in s_in; - - sl = sizeof(s_in); - if (!getsockname(s, (struct sockaddr *)&s_in, &sl)) { - /* NOLINTNEXTLINE(clang-analyzer-core.CallAndMessage) */ - tgt->oport = ntohs(s_in.sin_port); - tgt->oaddr = inany_from_v4(s_in.sin_addr); - } - } else { - struct sockaddr_in6 s_in6; + union sockaddr_inany sa; + socklen_t sl = sizeof(sa); - sl = sizeof(s_in6); - if (!getsockname(s, (struct sockaddr *)&s_in6, &sl)) { - /* NOLINTNEXTLINE(clang-analyzer-core.CallAndMessage) */ - tgt->oport = ntohs(s_in6.sin6_port); - tgt->oaddr.a6 = s_in6.sin6_addr; - } + if (!getsockname(s, &sa.sa, &sl)) { + inany_from_sockaddr(&tgt->oaddr, &tgt->oport, &sa); + } else { + err("Failed to get local address for socket: %s", + strerror_(errno)); } } -- 2.48.1