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=fail reason="key not found in DNS" header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202312 header.b=OYR/pJ5v; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id 0FB215A0275 for ; Fri, 16 Aug 2024 07:40:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202312; t=1723786806; bh=K7phIOaxa+fKs0qCzGZ30nVWNRuO2gUjvzc3KPt9glI=; h=From:To:Cc:Subject:Date:From; b=OYR/pJ5vSJ9upyVH3ZIUR0lAGzj8OZTNP/zStWvH8R6ucfkrRme1oSM9O9EzQRnGx YG6QyzVwlEp8N+SlpYLT7rLw0rcawU0jgbzyGsaV6OFvD8Vn+PesJFYMTrVacUZ8SE 5TlXQUCGoE1gnHKiu3RFdwy/tFJHCvW0xfkx8sJlV7gcHsc/IQsfZ8u/8Ziydl56D1 0yJeAw2WeE/un1/afOaL0W7dBAvx0m8QoiJEzAFI9a8GU1nyIx29bRg2fxxhepK0Lt 4BGAat0JuyTtjM7j+Pr5GoVAkmbm+usfeI7dbve00kfdjObjfu6h34lHdEMhmSMBUS GGHPusZTLF9Ng== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4WlW6G6qMQz4x04; Fri, 16 Aug 2024 15:40:06 +1000 (AEST) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH 00/22] RFC: Allow configuration of special case NATs Date: Fri, 16 Aug 2024 15:39:41 +1000 Message-ID: <20240816054004.1335006-1-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.46.0 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: 26U247EL6HWSGPQ45IULFS6KZFQYBWBB X-Message-ID-Hash: 26U247EL6HWSGPQ45IULFS6KZFQYBWBB 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: Paul Holzinger , 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: Based on Stefano's recent patch for faster tests. Allow the user to specify which addresses are translated when used by the guest, rather than always being the gateway address or nothing. We also allow this remapping to go to the host's global address (more precisely the address assigned to the guest) rather than just host loopback. Suggestions for better names for the new options in patches 20 & 22 are most welcome. Along the way to implementing that make many changes to clarify what various addresses we track mean, fixing a number of small bugs as well. NOTE: there is a bug in 21/22 which breaks some of the passt_tcp perf tests. I haven't managed to figure out why it's causing the problem, or even what the exact triggering conditions are (running the single stalling iperf alone doesn't do it). Have to wrap up for today, so I thought I'd get this out for review anyway. Paul, amongst other things, I think this will allow podman to (finally) nicely address #19213, picking an address to remap to the host's external address with --nat-guest-addr, much like it already uses --dns-forward. David Gibson (22): treewide: Use "our address" instead of "forwarding address" util: Helper for formatting MAC addresses treewide: Rename MAC address fields for clarity treewide: Use struct assignment instead of memcpy() for IP addresses conf: Use array indices rather than pointers for DNS array slots conf: More accurately count entries added in get_dns() conf: Move DNS array bounds checks into add_dns[46] conf: Move adding of a nameserver from resolv.conf into subfunction conf: Correct setting of dns_match address in add_dns6() conf: Treat --dns addresses as guest visible addresses conf: Remove incorrect initialisation of addr_ll_seen util: Correct sock_l4() binding for link local addresses treewide: Change misleading 'addr_ll' name Clarify which addresses in ip[46]_ctx are meaningful where Initialise our_tap_ll to ip6.gw when suitable fwd: Helpers to clarify what host addresses aren't guest accessible fwd: Split notion of "our tap address" from gateway for IPv4 Don't take "our" MAC address from the host conf, fwd: Split notion of gateway/router from guest-visible host address conf: Allow address remapped to host to be configured fwd: Distinguish translatable from untranslatable addresses on inbound fwd, conf: Allow NAT of the guest's assigned address arp.c | 4 +- conf.c | 328 +++++++++++++++++++++++++----------------- dhcp.c | 19 +-- dhcpv6.c | 21 +-- flow.c | 72 +++++----- flow.h | 18 +-- fwd.c | 170 +++++++++++++++++----- icmp.c | 4 +- ndp.c | 9 +- passt.1 | 45 +++++- passt.c | 2 +- passt.h | 53 +++++-- pasta.c | 14 +- tap.c | 12 +- tcp.c | 33 ++--- tcp_internal.h | 2 +- test/lib/setup | 11 +- test/passt_in_ns/dhcp | 73 ++++++++++ test/passt_in_ns/tcp | 38 +++-- test/passt_in_ns/udp | 22 +-- test/perf/passt_tcp | 33 ++--- test/perf/passt_udp | 31 ++-- test/perf/pasta_tcp | 29 ++-- test/perf/pasta_udp | 25 ++-- test/run | 4 +- udp.c | 12 +- util.c | 22 ++- util.h | 4 +- 28 files changed, 719 insertions(+), 391 deletions(-) create mode 100644 test/passt_in_ns/dhcp -- 2.46.0