mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-11 13:00:31 +01:00
ifcfg-rh: support new match filters
This commit is contained in:
parent
d8a7f65ef4
commit
369d858525
6 changed files with 73 additions and 15 deletions
|
|
@ -1561,10 +1561,16 @@ make_match_setting (shvarFile *ifcfg)
|
|||
{
|
||||
NMSettingMatch *s_match = NULL;
|
||||
gs_free char *value_ifn = NULL;
|
||||
gs_free char *value_kcl = NULL;
|
||||
gs_free char *value_d = NULL;
|
||||
const char *v;
|
||||
|
||||
v = svGetValueStr (ifcfg, "MATCH_INTERFACE_NAME", &value_ifn);
|
||||
make_match_setting_prop(v, &s_match, nm_setting_match_add_interface_name);
|
||||
v = svGetValueStr (ifcfg, "MATCH_KERNEL_COMMAND_LINE", &value_kcl);
|
||||
make_match_setting_prop(v, &s_match, nm_setting_match_add_kernel_command_line);
|
||||
v = svGetValueStr (ifcfg, "MATCH_DRIVER", &value_d);
|
||||
make_match_setting_prop(v, &s_match, nm_setting_match_add_driver);
|
||||
|
||||
return (NMSetting *) s_match;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -888,7 +888,9 @@ const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[] = {
|
|||
_KEY_TYPE ("MAC_ADDRESS_RANDOMIZATION", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
_KEY_TYPE ("MASTER", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
_KEY_TYPE ("MASTER_UUID", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
_KEY_TYPE ("MATCH_DRIVER", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
_KEY_TYPE ("MATCH_INTERFACE_NAME", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
_KEY_TYPE ("MATCH_KERNEL_COMMAND_LINE", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
_KEY_TYPE ("MDNS", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
_KEY_TYPE ("METRIC", NMS_IFCFG_KEY_TYPE_IS_NUMBERED ),
|
||||
_KEY_TYPE ("MODE", NMS_IFCFG_KEY_TYPE_IS_PLAIN ),
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ typedef struct {
|
|||
NMSIfcfgKeyTypeFlags key_flags;
|
||||
} NMSIfcfgKeyTypeInfo;
|
||||
|
||||
extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[233];
|
||||
extern const NMSIfcfgKeyTypeInfo nms_ifcfg_well_known_keys[235];
|
||||
|
||||
const NMSIfcfgKeyTypeInfo *nms_ifcfg_well_known_key_find_info (const char *key, gssize *out_idx);
|
||||
|
||||
|
|
|
|||
|
|
@ -2378,30 +2378,75 @@ static gboolean
|
|||
write_match_setting (NMConnection *connection, shvarFile *ifcfg, GError **error)
|
||||
{
|
||||
NMSettingMatch *s_match;
|
||||
nm_auto_free_gstring GString *str = NULL;
|
||||
guint i, num;
|
||||
|
||||
s_match = (NMSettingMatch *) nm_connection_get_setting (connection, NM_TYPE_SETTING_MATCH);
|
||||
if (!s_match)
|
||||
return TRUE;
|
||||
|
||||
num = nm_setting_match_get_num_interface_names (s_match);
|
||||
for (i = 0; i < num; i++) {
|
||||
const char *name;
|
||||
num = nm_setting_match_get_num_drivers (s_match);
|
||||
{
|
||||
nm_auto_free_gstring GString *str = NULL;
|
||||
for (i = 0; i < num; i++) {
|
||||
const char *name;
|
||||
|
||||
name = nm_setting_match_get_interface_name (s_match, i);
|
||||
if (!name || !name[0])
|
||||
continue;
|
||||
name = nm_setting_match_get_driver (s_match, i);
|
||||
if (!name || !name[0])
|
||||
continue;
|
||||
|
||||
if (!str)
|
||||
str = g_string_new ("");
|
||||
else
|
||||
g_string_append_c (str, ' ');
|
||||
nm_utils_escaped_tokens_escape_gstr (name, NM_ASCII_SPACES, str);
|
||||
if (!str)
|
||||
str = g_string_new ("");
|
||||
else
|
||||
g_string_append_c (str, ' ');
|
||||
nm_utils_escaped_tokens_escape_gstr (name, NM_ASCII_SPACES, str);
|
||||
}
|
||||
|
||||
if (str)
|
||||
svSetValueStr (ifcfg, "MATCH_DRIVER", str->str);
|
||||
}
|
||||
|
||||
if (str)
|
||||
svSetValueStr (ifcfg, "MATCH_INTERFACE_NAME", str->str);
|
||||
num = nm_setting_match_get_num_interface_names (s_match);
|
||||
{
|
||||
nm_auto_free_gstring GString *str = NULL;
|
||||
for (i = 0; i < num; i++) {
|
||||
const char *name;
|
||||
|
||||
name = nm_setting_match_get_interface_name (s_match, i);
|
||||
if (!name || !name[0])
|
||||
continue;
|
||||
|
||||
if (!str)
|
||||
str = g_string_new ("");
|
||||
else
|
||||
g_string_append_c (str, ' ');
|
||||
nm_utils_escaped_tokens_escape_gstr (name, NM_ASCII_SPACES, str);
|
||||
}
|
||||
|
||||
if (str)
|
||||
svSetValueStr (ifcfg, "MATCH_INTERFACE_NAME", str->str);
|
||||
}
|
||||
|
||||
|
||||
num = nm_setting_match_get_num_kernel_command_lines (s_match);
|
||||
{
|
||||
nm_auto_free_gstring GString *str = NULL;
|
||||
for (i = 0; i < num; i++) {
|
||||
const char *name;
|
||||
|
||||
name = nm_setting_match_get_kernel_command_line (s_match, i);
|
||||
if (!name || !name[0])
|
||||
continue;
|
||||
|
||||
if (!str)
|
||||
str = g_string_new ("");
|
||||
else
|
||||
g_string_append_c (str, ' ');
|
||||
nm_utils_escaped_tokens_escape_gstr (name, NM_ASCII_SPACES, str);
|
||||
}
|
||||
|
||||
if (str)
|
||||
svSetValueStr (ifcfg, "MATCH_KERNEL_COMMAND_LINE", str->str);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
TYPE=Ethernet
|
||||
PROXY_METHOD=none
|
||||
BROWSER_ONLY=no
|
||||
MATCH_DRIVER="!virtio e1000e"
|
||||
MATCH_INTERFACE_NAME="ens* eth\\ 1? !veth*"
|
||||
MATCH_KERNEL_COMMAND_LINE=!ip=
|
||||
BOOTPROTO=dhcp
|
||||
DEFROUTE=yes
|
||||
IPV4_FAILURE_FATAL=no
|
||||
|
|
|
|||
|
|
@ -4687,6 +4687,9 @@ test_write_wired_match (void)
|
|||
nm_setting_match_add_interface_name (s_match, "ens*");
|
||||
nm_setting_match_add_interface_name (s_match, "eth 1?");
|
||||
nm_setting_match_add_interface_name (s_match, "!veth*");
|
||||
nm_setting_match_add_driver (s_match, "!virtio");
|
||||
nm_setting_match_add_driver (s_match, "e1000e");
|
||||
nm_setting_match_add_kernel_command_line (s_match, "!ip=");
|
||||
nm_connection_add_setting (connection, NM_SETTING (s_match));
|
||||
|
||||
nmtst_assert_connection_verifies (connection);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue