compat: Only create interface when configured to do so.

Add config option <compat_create_interfaces>:

  Denotes where or not to create interfaces when compat_* settings are
  active and it would be necessary to create an interface to be fully
  compliant.  This could happen when inheriting bridge VLAN settings to
  an interface within a bridges bridge-ports setting but no interface
  stanza is found.  Valid values are 0 and 1, the default is 1.

Signed-off-by: Maximilian Wilhelm <max@sdn.clinic>
This commit is contained in:
Maximilian Wilhelm 2020-10-18 05:14:03 +02:00
parent d86297f29c
commit 480fc5eecb
5 changed files with 27 additions and 1 deletions

View file

@ -17,6 +17,14 @@ allow_addon_scripts = 1
# templates. Valid values are 0 and 1, the default is 1. # templates. Valid values are 0 and 1, the default is 1.
allow_any_iface_as_template = 1 allow_any_iface_as_template = 1
# compat_create_interfaces:
# Denotes where or not to create interfaces when compat_* settings are
# active and it would be necessary to create an interface to be fully
# compliant. This could happen when inheriting bridge VLAN settings to
# an interface within a bridges bridge-ports setting but no interface
# stanza is found. Valid values are 0 and 1, the default is 1.
compat_create_interfaces = 1
# compat_ifupdown2_bridge_ports_inherit_vlans: # compat_ifupdown2_bridge_ports_inherit_vlans:
# In ifupdown2 <bridge-vids> as well as the <bridge-pvid> set on a bridge # In ifupdown2 <bridge-vids> as well as the <bridge-pvid> set on a bridge
# interface will be inherited by all member ports if not set explicitly. # interface will be inherited by all member ports if not set explicitly.

View file

@ -60,6 +60,13 @@ Currently the following settings are supported in
in order to require inheritance from specified templates. in order to require inheritance from specified templates.
Valid values are `0` and `1`, the default is `1`. Valid values are `0` and `1`, the default is `1`.
* `compat_create_interfaces`:
Denotes where or not to create interfaces when compat\_* settings are
active and it would be necessary to create an interface to be fully
compliant. This could happen when inheriting bridge VLAN settings to
an interface within a bridges bridge-ports setting but no interface
stanza is found. Valid values are `0` and `1`, the default is `1`.
* `compat_ifupdown2_bridge_ports_inherit_vlans`: In ifupdown2 `bridge-vids` * `compat_ifupdown2_bridge_ports_inherit_vlans`: In ifupdown2 `bridge-vids`
as well as the <bridge-pvid> set on a bridge interface will be inherited as well as the <bridge-pvid> set on a bridge interface will be inherited
by all member ports if not set explicitly. When set to `1` ifupdown-ng by all member ports if not set explicitly. When set to `1` ifupdown-ng

View file

@ -68,7 +68,7 @@ compat_ifupdown2_bridge_ports_inherit_vlans(struct lif_dict *collection)
if (entry) if (entry)
bridge_port = entry->data; bridge_port = entry->data;
else else if (lif_config.compat_create_interfaces)
{ {
bridge_port = lif_interface_collection_find(collection, tokenp); bridge_port = lif_interface_collection_find(collection, tokenp);
if (bridge_port == NULL) if (bridge_port == NULL)
@ -78,6 +78,14 @@ compat_ifupdown2_bridge_ports_inherit_vlans(struct lif_dict *collection)
} }
} }
/* We would have to creaet an interface, but shouldn't */
else
{
fprintf(stderr, "compat: Missing interface stanza for bridge-port \"%s\" but should not create one.\n",
tokenp);
continue;
}
/* Maybe pimp bridge-pvid */ /* Maybe pimp bridge-pvid */
struct lif_dict_entry *port_pvid = lif_dict_find(&bridge_port->vars, "bridge-pvid"); struct lif_dict_entry *port_pvid = lif_dict_find(&bridge_port->vars, "bridge-pvid");
if (bridge_pvid && !port_pvid) if (bridge_pvid && !port_pvid)

View file

@ -21,6 +21,7 @@
struct lif_config_file lif_config = { struct lif_config_file lif_config = {
.allow_addon_scripts = true, .allow_addon_scripts = true,
.allow_any_iface_as_template = true, .allow_any_iface_as_template = true,
.compat_create_interfaces = true,
.compat_ifupdown2_bridge_ports_inherit_vlans = true, .compat_ifupdown2_bridge_ports_inherit_vlans = true,
.implicit_template_conversion = true, .implicit_template_conversion = true,
.use_hostname_for_dhcp = true, .use_hostname_for_dhcp = true,
@ -48,6 +49,7 @@ set_bool_value(const char *key, const char *value, void *opaque)
static struct lif_config_handler handlers[] = { static struct lif_config_handler handlers[] = {
{"allow_addon_scripts", set_bool_value, &lif_config.allow_addon_scripts}, {"allow_addon_scripts", set_bool_value, &lif_config.allow_addon_scripts},
{"allow_any_iface_as_template", set_bool_value, &lif_config.allow_any_iface_as_template}, {"allow_any_iface_as_template", set_bool_value, &lif_config.allow_any_iface_as_template},
{"compat_create_interfaces", set_bool_value, &lif_config.compat_create_interfaces},
{"compat_ifupdown2_bridge_ports_inherit_vlans", set_bool_value, &lif_config.compat_ifupdown2_bridge_ports_inherit_vlans}, {"compat_ifupdown2_bridge_ports_inherit_vlans", set_bool_value, &lif_config.compat_ifupdown2_bridge_ports_inherit_vlans},
{"implicit_template_conversion", set_bool_value, &lif_config.implicit_template_conversion}, {"implicit_template_conversion", set_bool_value, &lif_config.implicit_template_conversion},
{"use_hostname_for_dhcp", set_bool_value, &lif_config.use_hostname_for_dhcp}, {"use_hostname_for_dhcp", set_bool_value, &lif_config.use_hostname_for_dhcp},

View file

@ -21,6 +21,7 @@
struct lif_config_file { struct lif_config_file {
bool allow_addon_scripts; bool allow_addon_scripts;
bool allow_any_iface_as_template; bool allow_any_iface_as_template;
bool compat_create_interfaces;
bool compat_ifupdown2_bridge_ports_inherit_vlans; bool compat_ifupdown2_bridge_ports_inherit_vlans;
bool implicit_template_conversion; bool implicit_template_conversion;
bool use_hostname_for_dhcp; bool use_hostname_for_dhcp;