On Fri, Mar 5, 2021 at 1:28 PM Samuel Thibault wrote: > Daniel P. Berrangé, le mer. 03 mars 2021 18:11:41 +0000, a ecrit: > > On Wed, Mar 03, 2021 at 10:06:50AM -0800, Doug Evans wrote: > > > On Sun, Feb 28, 2021 at 1:40 PM Samuel Thibault < > samuel.thibault@gnu.org> > > > wrote: > > > > > > > > + Examples: > > > > > + hostfwd_add net0 tcp:127.0.0.1:10022-:22 > > > > > + hostfwd_add net0 tcp:[::1]:10022-[fe80::1:2:3:4]:22 > > > > > > > > Yep, that looks good to me. > > > > > > Daniel, you wanted me to use inet_parse(). > > > Is the above syntax ok with you? > > > You must have had some expectation that at least some of > > > the various flags that inet_parse() recognizes would be needed here. > > > > It feels like the ,ipv4=on|off,ipv6=on|off flags are relevant here, > > especially in the empty address case. eg > > > > tcp::10022 - attempt to listen on both ipv4 + ipv6 > > tcp::10022,ipv4=off - listen on default address, but only for ipv6 > > tcp::10022,ipv6=off - listen on default address, but only for ipv4 > > > > Basically this ends up bringing the hostfwd stuff into alignment with > > the way other backends deal with this > > I'm fine with this yes, better have a coherent user interface. > Cool. Here's the current help text I have: ---snip--- #ifdef CONFIG_SLIRP { .name = "hostfwd_add", .args_type = "arg1:s,arg2:s?", .params = "[netdev_id] [tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport", .help = "redirect TCP or UDP connections from host to guest (requires -net user)", .cmd = hmp_hostfwd_add, }, #endif SRST ``hostfwd_add`` Redirect TCP or UDP connections from host to guest (requires -net user). IPv6 addresses are wrapped in square brackets, IPv4 addresses are not. Examples: hostfwd_add net0 tcp:127.0.0.1:10022-:22 hostfwd_add net0 tcp:[::1]:10022-[fe80::1:2:3:4]:22 Empty host addresses: An empty address for the host, expressed as either "" or "[]", is interpreted as listen at any address for both IPv4 and IPv6. To listen on only IPv4 one can use "0.0.0.0". The equivalent IPv6 address, "[::]", is interpreted as listen on both IPv4 and IPv6 addresses. To listen on only IPv6 addresses, add ",ipv4=off" to the address. E.g., hostfwd_add net0 tcp::10022,ipv4=off-[fe80::1:2:3:4]:22 hostfwd_add net0 tcp:[]:10022,ipv4=off-[fe80::1:2:3:4]:22 hostfwd_add net0 tcp:[::]:10022,ipv4=off-[fe80::1:2:3:4]:22 And similarly for IPv4 only: hostfwd_add net0 tcp::10022,ipv6=off-[fe80::1:2:3:4]:22 hostfwd_add net0 tcp:[]:10022,ipv6=off-[fe80::1:2:3:4]:22 Empty guest addresses: An empty guest address for IPv4 is translated to the guest's address, assuming that the guest is using DHCP to acquire its address. Note that Libslirp currently only provides a "stateless" DHCPv6 server, a consequence of which is that it cannot do the "addr-any" translation to the guest address that is done for IPv4. In other words, the following is currently not supported: hostfwd_add net0 tcp::10022-:22, the guest address is required. ERST ---snip--- Any corrections or suggestions?