summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBeniamino Galvani <bgalvani@redhat.com>2019-10-02 12:14:46 +0200
committerBeniamino Galvani <bgalvani@redhat.com>2019-10-09 16:20:24 +0200
commit681f339f57d1ae96968b9b28bb1abe989047e529 (patch)
tree57f4468e78200006b8d8dcbf7996dddfd4effc65
parentbdd07da1c5569525f47ce9027690b77a66002e91 (diff)
downloadNetworkManager-bg/parent-mtu-rh1723690.tar.gz
core: allow live change of MTU for devices that support itbg/parent-mtu-rh1723690
Allow a live change of MTU using the reapply API for device types that support it.
-rw-r--r--src/devices/nm-device-bond.c9
-rw-r--r--src/devices/nm-device-bridge.c28
-rw-r--r--src/devices/nm-device-macsec.c28
-rw-r--r--src/devices/nm-device-macvlan.c28
-rw-r--r--src/devices/nm-device-tun.c28
-rw-r--r--src/devices/nm-device-vlan.c28
-rw-r--r--src/devices/nm-device-vxlan.c28
-rw-r--r--src/devices/team/nm-device-team.c28
-rw-r--r--src/devices/wifi/nm-device-wifi-p2p.c2
9 files changed, 205 insertions, 2 deletions
diff --git a/src/devices/nm-device-bond.c b/src/devices/nm-device-bond.c
index c6ecb2e85f..0941a00f09 100644
--- a/src/devices/nm-device-bond.c
+++ b/src/devices/nm-device-bond.c
@@ -531,7 +531,14 @@ can_reapply_change (NMDevice *device,
NMDeviceClass *device_class;
NMSettingBond *s_bond_old, *s_bond_new;
- /* Only handle bond setting here, delegate other settings to parent class */
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
if (nm_streq (setting_name, NM_SETTING_BOND_SETTING_NAME)) {
if (!nm_device_hash_check_invalid_keys (diffs,
NM_SETTING_BOND_SETTING_NAME,
diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c
index 72a8ce2bb2..6f321b0342 100644
--- a/src/devices/nm-device-bridge.c
+++ b/src/devices/nm-device-bridge.c
@@ -769,6 +769,33 @@ create_and_realize (NMDevice *device,
return TRUE;
}
+static gboolean
+can_reapply_change (NMDevice *device,
+ const char *setting_name,
+ NMSetting *s_old,
+ NMSetting *s_new,
+ GHashTable *diffs,
+ GError **error)
+{
+ NMDeviceClass *device_class;
+
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
+ device_class = NM_DEVICE_CLASS (nm_device_bridge_parent_class);
+ return device_class->can_reapply_change (device,
+ setting_name,
+ s_old,
+ s_new,
+ diffs,
+ error);
+}
+
/*****************************************************************************/
static void
@@ -816,6 +843,7 @@ nm_device_bridge_class_init (NMDeviceBridgeClass *klass)
device_class->act_stage1_prepare_set_hwaddr_ethernet = TRUE;
device_class->act_stage1_prepare = act_stage1_prepare;
device_class->act_stage2_config = act_stage2_config;
+ device_class->can_reapply_change = can_reapply_change;
device_class->deactivate = deactivate;
device_class->enslave_slave = enslave_slave;
device_class->release_slave = release_slave;
diff --git a/src/devices/nm-device-macsec.c b/src/devices/nm-device-macsec.c
index c9592a4971..e6eef6dd57 100644
--- a/src/devices/nm-device-macsec.c
+++ b/src/devices/nm-device-macsec.c
@@ -733,6 +733,33 @@ device_state_changed (NMDevice *device,
macsec_secrets_cancel (NM_DEVICE_MACSEC (device));
}
+static gboolean
+can_reapply_change (NMDevice *device,
+ const char *setting_name,
+ NMSetting *s_old,
+ NMSetting *s_new,
+ GHashTable *diffs,
+ GError **error)
+{
+ NMDeviceClass *device_class;
+
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
+ device_class = NM_DEVICE_CLASS (nm_device_macsec_parent_class);
+ return device_class->can_reapply_change (device,
+ setting_name,
+ s_old,
+ s_new,
+ diffs,
+ error);
+}
+
/******************************************************************/
static void
@@ -849,6 +876,7 @@ nm_device_macsec_class_init (NMDeviceMacsecClass *klass)
device_class->mtu_parent_delta = 32;
device_class->act_stage2_config = act_stage2_config;
+ device_class->can_reapply_change = can_reapply_change;
device_class->create_and_realize = create_and_realize;
device_class->deactivate = deactivate;
device_class->get_generic_capabilities = get_generic_capabilities;
diff --git a/src/devices/nm-device-macvlan.c b/src/devices/nm-device-macvlan.c
index 3633f02d46..955727c477 100644
--- a/src/devices/nm-device-macvlan.c
+++ b/src/devices/nm-device-macvlan.c
@@ -416,6 +416,33 @@ update_connection (NMDevice *device, NMConnection *connection)
NULL);
}
+static gboolean
+can_reapply_change (NMDevice *device,
+ const char *setting_name,
+ NMSetting *s_old,
+ NMSetting *s_new,
+ GHashTable *diffs,
+ GError **error)
+{
+ NMDeviceClass *device_class;
+
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
+ device_class = NM_DEVICE_CLASS (nm_device_macvlan_parent_class);
+ return device_class->can_reapply_change (device,
+ setting_name,
+ s_old,
+ s_new,
+ diffs,
+ error);
+}
+
/*****************************************************************************/
static void
@@ -508,6 +535,7 @@ nm_device_macvlan_class_init (NMDeviceMacvlanClass *klass)
device_class->mtu_parent_delta = 0;
device_class->act_stage1_prepare_set_hwaddr_ethernet = TRUE;
+ device_class->can_reapply_change = can_reapply_change;
device_class->check_connection_compatible = check_connection_compatible;
device_class->complete_connection = complete_connection;
device_class->create_and_realize = create_and_realize;
diff --git a/src/devices/nm-device-tun.c b/src/devices/nm-device-tun.c
index 77b46a599c..f8e515858e 100644
--- a/src/devices/nm-device-tun.c
+++ b/src/devices/nm-device-tun.c
@@ -359,6 +359,33 @@ unrealize_notify (NMDevice *device)
update_properties_from_struct (NM_DEVICE_TUN (device), NULL);
}
+static gboolean
+can_reapply_change (NMDevice *device,
+ const char *setting_name,
+ NMSetting *s_old,
+ NMSetting *s_new,
+ GHashTable *diffs,
+ GError **error)
+{
+ NMDeviceClass *device_class;
+
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
+ device_class = NM_DEVICE_CLASS (nm_device_tun_parent_class);
+ return device_class->can_reapply_change (device,
+ setting_name,
+ s_old,
+ s_new,
+ diffs,
+ error);
+}
+
/*****************************************************************************/
static void
@@ -440,6 +467,7 @@ nm_device_tun_class_init (NMDeviceTunClass *klass)
device_class->connection_type_check_compatible = NM_SETTING_TUN_SETTING_NAME;
device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES (NM_LINK_TYPE_TUN);
+ device_class->can_reapply_change = can_reapply_change;
device_class->link_changed = link_changed;
device_class->complete_connection = complete_connection;
device_class->check_connection_compatible = check_connection_compatible;
diff --git a/src/devices/nm-device-vlan.c b/src/devices/nm-device-vlan.c
index b6efeb81a5..8e2c01879e 100644
--- a/src/devices/nm-device-vlan.c
+++ b/src/devices/nm-device-vlan.c
@@ -502,6 +502,33 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *out_failure_reason)
return NM_ACT_STAGE_RETURN_SUCCESS;
}
+static gboolean
+can_reapply_change (NMDevice *device,
+ const char *setting_name,
+ NMSetting *s_old,
+ NMSetting *s_new,
+ GHashTable *diffs,
+ GError **error)
+{
+ NMDeviceClass *device_class;
+
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
+ device_class = NM_DEVICE_CLASS (nm_device_vlan_parent_class);
+ return device_class->can_reapply_change (device,
+ setting_name,
+ s_old,
+ s_new,
+ diffs,
+ error);
+}
+
/*****************************************************************************/
static void
@@ -559,6 +586,7 @@ nm_device_vlan_class_init (NMDeviceVlanClass *klass)
device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES (NM_LINK_TYPE_VLAN);
device_class->mtu_parent_delta = 0; /* VLANs can have the same MTU of parent */
+ device_class->can_reapply_change = can_reapply_change;
device_class->create_and_realize = create_and_realize;
device_class->link_changed = link_changed;
device_class->unrealize_notify = unrealize_notify;
diff --git a/src/devices/nm-device-vxlan.c b/src/devices/nm-device-vxlan.c
index 29be6854be..6e41399a00 100644
--- a/src/devices/nm-device-vxlan.c
+++ b/src/devices/nm-device-vxlan.c
@@ -467,6 +467,33 @@ update_connection (NMDevice *device, NMConnection *connection)
}
}
+static gboolean
+can_reapply_change (NMDevice *device,
+ const char *setting_name,
+ NMSetting *s_old,
+ NMSetting *s_new,
+ GHashTable *diffs,
+ GError **error)
+{
+ NMDeviceClass *device_class;
+
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
+ device_class = NM_DEVICE_CLASS (nm_device_vxlan_parent_class);
+ return device_class->can_reapply_change (device,
+ setting_name,
+ s_old,
+ s_new,
+ diffs,
+ error);
+}
+
/*****************************************************************************/
static void
@@ -584,6 +611,7 @@ nm_device_vxlan_class_init (NMDeviceVxlanClass *klass)
device_class->connection_type_check_compatible = NM_SETTING_VXLAN_SETTING_NAME;
device_class->link_types = NM_DEVICE_DEFINE_LINK_TYPES (NM_LINK_TYPE_VXLAN);
+ device_class->can_reapply_change = can_reapply_change;
device_class->link_changed = link_changed;
device_class->unrealize_notify = unrealize_notify;
device_class->create_and_realize = create_and_realize;
diff --git a/src/devices/team/nm-device-team.c b/src/devices/team/nm-device-team.c
index fb9c9c6963..5d6dd8217d 100644
--- a/src/devices/team/nm-device-team.c
+++ b/src/devices/team/nm-device-team.c
@@ -852,6 +852,33 @@ create_and_realize (NMDevice *device,
return TRUE;
}
+static gboolean
+can_reapply_change (NMDevice *device,
+ const char *setting_name,
+ NMSetting *s_old,
+ NMSetting *s_new,
+ GHashTable *diffs,
+ GError **error)
+{
+ NMDeviceClass *device_class;
+
+ if (nm_streq (setting_name, NM_SETTING_WIRED_SETTING_NAME)) {
+ return nm_device_hash_check_invalid_keys (diffs,
+ NM_SETTING_WIRED_SETTING_NAME,
+ error,
+ /* reapplied with IP config */
+ NM_SETTING_WIRED_MTU);
+ }
+
+ device_class = NM_DEVICE_CLASS (nm_device_team_parent_class);
+ return device_class->can_reapply_change (device,
+ setting_name,
+ s_old,
+ s_new,
+ diffs,
+ error);
+}
+
/*****************************************************************************/
static void
@@ -969,6 +996,7 @@ nm_device_team_class_init (NMDeviceTeamClass *klass)
device_class->master_update_slave_connection = master_update_slave_connection;
device_class->act_stage1_prepare = act_stage1_prepare;
+ device_class->can_reapply_change = can_reapply_change;
device_class->get_configured_mtu = nm_device_get_configured_mtu_for_wired;
device_class->deactivate = deactivate;
device_class->enslave_slave = enslave_slave;
diff --git a/src/devices/wifi/nm-device-wifi-p2p.c b/src/devices/wifi/nm-device-wifi-p2p.c
index 34ff70fa0e..7f6107c108 100644
--- a/src/devices/wifi/nm-device-wifi-p2p.c
+++ b/src/devices/wifi/nm-device-wifi-p2p.c
@@ -1279,7 +1279,7 @@ nm_device_wifi_p2p_class_init (NMDeviceWifiP2PClass *klass)
device_class->act_stage2_config = act_stage2_config;
device_class->get_configured_mtu = get_configured_mtu;
device_class->get_auto_ip_config_method = get_auto_ip_config_method;
- device_class->act_stage3_ip_config_start = act_stage3_ip_config_start;
+ device_class->act_stage3_ip_config_start = act_stage3_ip_config_start;
device_class->deactivate = deactivate;
device_class->unmanaged_on_quit = unmanaged_on_quit;