mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-07 03:48:09 +02:00
ifcfg-rh: merge branch 'th/ifcfg-rh-read-team-rh1367180'
https://bugzilla.redhat.com/show_bug.cgi?id=1367180
(cherry picked from commit cbbc8620a1)
This commit is contained in:
commit
9f4ce4e283
8 changed files with 62 additions and 42 deletions
|
|
@ -395,7 +395,9 @@ commit_changes (NMSettingsConnection *connection,
|
||||||
*/
|
*/
|
||||||
filename = nm_settings_connection_get_filename (connection);
|
filename = nm_settings_connection_get_filename (connection);
|
||||||
if (filename) {
|
if (filename) {
|
||||||
reread = connection_from_file (filename, NULL, NULL, NULL);
|
gs_free char *unhandled = NULL;
|
||||||
|
|
||||||
|
reread = connection_from_file (filename, &unhandled, NULL, NULL);
|
||||||
if (reread) {
|
if (reread) {
|
||||||
same = nm_connection_compare (NM_CONNECTION (connection),
|
same = nm_connection_compare (NM_CONNECTION (connection),
|
||||||
reread,
|
reread,
|
||||||
|
|
|
||||||
|
|
@ -1621,26 +1621,29 @@ check_if_bond_slave (shvarFile *ifcfg,
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static gboolean
|
||||||
check_if_team_slave (shvarFile *ifcfg,
|
check_if_team_slave (shvarFile *ifcfg,
|
||||||
NMSettingConnection *s_con)
|
NMSettingConnection *s_con)
|
||||||
{
|
{
|
||||||
char *value;
|
gs_free char *value = NULL;
|
||||||
|
|
||||||
value = svGetValue (ifcfg, "DEVICETYPE", FALSE);
|
|
||||||
if (!value)
|
|
||||||
return;
|
|
||||||
if (strcasecmp (value, TYPE_TEAM_PORT)) {
|
|
||||||
g_free (value);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
g_free (value);
|
|
||||||
value = svGetValue (ifcfg, "TEAM_MASTER", FALSE);
|
value = svGetValue (ifcfg, "TEAM_MASTER", FALSE);
|
||||||
if (!value)
|
if (!value)
|
||||||
return;
|
return FALSE;
|
||||||
g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
|
g_object_set (s_con, NM_SETTING_CONNECTION_MASTER, value, NULL);
|
||||||
g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME, NULL);
|
g_object_set (s_con, NM_SETTING_CONNECTION_SLAVE_TYPE, NM_SETTING_TEAM_SETTING_NAME, NULL);
|
||||||
g_free (value);
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_if_slave (shvarFile *ifcfg,
|
||||||
|
NMSettingConnection *s_con)
|
||||||
|
{
|
||||||
|
g_return_if_fail (NM_IS_SETTING_CONNECTION (s_con));
|
||||||
|
|
||||||
|
if (check_if_team_slave (ifcfg, s_con))
|
||||||
|
return;
|
||||||
|
check_if_bond_slave (ifcfg, s_con);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
@ -3948,8 +3951,7 @@ wired_connection_from_ifcfg (const char *file,
|
||||||
g_object_unref (connection);
|
g_object_unref (connection);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
check_if_bond_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
|
check_if_slave (ifcfg, (NMSettingConnection *) con_setting);
|
||||||
check_if_team_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
|
|
||||||
nm_connection_add_setting (connection, con_setting);
|
nm_connection_add_setting (connection, con_setting);
|
||||||
|
|
||||||
wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error);
|
wired_setting = make_wired_setting (ifcfg, file, &s_8021x, error);
|
||||||
|
|
@ -4099,8 +4101,7 @@ infiniband_connection_from_ifcfg (const char *file,
|
||||||
g_object_unref (connection);
|
g_object_unref (connection);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
check_if_bond_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
|
check_if_slave (ifcfg, (NMSettingConnection *) con_setting);
|
||||||
check_if_team_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
|
|
||||||
nm_connection_add_setting (connection, con_setting);
|
nm_connection_add_setting (connection, con_setting);
|
||||||
|
|
||||||
infiniband_setting = make_infiniband_setting (ifcfg, file, error);
|
infiniband_setting = make_infiniband_setting (ifcfg, file, error);
|
||||||
|
|
@ -4599,8 +4600,6 @@ is_bond_device (const char *name, shvarFile *parsed)
|
||||||
|
|
||||||
if (svGetValueBoolean (parsed, "BONDING_MASTER", FALSE))
|
if (svGetValueBoolean (parsed, "BONDING_MASTER", FALSE))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* XXX: Check for "bond[\d]+"? */
|
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
@ -4816,8 +4815,7 @@ vlan_connection_from_ifcfg (const char *file,
|
||||||
g_object_unref (connection);
|
g_object_unref (connection);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
check_if_bond_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
|
check_if_slave (ifcfg, (NMSettingConnection *) con_setting);
|
||||||
check_if_team_slave (ifcfg, NM_SETTING_CONNECTION (con_setting));
|
|
||||||
nm_connection_add_setting (connection, con_setting);
|
nm_connection_add_setting (connection, con_setting);
|
||||||
|
|
||||||
vlan_setting = make_vlan_setting (ifcfg, file, error);
|
vlan_setting = make_vlan_setting (ifcfg, file, error);
|
||||||
|
|
@ -4848,7 +4846,7 @@ create_unhandled_connection (const char *filename, shvarFile *ifcfg,
|
||||||
NMSetting *s_con;
|
NMSetting *s_con;
|
||||||
char *value;
|
char *value;
|
||||||
|
|
||||||
g_assert (out_spec != NULL);
|
nm_assert (out_spec && !*out_spec);
|
||||||
|
|
||||||
connection = nm_simple_connection_new ();
|
connection = nm_simple_connection_new ();
|
||||||
|
|
||||||
|
|
@ -4963,8 +4961,7 @@ connection_from_file_full (const char *filename,
|
||||||
const char *ifcfg_name = NULL;
|
const char *ifcfg_name = NULL;
|
||||||
|
|
||||||
g_return_val_if_fail (filename != NULL, NULL);
|
g_return_val_if_fail (filename != NULL, NULL);
|
||||||
if (out_unhandled)
|
g_return_val_if_fail (out_unhandled && !*out_unhandled, NULL);
|
||||||
g_return_val_if_fail (*out_unhandled == NULL, NULL);
|
|
||||||
|
|
||||||
/* Non-NULL only for unit tests; normally use /etc/sysconfig/network */
|
/* Non-NULL only for unit tests; normally use /etc/sysconfig/network */
|
||||||
if (!network_file)
|
if (!network_file)
|
||||||
|
|
@ -4982,8 +4979,6 @@ connection_from_file_full (const char *filename,
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!svGetValueBoolean (parsed, "NM_CONTROLLED", TRUE)) {
|
if (!svGetValueBoolean (parsed, "NM_CONTROLLED", TRUE)) {
|
||||||
g_assert (out_unhandled != NULL);
|
|
||||||
|
|
||||||
connection = create_unhandled_connection (filename, parsed, "unmanaged", out_unhandled);
|
connection = create_unhandled_connection (filename, parsed, "unmanaged", out_unhandled);
|
||||||
if (!connection)
|
if (!connection)
|
||||||
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
|
g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_FAILED,
|
||||||
|
|
@ -5011,6 +5006,16 @@ connection_from_file_full (const char *filename,
|
||||||
type = g_strdup (TYPE_ETHERNET);
|
type = g_strdup (TYPE_ETHERNET);
|
||||||
g_free (devtype);
|
g_free (devtype);
|
||||||
}
|
}
|
||||||
|
if (!type) {
|
||||||
|
gs_free char *t = NULL;
|
||||||
|
|
||||||
|
/* Team and TeamPort types are also accepted by the mere
|
||||||
|
* presense of TEAM_CONFIG/TEAM_MASTER. They don't require
|
||||||
|
* DEVICETYPE. */
|
||||||
|
t = svGetValue (parsed, "TEAM_CONFIG", FALSE);
|
||||||
|
if (t)
|
||||||
|
type = g_strdup (TYPE_TEAM);
|
||||||
|
}
|
||||||
|
|
||||||
if (!type)
|
if (!type)
|
||||||
type = svGetValue (parsed, "TYPE", FALSE);
|
type = svGetValue (parsed, "TYPE", FALSE);
|
||||||
|
|
@ -5136,8 +5141,6 @@ connection_from_file_full (const char *filename,
|
||||||
else if (!strcasecmp (type, TYPE_BRIDGE))
|
else if (!strcasecmp (type, TYPE_BRIDGE))
|
||||||
connection = bridge_connection_from_ifcfg (filename, parsed, error);
|
connection = bridge_connection_from_ifcfg (filename, parsed, error);
|
||||||
else {
|
else {
|
||||||
g_assert (out_unhandled != NULL);
|
|
||||||
|
|
||||||
connection = create_unhandled_connection (filename, parsed, "unrecognized", out_unhandled);
|
connection = create_unhandled_connection (filename, parsed, "unrecognized", out_unhandled);
|
||||||
if (!connection)
|
if (!connection)
|
||||||
PARSE_WARNING ("connection type was unrecognized but device was not uniquely identified; device may be managed");
|
PARSE_WARNING ("connection type was unrecognized but device was not uniquely identified; device may be managed");
|
||||||
|
|
|
||||||
|
|
@ -132,8 +132,10 @@ EXTRA_DIST = \
|
||||||
ifcfg-test-dcb-pgpct-not-100 \
|
ifcfg-test-dcb-pgpct-not-100 \
|
||||||
ifcfg-test-fcoe-fabric \
|
ifcfg-test-fcoe-fabric \
|
||||||
ifcfg-test-fcoe-vn2vn \
|
ifcfg-test-fcoe-vn2vn \
|
||||||
ifcfg-test-team-master \
|
ifcfg-test-team-master-1 \
|
||||||
ifcfg-test-team-port \
|
ifcfg-test-team-master-2 \
|
||||||
|
ifcfg-test-team-port-1 \
|
||||||
|
ifcfg-test-team-port-2 \
|
||||||
ifcfg-test-team-port-empty-config \
|
ifcfg-test-team-port-empty-config \
|
||||||
ifcfg-test-vlan-trailing-spaces \
|
ifcfg-test-vlan-trailing-spaces \
|
||||||
ifcfg-test-dns-options \
|
ifcfg-test-dns-options \
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
DEVICE=team0
|
||||||
|
ONBOOT=no
|
||||||
|
BOOTPROTO=dhcp
|
||||||
|
TEAM_CONFIG="{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
TYPE=Ethernet
|
||||||
|
TEAM_PORT_CONFIG="{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }"
|
||||||
|
DEVICE=p4p1
|
||||||
|
TEAM_MASTER=team0
|
||||||
|
|
@ -67,11 +67,14 @@ _connection_from_file (const char *filename,
|
||||||
{
|
{
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
char *unhandled_fallback = NULL;
|
||||||
|
|
||||||
g_assert (!out_unhandled || !*out_unhandled);
|
g_assert (!out_unhandled || !*out_unhandled);
|
||||||
|
|
||||||
connection = connection_from_file_test (filename, network_file, test_type, out_unhandled, &error);
|
connection = connection_from_file_test (filename, network_file, test_type,
|
||||||
|
out_unhandled ?: &unhandled_fallback, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
g_assert (!unhandled_fallback);
|
||||||
|
|
||||||
if (out_unhandled && *out_unhandled)
|
if (out_unhandled && *out_unhandled)
|
||||||
nmtst_assert_connection_verifies (connection);
|
nmtst_assert_connection_verifies (connection);
|
||||||
|
|
@ -89,13 +92,12 @@ _connection_from_file_fail (const char *filename,
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
GError *local = NULL;
|
GError *local = NULL;
|
||||||
char *unhandled = NULL;
|
char *unhandled = NULL;
|
||||||
char **p_unhandled = (nmtst_get_rand_int () % 2) ? &unhandled : NULL;
|
|
||||||
|
|
||||||
connection = connection_from_file_test (filename, network_file, test_type, p_unhandled, &local);
|
connection = connection_from_file_test (filename, network_file, test_type, &unhandled, &local);
|
||||||
|
|
||||||
g_assert (!connection);
|
g_assert (!connection);
|
||||||
g_assert (local);
|
g_assert (local);
|
||||||
g_assert (!p_unhandled || !*p_unhandled);
|
g_assert (!unhandled);
|
||||||
g_propagate_error (error, local);
|
g_propagate_error (error, local);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -8428,15 +8430,15 @@ test_write_fcoe_mode (gconstpointer user_data)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_read_team_master (void)
|
test_read_team_master (gconstpointer user_data)
|
||||||
{
|
{
|
||||||
|
const char *const PATH_NAME = user_data;
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
NMSettingConnection *s_con;
|
NMSettingConnection *s_con;
|
||||||
NMSettingTeam *s_team;
|
NMSettingTeam *s_team;
|
||||||
const char *expected_config = "{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }";
|
const char *expected_config = "{ \"device\": \"team0\", \"link_watch\": { \"name\": \"ethtool\" } }";
|
||||||
|
|
||||||
connection = _connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-master",
|
connection = _connection_from_file (PATH_NAME, NULL, TYPE_ETHERNET, NULL);
|
||||||
NULL, TYPE_ETHERNET, NULL);
|
|
||||||
|
|
||||||
g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "team0");
|
g_assert_cmpstr (nm_connection_get_interface_name (connection), ==, "team0");
|
||||||
|
|
||||||
|
|
@ -8544,15 +8546,15 @@ test_write_team_master (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_read_team_port (void)
|
test_read_team_port (gconstpointer user_data)
|
||||||
{
|
{
|
||||||
|
const char *const PATH_NAME = user_data;
|
||||||
NMConnection *connection;
|
NMConnection *connection;
|
||||||
NMSettingConnection *s_con;
|
NMSettingConnection *s_con;
|
||||||
NMSettingTeamPort *s_team_port;
|
NMSettingTeamPort *s_team_port;
|
||||||
const char *expected_config = "{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }";
|
const char *expected_config = "{ \"p4p1\": { \"prio\": -10, \"sticky\": true } }";
|
||||||
|
|
||||||
connection = _connection_from_file (TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port",
|
connection = _connection_from_file (PATH_NAME, NULL, TYPE_ETHERNET, NULL);
|
||||||
NULL, TYPE_ETHERNET, NULL);
|
|
||||||
|
|
||||||
s_con = nm_connection_get_setting_connection (connection);
|
s_con = nm_connection_get_setting_connection (connection);
|
||||||
g_assert (s_con);
|
g_assert (s_con);
|
||||||
|
|
@ -9046,9 +9048,11 @@ int main (int argc, char **argv)
|
||||||
g_test_add_func (TPATH "bridge/write-component", test_write_bridge_component);
|
g_test_add_func (TPATH "bridge/write-component", test_write_bridge_component);
|
||||||
g_test_add_func (TPATH "bridge/read-missing-stp", test_read_bridge_missing_stp);
|
g_test_add_func (TPATH "bridge/read-missing-stp", test_read_bridge_missing_stp);
|
||||||
|
|
||||||
g_test_add_func (TPATH "team/read-master", test_read_team_master);
|
g_test_add_data_func (TPATH "team/read-master-1", TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-master-1", test_read_team_master);
|
||||||
|
g_test_add_data_func (TPATH "team/read-master-2", TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-master-2", test_read_team_master);
|
||||||
g_test_add_func (TPATH "team/write-master", test_write_team_master);
|
g_test_add_func (TPATH "team/write-master", test_write_team_master);
|
||||||
g_test_add_func (TPATH "team/read-port", test_read_team_port);
|
g_test_add_data_func (TPATH "team/read-port-1", TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port-1", test_read_team_port);
|
||||||
|
g_test_add_data_func (TPATH "team/read-port-2", TEST_IFCFG_DIR"/network-scripts/ifcfg-test-team-port-2", test_read_team_port);
|
||||||
g_test_add_func (TPATH "team/write-port", test_write_team_port);
|
g_test_add_func (TPATH "team/write-port", test_write_team_port);
|
||||||
g_test_add_func (TPATH "team/read-port-empty-config", test_read_team_port_empty_config);
|
g_test_add_func (TPATH "team/read-port-empty-config", test_read_team_port_empty_config);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue