mbox series

[v6,0/4] Add support for ipv6 host forwarding

Message ID 20210415033925.1290401-1-dje@google.com (mailing list archive)
Headers show
Series Add support for ipv6 host forwarding | expand

Message

Doug Evans April 15, 2021, 3:39 a.m. UTC
This patchset takes the original patch from Maxim,
https://www.mail-archive.com/qemu-devel@nongnu.org/msg569573.html
and updates it.

Option hostfwd is extended to support ipv6 addresses.
Commands hostfwd_add, hostfwd_remove are extended as well.

The libslirp part of the patch has been committed upstream,
and is now in qemu. See patch 1/4.

Changes from v5:

1/4 slirp: Advance libslirp submodule to current master
NOTE TO REVIEWERS: It may be a better use of everyone's time if a
maintainer takes on advancing QEMU's libslirp to libslirp's master.
Beyond that, I really don't know what to do except submit this patch as
is currently provided.

2/4: util/qemu-sockets.c: Split host:port parsing out of inet_parse

Also split out parsing of ipv4=on|off, ipv6=on|off

3/4: net/slirp.c: Refactor address parsing

Use InetSocketAddress and getaddrinfo().
Use new libslirp calls: slirp_remove_hostxfwd, slirp_add_hostxfwd.

4/4: net: Extend host forwarding to support IPv6

Recognize ipv4=,ipv6= options.

Note: v5's 3/5 "Recognize []:port (empty ipv6 address)" has been deleted:
the churn on this patch series needs to be reduced.
This change is not required, and can easily be done in a later patch.

Changes from v4:

1/5 slirp: Advance libslirp submodule to add ipv6 host-forward support
NOTE TO REVIEWERS: I need some hand-holding to know what The Right
way to submit this particular patch is.

- no change

2/5 util/qemu-sockets.c: Split host:port parsing out of inet_parse

- move recognition of "[]:port" to separate patch
- allow passing NULL for ip_v6
- fix some formatting issues

3/5 inet_parse_host_and_addr: Recognize []:port (empty ipv6 address)

- new in this patchset revision

4/5 net/slirp.c: Refactor address parsing

- was 3/4 in v4
- fix some formatting issues

5/5 net: Extend host forwarding to support IPv6

- was 4/4 in v4
- fix some formatting issues

Changes from v3:

1/4 slirp: Advance libslirp submodule to add ipv6 host-forward support

- pick up latest libslirp patch to reject ipv6 addr-any for guest address
  - libslirp currently only provides a stateless DHCPv6 server, which means
    it can't know in advance what the guest's IP address is, and thus
    cannot do the "addr-any -> guest ip address" translation that is done
    for ipv4

2/4 util/qemu-sockets.c: Split host:port parsing out of inet_parse

- this patch is new in v4
  - provides new utility: inet_parse_host_and_port, updates inet_parse
    to use it

3/4 net/slirp.c: Refactor address parsing

- this patch renamed from 2/3 to 3/4
- call inet_parse_host_and_port from util/qemu-sockets.c
- added tests/acceptance/hostfwd.py

4/4 net: Extend host forwarding to support IPv6

- this patch renamed from 3/3 to 4/4
- ipv6 support added to existing hostfwd option, commands
  - instead of creating new ipv6 option, commands
- added tests to tests/acceptance/hostfwd.py

Changes from v2:
- split out libslirp commit
- clarify spelling of ipv6 addresses in docs
- tighten parsing of ipv6 addresses

Change from v1:
- libslirp part is now upstream
- net/slirp.c changes split into two pieces (refactor, add ipv6)
- added docs

Doug Evans (4):
  slirp: Advance libslirp submodule to add ipv6 host-forward support
  util/qemu-sockets.c: Split host:port parsing out of inet_parse
  net/slirp.c: Refactor address parsing
  net: Extend host forwarding to support IPv6

 hmp-commands.hx             |  18 ++-
 include/qemu/sockets.h      |   5 +
 net/slirp.c                 | 236 ++++++++++++++++++++++++++----------
 slirp                       |   2 +-
 tests/acceptance/hostfwd.py | 185 ++++++++++++++++++++++++++++
 util/qemu-sockets.c         |  82 +++++++++----
 6 files changed, 436 insertions(+), 92 deletions(-)
 create mode 100644 tests/acceptance/hostfwd.py

Comments

Doug Evans April 29, 2021, 3:37 a.m. UTC | #1
Ping.

On Wed, Apr 14, 2021 at 8:39 PM Doug Evans <dje@google.com> wrote:

> This patchset takes the original patch from Maxim,
> https://www.mail-archive.com/qemu-devel@nongnu.org/msg569573.html
> and updates it.
>
> Option hostfwd is extended to support ipv6 addresses.
> Commands hostfwd_add, hostfwd_remove are extended as well.
>
> The libslirp part of the patch has been committed upstream,
> and is now in qemu. See patch 1/4.
>
> Changes from v5:
>
> 1/4 slirp: Advance libslirp submodule to current master
> NOTE TO REVIEWERS: It may be a better use of everyone's time if a
> maintainer takes on advancing QEMU's libslirp to libslirp's master.
> Beyond that, I really don't know what to do except submit this patch as
> is currently provided.
>
> 2/4: util/qemu-sockets.c: Split host:port parsing out of inet_parse
>
> Also split out parsing of ipv4=on|off, ipv6=on|off
>
> 3/4: net/slirp.c: Refactor address parsing
>
> Use InetSocketAddress and getaddrinfo().
> Use new libslirp calls: slirp_remove_hostxfwd, slirp_add_hostxfwd.
>
> 4/4: net: Extend host forwarding to support IPv6
>
> Recognize ipv4=,ipv6= options.
>
> Note: v5's 3/5 "Recognize []:port (empty ipv6 address)" has been deleted:
> the churn on this patch series needs to be reduced.
> This change is not required, and can easily be done in a later patch.
>
> Changes from v4:
>
> 1/5 slirp: Advance libslirp submodule to add ipv6 host-forward support
> NOTE TO REVIEWERS: I need some hand-holding to know what The Right
> way to submit this particular patch is.
>
> - no change
>
> 2/5 util/qemu-sockets.c: Split host:port parsing out of inet_parse
>
> - move recognition of "[]:port" to separate patch
> - allow passing NULL for ip_v6
> - fix some formatting issues
>
> 3/5 inet_parse_host_and_addr: Recognize []:port (empty ipv6 address)
>
> - new in this patchset revision
>
> 4/5 net/slirp.c: Refactor address parsing
>
> - was 3/4 in v4
> - fix some formatting issues
>
> 5/5 net: Extend host forwarding to support IPv6
>
> - was 4/4 in v4
> - fix some formatting issues
>
> Changes from v3:
>
> 1/4 slirp: Advance libslirp submodule to add ipv6 host-forward support
>
> - pick up latest libslirp patch to reject ipv6 addr-any for guest address
>   - libslirp currently only provides a stateless DHCPv6 server, which means
>     it can't know in advance what the guest's IP address is, and thus
>     cannot do the "addr-any -> guest ip address" translation that is done
>     for ipv4
>
> 2/4 util/qemu-sockets.c: Split host:port parsing out of inet_parse
>
> - this patch is new in v4
>   - provides new utility: inet_parse_host_and_port, updates inet_parse
>     to use it
>
> 3/4 net/slirp.c: Refactor address parsing
>
> - this patch renamed from 2/3 to 3/4
> - call inet_parse_host_and_port from util/qemu-sockets.c
> - added tests/acceptance/hostfwd.py
>
> 4/4 net: Extend host forwarding to support IPv6
>
> - this patch renamed from 3/3 to 4/4
> - ipv6 support added to existing hostfwd option, commands
>   - instead of creating new ipv6 option, commands
> - added tests to tests/acceptance/hostfwd.py
>
> Changes from v2:
> - split out libslirp commit
> - clarify spelling of ipv6 addresses in docs
> - tighten parsing of ipv6 addresses
>
> Change from v1:
> - libslirp part is now upstream
> - net/slirp.c changes split into two pieces (refactor, add ipv6)
> - added docs
>
> Doug Evans (4):
>   slirp: Advance libslirp submodule to add ipv6 host-forward support
>   util/qemu-sockets.c: Split host:port parsing out of inet_parse
>   net/slirp.c: Refactor address parsing
>   net: Extend host forwarding to support IPv6
>
>  hmp-commands.hx             |  18 ++-
>  include/qemu/sockets.h      |   5 +
>  net/slirp.c                 | 236 ++++++++++++++++++++++++++----------
>  slirp                       |   2 +-
>  tests/acceptance/hostfwd.py | 185 ++++++++++++++++++++++++++++
>  util/qemu-sockets.c         |  82 +++++++++----
>  6 files changed, 436 insertions(+), 92 deletions(-)
>  create mode 100644 tests/acceptance/hostfwd.py
>
> --
> 2.31.1.295.g9ea45b61b8-goog
>
>
Doug Evans May 5, 2021, 3:21 p.m. UTC | #2
Ping.

On Wed, Apr 28, 2021 at 8:37 PM Doug Evans <dje@google.com> wrote:

> Ping.
>
> On Wed, Apr 14, 2021 at 8:39 PM Doug Evans <dje@google.com> wrote:
>
>> This patchset takes the original patch from Maxim,
>> https://www.mail-archive.com/qemu-devel@nongnu.org/msg569573.html
>> and updates it.
>>
>> Option hostfwd is extended to support ipv6 addresses.
>> Commands hostfwd_add, hostfwd_remove are extended as well.
>>
>> The libslirp part of the patch has been committed upstream,
>> and is now in qemu. See patch 1/4.
>>
>> Changes from v5:
>>
>> 1/4 slirp: Advance libslirp submodule to current master
>> NOTE TO REVIEWERS: It may be a better use of everyone's time if a
>> maintainer takes on advancing QEMU's libslirp to libslirp's master.
>> Beyond that, I really don't know what to do except submit this patch as
>> is currently provided.
>>
>> 2/4: util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>
>> Also split out parsing of ipv4=on|off, ipv6=on|off
>>
>> 3/4: net/slirp.c: Refactor address parsing
>>
>> Use InetSocketAddress and getaddrinfo().
>> Use new libslirp calls: slirp_remove_hostxfwd, slirp_add_hostxfwd.
>>
>> 4/4: net: Extend host forwarding to support IPv6
>>
>> Recognize ipv4=,ipv6= options.
>>
>> Note: v5's 3/5 "Recognize []:port (empty ipv6 address)" has been deleted:
>> the churn on this patch series needs to be reduced.
>> This change is not required, and can easily be done in a later patch.
>>
>> Changes from v4:
>>
>> 1/5 slirp: Advance libslirp submodule to add ipv6 host-forward support
>> NOTE TO REVIEWERS: I need some hand-holding to know what The Right
>> way to submit this particular patch is.
>>
>> - no change
>>
>> 2/5 util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>
>> - move recognition of "[]:port" to separate patch
>> - allow passing NULL for ip_v6
>> - fix some formatting issues
>>
>> 3/5 inet_parse_host_and_addr: Recognize []:port (empty ipv6 address)
>>
>> - new in this patchset revision
>>
>> 4/5 net/slirp.c: Refactor address parsing
>>
>> - was 3/4 in v4
>> - fix some formatting issues
>>
>> 5/5 net: Extend host forwarding to support IPv6
>>
>> - was 4/4 in v4
>> - fix some formatting issues
>>
>> Changes from v3:
>>
>> 1/4 slirp: Advance libslirp submodule to add ipv6 host-forward support
>>
>> - pick up latest libslirp patch to reject ipv6 addr-any for guest address
>>   - libslirp currently only provides a stateless DHCPv6 server, which
>> means
>>     it can't know in advance what the guest's IP address is, and thus
>>     cannot do the "addr-any -> guest ip address" translation that is done
>>     for ipv4
>>
>> 2/4 util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>
>> - this patch is new in v4
>>   - provides new utility: inet_parse_host_and_port, updates inet_parse
>>     to use it
>>
>> 3/4 net/slirp.c: Refactor address parsing
>>
>> - this patch renamed from 2/3 to 3/4
>> - call inet_parse_host_and_port from util/qemu-sockets.c
>> - added tests/acceptance/hostfwd.py
>>
>> 4/4 net: Extend host forwarding to support IPv6
>>
>> - this patch renamed from 3/3 to 4/4
>> - ipv6 support added to existing hostfwd option, commands
>>   - instead of creating new ipv6 option, commands
>> - added tests to tests/acceptance/hostfwd.py
>>
>> Changes from v2:
>> - split out libslirp commit
>> - clarify spelling of ipv6 addresses in docs
>> - tighten parsing of ipv6 addresses
>>
>> Change from v1:
>> - libslirp part is now upstream
>> - net/slirp.c changes split into two pieces (refactor, add ipv6)
>> - added docs
>>
>> Doug Evans (4):
>>   slirp: Advance libslirp submodule to add ipv6 host-forward support
>>   util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>   net/slirp.c: Refactor address parsing
>>   net: Extend host forwarding to support IPv6
>>
>>  hmp-commands.hx             |  18 ++-
>>  include/qemu/sockets.h      |   5 +
>>  net/slirp.c                 | 236 ++++++++++++++++++++++++++----------
>>  slirp                       |   2 +-
>>  tests/acceptance/hostfwd.py | 185 ++++++++++++++++++++++++++++
>>  util/qemu-sockets.c         |  82 +++++++++----
>>  6 files changed, 436 insertions(+), 92 deletions(-)
>>  create mode 100644 tests/acceptance/hostfwd.py
>>
>> --
>> 2.31.1.295.g9ea45b61b8-goog
>>
>>
Philippe Mathieu-Daudé May 5, 2021, 4:13 p.m. UTC | #3
Cc'ing Marc-André

On 5/5/21 5:21 PM, Doug Evans wrote:
> Ping.
> 
> On Wed, Apr 28, 2021 at 8:37 PM Doug Evans <dje@google.com
> <mailto:dje@google.com>> wrote:
> 
>     Ping.
> 
>     On Wed, Apr 14, 2021 at 8:39 PM Doug Evans <dje@google.com
>     <mailto:dje@google.com>> wrote:
> 
>         This patchset takes the original patch from Maxim,
>         https://www.mail-archive.com/qemu-devel@nongnu.org/msg569573.html <https://www.mail-archive.com/qemu-devel@nongnu.org/msg569573.html>
>         and updates it.
> 
>         Option hostfwd is extended to support ipv6 addresses.
>         Commands hostfwd_add, hostfwd_remove are extended as well.
> 
>         The libslirp part of the patch has been committed upstream,
>         and is now in qemu. See patch 1/4.
> 
>         Changes from v5:
> 
>         1/4 slirp: Advance libslirp submodule to current master
>         NOTE TO REVIEWERS: It may be a better use of everyone's time if a
>         maintainer takes on advancing QEMU's libslirp to libslirp's master.
>         Beyond that, I really don't know what to do except submit this
>         patch as
>         is currently provided.
> 
>         2/4: util/qemu-sockets.c: Split host:port parsing out of inet_parse
> 
>         Also split out parsing of ipv4=on|off, ipv6=on|off
> 
>         3/4: net/slirp.c: Refactor address parsing
> 
>         Use InetSocketAddress and getaddrinfo().
>         Use new libslirp calls: slirp_remove_hostxfwd, slirp_add_hostxfwd.
> 
>         4/4: net: Extend host forwarding to support IPv6
> 
>         Recognize ipv4=,ipv6= options.
> 
>         Note: v5's 3/5 "Recognize []:port (empty ipv6 address)" has been
>         deleted:
>         the churn on this patch series needs to be reduced.
>         This change is not required, and can easily be done in a later
>         patch.
> 
>         Changes from v4:
> 
>         1/5 slirp: Advance libslirp submodule to add ipv6 host-forward
>         support
>         NOTE TO REVIEWERS: I need some hand-holding to know what The Right
>         way to submit this particular patch is.
> 
>         - no change
> 
>         2/5 util/qemu-sockets.c: Split host:port parsing out of inet_parse
> 
>         - move recognition of "[]:port" to separate patch
>         - allow passing NULL for ip_v6
>         - fix some formatting issues
> 
>         3/5 inet_parse_host_and_addr: Recognize []:port (empty ipv6 address)
> 
>         - new in this patchset revision
> 
>         4/5 net/slirp.c: Refactor address parsing
> 
>         - was 3/4 in v4
>         - fix some formatting issues
> 
>         5/5 net: Extend host forwarding to support IPv6
> 
>         - was 4/4 in v4
>         - fix some formatting issues
> 
>         Changes from v3:
> 
>         1/4 slirp: Advance libslirp submodule to add ipv6 host-forward
>         support
> 
>         - pick up latest libslirp patch to reject ipv6 addr-any for
>         guest address
>           - libslirp currently only provides a stateless DHCPv6 server,
>         which means
>             it can't know in advance what the guest's IP address is, and
>         thus
>             cannot do the "addr-any -> guest ip address" translation
>         that is done
>             for ipv4
> 
>         2/4 util/qemu-sockets.c: Split host:port parsing out of inet_parse
> 
>         - this patch is new in v4
>           - provides new utility: inet_parse_host_and_port, updates
>         inet_parse
>             to use it
> 
>         3/4 net/slirp.c: Refactor address parsing
> 
>         - this patch renamed from 2/3 to 3/4
>         - call inet_parse_host_and_port from util/qemu-sockets.c
>         - added tests/acceptance/hostfwd.py
> 
>         4/4 net: Extend host forwarding to support IPv6
> 
>         - this patch renamed from 3/3 to 4/4
>         - ipv6 support added to existing hostfwd option, commands
>           - instead of creating new ipv6 option, commands
>         - added tests to tests/acceptance/hostfwd.py
> 
>         Changes from v2:
>         - split out libslirp commit
>         - clarify spelling of ipv6 addresses in docs
>         - tighten parsing of ipv6 addresses
> 
>         Change from v1:
>         - libslirp part is now upstream
>         - net/slirp.c changes split into two pieces (refactor, add ipv6)
>         - added docs
> 
>         Doug Evans (4):
>           slirp: Advance libslirp submodule to add ipv6 host-forward support
>           util/qemu-sockets.c: Split host:port parsing out of inet_parse
>           net/slirp.c: Refactor address parsing
>           net: Extend host forwarding to support IPv6
> 
>          hmp-commands.hx             |  18 ++-
>          include/qemu/sockets.h      |   5 +
>          net/slirp.c                 | 236
>         ++++++++++++++++++++++++++----------
>          slirp                       |   2 +-
>          tests/acceptance/hostfwd.py | 185 ++++++++++++++++++++++++++++
>          util/qemu-sockets.c         |  82 +++++++++----
>          6 files changed, 436 insertions(+), 92 deletions(-)
>          create mode 100644 tests/acceptance/hostfwd.py
> 
>         -- 
>         2.31.1.295.g9ea45b61b8-goog
>
Philippe Mathieu-Daudé May 5, 2021, 4:15 p.m. UTC | #4
Well Maxim review would help too, so Cc'ing him.

On 5/5/21 6:13 PM, Philippe Mathieu-Daudé wrote:
> Cc'ing Marc-André
> 
> On 5/5/21 5:21 PM, Doug Evans wrote:
>> Ping.
>>
>> On Wed, Apr 28, 2021 at 8:37 PM Doug Evans <dje@google.com
>> <mailto:dje@google.com>> wrote:
>>
>>     Ping.
>>
>>     On Wed, Apr 14, 2021 at 8:39 PM Doug Evans <dje@google.com
>>     <mailto:dje@google.com>> wrote:
>>
>>         This patchset takes the original patch from Maxim,
>>         https://www.mail-archive.com/qemu-devel@nongnu.org/msg569573.html <https://www.mail-archive.com/qemu-devel@nongnu.org/msg569573.html>
>>         and updates it.
>>
>>         Option hostfwd is extended to support ipv6 addresses.
>>         Commands hostfwd_add, hostfwd_remove are extended as well.
>>
>>         The libslirp part of the patch has been committed upstream,
>>         and is now in qemu. See patch 1/4.
>>
>>         Changes from v5:
>>
>>         1/4 slirp: Advance libslirp submodule to current master
>>         NOTE TO REVIEWERS: It may be a better use of everyone's time if a
>>         maintainer takes on advancing QEMU's libslirp to libslirp's master.
>>         Beyond that, I really don't know what to do except submit this
>>         patch as
>>         is currently provided.
>>
>>         2/4: util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>
>>         Also split out parsing of ipv4=on|off, ipv6=on|off
>>
>>         3/4: net/slirp.c: Refactor address parsing
>>
>>         Use InetSocketAddress and getaddrinfo().
>>         Use new libslirp calls: slirp_remove_hostxfwd, slirp_add_hostxfwd.
>>
>>         4/4: net: Extend host forwarding to support IPv6
>>
>>         Recognize ipv4=,ipv6= options.
>>
>>         Note: v5's 3/5 "Recognize []:port (empty ipv6 address)" has been
>>         deleted:
>>         the churn on this patch series needs to be reduced.
>>         This change is not required, and can easily be done in a later
>>         patch.
>>
>>         Changes from v4:
>>
>>         1/5 slirp: Advance libslirp submodule to add ipv6 host-forward
>>         support
>>         NOTE TO REVIEWERS: I need some hand-holding to know what The Right
>>         way to submit this particular patch is.
>>
>>         - no change
>>
>>         2/5 util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>
>>         - move recognition of "[]:port" to separate patch
>>         - allow passing NULL for ip_v6
>>         - fix some formatting issues
>>
>>         3/5 inet_parse_host_and_addr: Recognize []:port (empty ipv6 address)
>>
>>         - new in this patchset revision
>>
>>         4/5 net/slirp.c: Refactor address parsing
>>
>>         - was 3/4 in v4
>>         - fix some formatting issues
>>
>>         5/5 net: Extend host forwarding to support IPv6
>>
>>         - was 4/4 in v4
>>         - fix some formatting issues
>>
>>         Changes from v3:
>>
>>         1/4 slirp: Advance libslirp submodule to add ipv6 host-forward
>>         support
>>
>>         - pick up latest libslirp patch to reject ipv6 addr-any for
>>         guest address
>>           - libslirp currently only provides a stateless DHCPv6 server,
>>         which means
>>             it can't know in advance what the guest's IP address is, and
>>         thus
>>             cannot do the "addr-any -> guest ip address" translation
>>         that is done
>>             for ipv4
>>
>>         2/4 util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>
>>         - this patch is new in v4
>>           - provides new utility: inet_parse_host_and_port, updates
>>         inet_parse
>>             to use it
>>
>>         3/4 net/slirp.c: Refactor address parsing
>>
>>         - this patch renamed from 2/3 to 3/4
>>         - call inet_parse_host_and_port from util/qemu-sockets.c
>>         - added tests/acceptance/hostfwd.py
>>
>>         4/4 net: Extend host forwarding to support IPv6
>>
>>         - this patch renamed from 3/3 to 4/4
>>         - ipv6 support added to existing hostfwd option, commands
>>           - instead of creating new ipv6 option, commands
>>         - added tests to tests/acceptance/hostfwd.py
>>
>>         Changes from v2:
>>         - split out libslirp commit
>>         - clarify spelling of ipv6 addresses in docs
>>         - tighten parsing of ipv6 addresses
>>
>>         Change from v1:
>>         - libslirp part is now upstream
>>         - net/slirp.c changes split into two pieces (refactor, add ipv6)
>>         - added docs
>>
>>         Doug Evans (4):
>>           slirp: Advance libslirp submodule to add ipv6 host-forward support
>>           util/qemu-sockets.c: Split host:port parsing out of inet_parse
>>           net/slirp.c: Refactor address parsing
>>           net: Extend host forwarding to support IPv6
>>
>>          hmp-commands.hx             |  18 ++-
>>          include/qemu/sockets.h      |   5 +
>>          net/slirp.c                 | 236
>>         ++++++++++++++++++++++++++----------
>>          slirp                       |   2 +-
>>          tests/acceptance/hostfwd.py | 185 ++++++++++++++++++++++++++++
>>          util/qemu-sockets.c         |  82 +++++++++----
>>          6 files changed, 436 insertions(+), 92 deletions(-)
>>          create mode 100644 tests/acceptance/hostfwd.py
>>
>>         -- 
>>         2.31.1.295.g9ea45b61b8-goog
>>
>