From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by passt.top (Postfix) with ESMTPS id 74A325A9CD3 for ; Fri, 3 May 2024 03:11:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1714698697; bh=m+O40tHdrz9qjFPX8u8c6FcRHtq6Xb2bplhzGTotZOw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gSLHFwx2+c58fIQ1f+TgqBJyZw2WekfR4/MnZvBg8rL2j2cWnpWm7oGnjEwGceqqh mq9rMS5gSP7/ChAII5qGU8JJuMuEAUXu78Q8WFkMXHhv67FJQVDr6rfP496Xrxrw8H OzjQKczbkThpeeNvatdUhCB67NcM3MOJcewSNA2/dMPHi2L2+4gTNIhbt7u+uM8gZ0 3mR2kdSBneNEWSba91BTq7/XyzKsz0ijpUq84mI+W3lT9rYPZmK9Et4j+jQbhBghV5 NdCwuzWV9i5ccWzBQ4sxqFwpvkW9h/7CYZmb4+Qf9sUixXJ4rvp5Q4HRUslCwddTxf JtPpXsE2FH4cQ== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4VVt6x67V0z4xPX; Fri, 3 May 2024 11:11:37 +1000 (AEST) From: David Gibson To: passt-dev@passt.top, Stefano Brivio Subject: [PATCH v4 11/16] icmp: Populate flowside information Date: Fri, 3 May 2024 11:11:30 +1000 Message-ID: <20240503011135.2924437-12-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240503011135.2924437-1-david@gibson.dropbear.id.au> References: <20240503011135.2924437-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: DE7SHZYM6AMYLB6OE7WA4B44DTBIIRPB X-Message-ID-Hash: DE7SHZYM6AMYLB6OE7WA4B44DTBIIRPB 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 ICMP (ping) flows we currently don't populate the common flowside fields. Fill out those parts of the common information that we can easily obtain, using the ICMP id as the "port" on both ends. Signed-off-by: David Gibson --- icmp.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/icmp.c b/icmp.c index 1c5cf84..c000175 100644 --- a/icmp.c +++ b/icmp.c @@ -150,16 +150,23 @@ static void icmp_ping_close(const struct ctx *c, * @id_sock: Pointer to ping flow entry slot in icmp_id_map[] to update * @af: Address family, AF_INET or AF_INET6 * @id: ICMP id for the new socket + * @pif: pif originating the ping request + * @saddr: Source address + * @daddr: Destination address * * Return: Newly opened ping flow, or NULL on failure */ static struct icmp_ping_flow *icmp_ping_new(const struct ctx *c, struct icmp_ping_flow **id_sock, - sa_family_t af, uint16_t id) + sa_family_t af, uint16_t id, + uint8_t pif, const void *saddr, + const void *daddr) { uint8_t flowtype = af == AF_INET ? FLOW_PING4 : FLOW_PING6; union epoll_ref ref = { .type = EPOLL_TYPE_PING }; union flow *flow = flow_alloc(); + struct flowside *sockside = &flow->f.side[SOCKSIDE]; + struct flowside *tapside = &flow->f.side[TAPSIDE]; struct icmp_ping_flow *pingf; const void *bind_addr; const char *bind_if; @@ -167,6 +174,9 @@ static struct icmp_ping_flow *icmp_ping_new(const struct ctx *c, if (!flow) return NULL; + flowside_from_af(tapside, pif, af, daddr, id, saddr, id); + flowside_from_af(sockside, PIF_HOST, af, NULL, 0, daddr, 0); + pingf = FLOW_START(flow, flowtype, ping, TAPSIDE); pingf->seq = -1; @@ -228,7 +238,6 @@ int icmp_tap_handler(const struct ctx *c, uint8_t pif, sa_family_t af, uint16_t id, seq; void *pkt; - (void)saddr; ASSERT(pif == PIF_TAP); if (af == AF_INET) { @@ -269,7 +278,8 @@ int icmp_tap_handler(const struct ctx *c, uint8_t pif, sa_family_t af, } if (!(pingf = *id_sock)) - if (!(pingf = icmp_ping_new(c, id_sock, af, id))) + if (!(pingf = icmp_ping_new(c, id_sock, af, id, + pif, saddr, daddr))) return 1; pingf->ts = now->tv_sec; -- 2.44.0