Hi, can I get some reviews for this ?

Thanks!

On Fri, May 30, 2025 at 2:21 PM Enrique Llorente <ellor...@redhat.com>
wrote:

> This commit introduces a feature enhancement for configuring hostnames in
> virtual machines (VMs) using DHCP. It adds new options to the "passt" tool
> to set the hostname and fully qualified domain name (FQDN) for VMs. These
> map to DHCP option 12 for the hostname and options 81 (IPv4) and 39 (IPv6)
> for the FQDN.
>
> The update enables passt to dynamically assign hostnames to DHCP-aware
> VMs. To achieve this, the commit adds two fields to the passt domain XML
> backend. These fields allow passt to configure the hostname and FQDN for
> the virtual machine, ensuring smooth integration with the DHCP protocol.
>
> This improvement is particularly valuable in environments where VMs need
> dynamic hostname configuration, enhancing flexibility and automation in
> virtualized network setups.
>
> libvirt: Integrate passt --hostname --fqdn options
> Resolves: https://issues.redhat.com/browse/RHEL-79806
>
> Signed-off-by: Enrique Llorente <ellor...@redhat.com>
> ---
>  Compared to v1 this fix the mapping between backend fqdn and hostname
>
>  docs/formatdomain.rst                                  |  8 +++++---
>  src/conf/domain_conf.c                                 | 10 +++++++++-
>  src/conf/domain_conf.h                                 |  2 ++
>  src/conf/schemas/domaincommon.rng                      |  6 ++++++
>  src/qemu/qemu_passt.c                                  |  6 ++++++
>  tests/qemuxmlconfdata/net-user-passt.x86_64-7.2.0.xml  |  2 +-
>  tests/qemuxmlconfdata/net-user-passt.x86_64-latest.xml |  2 +-
>  tests/qemuxmlconfdata/net-user-passt.xml               |  2 +-
>  .../net-vhostuser-passt.x86_64-latest.xml              |  2 +-
>  tests/qemuxmlconfdata/net-vhostuser-passt.xml          |  2 +-
>  10 files changed, 33 insertions(+), 9 deletions(-)
>
> diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
> index 8753ee9c23..9c80aa9270 100644
> --- a/docs/formatdomain.rst
> +++ b/docs/formatdomain.rst
> @@ -5372,10 +5372,12 @@ came from the host's IP.
>  There are a few other options that are configurable only for the passt
>  backend.  For example, the ``<backend>`` attribute ``logFile`` can be
>  used to tell the passt process for this interface where to write its
> -message log, and the ``<source>`` attribute ``dev`` can tell it a
> +message log, the ``<source>`` attribute ``dev`` can tell it a
>  particular host interface to use when deriving the routes given to the
> -guest for forwarding traffic upstream.  Due to the design decisions of
> -passt, when using SELinux on the host, it is recommended that the log
> +guest for forwarding traffic upstream and the ``hostname`` and ``fqdn``
> +will conigure the DHCP option 12 hostname and DHCP option 81 and DHCPv6
> +option 39 fqdn attribute.  Due to the design decisions of passt, when
> using
> +SELinux on the host, it is recommended that the log
>  file reside in the runtime directory of the user under which the passt
>  process will run, most probably ``/run/user/$UID`` (where ``$UID`` is
>  the UID of that user), e.g. ``/run/user/1000``. Be aware that libvirt
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index b3b0bd7329..15143f8fa2 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -2909,6 +2909,8 @@ virDomainNetDefFree(virDomainNetDef *def)
>      g_free(def->backend.tap);
>      g_free(def->backend.vhost);
>      g_free(def->backend.logFile);
> +    g_free(def->backend.hostname);
> +    g_free(def->backend.fqdn);
>      virDomainNetTeamingInfoFree(def->teaming);
>      g_free(def->virtPortProfile);
>      g_free(def->script);
> @@ -9757,6 +9759,8 @@ virDomainNetBackendParseXML(xmlNodePtr node,
>      }
>
>      def->backend.logFile = virXMLPropString(node, "logFile");
> +    def->backend.hostname = virXMLPropString(node, "hostname");
> +    def->backend.fqdn = virXMLPropString(node, "fqdn");
>
>      if (tap)
>          def->backend.tap = virFileSanitizePath(tap);
> @@ -20757,7 +20761,9 @@ virDomainNetBackendIsEqual(virDomainNetBackend
> *src,
>      if (src->type != dst->type ||
>          STRNEQ_NULLABLE(src->tap, dst->tap) ||
>          STRNEQ_NULLABLE(src->vhost, dst->vhost) ||
> -        STRNEQ_NULLABLE(src->logFile, dst->logFile)) {
> +        STRNEQ_NULLABLE(src->logFile, dst->logFile) ||
> +        STRNEQ_NULLABLE(src->hostname, dst->hostname) ||
> +        STRNEQ_NULLABLE(src->fqdn, dst->fqdn)) {
>          return false;
>      }
>      return true;
> @@ -24838,6 +24844,8 @@ virDomainNetBackendFormat(virBuffer *buf,
>      virBufferEscapeString(&attrBuf, " tap='%s'", backend->tap);
>      virBufferEscapeString(&attrBuf, " vhost='%s'", backend->vhost);
>      virBufferEscapeString(&attrBuf, " logFile='%s'", backend->logFile);
> +    virBufferEscapeString(&attrBuf, " hostname='%s'", backend->hostname);
> +    virBufferEscapeString(&attrBuf, " fqdn='%s'", backend->fqdn);
>      virXMLFormatElement(buf, "backend", &attrBuf, NULL);
>  }
>
> diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
> index 58b97a2b54..79fd2f1f63 100644
> --- a/src/conf/domain_conf.h
> +++ b/src/conf/domain_conf.h
> @@ -1067,6 +1067,8 @@ struct _virDomainNetBackend {
>      char *vhost;
>      /* The following are currently only valid/used when backend
> type='passt' */
>      char *logFile;  /* path to logfile used by passt process */
> +    char *hostname; /* hostname of the passt process */
> +    char *fqdn; /* fully qualified domain name of the passt process */
>  };
>
>  struct _virDomainNetPortForwardRange {
> diff --git a/src/conf/schemas/domaincommon.rng
> b/src/conf/schemas/domaincommon.rng
> index 5597d5a66b..f64199ca18 100644
> --- a/src/conf/schemas/domaincommon.rng
> +++ b/src/conf/schemas/domaincommon.rng
> @@ -3913,6 +3913,12 @@
>                <ref name="absFilePath"/>
>              </attribute>
>            </optional>
> +          <optional>
> +            <attribute name="hostname"/>
> +          </optional>
> +          <optional>
> +            <attribute name="fqdn"/>
> +          </optional>
>          </element>
>        </optional>
>        <optional>
> diff --git a/src/qemu/qemu_passt.c b/src/qemu/qemu_passt.c
> index fcc34de384..81e5c51f6c 100644
> --- a/src/qemu/qemu_passt.c
> +++ b/src/qemu/qemu_passt.c
> @@ -229,6 +229,12 @@ qemuPasstStart(virDomainObj *vm,
>      if (net->backend.logFile)
>          virCommandAddArgList(cmd, "--log-file", net->backend.logFile,
> NULL);
>
> +    if (net->backend.hostname)
> +        virCommandAddArgList(cmd, "--hostname", net->backend.hostname,
> NULL);
> +
> +    if (net->backend.fqdn)
> +        virCommandAddArgList(cmd, "--fqdn", net->backend.fqdn, NULL);
> +
>      /* Add IP address info */
>      for (i = 0; i < net->guestIP.nips; i++) {
>          const virNetDevIPAddr *ip = net->guestIP.ips[i];
> diff --git a/tests/qemuxmlconfdata/net-user-passt.x86_64-7.2.0.xml
> b/tests/qemuxmlconfdata/net-user-passt.x86_64-7.2.0.xml
> index cfe07cc627..77da297936 100644
> --- a/tests/qemuxmlconfdata/net-user-passt.x86_64-7.2.0.xml
> +++ b/tests/qemuxmlconfdata/net-user-passt.x86_64-7.2.0.xml
> @@ -50,7 +50,7 @@
>          <range start='443' to='344'/>
>        </portForward>
>        <model type='rtl8139'/>
> -      <backend type='passt' logFile='/var/log/loglaw.blog'/>
> +      <backend type='passt' logFile='/var/log/loglaw.blog'
> hostname='hostname1' fqdn='hostname1.test.local'/>
>        <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
> function='0x0'/>
>      </interface>
>      <input type='mouse' bus='ps2'/>
> diff --git a/tests/qemuxmlconfdata/net-user-passt.x86_64-latest.xml
> b/tests/qemuxmlconfdata/net-user-passt.x86_64-latest.xml
> index d7e0ef5f90..917a9edaa0 100644
> --- a/tests/qemuxmlconfdata/net-user-passt.x86_64-latest.xml
> +++ b/tests/qemuxmlconfdata/net-user-passt.x86_64-latest.xml
> @@ -50,7 +50,7 @@
>          <range start='443' to='344'/>
>        </portForward>
>        <model type='rtl8139'/>
> -      <backend type='passt' logFile='/var/log/loglaw.blog'/>
> +      <backend type='passt' logFile='/var/log/loglaw.blog'
> hostname='hostname1' fqdn='hostname1.test.local'/>
>        <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
> function='0x0'/>
>      </interface>
>      <input type='mouse' bus='ps2'/>
> diff --git a/tests/qemuxmlconfdata/net-user-passt.xml
> b/tests/qemuxmlconfdata/net-user-passt.xml
> index 20c9f50542..80d15de2ed 100644
> --- a/tests/qemuxmlconfdata/net-user-passt.xml
> +++ b/tests/qemuxmlconfdata/net-user-passt.xml
> @@ -47,7 +47,7 @@
>          <range start='443' to='344'/>
>        </portForward>
>        <model type='rtl8139'/>
> -      <backend type='passt' logFile='/var/log/loglaw.blog'/>
> +      <backend type='passt' logFile='/var/log/loglaw.blog'
> hostname='hostname1' fqdn='hostname1.test.local'/>
>        <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
> function='0x0'/>
>      </interface>
>      <input type='mouse' bus='ps2'/>
> diff --git a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.xml
> b/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.xml
> index 529aff11f8..5802754c4b 100644
> --- a/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.xml
> +++ b/tests/qemuxmlconfdata/net-vhostuser-passt.x86_64-latest.xml
> @@ -53,7 +53,7 @@
>          <range start='443' to='344'/>
>        </portForward>
>        <model type='virtio'/>
> -      <backend type='passt' logFile='/var/log/loglaw.blog'/>
> +      <backend type='passt' logFile='/var/log/loglaw.blog'
> hostname='hostname1' fqdn='hostname1.test.local'/>
>        <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
> function='0x0'/>
>      </interface>
>      <interface type='vhostuser'>
> diff --git a/tests/qemuxmlconfdata/net-vhostuser-passt.xml
> b/tests/qemuxmlconfdata/net-vhostuser-passt.xml
> index 71b845329b..0a37511a0f 100644
> --- a/tests/qemuxmlconfdata/net-vhostuser-passt.xml
> +++ b/tests/qemuxmlconfdata/net-vhostuser-passt.xml
> @@ -50,7 +50,7 @@
>          <range start='443' to='344'/>
>        </portForward>
>        <model type='virtio'/>
> -      <backend type='passt' logFile='/var/log/loglaw.blog'/>
> +      <backend type='passt' logFile='/var/log/loglaw.blog'
> hostname='hostname1' fqdn='hostname1.test.local'/>
>        <address type='pci' domain='0x0000' bus='0x00' slot='0x02'
> function='0x0'/>
>      </interface>
>      <interface type='vhostuser'>
> --
> 2.49.0
>
>

-- 
*Quique Llorente*

CNV networking Senior Software Engineer

Red Hat EMEA <https://www.redhat.com/>

ellor...@redhat.com <arxc...@redhat.com>
@RedHat <https://twitter.com/redhat>   Red Hat
<https://www.linkedin.com/company/red-hat>  Red Hat
<https://www.facebook.com/RedHatInc>
<https://www.redhat.com/>

Reply via email to