From 65783f7a926307a84d2241f7f179d4e28344f542 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Tue, 6 Jan 2015 19:09:46 +0100 Subject: [PATCH 1/2] team: allow overriding the MTU for team device (rh #1255927) Set the MTU if 802-3-ethernet.mtu is present and non-zero. The ifcfg-rh writer sets it if there's a MTU key. The same change as for bond in commit a169a79a7df1dbb8d966937c9cb887ffc6a63695. https://bugzilla.redhat.com/show_bug.cgi?id=1255927 (cherry picked from commit 7d3a4178a5d527725de22fe27ae1819e875ea168) --- src/devices/team/nm-device-team.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/devices/team/nm-device-team.c b/src/devices/team/nm-device-team.c index 23750f3579..09b2dd7d7a 100644 --- a/src/devices/team/nm-device-team.c +++ b/src/devices/team/nm-device-team.c @@ -40,6 +40,7 @@ #include "nm-enum-types.h" #include "nm-team-enum-types.h" #include "nm-core-internal.h" +#include "nm-ip4-config.h" #include "gsystem-local-alloc.h" #include "nm-device-team-glue.h" @@ -564,6 +565,25 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason) NM_ACT_STAGE_RETURN_POSTPONE : NM_ACT_STAGE_RETURN_FAILURE; } +static void +ip4_config_pre_commit (NMDevice *self, NMIP4Config *config) +{ + NMConnection *connection; + NMSettingWired *s_wired; + guint32 mtu; + + connection = nm_device_get_connection (self); + g_assert (connection); + s_wired = nm_connection_get_setting_wired (connection); + + if (s_wired) { + /* MTU override */ + mtu = nm_setting_wired_get_mtu (s_wired); + if (mtu) + nm_ip4_config_set_mtu (config, mtu, NM_IP_CONFIG_SOURCE_USER); + } +} + static void deactivate (NMDevice *device) { @@ -813,6 +833,7 @@ nm_device_team_class_init (NMDeviceTeamClass *klass) parent_class->master_update_slave_connection = master_update_slave_connection; parent_class->act_stage1_prepare = act_stage1_prepare; + parent_class->ip4_config_pre_commit = ip4_config_pre_commit; parent_class->deactivate = deactivate; parent_class->enslave_slave = enslave_slave; parent_class->release_slave = release_slave; From 33ee3b2a496133fb532e02838570fdae72f63275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= Date: Mon, 24 Aug 2015 16:31:06 +0200 Subject: [PATCH 2/2] ifcfg-rh: save wired properties also for bond/team (rh #1255927) Without that MTU is not saved to ifcfg file for bond and team and thus it is lost over NetworkManager restart. https://bugzilla.redhat.com/show_bug.cgi?id=1255927 (cherry picked from commit feb5b5538ab938a3f7a706b9be81c94e9d09570b) --- src/settings/plugins/ifcfg-rh/writer.c | 68 ++++++++++++++++---------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c index 8bdc1028ab..69b7d64ac9 100644 --- a/src/settings/plugins/ifcfg-rh/writer.c +++ b/src/settings/plugins/ifcfg-rh/writer.c @@ -1193,12 +1193,43 @@ vlan_priority_maplist_to_stringlist (NMSettingVlan *s_vlan, NMVlanPriorityMap ma return value; } +static gboolean +write_wired_for_virtual (NMConnection *connection, shvarFile *ifcfg) +{ + NMSettingWired *s_wired; + gboolean has_wired = FALSE; + + s_wired = nm_connection_get_setting_wired (connection); + if (s_wired) { + const char *device_mac, *cloned_mac; + char *tmp; + guint32 mtu; + + has_wired = TRUE; + + device_mac = nm_setting_wired_get_mac_address (s_wired); + if (device_mac) + svSetValue (ifcfg, "HWADDR", device_mac, FALSE); + + cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired); + if (cloned_mac) + svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE); + + mtu = nm_setting_wired_get_mtu (s_wired); + if (mtu) { + tmp = g_strdup_printf ("%u", mtu); + svSetValue (ifcfg, "MTU", tmp, FALSE); + g_free (tmp); + } + } + return has_wired; +} + static gboolean write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, GError **error) { NMSettingVlan *s_vlan; NMSettingConnection *s_con; - NMSettingWired *s_wired; char *tmp; guint32 vlan_flags = 0; @@ -1252,34 +1283,13 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, svSetValue (ifcfg, "MACADDR", NULL, FALSE); svSetValue (ifcfg, "MTU", NULL, FALSE); - s_wired = nm_connection_get_setting_wired (connection); - if (s_wired) { - const char *device_mac, *cloned_mac; - guint32 mtu; - - *wired = TRUE; - - device_mac = nm_setting_wired_get_mac_address (s_wired); - if (device_mac) - svSetValue (ifcfg, "HWADDR", device_mac, FALSE); - - cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired); - if (cloned_mac) - svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE); - - mtu = nm_setting_wired_get_mtu (s_wired); - if (mtu) { - tmp = g_strdup_printf ("%u", mtu); - svSetValue (ifcfg, "MTU", tmp, FALSE); - g_free (tmp); - } - } + *wired = write_wired_for_virtual (connection, ifcfg); return TRUE; } static gboolean -write_bonding_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) +write_bonding_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, GError **error) { NMSettingBond *s_bond; const char *iface; @@ -1327,11 +1337,13 @@ write_bonding_setting (NMConnection *connection, shvarFile *ifcfg, GError **erro svSetValue (ifcfg, "TYPE", TYPE_BOND, FALSE); svSetValue (ifcfg, "BONDING_MASTER", "yes", FALSE); + *wired = write_wired_for_virtual (connection, ifcfg); + return TRUE; } static gboolean -write_team_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) +write_team_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, GError **error) { NMSettingTeam *s_team; const char *iface; @@ -1356,6 +1368,8 @@ write_team_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) svSetValue (ifcfg, "TEAM_CONFIG", config, FALSE); svSetValue (ifcfg, "DEVICETYPE", TYPE_TEAM, FALSE); + *wired = write_wired_for_virtual (connection, ifcfg); + return TRUE; } @@ -2610,10 +2624,10 @@ write_connection (NMConnection *connection, if (!write_infiniband_setting (connection, ifcfg, error)) goto out; } else if (!strcmp (type, NM_SETTING_BOND_SETTING_NAME)) { - if (!write_bonding_setting (connection, ifcfg, error)) + if (!write_bonding_setting (connection, ifcfg, &wired, error)) goto out; } else if (!strcmp (type, NM_SETTING_TEAM_SETTING_NAME)) { - if (!write_team_setting (connection, ifcfg, error)) + if (!write_team_setting (connection, ifcfg, &wired, error)) goto out; } else if (!strcmp (type, NM_SETTING_BRIDGE_SETTING_NAME)) { if (!write_bridge_setting (connection, ifcfg, error))