From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=haytok.jp Received: from outbound.ms.icloud.com (ms-2006d-snip6-11.eps.apple.com [IPv6:2a01:b747:3002:206::29]) by passt.top (Postfix) with ESMTPS id 5818F5A0265 for ; Sun, 18 Oct 2026 17:43:17 +0200 (CEST) Received: from outbound.ms.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-west-3a-100-percent-10 (Postfix) with ESMTPS id 035C11800100; Sun, 18 Oct 2026 15:43:13 +0000 (UTC) X-ICL-RepId: 01a14fae-6dcd-720b-8228-46a083e7afab X-ICL-Out-Info: HUtFAUMEWwJACUgATUQeDx5WFlZNRAJCTQhNAEMFXwReC0gHQwZSClBcHA4JUh1yGFgBRwJcRVgAGR5XUF8KSwRWEx0HR0tAEwRKEwVSB11NVg1HD1geXBQXFUBDXgheH0wcHQ5YBhIATQoONgZZBV4JVgNDBTYSFF1FWwxOH10bFxJDTVoCVk0FSgNfAVoCQQFJBlkFWQdeDE4FWQdGA11dHUUtXwpLBFYTHQdHVRIEQAhWUFQeQQRWFWwJWAZTGVc= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=haytok.jp; s=sig1; t=1792338196; x=1823874196; bh=nhsWvb8VMjmBGBABzstmR7rEYNWvNqyMd15b6U+m2CQ=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=gMG8CtBYR9Ds/ZL12misUcPpqYE3e61AnKwjG7gsWadl87EMhZ8meILh4EUuudkCxp0wu1JPeQS2XZlgodddHx/cVPqcQdSUHk/V502v6PcwjRhVra+9QwSGw9TMR0QXYVgD7ZSDiBJcbyni4Mpp3eR9UkvP8YsInpor/7J5wlHdQ6URwAWdlnn5XFFml0w4ohrUxyEIkwZBWxB4K3lsDE+QNBbm5jjMIPMHUcPIWZei+Au8rojhI6IoVGRUZzvT9NuXEce67jqiw4BXifYDx21oUKGmkeCqHq220zR4/NorRYu+fQyD1tsnt/wFwSChrhYJPU7hqD+4yRGWIuP+vw== mail-alias-created-date: 1766251435121 Received: from localhost.localdomain (unknown [17.156.208.39]) by p00-icloudmta-asmtp-us-west-3a-100-percent-10 (Postfix) with ESMTPSA id 86F7F18002FC; Sun, 18 Oct 2026 15:43:12 +0000 (UTC) From: Hayato Kiwata To: passt-dev@passt.top Subject: [PATCH] fwd: Keep listening on remaining rules if one of them fails to bind Date: Mon, 19 Oct 2026 00:42:25 +0900 Message-ID: <20261018154225.56640-1-dev@haytok.jp> X-Mailer: git-send-email 2.50.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Authority-Info-Out: v=2.4 cv=CaQFJbrl c=1 sm=1 tr=0 ts=6ad4e912 cx=c_apl:c_pps:t_out a=kRaGL2Q7qLiahLf3O6OaIA==:117 a=kRaGL2Q7qLiahLf3O6OaIA==:17 a=660iZSQnnn4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=8o6GeXlS_SOydob92b8A:9 a=lqcHg5cX4UMA:10 X-Proofpoint-GUID: NxIHMxR4fQODElLC5Lqt8NBuIT9xt2K9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYxMDE4MDA2MiBTYWx0ZWRfX1xBwKC17P6+l rX+4hJeESSe3yrI1euHn302RrSDPmeeXLK0xXQkApFmUB7tVpkGPt0THvuu6IaojmHfXnuXWtbf zKlzCmj7+doe5GZyUoSdDHGlzj9ygk0IJPr1ekLXgPBCxkJ/g/RQx8igSXRcxLzVOLcJR5grpB+ ZmLiU2JdiAIzK57YCES4jjsJauSCMZ17qLwHu5kGd3ELWX3QIzZaBJfwp+sMmKKdxdOxRhalfwE SaejHt1OXt96JFP4G1n0Vi7luCrCrerdb7AUs1r9jfF9KWbHyYj3JHixH2bo87OIASoG81Mtzrc 0/46h+JKJ+xbsvdcqc8rPSFNghHzmRtUKZ0fy251oVOOHfxMblDKQLYdZRmWfU= X-Proofpoint-ORIG-GUID: NxIHMxR4fQODElLC5Lqt8NBuIT9xt2K9 X-JNJ: AAAAAAABalwUB1aHdRVs5meowYr/A0nwfTMZdsIWgyE25l13zxwL4lYTHu6LG03YcoKbZkqI53EIWHb62aI8GyvBnGDYmy7A+fZ8+e/ku5YG35JNQv02aeDvPZQq+8QkZgXEqlva+VgFtIGkeAJ5wMa5/hi3gIV5xlmu2dQxO7u/Qi/7RNMGaHh7DCldUHzJzPJYjMP5C+wpgiK8d+K6rLvxYpO488CUncOFwTnWqhalZbyTmh8WyGe+a/o+WJc9EhKDq5FffLSn8XRBV6qsz0OYzo5P5iRUJsMUQGtoo399i9gp0HhX5qVb/ezfVLAQlJRzdd0He5l8qfo6el+n7XELCJ1QKWodLrsqBUfEXx5argewoFjgQUuGAuBxds7F7nURjdtm5EYTaGCn145QZXlnNA/APp0Y+ZF0wXEFAO5e/x3BLFcBsyuFfGhF6Age3L+l4sdp0prMKRrbU208Mla5s4TExNJt4zam83pqNPgIB95jCBvZk9rHcylSrpOnIj9likRnJYDREv9FzFVzTf4RFBkulBhFdPk+es6VuVsFK1qRcQy8r4ok0KRUGAB5qHQ1+AewaPOKcI500vuH1OiLljBUxHoxJOuEsNyJOd5YJGGqSJAPHegOPA8yuXhXHlSMbTU1jL8XVkYBMepZL94T97HpnN7s7WzwxURKBAHNGnTK543VPVq2XeCPY/TUKy7ffisB3aOjI9QITEHemrjj0Urhra2RnlIO2RwJgB8zIRI5vGw4gqZ3HgphuC9Mn4HsXyCQGT4naYtTW/MYRfS/eVfFyEgrsclWNf/FVF0oItlNMgPrCU1RHrOxbAXyIKlVo4DTeWkoRXUwpPX4RPD1DwjhHB37m5ZdysebiTAIDVjZn2OYqVDJyPOD3t62Innn+k1gVZhLObjOKxY4WrV9avshpMSyGN2pzgPB2HFN9bgI2dSr8sgnU2yWK9SFR65i2VPoZW6HU8LdXTxo80s5R943FQ5 Mco6Wv4HJu4bi1weXtzQgoNNMO4nCemyLDUV86cm+aqkEXN5Ixzc6XiQoQC9yVFaAQz1UjGgVzirFSNM+KUD8Le7znzyLX7hkcSeUzDshRA5b8dzl4xrnfSLQ9Bp+L9T+Rqhc4rxiaO/HcuVUTWOJx68AU03a78ZZWkSoA8oMBLQSgYm+IP9Pt655TFBSf9JocnrgPAuX8E2W59Gs9wEMpFRg1ukAZwD8r/SuMg2m4kkA6QMaTKXaMUlDDQWDg0FOQy5q X-MailFrom: dev@haytok.jp X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation Message-ID-Hash: Y5CNEWFK3RJCHRS2HYILUH2IPO3BOKWX X-Message-ID-Hash: Y5CNEWFK3RJCHRS2HYILUH2IPO3BOKWX X-Mailman-Approved-At: Sun, 18 Oct 2026 17:59:28 +0200 CC: Hayato Kiwata 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: fwd_listen_sync_() breaks out of the loop as soon as fwd_sync_one() fails. So, if a single rule fails to bind(), for example because the address isn't assigned to the host, no rule after it in the table is even tried, and those forwards don't work. Reproducer: $ pasta --ns-ifname=tap0 --mtu=65520 --config-net --address=10.0.2.100 \ --netmask=24 --gateway=10.0.2.2 --dns-forward=10.0.2.3 --no-map-gw \ --tcp-ns=none --udp-ns=none --ipv4-only --tcp-ports=none \ --udp-ports=none --conf-path=/tmp/.pasta.sock \ -- python3 -m http.server 80 UNIX domain socket bound at /tmp/.pasta.sock Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ... $ pesto -A --tcp-ports=192.0.2.1/8080:80 /tmp/.pasta.sock $ pesto -A --tcp-ports=127.0.0.1/8085:80 /tmp/.pasta.sock $ pesto -s /tmp/.pasta.sock passt/pasta configuration (/tmp/.pasta.sock) HOST TCP [192.0.2.1]:8080 => 80 TCP [127.0.0.1]:8085 => 80 SPLICE $ curl -sS -o /dev/null localhost:8085 curl: (7) Failed to connect to localhost port 8085 after 0 ms: Could not connect to server pasta only reports the failure for port 8080, and never tries to listen on port 8085: Listen failed for HOST TCP port 192.0.2.1/8080: Cannot assign requested address Couldn't listen on requested ports Error switching to new forwarding rules Keep going through the remaining rules if fwd_sync_one() fails, and still return -1 if any of them failed, as before. Signed-off-by: Hayato Kiwata --- fwd.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/fwd.c b/fwd.c index 5679a3d..6c9df01 100644 --- a/fwd.c +++ b/fwd.c @@ -456,9 +456,8 @@ static int fwd_listen_sync_(void *arg) ns_enter(a->c); for (i = 0; i < a->c->fwd[a->pif]->count; i++) { - a->ret = fwd_sync_one(a->c, a->pif, i, a->tcpmap, a->udpmap); - if (a->ret < 0) - break; + if (fwd_sync_one(a->c, a->pif, i, a->tcpmap, a->udpmap) < 0) + a->ret = -1; } return 0; -- 2.50.1 (Apple Git-155)