diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index f087e07c52..7449c7e02a 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -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; } diff --git a/tests/networkxml2confdata/netboot-network.conf b/tests/networkxml2confdata/netboot-network.conf index a13239a54f..32ef25b05f 100644 --- a/tests/networkxml2confdata/netboot-network.conf +++ b/tests/networkxml2confdata/netboot-network.conf @@ -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 diff --git a/tests/networkxml2confdata/netboot-tftp.conf b/tests/networkxml2confdata/netboot-tftp.conf new file mode 100644 index 0000000000..45615f3c33 --- /dev/null +++ b/tests/networkxml2confdata/netboot-tftp.conf @@ -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 diff --git a/tests/networkxml2confdata/netboot-tftp.xml b/tests/networkxml2confdata/netboot-tftp.xml new file mode 100644 index 0000000000..297f5a7ba1 --- /dev/null +++ b/tests/networkxml2confdata/netboot-tftp.xml @@ -0,0 +1,9 @@ + + tftp-only + eb486e5c-4df5-42ee-ae4a-ad8557998d00 + + + + + + diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c index 0bc9e128e3..a062ff9c3c 100644 --- a/tests/networkxml2conftest.c +++ b/tests/networkxml2conftest.c @@ -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); diff --git a/tests/networkxml2xmlin/netboot-tftp.xml b/tests/networkxml2xmlin/netboot-tftp.xml new file mode 120000 index 0000000000..1487de558b --- /dev/null +++ b/tests/networkxml2xmlin/netboot-tftp.xml @@ -0,0 +1 @@ +../networkxml2confdata/netboot-tftp.xml \ No newline at end of file diff --git a/tests/networkxml2xmlout/netboot-tftp.xml b/tests/networkxml2xmlout/netboot-tftp.xml new file mode 120000 index 0000000000..1487de558b --- /dev/null +++ b/tests/networkxml2xmlout/netboot-tftp.xml @@ -0,0 +1 @@ +../networkxml2confdata/netboot-tftp.xml \ No newline at end of file diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c index ca24305ace..9e8d675a10 100644 --- a/tests/networkxml2xmltest.c +++ b/tests/networkxml2xmltest.c @@ -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");