diff options
author | Beniamino Galvani <bgalvani@redhat.com> | 2017-02-20 09:30:09 +0100 |
---|---|---|
committer | Beniamino Galvani <bgalvani@redhat.com> | 2017-02-20 09:30:09 +0100 |
commit | 8b11c976baf9c40cc073a8193b5c89b16dd06137 (patch) | |
tree | a88586b4c0e45ce69289b2657bd820549dc35298 | |
parent | 35d4e8f7a04c80d2c67119cdbc6c4afacd23e9ec (diff) | |
parent | 27a52989e3107d9f001cf1c8c7f37d60e9b7f7c5 (diff) | |
download | NetworkManager-8b11c976baf9c40cc073a8193b5c89b16dd06137.tar.gz |
merge: branch 'bg/wwan-mtu-rh1388613'
Add a MTU property to GSM and CDMA connections.
https://bugzilla.redhat.com/show_bug.cgi?id=1388613
-rw-r--r-- | clients/cli/settings.c | 26 | ||||
-rw-r--r-- | libnm-core/nm-setting-cdma.c | 42 | ||||
-rw-r--r-- | libnm-core/nm-setting-cdma.h | 4 | ||||
-rw-r--r-- | libnm-core/nm-setting-gsm.c | 41 | ||||
-rw-r--r-- | libnm-core/nm-setting-gsm.h | 3 | ||||
-rw-r--r-- | libnm/libnm.ver | 2 | ||||
-rw-r--r-- | src/devices/bluetooth/nm-device-bt.c | 1 | ||||
-rw-r--r-- | src/devices/wwan/libnm-wwan.ver | 1 | ||||
-rw-r--r-- | src/devices/wwan/nm-device-modem.c | 1 | ||||
-rw-r--r-- | src/devices/wwan/nm-modem.c | 39 | ||||
-rw-r--r-- | src/devices/wwan/nm-modem.h | 2 |
11 files changed, 160 insertions, 2 deletions
diff --git a/clients/cli/settings.c b/clients/cli/settings.c index 032438e58d..ceefba322a 100644 --- a/clients/cli/settings.c +++ b/clients/cli/settings.c @@ -490,6 +490,7 @@ NmcOutputField nmc_fields_setting_gsm[] = { SETTING_FIELD (NM_SETTING_GSM_DEVICE_ID), /* 10 */ SETTING_FIELD (NM_SETTING_GSM_SIM_ID), /* 11 */ SETTING_FIELD (NM_SETTING_GSM_SIM_OPERATOR_ID), /* 12 */ + SETTING_FIELD (NM_SETTING_GSM_MTU), /* 13 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_GSM_ALL "name"","\ @@ -504,7 +505,8 @@ NmcOutputField nmc_fields_setting_gsm[] = { NM_SETTING_GSM_HOME_ONLY","\ NM_SETTING_GSM_DEVICE_ID","\ NM_SETTING_GSM_SIM_ID","\ - NM_SETTING_GSM_SIM_OPERATOR_ID + NM_SETTING_GSM_SIM_OPERATOR_ID","\ + NM_SETTING_GSM_MTU /* Available fields for NM_SETTING_CDMA_SETTING_NAME */ NmcOutputField nmc_fields_setting_cdma[] = { @@ -513,13 +515,15 @@ NmcOutputField nmc_fields_setting_cdma[] = { SETTING_FIELD (NM_SETTING_CDMA_USERNAME), /* 2 */ SETTING_FIELD (NM_SETTING_CDMA_PASSWORD), /* 3 */ SETTING_FIELD (NM_SETTING_CDMA_PASSWORD_FLAGS), /* 4 */ + SETTING_FIELD (NM_SETTING_CDMA_MTU), /* 5 */ {NULL, NULL, 0, NULL, FALSE, FALSE, 0} }; #define NMC_FIELDS_SETTING_CDMA_ALL "name"","\ NM_SETTING_CDMA_NUMBER","\ NM_SETTING_CDMA_USERNAME","\ NM_SETTING_CDMA_PASSWORD","\ - NM_SETTING_CDMA_PASSWORD_FLAGS + NM_SETTING_CDMA_PASSWORD_FLAGS","\ + NM_SETTING_CDMA_MTU /* Available fields for NM_SETTING_BLUETOOTH_SETTING_NAME */ NmcOutputField nmc_fields_setting_bluetooth[] = { @@ -2382,6 +2386,7 @@ DEFINE_GETTER (nmc_property_bridge_port_get_hairpin_mode, NM_SETTING_BRIDGE_PORT DEFINE_GETTER (nmc_property_cdma_get_number, NM_SETTING_CDMA_NUMBER) DEFINE_GETTER (nmc_property_cdma_get_username, NM_SETTING_CDMA_USERNAME) DEFINE_GETTER (nmc_property_cdma_get_password, NM_SETTING_CDMA_PASSWORD) +DEFINE_GETTER (nmc_property_cdma_get_mtu, NM_SETTING_CDMA_MTU) DEFINE_SECRET_FLAGS_GETTER (nmc_property_cdma_get_password_flags, NM_SETTING_CDMA_PASSWORD_FLAGS) @@ -3218,6 +3223,7 @@ DEFINE_GETTER (nmc_property_gsm_get_home_only, NM_SETTING_GSM_HOME_ONLY) DEFINE_GETTER (nmc_property_gsm_get_device_id, NM_SETTING_GSM_DEVICE_ID) DEFINE_GETTER (nmc_property_gsm_get_sim_id, NM_SETTING_GSM_SIM_ID) DEFINE_GETTER (nmc_property_gsm_get_sim_operator_id, NM_SETTING_GSM_SIM_OPERATOR_ID) +DEFINE_GETTER (nmc_property_gsm_get_mtu, NM_SETTING_GSM_MTU) static gboolean nmc_property_gsm_set_sim_operator_id (NMSetting *setting, const char *prop, const char *val, GError **error) @@ -6600,6 +6606,13 @@ nmc_properties_init (void) NULL, NULL, NULL); + nmc_add_prop_funcs (GLUE (CDMA, MTU), + nmc_property_cdma_get_mtu, + nmc_property_set_uint, + NULL, + NULL, + NULL, + NULL); /* Add editable properties for NM_SETTING_CONNECTION_SETTING_NAME */ nmc_add_prop_funcs (GLUE (CONNECTION, ID), @@ -6928,6 +6941,13 @@ nmc_properties_init (void) NULL, NULL, NULL); + nmc_add_prop_funcs (GLUE (GSM, MTU), + nmc_property_gsm_get_mtu, + nmc_property_set_uint, + NULL, + NULL, + NULL, + NULL); /* Add editable properties for NM_SETTING_INFINIBAND_SETTING_NAME */ nmc_add_prop_funcs (GLUE (INFINIBAND, MAC_ADDRESS), @@ -9006,6 +9026,7 @@ setting_gsm_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gboo set_val_str (arr, 10, nmc_property_gsm_get_device_id (setting, NMC_PROPERTY_GET_PRETTY)); set_val_str (arr, 11, nmc_property_gsm_get_sim_id (setting, NMC_PROPERTY_GET_PRETTY)); set_val_str (arr, 12, nmc_property_gsm_get_sim_operator_id (setting, NMC_PROPERTY_GET_PRETTY)); + set_val_str (arr, 13, nmc_property_gsm_get_mtu (setting, NMC_PROPERTY_GET_PRETTY)); g_ptr_array_add (nmc->output_data, arr); print_data (nmc); /* Print all data */ @@ -9035,6 +9056,7 @@ setting_cdma_details (NMSetting *setting, NmCli *nmc, const char *one_prop, gbo set_val_str (arr, 2, nmc_property_cdma_get_username (setting, NMC_PROPERTY_GET_PRETTY)); set_val_str (arr, 3, GET_SECRET (secrets, setting, nmc_property_cdma_get_password)); set_val_str (arr, 4, nmc_property_cdma_get_password_flags (setting, NMC_PROPERTY_GET_PRETTY)); + set_val_str (arr, 5, nmc_property_cdma_get_mtu (setting, NMC_PROPERTY_GET_PRETTY)); g_ptr_array_add (nmc->output_data, arr); print_data (nmc); /* Print all data */ diff --git a/libnm-core/nm-setting-cdma.c b/libnm-core/nm-setting-cdma.c index 31b02d7f96..b267ba63dd 100644 --- a/libnm-core/nm-setting-cdma.c +++ b/libnm-core/nm-setting-cdma.c @@ -48,6 +48,7 @@ typedef struct { char *username; char *password; NMSettingSecretFlags password_flags; + guint32 mtu; } NMSettingCdmaPrivate; enum { @@ -56,6 +57,7 @@ enum { PROP_USERNAME, PROP_PASSWORD, PROP_PASSWORD_FLAGS, + PROP_MTU, LAST_PROP }; @@ -129,6 +131,22 @@ nm_setting_cdma_get_password_flags (NMSettingCdma *setting) return NM_SETTING_CDMA_GET_PRIVATE (setting)->password_flags; } +/** + * nm_setting_cdma_get_mtu: + * @setting: the #NMSettingCdma + * + * Returns: the #NMSettingCdma:mtu property of the setting + * + * Since: 1.8 + **/ +guint32 +nm_setting_cdma_get_mtu (NMSettingCdma *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_CDMA (setting), 0); + + return NM_SETTING_CDMA_GET_PRIVATE (setting)->mtu; +} + static gboolean verify (NMSetting *setting, NMConnection *connection, GError **error) { @@ -229,6 +247,9 @@ set_property (GObject *object, guint prop_id, case PROP_PASSWORD_FLAGS: priv->password_flags = g_value_get_flags (value); break; + case PROP_MTU: + priv->mtu = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -254,6 +275,9 @@ get_property (GObject *object, guint prop_id, case PROP_PASSWORD_FLAGS: g_value_set_flags (value, nm_setting_cdma_get_password_flags (setting)); break; + case PROP_MTU: + g_value_set_uint (value, nm_setting_cdma_get_mtu (setting)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -333,4 +357,22 @@ nm_setting_cdma_class_init (NMSettingCdmaClass *setting_class) NM_SETTING_SECRET_FLAG_NONE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** + * NMSettingCdma:mtu: + * + * If non-zero, only transmit packets of the specified size or smaller, + * breaking larger packets up into multiple frames. + * + * Since: 1.8 + **/ + g_object_class_install_property + (object_class, PROP_MTU, + g_param_spec_uint (NM_SETTING_CDMA_MTU, "", "", + 0, G_MAXUINT32, 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + NM_SETTING_PARAM_FUZZY_IGNORE | + G_PARAM_STATIC_STRINGS)); + } diff --git a/libnm-core/nm-setting-cdma.h b/libnm-core/nm-setting-cdma.h index 091c530ed8..16f937db44 100644 --- a/libnm-core/nm-setting-cdma.h +++ b/libnm-core/nm-setting-cdma.h @@ -44,6 +44,7 @@ G_BEGIN_DECLS #define NM_SETTING_CDMA_USERNAME "username" #define NM_SETTING_CDMA_PASSWORD "password" #define NM_SETTING_CDMA_PASSWORD_FLAGS "password-flags" +#define NM_SETTING_CDMA_MTU "mtu" /** * NMSettingCdma: @@ -67,6 +68,9 @@ const char *nm_setting_cdma_get_username (NMSettingCdma *setting); const char *nm_setting_cdma_get_password (NMSettingCdma *setting); NMSettingSecretFlags nm_setting_cdma_get_password_flags (NMSettingCdma *setting); +NM_AVAILABLE_IN_1_8 +guint32 nm_setting_cdma_get_mtu (NMSettingCdma *setting); + G_END_DECLS #endif /* __NM_SETTING_CDMA_H__ */ diff --git a/libnm-core/nm-setting-gsm.c b/libnm-core/nm-setting-gsm.c index 86166df2d3..be32b852ed 100644 --- a/libnm-core/nm-setting-gsm.c +++ b/libnm-core/nm-setting-gsm.c @@ -62,6 +62,7 @@ typedef struct { NMSettingSecretFlags pin_flags; gboolean home_only; + guint32 mtu; } NMSettingGsmPrivate; enum { @@ -78,6 +79,7 @@ enum { PROP_DEVICE_ID, PROP_SIM_ID, PROP_SIM_OPERATOR_ID, + PROP_MTU, LAST_PROP }; @@ -269,6 +271,22 @@ nm_setting_gsm_get_sim_operator_id (NMSettingGsm *setting) return NM_SETTING_GSM_GET_PRIVATE (setting)->sim_operator_id; } +/** + * nm_setting_gsm_get_mtu: + * @setting: the #NMSettingGsm + * + * Returns: the #NMSettingGsm:mtu property of the setting + * + * Since: 1.8 + **/ +guint32 +nm_setting_gsm_get_mtu (NMSettingGsm *setting) +{ + g_return_val_if_fail (NM_IS_SETTING_GSM (setting), 0); + + return NM_SETTING_GSM_GET_PRIVATE (setting)->mtu; +} + static gboolean verify (NMSetting *setting, NMConnection *connection, GError **error) { @@ -524,6 +542,9 @@ set_property (GObject *object, guint prop_id, g_free (priv->sim_operator_id); priv->sim_operator_id = g_value_dup_string (value); break; + case PROP_MTU: + priv->mtu = g_value_get_uint (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -573,6 +594,9 @@ get_property (GObject *object, guint prop_id, case PROP_SIM_OPERATOR_ID: g_value_set_string (value, nm_setting_gsm_get_sim_operator_id (setting)); break; + case PROP_MTU: + g_value_set_uint (value, nm_setting_gsm_get_mtu (setting)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -780,6 +804,23 @@ nm_setting_gsm_class_init (NMSettingGsmClass *setting_class) G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + /** + * NMSettingGsm:mtu: + * + * If non-zero, only transmit packets of the specified size or smaller, + * breaking larger packets up into multiple frames. + * + * Since: 1.8 + **/ + g_object_class_install_property + (object_class, PROP_MTU, + g_param_spec_uint (NM_SETTING_GSM_MTU, "", "", + 0, G_MAXUINT32, 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + NM_SETTING_PARAM_FUZZY_IGNORE | + G_PARAM_STATIC_STRINGS)); + /* Ignore incoming deprecated properties */ _nm_setting_class_add_dbus_only_property (parent_class, "allowed-bands", G_VARIANT_TYPE_UINT32, diff --git a/libnm-core/nm-setting-gsm.h b/libnm-core/nm-setting-gsm.h index 7f97d38678..5db60fce59 100644 --- a/libnm-core/nm-setting-gsm.h +++ b/libnm-core/nm-setting-gsm.h @@ -52,6 +52,7 @@ G_BEGIN_DECLS #define NM_SETTING_GSM_DEVICE_ID "device-id" #define NM_SETTING_GSM_SIM_ID "sim-id" #define NM_SETTING_GSM_SIM_OPERATOR_ID "sim-operator-id" +#define NM_SETTING_GSM_MTU "mtu" /** * NMSettingGsm: @@ -84,6 +85,8 @@ NM_AVAILABLE_IN_1_2 const char *nm_setting_gsm_get_sim_id (NMSettingGsm *setting); NM_AVAILABLE_IN_1_2 const char *nm_setting_gsm_get_sim_operator_id (NMSettingGsm *setting); +NM_AVAILABLE_IN_1_8 +guint32 nm_setting_gsm_get_mtu (NMSettingGsm *setting); NMSettingSecretFlags nm_setting_gsm_get_pin_flags (NMSettingGsm *setting); NMSettingSecretFlags nm_setting_gsm_get_password_flags (NMSettingGsm *setting); diff --git a/libnm/libnm.ver b/libnm/libnm.ver index 31ec7b0899..7ce768f497 100644 --- a/libnm/libnm.ver +++ b/libnm/libnm.ver @@ -1154,4 +1154,6 @@ global: nm_setting_802_1x_get_phase2_ca_cert_password_flags; nm_setting_802_1x_get_phase2_client_cert_password; nm_setting_802_1x_get_phase2_client_cert_password_flags; + nm_setting_cdma_get_mtu; + nm_setting_gsm_get_mtu; } libnm_1_6_0; diff --git a/src/devices/bluetooth/nm-device-bt.c b/src/devices/bluetooth/nm-device-bt.c index 12660701f5..5f67c55f7d 100644 --- a/src/devices/bluetooth/nm-device-bt.c +++ b/src/devices/bluetooth/nm-device-bt.c @@ -1174,6 +1174,7 @@ nm_device_bt_class_init (NMDeviceBtClass *klass) device_class->complete_connection = complete_connection; device_class->is_available = is_available; device_class->component_added = component_added; + device_class->get_configured_mtu = nm_modem_get_configured_mtu; device_class->state_changed = device_state_changed; diff --git a/src/devices/wwan/libnm-wwan.ver b/src/devices/wwan/libnm-wwan.ver index 23412de627..eb577aafb7 100644 --- a/src/devices/wwan/libnm-wwan.ver +++ b/src/devices/wwan/libnm-wwan.ver @@ -9,6 +9,7 @@ global: nm_modem_deactivate_async_finish; nm_modem_device_state_changed; nm_modem_get_capabilities; + nm_modem_get_configured_mtu; nm_modem_get_control_port; nm_modem_get_data_port; nm_modem_get_driver; diff --git a/src/devices/wwan/nm-device-modem.c b/src/devices/wwan/nm-device-modem.c index ee263d9ca4..05f474a4f2 100644 --- a/src/devices/wwan/nm-device-modem.c +++ b/src/devices/wwan/nm-device-modem.c @@ -800,6 +800,7 @@ nm_device_modem_class_init (NMDeviceModemClass *mclass) device_class->owns_iface = owns_iface; device_class->is_available = is_available; device_class->get_ip_iface_identifier = get_ip_iface_identifier; + device_class->get_configured_mtu = nm_modem_get_configured_mtu; device_class->state_changed = device_state_changed; diff --git a/src/devices/wwan/nm-modem.c b/src/devices/wwan/nm-modem.c index 1dec0dd12f..caf2bb340c 100644 --- a/src/devices/wwan/nm-modem.c +++ b/src/devices/wwan/nm-modem.c @@ -772,6 +772,45 @@ nm_modem_stage3_ip6_config_start (NMModem *self, return ret; } +guint32 +nm_modem_get_configured_mtu (NMDevice *self, gboolean *out_is_user_config) +{ + NMConnection *connection; + NMSetting *setting; + gint64 mtu_default; + guint mtu = 0; + const char *property_name; + + nm_assert (NM_IS_DEVICE (self)); + nm_assert (out_is_user_config); + + connection = nm_device_get_applied_connection (self); + if (!connection) + g_return_val_if_reached (0); + + setting = (NMSetting *) nm_connection_get_setting_gsm (connection); + if (!setting) + setting = (NMSetting *) nm_connection_get_setting_cdma (connection); + + if (setting) { + g_object_get (setting, "mtu", &mtu, NULL); + if (mtu) { + *out_is_user_config = TRUE; + return mtu; + } + + property_name = NM_IS_SETTING_GSM (setting) ? "gsm.mtu" : "cdma.mtu"; + mtu_default = nm_device_get_configured_mtu_from_connection_default (self, property_name); + if (mtu_default >= 0) { + *out_is_user_config = TRUE; + return (guint32) mtu_default; + } + } + + *out_is_user_config = FALSE; + return 0; +} + /*****************************************************************************/ static void diff --git a/src/devices/wwan/nm-modem.h b/src/devices/wwan/nm-modem.h index c590b9e440..b377736353 100644 --- a/src/devices/wwan/nm-modem.h +++ b/src/devices/wwan/nm-modem.h @@ -250,4 +250,6 @@ void nm_modem_emit_ip6_config_result (NMModem *self, const gchar *nm_modem_ip_type_to_string (NMModemIPType ip_type); +guint32 nm_modem_get_configured_mtu (NMDevice *self, gboolean *out_is_user_config); + #endif /* __NETWORKMANAGER_MODEM_H__ */ |