From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from gandalf.ozlabs.org (gandalf.ozlabs.org [150.107.74.76]) by passt.top (Postfix) with ESMTPS id 23E155A027D for ; Thu, 29 Feb 2024 05:15:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1709180136; bh=Nob6M/FjN4pEOYpP8RwiSaK60I5iCezONEMAsOp7jW0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=n/Dd3pIIgaX/LXZRK52hjjznbuHjJG5Y13WFPACt3Nf9mgVKGLG/PbWfpC9ftVq3w bnhA5DFd77zigr4bCH7vo/mCzHIWY4CUpS+bwpiOdIJE87hTfQKt2ExEsYdk+/GAdO 3jMnDaPLPzORjoxdL7j37PdYGwPT1iRZqpDYBehomt16PJ7RtX7BWFRur4optOY9ck h+7RAC6O7eGic5ioHLF87aDy1F2rhonsdS8t7LgrsS2QP37/CNex9951CAW98J0qG/ MuZdJBIVSrp4NQ4JP6TeOqGYjpeSg7SuC40ytLZsf/3lce9Fz3v0N5M6ZERct8H3is /8cEZKZz7uCIA== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4TldDm4ZK4z4wc5; Thu, 29 Feb 2024 15:15:36 +1100 (AEDT) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH 2/3] icmp: Flow based error reporting Date: Thu, 29 Feb 2024 15:15:33 +1100 Message-ID: <20240229041534.2573559-3-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240229041534.2573559-1-david@gibson.dropbear.id.au> References: <20240229041534.2573559-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: KT4UK2DWJN3FPPTF2D2WAF3IPNQGXQYQ X-Message-ID-Hash: KT4UK2DWJN3FPPTF2D2WAF3IPNQGXQYQ 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: Use flow_dbg() and flow_err() helpers to generate flow-linked error messages in most places. Make a few small improvements to the messages while we're at it. This allows us to avoid the awkward 'pname' variables since whether we're dealing with ICMP or ICMPv6 is already built into the flow type which these helpers include. Signed-off-by: David Gibson --- icmp.c | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/icmp.c b/icmp.c index 1caf791d..63adafcf 100644 --- a/icmp.c +++ b/icmp.c @@ -61,7 +61,6 @@ void icmp_sock_handler(const struct ctx *c, sa_family_t af, union epoll_ref ref) { struct icmp_ping_flow *pingf = af == AF_INET ? icmp_id_map[V4][ref.icmp.id] : icmp_id_map[V6][ref.icmp.id]; - const char *const pname = af == AF_INET ? "ICMP" : "ICMPv6"; union sockaddr_inany sr; socklen_t sl = sizeof(sr); char buf[USHRT_MAX]; @@ -75,8 +74,7 @@ void icmp_sock_handler(const struct ctx *c, sa_family_t af, union epoll_ref ref) n = recvfrom(ref.fd, buf, sizeof(buf), 0, &sr.sa, &sl); if (n < 0) { - warn("%s: recvfrom() error on ping socket: %s", - pname, strerror(errno)); + flow_err(pingf, "recvfrom() error: %s", strerror(errno)); return; } if (sr.sa_family != af) @@ -113,8 +111,9 @@ void icmp_sock_handler(const struct ctx *c, sa_family_t af, union epoll_ref ref) pingf->seq = seq; } - debug("%s: echo reply to tap, ID: %"PRIu16", seq: %"PRIu16, pname, - ref.icmp.id, seq); + flow_dbg(pingf, "echo reply to tap, ID: %"PRIu16", seq: %"PRIu16, + ref.icmp.id, seq); + if (af == AF_INET) tap_icmp4_send(c, sr.sa4.sin_addr, tap_ip4_daddr(c), buf, n); else if (af == AF_INET6) @@ -123,7 +122,7 @@ void icmp_sock_handler(const struct ctx *c, sa_family_t af, union epoll_ref ref) return; unexpected: - warn("%s: Unexpected packet on ping socket", pname); + flow_err(pingf, "Unexpected packet on ping socket"); } /** @@ -158,7 +157,6 @@ 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) { - const char *const pname = af == AF_INET ? "ICMP" : "ICMPv6"; uint8_t flowtype = af == AF_INET ? FLOW_PING4 : FLOW_PING6; union icmp_epoll_ref iref = { .id = id }; union flow *flow = flow_alloc(); @@ -195,9 +193,9 @@ static struct icmp_ping_flow *icmp_ping_new(const struct ctx *c, if (pingf->sock > FD_REF_MAX) goto cancel; - *id_sock = pingf; + flow_dbg(pingf, "new socket %i for echo ID %"PRIu16, pingf->sock, id); - debug("%s: new socket %i for echo ID %"PRIu16, pname, pingf->sock, id); + *id_sock = pingf; return pingf; @@ -222,7 +220,6 @@ int icmp_tap_handler(const struct ctx *c, uint8_t pif, sa_family_t af, const void *saddr, const void *daddr, const struct pool *p, const struct timespec *now) { - const char *const pname = af == AF_INET ? "ICMP" : "ICMPv6"; union sockaddr_inany sa = { .sa_family = af }; const socklen_t sl = af == AF_INET ? sizeof(sa.sa4) : sizeof(sa.sa6); struct icmp_ping_flow *pingf, **id_sock; @@ -276,13 +273,13 @@ int icmp_tap_handler(const struct ctx *c, uint8_t pif, sa_family_t af, pingf->ts = now->tv_sec; - if (sendto(pingf->sock, pkt, plen, MSG_NOSIGNAL, &sa.sa, sl) < 0) { - debug("%s: failed to relay request to socket: %s", - pname, strerror(errno)); - } else { - debug("%s: echo request to socket, ID: %"PRIu16", seq: %"PRIu16, - pname, id, seq); - } + if (sendto(pingf->sock, pkt, plen, MSG_NOSIGNAL, &sa.sa, sl) < 0) + flow_dbg(pingf, "failed to relay request to socket: %s", + strerror(errno)); + else + flow_dbg(pingf, + "echo request to socket, ID: %"PRIu16", seq: %"PRIu16, + id, seq); return 1; } -- 2.44.0