summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2017-02-20 13:32:39 +0100
committerLubomir Rintel <lkundrak@v3.sk>2017-02-20 16:09:13 +0100
commitf72c54a2cca791d166a7bc37f2c317b6dd6bc204 (patch)
tree2a19a57e4251badf3a42679d9ab20f1c754d7714
parent6913311d47a9045ac10f855fc3097c2304c56c43 (diff)
downloadNetworkManager-f72c54a2cca791d166a7bc37f2c317b6dd6bc204.tar.gz
tui: generate names for bonds, teams and bridges
This makes it more likely that the user will end up with a master connection that has connection.interface-name property. This makes it possible for ifcfg plugin to specify the master in the for of device name (as opposed to UUID) for compatibility with the legacy network tooling. This is equivalent to what nmcli does. https://bugzilla.redhat.com/show_bug.cgi?id=1369091 (cherry picked from commit ff46158d9ecd153fa4b0be71f679fa61212715f2)
-rw-r--r--clients/tui/nm-editor-utils.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/clients/tui/nm-editor-utils.c b/clients/tui/nm-editor-utils.c
index 0ec55f3d2b..d5c2fd5795 100644
--- a/clients/tui/nm-editor-utils.c
+++ b/clients/tui/nm-editor-utils.c
@@ -308,6 +308,33 @@ get_available_connection_name (const char *format,
return cname;
}
+static char *
+get_available_iface_name (const char *try_name,
+ NMClient *client)
+{
+ const GPtrArray *connections;
+ NMConnection *connection;
+ char *new_name;
+ unsigned int num = 1;
+ int i = 0;
+ const char *ifname = NULL;
+
+ connections = nm_client_get_connections (client);
+
+ new_name = g_strdup (try_name);
+ while (i < connections->len) {
+ connection = NM_CONNECTION (connections->pdata[i]);
+ ifname = nm_connection_get_interface_name (connection);
+ if (g_strcmp0 (new_name, ifname) == 0) {
+ g_free (new_name);
+ new_name = g_strdup_printf ("%s%d", try_name, num++);
+ i = 0;
+ } else
+ i++;
+ }
+ return new_name;
+}
+
/**
* nm_editor_utils_create_connection:
* @type: the type of the connection's primary #NMSetting
@@ -335,7 +362,7 @@ nm_editor_utils_create_connection (GType type,
NMConnection *connection;
NMSettingConnection *s_con;
NMSetting *s_hw, *s_slave;
- char *uuid, *id;
+ char *uuid, *id, *ifname;
int i;
if (master) {
@@ -368,6 +395,15 @@ nm_editor_utils_create_connection (GType type,
s_hw = g_object_new (type, NULL);
nm_connection_add_setting (connection, s_hw);
+ if (type == NM_TYPE_SETTING_BOND)
+ ifname = get_available_iface_name ("nm-bond", client);
+ else if (type == NM_TYPE_SETTING_TEAM)
+ ifname = get_available_iface_name ("nm-team", client);
+ else if (type == NM_TYPE_SETTING_BRIDGE)
+ ifname = get_available_iface_name ("nm-bridge", client);
+ else
+ ifname = NULL;
+
if (slave_setting_type != G_TYPE_INVALID) {
s_slave = g_object_new (slave_setting_type, NULL);
nm_connection_add_setting (connection, s_slave);
@@ -383,10 +419,12 @@ nm_editor_utils_create_connection (GType type,
NM_SETTING_CONNECTION_AUTOCONNECT, !type_data->no_autoconnect,
NM_SETTING_CONNECTION_MASTER, master_uuid,
NM_SETTING_CONNECTION_SLAVE_TYPE, master_setting_type,
+ NM_SETTING_CONNECTION_INTERFACE_NAME, ifname,
NULL);
g_free (uuid);
g_free (id);
+ g_free (ifname);
if (type_data->connection_setup_func)
type_data->connection_setup_func (connection, s_con, s_hw);