mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-21 21:25:25 +00:00
network: Generate TFTP config regardless of DHCP
We already allow users to provide TFTP root path in network XML and not specify any DHCP. This makes sense, because dnsmasq is not only DHCP server but also TFTP server and users might have a DHCP server configured on their own, outside of libvirt's control and want just the TFTP part. By moving TFTP config generator out of DHCP generator and calling it for every IPv4 range, users can finally enable just TFTP. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2026765 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
bab462db6e
commit
12be42ee7e
@ -1088,11 +1088,6 @@ networkDnsmasqConfDHCP(virBuffer *buf,
|
||||
virBufferAddLit(buf, "dhcp-authoritative\n");
|
||||
}
|
||||
|
||||
if (ipdef->tftproot) {
|
||||
virBufferAddLit(buf, "enable-tftp\n");
|
||||
virBufferAsprintf(buf, "tftp-root=%s\n", ipdef->tftproot);
|
||||
}
|
||||
|
||||
if (ipdef->bootfile) {
|
||||
if (VIR_SOCKET_ADDR_VALID(&ipdef->bootserver)) {
|
||||
g_autofree char *bootserver = virSocketAddrFormat(&ipdef->bootserver);
|
||||
@ -1111,6 +1106,22 @@ networkDnsmasqConfDHCP(virBuffer *buf,
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
networkDnsmasqConfTFTP(virBuffer *buf,
|
||||
virNetworkIPDef *ipdef,
|
||||
bool *enableTFTP)
|
||||
{
|
||||
if (!ipdef->tftproot)
|
||||
return;
|
||||
|
||||
if (!*enableTFTP) {
|
||||
virBufferAddLit(buf, "enable-tftp\n");
|
||||
*enableTFTP = true;
|
||||
}
|
||||
virBufferAsprintf(buf, "tftp-root=%s\n", ipdef->tftproot);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
networkDnsmasqConfContents(virNetworkObj *obj,
|
||||
const char *pidfile,
|
||||
@ -1129,6 +1140,7 @@ networkDnsmasqConfContents(virNetworkObj *obj,
|
||||
virNetworkIPDef *ipv4def = NULL;
|
||||
virNetworkIPDef *ipv6def = NULL;
|
||||
bool ipv6SLAAC = false;
|
||||
bool enableTFTP = false;
|
||||
|
||||
*configstr = NULL;
|
||||
|
||||
@ -1339,6 +1351,8 @@ networkDnsmasqConfContents(virNetworkObj *obj,
|
||||
ipv4def = ipdef;
|
||||
}
|
||||
}
|
||||
|
||||
networkDnsmasqConfTFTP(&configbuf, ipdef, &enableTFTP);
|
||||
}
|
||||
if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET6)) {
|
||||
if (ipdef->nranges || ipdef->nhosts) {
|
||||
@ -1500,7 +1514,7 @@ networkStartDhcpDaemon(virNetworkDriverState *driver,
|
||||
i = 0;
|
||||
while ((ipdef = virNetworkDefGetIPByIndex(def, AF_UNSPEC, i))) {
|
||||
i++;
|
||||
if (ipdef->nranges || ipdef->nhosts)
|
||||
if (ipdef->nranges || ipdef->nhosts || ipdef->tftproot)
|
||||
needDnsmasq = true;
|
||||
}
|
||||
|
||||
@ -3255,7 +3269,7 @@ networkUpdate(virNetworkPtr net,
|
||||
for (i = 0;
|
||||
(ipdef = virNetworkDefGetIPByIndex(def, AF_INET, i));
|
||||
i++) {
|
||||
if (ipdef->nranges || ipdef->nhosts) {
|
||||
if (ipdef->nranges || ipdef->nhosts || ipdef->tftproot) {
|
||||
oldDhcpActive = true;
|
||||
break;
|
||||
}
|
||||
@ -3370,7 +3384,7 @@ networkUpdate(virNetworkPtr net,
|
||||
|
||||
for (i = 0; (ipdef = virNetworkDefGetIPByIndex(def, AF_INET, i));
|
||||
i++) {
|
||||
if (ipdef->nranges || ipdef->nhosts) {
|
||||
if (ipdef->nranges || ipdef->nhosts || ipdef->tftproot) {
|
||||
newDhcpActive = true;
|
||||
break;
|
||||
}
|
||||
|
@ -10,11 +10,11 @@ expand-hosts
|
||||
except-interface=lo
|
||||
bind-dynamic
|
||||
interface=virbr1
|
||||
enable-tftp
|
||||
tftp-root=/var/lib/tftproot
|
||||
dhcp-range=192.168.122.2,192.168.122.254,255.255.255.0
|
||||
dhcp-no-override
|
||||
dhcp-authoritative
|
||||
enable-tftp
|
||||
tftp-root=/var/lib/tftproot
|
||||
dhcp-boot=pxeboot.img
|
||||
dhcp-lease-max=253
|
||||
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/netboot.hostsfile
|
||||
|
13
tests/networkxml2confdata/netboot-tftp.conf
Normal file
13
tests/networkxml2confdata/netboot-tftp.conf
Normal file
@ -0,0 +1,13 @@
|
||||
##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
|
||||
##OVERWRITTEN AND LOST. Changes to this configuration should be made using:
|
||||
## virsh net-edit tftp-only
|
||||
## or other application using the libvirt API.
|
||||
##
|
||||
## dnsmasq conf file created by libvirt
|
||||
strict-order
|
||||
except-interface=lo
|
||||
bind-dynamic
|
||||
interface=virbr0
|
||||
enable-tftp
|
||||
tftp-root=/var/lib/tftproot
|
||||
addn-hosts=/var/lib/libvirt/dnsmasq/tftp-only.addnhosts
|
9
tests/networkxml2confdata/netboot-tftp.xml
Normal file
9
tests/networkxml2confdata/netboot-tftp.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<network>
|
||||
<name>tftp-only</name>
|
||||
<uuid>eb486e5c-4df5-42ee-ae4a-ad8557998d00</uuid>
|
||||
<forward mode='nat'/>
|
||||
<bridge name='virbr0' stp='off' delay='1'/>
|
||||
<ip address='192.168.122.1' netmask='255.255.255.0'>
|
||||
<tftp root='/var/lib/tftproot'/>
|
||||
</ip>
|
||||
</network>
|
@ -168,6 +168,7 @@ mymain(void)
|
||||
DO_TEST("isolated-network", full);
|
||||
DO_TEST("netboot-network", full);
|
||||
DO_TEST("netboot-proxy-network", full);
|
||||
DO_TEST("netboot-tftp", full);
|
||||
DO_TEST("nat-network-dns-srv-record-minimal", full);
|
||||
DO_TEST("nat-network-name-with-quotes", full);
|
||||
DO_TEST("routed-network", full);
|
||||
|
1
tests/networkxml2xmlin/netboot-tftp.xml
Symbolic link
1
tests/networkxml2xmlin/netboot-tftp.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../networkxml2confdata/netboot-tftp.xml
|
1
tests/networkxml2xmlout/netboot-tftp.xml
Symbolic link
1
tests/networkxml2xmlout/netboot-tftp.xml
Symbolic link
@ -0,0 +1 @@
|
||||
../networkxml2confdata/netboot-tftp.xml
|
@ -127,6 +127,7 @@ mymain(void)
|
||||
DO_TEST("nat-network");
|
||||
DO_TEST("netboot-network");
|
||||
DO_TEST("netboot-proxy-network");
|
||||
DO_TEST("netboot-tftp");
|
||||
DO_TEST("nat-network-dns-txt-record");
|
||||
DO_TEST("nat-network-dns-srv-record");
|
||||
DO_TEST("nat-network-dns-srv-records");
|
||||
|
Loading…
Reference in New Issue
Block a user