mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-01-06 05:00:15 +01:00
cli: accept prefix "ifname/", "uuid/" or "id/" for 'master' argument
nmcli con add type team-slave ifname em2 master team-master0 nmcli con add type team-slave ifname em2 master id/team-master0 It helps to disambiguate values for cases where they may overlap, e.g. "team0" -> "ifname/team0" or "id/team0"
This commit is contained in:
parent
90c02cafdc
commit
d7e1ec9183
2 changed files with 56 additions and 15 deletions
|
|
@ -2743,6 +2743,28 @@ unique_master_iface_ifname (GSList *list,
|
|||
return new_name;
|
||||
}
|
||||
|
||||
static const char *
|
||||
_strip_master_prefix (const char *master, const char *(**func)(NMConnection *))
|
||||
{
|
||||
if (!master)
|
||||
return NULL;
|
||||
|
||||
if (g_str_has_prefix (master, "ifname/")) {
|
||||
master = master + strlen ("ifname/");
|
||||
if (func)
|
||||
*func = nm_connection_get_virtual_iface_name;
|
||||
} else if (g_str_has_prefix (master, "uuid/")) {
|
||||
master = master + strlen ("uuid/");
|
||||
if (func)
|
||||
*func = nm_connection_get_uuid;
|
||||
} else if (g_str_has_prefix (master, "id/")) {
|
||||
master = master + strlen ("id/");
|
||||
if (func)
|
||||
*func = nm_connection_get_id;
|
||||
}
|
||||
return master;
|
||||
}
|
||||
|
||||
/* verify_master_for_slave:
|
||||
* @connections: list af all connections
|
||||
* @master: UUID, ifname or ID of the master connection
|
||||
|
|
@ -2765,7 +2787,12 @@ verify_master_for_slave (GSList *connections,
|
|||
GSList *iterator = connections;
|
||||
const char *found_by_id = NULL;
|
||||
const char *out_master = NULL;
|
||||
const char *(*func) (NMConnection *) = NULL;
|
||||
|
||||
if (!master)
|
||||
return NULL;
|
||||
|
||||
master = _strip_master_prefix (master, &func);
|
||||
while (iterator) {
|
||||
connection = NM_CONNECTION (iterator->data);
|
||||
s_con = nm_connection_get_setting_connection (connection);
|
||||
|
|
@ -2775,16 +2802,27 @@ verify_master_for_slave (GSList *connections,
|
|||
iterator = g_slist_next (iterator);
|
||||
continue;
|
||||
}
|
||||
id = nm_connection_get_id (connection);
|
||||
uuid = nm_connection_get_uuid (connection);
|
||||
ifname = nm_connection_get_virtual_iface_name (connection);
|
||||
if ( g_strcmp0 (master, uuid) == 0
|
||||
|| g_strcmp0 (master, ifname) == 0) {
|
||||
out_master = master;
|
||||
break;
|
||||
if (func) {
|
||||
/* There was a prefix; only compare to that type. */
|
||||
if (g_strcmp0 (master, func (connection)) == 0) {
|
||||
if (func == nm_connection_get_id)
|
||||
out_master = nm_connection_get_uuid (connection);
|
||||
else
|
||||
out_master = master;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
id = nm_connection_get_id (connection);
|
||||
uuid = nm_connection_get_uuid (connection);
|
||||
ifname = nm_connection_get_virtual_iface_name (connection);
|
||||
if ( g_strcmp0 (master, uuid) == 0
|
||||
|| g_strcmp0 (master, ifname) == 0) {
|
||||
out_master = master;
|
||||
break;
|
||||
}
|
||||
if (!found_by_id && g_strcmp0 (master, id) == 0)
|
||||
found_by_id = uuid;
|
||||
}
|
||||
if (!found_by_id && g_strcmp0 (master, id) == 0)
|
||||
found_by_id = uuid;
|
||||
|
||||
iterator = g_slist_next (iterator);
|
||||
}
|
||||
|
|
@ -4419,7 +4457,7 @@ cleanup_bond:
|
|||
/* Change properties in 'connection' setting */
|
||||
g_object_set (s_con,
|
||||
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
|
||||
NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : master,
|
||||
NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : _strip_master_prefix (master, NULL),
|
||||
NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BOND_SETTING_NAME,
|
||||
NULL);
|
||||
|
||||
|
|
@ -4533,7 +4571,7 @@ cleanup_team:
|
|||
/* Change properties in 'connection' setting */
|
||||
g_object_set (s_con,
|
||||
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
|
||||
NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : master,
|
||||
NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : _strip_master_prefix (master, NULL),
|
||||
NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME,
|
||||
NULL);
|
||||
|
||||
|
|
@ -4738,7 +4776,7 @@ cleanup_bridge:
|
|||
/* Change properties in 'connection' setting */
|
||||
g_object_set (s_con,
|
||||
NM_SETTING_CONNECTION_TYPE, NM_SETTING_WIRED_SETTING_NAME,
|
||||
NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : master,
|
||||
NM_SETTING_CONNECTION_MASTER, checked_master ? checked_master : _strip_master_prefix (master, NULL),
|
||||
NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_BRIDGE_SETTING_NAME,
|
||||
NULL);
|
||||
|
||||
|
|
|
|||
|
|
@ -522,7 +522,8 @@ Note: use quotes around \fB*\fP to suppress shell expansion.
|
|||
.TP
|
||||
.B bond-slave:
|
||||
.IP "\fImaster <master (ifname, or connection UUID or name)>\fP" 42
|
||||
\(en name of bond master interface
|
||||
\(en master bond interface name, or connection UUID or ID of bond master connection profile.
|
||||
The value can be prefixed with \fBifname/\fP, \fBuuid/\fP or \fBid/\fP to disambiguate it.
|
||||
.RE
|
||||
.RS
|
||||
.TP
|
||||
|
|
@ -534,7 +535,8 @@ Note: use quotes around \fB*\fP to suppress shell expansion.
|
|||
.TP
|
||||
.B team-slave:
|
||||
.IP "\fImaster <master (ifname, or connection UUID or name)>\fP" 42
|
||||
\(en name of team master interface
|
||||
\(en master team interface name, or connection UUID or ID of team master connection profile.
|
||||
The value can be prefixed with \fBifname/\fP, \fBuuid/\fP or \fBid/\fP to disambiguate it.
|
||||
.IP "\fI[config <file>|<raw JSON data>]\fP" 42
|
||||
\(en JSON configuration for team
|
||||
.RE
|
||||
|
|
@ -558,7 +560,8 @@ Note: use quotes around \fB*\fP to suppress shell expansion.
|
|||
.TP
|
||||
.B bridge-slave:
|
||||
.IP "\fImaster <master (ifname, or connection UUID or name)>\fP" 42
|
||||
\(en name of bridge master interface
|
||||
\(en master bridge interface name, or connection UUID or ID of bridge master connection profile.
|
||||
The value can be prefixed with \fBifname/\fP, \fBuuid/\fP or \fBid/\fP to disambiguate it.
|
||||
.IP "\fI[priority <0-63>]\fP" 42
|
||||
\(en STP priority of this slave (default: 32)
|
||||
.IP "\fI[path-cost <1-65535>]\fP" 42
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue