On Fri, Mar 5, 2021 at 1:51 PM Doug Evans <d...@google.com> wrote: > On Fri, Mar 5, 2021 at 1:28 PM Samuel Thibault <samuel.thiba...@gnu.org> > 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.thiba...@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? >
For those following along, there are problems with the above help text (e.g., it's wrong to say "tcp::10022-:22" is not supported, because it obviously is! - the issue is more nuanced than that). And I'm sure there are more that I have yet to find. I'll give reviewers some time to comment on what's there now before sending an updated proposed text.