Hi,

gentle ping

On Thu, Oct 1, 2026 at 11:17 PM Tim Pambor <[email protected]> wrote:

> When a vmnet-host interface is added to an isolated network via
> 'net-uuid', vmnet does not provide DHCP, and the host side of the
> bridge gets no address, so the host cannot talk to guests on that
> network without manually assigning an IP address to the bridge
> interface after QEMU has started.
>
> vmnet provides the vmnet_host_ip_address_key,
> vmnet_host_subnet_mask_key and vmnet_host_ipv6_address_key
> properties to assign addresses to the host interface in this case.
> Expose them as the 'host-ip-address', 'host-subnet-mask' and
> 'host-ipv6-address' options of the vmnet-host backend.
>
> Acked-by: Markus Armbruster <[email protected]>
> Signed-off-by: Tim Pambor <[email protected]>
> ---
> Changes in v2:
> - Fixed spelling in the commit message
> - Link to v1:
> https://lore.kernel.org/qemu-devel/[email protected]
> ---
>  net/vmnet-host.c | 35 +++++++++++++++++++++++++++++++++++
>  qapi/net.json    | 15 ++++++++++++++-
>  qemu-options.hx  |  6 +++++-
>  3 files changed, 54 insertions(+), 2 deletions(-)
>
> diff --git a/net/vmnet-host.c b/net/vmnet-host.c
> index 49fb25c224..8ed7ee9d41 100644
> --- a/net/vmnet-host.c
> +++ b/net/vmnet-host.c
> @@ -41,6 +41,26 @@ static bool validate_options(const Netdev *netdev,
> Error **errp)
>          return false;
>      }
>
> +    if ((options->host_ip_address || options->host_subnet_mask) &&
> +        !(options->host_ip_address && options->host_subnet_mask)) {
> +        error_setg(errp,
> +                   "'host-ip-address' and 'host-subnet-mask' "
> +                   "should be provided together");
> +        return false;
> +    }
> +
> +    if (options->host_ip_address && !options->net_uuid) {
> +        error_setg(errp,
> +                   "'host-ip-address' requires 'net-uuid' to be
> specified");
> +        return false;
> +    }
> +
> +    if (options->host_ipv6_address && !options->net_uuid) {
> +        error_setg(errp,
> +                   "'host-ipv6-address' requires 'net-uuid' to be
> specified");
> +        return false;
> +    }
> +
>      return true;
>  }
>
> @@ -77,6 +97,21 @@ static xpc_object_t build_if_desc(const Netdev *netdev)
>                                    options->subnet_mask);
>      }
>
> +    if (options->host_ip_address) {
> +        xpc_dictionary_set_string(if_desc,
> +                                  vmnet_host_ip_address_key,
> +                                  options->host_ip_address);
> +        xpc_dictionary_set_string(if_desc,
> +                                  vmnet_host_subnet_mask_key,
> +                                  options->host_subnet_mask);
> +    }
> +
> +    if (options->host_ipv6_address) {
> +        xpc_dictionary_set_string(if_desc,
> +                                  vmnet_host_ipv6_address_key,
> +                                  options->host_ipv6_address);
> +    }
> +
>      return if_desc;
>  }
>
> diff --git a/qapi/net.json b/qapi/net.json
> index b46af1fdc9..38b43d20ed 100644
> --- a/qapi/net.json
> +++ b/qapi/net.json
> @@ -795,6 +795,16 @@
>  #     is allowed only with other interfaces added to this network
>  #     identified by the UUID.  Requires at least macOS Big Sur 11.0.
>  #
> +# @host-ip-address: The IPv4 address to set on the host side of the
> +#     interface.  Only applicable when @net-uuid is also specified.
> +#     Must be specified along with @host-subnet-mask.
> +#
> +# @host-subnet-mask: The IPv4 subnet mask to set on the host side of
> +#     the interface.  Must be specified along with @host-ip-address.
> +#
> +# @host-ipv6-address: The IPv6 address to set on the host side of the
> +#     interface.  Only applicable when @net-uuid is also specified.
> +#
>  # Since: 7.1
>  ##
>  { 'struct': 'NetdevVmnetHostOptions',
> @@ -803,7 +813,10 @@
>      '*end-address':   'str',
>      '*subnet-mask':   'str',
>      '*isolated':      'bool',
> -    '*net-uuid':      'str' },
> +    '*net-uuid':      'str',
> +    '*host-ip-address': 'str',
> +    '*host-subnet-mask': 'str',
> +    '*host-ipv6-address': 'str' },
>    'if': 'CONFIG_VMNET' }
>
>  ##
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 2f6863180b..9e250ad196 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -3137,11 +3137,15 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
>  #ifdef CONFIG_VMNET
>      "-netdev vmnet-host,id=str[,isolated=on|off][,net-uuid=uuid]\n"
>      "         [,start-address=addr,end-address=addr,subnet-mask=mask]\n"
> +    "
>  [,host-ip-address=addr,host-subnet-mask=mask][,host-ipv6-address=addr]\n"
>      "                configure a vmnet network backend in host mode with
> ID 'str',\n"
>      "                isolate this interface from others with
> 'isolated',\n"
>      "                configure the address range and choose a subnet
> mask,\n"
>      "                specify network UUID 'uuid' to disable DHCP and
> interact with\n"
> -    "                vmnet-host interfaces within this isolated network\n"
> +    "                vmnet-host interfaces within this isolated
> network,\n"
> +    "                set the host-side IPv4 address and subnet mask on
> an\n"
> +    "                isolated network with 'host-ip-address' and
> 'host-subnet-mask',\n"
> +    "                set the host-side IPv6 address with
> 'host-ipv6-address'\n"
>      "-netdev vmnet-shared,id=str[,isolated=on|off][,nat66-prefix=addr]\n"
>      "         [,start-address=addr,end-address=addr,subnet-mask=mask]\n"
>      "                configure a vmnet network backend in shared mode
> with ID 'str',\n"
>
> ---
> base-commit: efa3b9d5ac8024078225e1ab434411fdfe53b457
> change-id: 20260927-vmnet-host-address-47ff5d9adcbb
>
> Best regards,
> --
> Tim Pambor <[email protected]>
>
>

Reply via email to