From: David Gibson <david@gibson.dropbear.id.au>
To: Jon Maloy <jmaloy@redhat.com>
Cc: passt-dev@passt.top, sbrivio@redhat.com, lvivier@redhat.com,
dgibson@redhat.com
Subject: Re: [PATCH v5 2/4] udp: create and send ICMPv4 to local peer when applicable
Date: Mon, 24 Feb 2025 13:13:10 +1100 [thread overview]
Message-ID: <Z7vVtvmvLJsRDdeT@zatzit> (raw)
In-Reply-To: <20250223225951.3534010-3-jmaloy@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 2009 bytes --]
On Sun, Feb 23, 2025 at 05:59:49PM -0500, Jon Maloy wrote:
> When a local peer sends a UDP message to a non-existing port on an
> existing remote host, that host will return an ICMP message containing
> the error code ICMP_PORT_UNREACH, plus the header and the first eight
> bytes of the original message. If the sender socket has been connected,
> it uses this message to issue a "Connection Refused" event to the user.
>
> Until now, we have only read such events from the externally facing
> socket, but we don't forward them back to the local sender because
> we cannot read the ICMP message directly to user space. Because of
> this, the local peer will hang and wait for a response that never
> arrives.
>
> We now fix this for IPv4 by recreating and forwarding a correct ICMP
> message back to the internal sender. We synthesize the message based
> on the information in the extended error structure, plus the returned
> part of the original message body.
>
> Note that for the sake of completeness, we even produce ICMP messages
> for other error codes. We have noticed that at least ICMP_PROT_UNREACH
> is propagated as an error event back to the user.
>
> Signed-off-by: Jon Maloy <jmaloy@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
With the exception of a formatting nit:
> +/**
> + * udp_send_conn_fail_icmp4() - Construct and send ICMP to local peer
> + * @c: Execution context
> + * @ee: Extended error descriptor
> + * @ref: epoll reference
> + * @in: First bytes (max 8) of original UDP message body
> + * @dlen: Length of the read part of original UDP message body
Many of these function comments are inconsistent on whether the
parameter descriptions are separated by spaces or tabs (it should be
tabs).
--
David Gibson (he or they) | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you, not the other way
| around.
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2025-02-24 2:21 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-23 22:59 [PATCH v5 0/4] Reconstruct ICMP headers for failed UDP connect Jon Maloy
2025-02-23 22:59 ` [PATCH v5 1/4] tap: break out building of udp header from tap_udp4_send function Jon Maloy
2025-02-23 22:59 ` [PATCH v5 2/4] udp: create and send ICMPv4 to local peer when applicable Jon Maloy
2025-02-24 2:13 ` David Gibson [this message]
2025-02-23 22:59 ` [PATCH v5 3/4] tap: break out building of udp header from tap_udp6_send function Jon Maloy
2025-02-24 2:16 ` David Gibson
2025-02-23 22:59 ` [PATCH v5 4/4] udp: create and send ICMPv6 to local peer when applicable Jon Maloy
2025-02-24 2:21 ` David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z7vVtvmvLJsRDdeT@zatzit \
--to=david@gibson.dropbear.id.au \
--cc=dgibson@redhat.com \
--cc=jmaloy@redhat.com \
--cc=lvivier@redhat.com \
--cc=passt-dev@passt.top \
--cc=sbrivio@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).