public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
* [PATCH v2 0/4] Translate source addresses for ICMP errors
@ 2025-04-17  1:55 David Gibson
  2025-04-17  1:55 ` [PATCH v2 1/4] fwd: Split out helpers for port-independent NAT David Gibson
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: David Gibson @ 2025-04-17  1:55 UTC (permalink / raw)
  To: Stefano Brivio, passt-dev, Jon Maloy; +Cc: David Gibson

We now propagate ICMP errors on UDP flows back into ICMP packets on
the tap interface.  However, we don't always get the source address
right for the synthesized message.  Because ICMPs can be generated by
intermediate routers, that source address might not be one of the
endpoints, so the address translation we already have isn't
sufficient.

Implement properly translating ICMP addresses when we need to.  This
ended up a bit messier than I hoped, but it seems to work.  A simple
case to test this is:

	pasta --config-net --map-host-loopback=172.16.1.1 -- \
		sh -c "echo hello | socat STDIO UDP4:172.16.1.1:10001"

where 10001 is a port where nothing is listening on the host.

Without this series, this will just time out.  pasta sends an ICMP
Port Unreachable message, but it's sent with source address 127.0.0.1
and so discarded by the guest.  With this series, the address is
properly translated and we correctly get the error from socat:

2025/04/16 19:02:37 socat[3] E read(5, 0x555c3dbf2000, 8192): Connection refused

v2:
 * Fix a (bogus) coverity warning
 * Minor cosmetic changes based on Stefano's review

David Gibson (4):
  fwd: Split out helpers for port-independent NAT
  treewide: Improve robustness against sockaddrs of unexpected family
  udp: Rework offender address handling in udp_sock_recverr()
  udp: Translate offender addresses for ICMP messages

 flow.c     | 16 ++++++++--
 fwd.c      | 87 ++++++++++++++++++++++++++++++++++++++----------------
 fwd.h      |  3 ++
 inany.h    | 28 +++++++++++-------
 tcp.c      | 10 +++----
 udp.c      | 81 ++++++++++++++++++++++++++++++++++++--------------
 udp_flow.c |  6 ++--
 7 files changed, 162 insertions(+), 69 deletions(-)

-- 
2.49.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-04-22 12:46 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-04-17  1:55 [PATCH v2 0/4] Translate source addresses for ICMP errors David Gibson
2025-04-17  1:55 ` [PATCH v2 1/4] fwd: Split out helpers for port-independent NAT David Gibson
2025-04-17  1:55 ` [PATCH v2 2/4] treewide: Improve robustness against sockaddrs of unexpected family David Gibson
2025-04-17  1:55 ` [PATCH v2 3/4] udp: Rework offender address handling in udp_sock_recverr() David Gibson
2025-04-17  1:55 ` [PATCH v2 4/4] udp: Translate offender addresses for ICMP messages David Gibson
2025-04-22 12:46 ` [PATCH v2 0/4] Translate source addresses for ICMP errors Stefano Brivio

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).