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/>