These options are added to network.conf and virNetworkDriverConfig object:
autoaddr_start - start of the range of subnets to search (def: "192.168.122.0")
autoaddr_end - end of the range of subnets (def: "192.168.255.0")
autoaddr_prefix - prefix of these subnets (def: 24)
They will be used by the network driver when looking for unused
subnets to assign to networks that have "autoaddr='yes'" in one of
their <ip> elements.
Signed-off-by: Laine Stump <laine(a)redhat.com>
---
meson.build | 14 +++++-
meson_options.txt | 4 ++
src/network/bridge_driver_conf.c | 61 ++++++++++++++++++++++++
src/network/bridge_driver_conf.h | 4 ++
src/network/libvirtd_network.aug | 8 +++-
src/network/meson.build | 6 +++
src/network/network.conf.in | 11 +++++
src/network/test_libvirtd_network.aug.in | 3 ++
8 files changed, 109 insertions(+), 2 deletions(-)
diff --git a/meson.build b/meson.build
index 06d88ad1f3..71da7db741 100644
--- a/meson.build
+++ b/meson.build
@@ -1646,6 +1646,15 @@ endif
if not get_option('driver_network').disabled() and
conf.has('WITH_LIBVIRTD')
conf.set('WITH_NETWORK', 1)
+ autoaddr_start = get_option('autoaddr_start')
+ conf.set_quoted('AUTOADDR_START', autoaddr_start)
+
+ autoaddr_end = get_option('autoaddr_end')
+ conf.set_quoted('AUTOADDR_END', autoaddr_end)
+
+ autoaddr_prefix = get_option('autoaddr_prefix')
+ conf.set('AUTOADDR_PREFIX', autoaddr_prefix)
+
firewall_backend_priority = get_option('firewall_backend_priority')
if firewall_backend_priority.length() == 0
if host_machine.system() == 'linux'
@@ -2406,7 +2415,10 @@ misc_summary = {
}
if conf.has('WITH_NETWORK')
misc_summary += {
- 'firewall backends': firewall_backend_priority,
+ 'autoaddr_start': autoaddr_start,
+ 'autoaddr_end': autoaddr_end,
+ 'autoaddr_prefix': autoaddr_prefix,
+ 'firewall backends': firewall_backend_priority,
}
endif
summary(misc_summary, section: 'Miscellaneous', bool_yn: true, list_sep: '
')
diff --git a/meson_options.txt b/meson_options.txt
index 2d440c63d8..7a1a86211e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -118,6 +118,10 @@ option('firewalld', type: 'feature', value:
'auto', description: 'firewalld supp
# dep:firewalld
option('firewalld_zone', type: 'feature', value: 'auto',
description: 'whether to install firewalld libvirt zone')
option('firewall_backend_priority', type: 'array', choices:
['nftables', 'iptables'], value: [], description: 'order in which to
try firewall backends')
+option('autoaddr_start', type: 'string', value: '192.168.122.0',
description: 'Start of range of IPv4 subnets to choose an unused subnet from')
+option('autoaddr_end', type: 'string', value: '192.168.255.0',
description: 'End of range of IPv4 subnets to choose an unused subnet from')
+option('autoaddr_prefix', type: 'integer', value: 24, description:
'prefix of IPv4 subnets to choose an unused subnet from')
+
option('host_validate', type: 'feature', value: 'auto',
description: 'build virt-host-validate')
option('init_script', type: 'combo', choices: ['systemd',
'openrc', 'check', 'none'], value: 'check', description:
'Style of init script to install')
option('loader_nvram', type: 'string', value: '', description:
'Pass list of pairs of <loader>:<nvram> paths. Both pairs and list items
are separated by a colon.')
diff --git a/src/network/bridge_driver_conf.c b/src/network/bridge_driver_conf.c
index 9da5e790b7..cb2915550f 100644
--- a/src/network/bridge_driver_conf.c
+++ b/src/network/bridge_driver_conf.c
@@ -65,6 +65,13 @@ virNetworkLoadDriverConfig(virNetworkDriverConfig *cfg G_GNUC_UNUSED,
const char *filename)
{
g_autoptr(virConf) conf = NULL;
+
+ const char *autoaddrStart = "192.168.122.0";
+ const char *autoaddrEnd = "192.168.255.0";
+ unsigned int autoaddrPrefix = 24;
+ g_autofree char *autoaddrStartFromConf = NULL;
+ g_autofree char *autoaddrEndFromConf = NULL;
+
g_autofree char *fwBackendStr = NULL;
bool fwBackendSelected = false;
size_t i;
@@ -88,6 +95,36 @@ virNetworkLoadDriverConfig(virNetworkDriverConfig *cfg G_GNUC_UNUSED,
/* use virConfGetValue*(conf, ...) functions to read any settings into cfg */
+ if (virConfGetValueString(conf, "autoaddr_start",
&autoaddrStartFromConf) < 0)
+ return -1;
+ if (autoaddrStartFromConf) {
+ VIR_DEBUG("autoaddr_start setting requested from config file %s:
'%s'",
+ filename, autoaddrStartFromConf);
+ autoaddrStart = autoaddrStartFromConf;
+ }
+
+ if (virConfGetValueString(conf, "autoaddr_end",
&autoaddrEndFromConf) < 0)
+ return -1;
+ if (autoaddrEndFromConf) {
+ VIR_DEBUG("autoaddr_end setting requested from config file %s:
'%s'",
+ filename, autoaddrEndFromConf);
+ autoaddrEnd = autoaddrEndFromConf;
+ }
+
+ switch (virConfGetValueUInt(conf, "autoaddr_prefix",
&autoaddrPrefix)) {
+ case 1:
+ VIR_DEBUG("autoaddr_prefix setting requested from config file %s:
'%u'",
+ filename, autoaddrPrefix);
+ break;
+
+ case 0:
+ break;
+
+ case -1:
+ default:
+ return -1;
+ }
+
if (virConfGetValueString(conf, "firewall_backend", &fwBackendStr)
< 0)
return -1;
@@ -106,6 +143,30 @@ virNetworkLoadDriverConfig(virNetworkDriverConfig *cfg
G_GNUC_UNUSED,
}
}
+ if (virSocketAddrParse(&cfg->autoaddrStart, autoaddrStart, AF_INET) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("invalid autoaddr_start '%1$s' in network driver
config file %2$s, must be numeric IPv4 network address"),
+ autoaddrStart, filename);
+ return -1;
+ }
+
+ if (virSocketAddrParse(&cfg->autoaddrEnd, autoaddrEnd, AF_INET) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("invalid autoaddr_end '%1$s' in network driver
config file %2$s, must be numeric IPv4 network address"),
+ autoaddrStart, filename);
+ return -1;
+ }
+
+ if ((cfg->autoaddrPrefix = autoaddrPrefix) > 32) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Invalid IPv4 prefix '%1$u' in network driver
config file %2$s"),
+ autoaddrPrefix, filename);
+ return -1;
+ }
+
+ VIR_INFO("autoaddr_start='%s' autoaddr_end='%s'
autoaddr_prefix='%u'",
+ autoaddrStart, autoaddrEnd, autoaddrPrefix);
+
for (i = 0; i < nFwBackends && !fwBackendSelected; i++) {
switch ((virFirewallBackend)fwBackends[i]) {
diff --git a/src/network/bridge_driver_conf.h b/src/network/bridge_driver_conf.h
index 8f221f391e..7ebf77037d 100644
--- a/src/network/bridge_driver_conf.h
+++ b/src/network/bridge_driver_conf.h
@@ -39,6 +39,10 @@ struct _virNetworkDriverConfig {
char *pidDir;
char *dnsmasqStateDir;
+ virSocketAddr autoaddrStart;
+ virSocketAddr autoaddrEnd;
+ unsigned int autoaddrPrefix;
+
virFirewallBackend firewallBackend;
};
diff --git a/src/network/libvirtd_network.aug b/src/network/libvirtd_network.aug
index 5d6d72dd92..5212505e1f 100644
--- a/src/network/libvirtd_network.aug
+++ b/src/network/libvirtd_network.aug
@@ -22,10 +22,16 @@ module Libvirtd_network =
let int_entry (kw:string) = [ key kw . value_sep . int_val ]
let str_array_entry (kw:string) = [ key kw . value_sep . str_array_val ]
+ let autoaddr_entry = str_entry "autoaddr_start"
+ | str_entry "autoaddr_end"
+ | int_entry "autoaddr_prefix"
+
let firewall_backend_entry = str_entry "firewall_backend"
(* Each entry in the config is one of the following *)
- let entry = firewall_backend_entry
+ let entry = autoaddr_entry
+ | firewall_backend_entry
+
let comment = [ label "#comment" . del /#[ \t]*/ "# " . store
/([^ \t\n][^\n]*)?/ . del /\n/ "\n" ]
let empty = [ label "#empty" . eol ]
diff --git a/src/network/meson.build b/src/network/meson.build
index 07cd5cda55..8faff6eb1c 100644
--- a/src/network/meson.build
+++ b/src/network/meson.build
@@ -51,6 +51,9 @@ if conf.has('WITH_NETWORK')
}
network_options_conf = configuration_data({
+ 'AUTOADDR_START': autoaddr_start,
+ 'AUTOADDR_END': autoaddr_end,
+ 'AUTOADDR_PREFIX': autoaddr_prefix,
'FIREWALL_BACKEND_PRIORITY': ', '.join(firewall_backend_priority),
'FIREWALL_BACKEND': firewall_backend_priority[0],
})
@@ -62,6 +65,9 @@ if conf.has('WITH_NETWORK')
)
network_options_hack_conf = configuration_data({
+ 'AUTOADDR_START': autoaddr_start,
+ 'AUTOADDR_END': autoaddr_end,
+ 'AUTOADDR_PREFIX': autoaddr_prefix,
'FIREWALL_BACKEND_PRIORITY': ', '.join(firewall_backend_priority),
'FIREWALL_BACKEND': firewall_backend_priority[0],
# This hack is necessary because the output file is going to be
diff --git a/src/network/network.conf.in b/src/network/network.conf.in
index 5ed64a04a5..83a27df04c 100644
--- a/src/network/network.conf.in
+++ b/src/network/network.conf.in
@@ -27,3 +27,14 @@
# reloaded using the new backend.)
#
#firewall_backend = "@FIREWALL_BACKEND@"
+#
+# autoaddr_start
+# autoaddr_end
+# autoaddr_prefix
+#
+# These three setting specify the range of subnets that should be used
+# for networks that have "autoaddr='yes'"
+#
+#autoaddr_start = "@AUTOADDR_START@"
+#autoaddr_end = "@AUTOADDR_END@"
+#autoaddr_prefix = @AUTOADDR_PREFIX@
diff --git a/src/network/test_libvirtd_network.aug.in
b/src/network/test_libvirtd_network.aug.in
index 9e29a9192f..6edcbaed62 100644
--- a/src/network/test_libvirtd_network.aug.in
+++ b/src/network/test_libvirtd_network.aug.in
@@ -3,3 +3,6 @@ module Test_libvirtd_network =
test Libvirtd_network.lns get conf =
{ "firewall_backend" = "@FIREWALL_BACKEND@" }
+{ "autoaddr_start" = "@AUTOADDR_START@" }
+{ "autoaddr_end" = "@AUTOADDR_END@" }
+{ "autoaddr_prefix" = "@AUTOADDR_PREFIX@" }
--
2.45.2