From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by passt.top (Postfix, from userid 1000) id 47EAF5A026E; Mon, 27 Mar 2023 19:53:08 +0200 (CEST) From: Stefano Brivio To: passt-dev@passt.top Subject: [PATCH] conf: Allow binding to ports on an interface without a specific address Date: Mon, 27 Mar 2023 19:53:08 +0200 Message-Id: <20230327175308.2510177-1-sbrivio@redhat.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: 4JCFNBKQSKS22FDBZXROCB3P7PQWGZS6 X-Message-ID-Hash: 4JCFNBKQSKS22FDBZXROCB3P7PQWGZS6 X-MailFrom: sbrivio@passt.top 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 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: Somebody might want to bind listening sockets to a specific interface, but not a specific address, and there isn't really a reason to prevent that. For example: -t %eth0/2022 Alternatively, we support options such as -t 0.0.0.0%eth0/2022 and -t ::%eth0/2022, but not together, for the same port. Enable this kind of syntax and add examples to the man page. Reported-by: Paul Holzinger Link: https://github.com/containers/podman/issues/14425#issuecomment-1485192195 Signed-off-by: Stefano Brivio --- conf.c | 4 +++- passt.1 | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/conf.c b/conf.c index 04e9956..f519a6a 100644 --- a/conf.c +++ b/conf.c @@ -263,7 +263,9 @@ static void conf_ports(const struct ctx *c, char optname, const char *optarg, ifname++; } - if (inet_pton(AF_INET, buf, addr)) + if (ifname == buf + 1) /* Interface without address */ + addr = NULL; + else if (inet_pton(AF_INET, buf, addr)) af = AF_INET; else if (inet_pton(AF_INET6, buf, addr)) af = AF_INET6; diff --git a/passt.1 b/passt.1 index 4c90634..cb7ae4e 100644 --- a/passt.1 +++ b/passt.1 @@ -385,6 +385,9 @@ Forward local port 22, bound to 192.0.2.1, to port 22 on the guest -t 192.0.2.1%eth0/22 Forward local port 22, bound to 192.0.2.1 and interface eth0, to port 22 .TP +-t %eth0/22 +Forward local port 22, bound to any address on interface eth0, to port 22 +.TP -t 2000-5000,~3000-3010 Forward local ports between 2000 and 5000, except for those between 3000 and 3010 @@ -467,6 +470,9 @@ Forward local port 22, bound to 192.0.2.1, to port 22 in the target namespace -t 192.0.2.1%eth0/22 Forward local port 22, bound to 192.0.2.1 and interface eth0, to port 22 .TP +-t %eth0/22 +Forward local port 22, bound to any address on interface eth0, to port 22 +.TP -t 2000-5000,~3000-3010 Forward local ports between 2000 and 5000, except for those between 3000 and 3010 -- 2.39.2