mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-08 11:19:16 +02:00
merge: branch 'main'
wwan: Improve support for oFono https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/merge_requests/2339
This commit is contained in:
commit
77eb8e7de3
7 changed files with 717 additions and 163 deletions
|
|
@ -29,7 +29,7 @@ global:
|
||||||
nm_modem_manager_name_owner_ref;
|
nm_modem_manager_name_owner_ref;
|
||||||
nm_modem_manager_name_owner_unref;
|
nm_modem_manager_name_owner_unref;
|
||||||
nm_modem_owns_port;
|
nm_modem_owns_port;
|
||||||
nm_modem_set_mm_enabled;
|
nm_modem_set_enabled;
|
||||||
nm_modem_stage3_ip_config_start;
|
nm_modem_stage3_ip_config_start;
|
||||||
nm_modem_state_to_string;
|
nm_modem_state_to_string;
|
||||||
nm_modem_unclaim;
|
nm_modem_unclaim;
|
||||||
|
|
|
||||||
|
|
@ -277,7 +277,7 @@ modem_state_cb(NMModem *modem, int new_state_i, int old_state_i, gpointer user_d
|
||||||
* to NetworkManager (eg something using MM's D-Bus API directly).
|
* to NetworkManager (eg something using MM's D-Bus API directly).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!NM_MODEM_GET_CLASS(priv->modem)->set_mm_enabled) {
|
if (!NM_MODEM_GET_CLASS(priv->modem)->set_enabled) {
|
||||||
/* We cannot re-enable this modem, thus device becomes unavailable. */
|
/* We cannot re-enable this modem, thus device becomes unavailable. */
|
||||||
nm_device_state_changed(device,
|
nm_device_state_changed(device,
|
||||||
NM_DEVICE_STATE_UNAVAILABLE,
|
NM_DEVICE_STATE_UNAVAILABLE,
|
||||||
|
|
@ -307,7 +307,7 @@ modem_state_cb(NMModem *modem, int new_state_i, int old_state_i, gpointer user_d
|
||||||
/* If the modem is now unlocked, enable/disable it according to the
|
/* If the modem is now unlocked, enable/disable it according to the
|
||||||
* device's enabled/disabled state.
|
* device's enabled/disabled state.
|
||||||
*/
|
*/
|
||||||
nm_modem_set_mm_enabled(priv->modem, priv->rf_enabled);
|
nm_modem_set_enabled(priv->modem, priv->rf_enabled);
|
||||||
|
|
||||||
if (dev_state == NM_DEVICE_STATE_NEED_AUTH) {
|
if (dev_state == NM_DEVICE_STATE_NEED_AUTH) {
|
||||||
/* The modem was unlocked externally to NetworkManager,
|
/* The modem was unlocked externally to NetworkManager,
|
||||||
|
|
@ -327,6 +327,23 @@ modem_state_cb(NMModem *modem, int new_state_i, int old_state_i, gpointer user_d
|
||||||
NM_DEVICE_STATE_REASON_MODEM_FAILED);
|
NM_DEVICE_STATE_REASON_MODEM_FAILED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
caps_changed_cb(NMModem *modem, guint modem_caps, guint current_caps, gpointer user_data)
|
||||||
|
{
|
||||||
|
NMDeviceModem *self = NM_DEVICE_MODEM(user_data);
|
||||||
|
NMDeviceModemPrivate *priv = NM_DEVICE_MODEM_GET_PRIVATE(self);
|
||||||
|
|
||||||
|
if (priv->caps != modem_caps) {
|
||||||
|
priv->caps = modem_caps;
|
||||||
|
_notify(self, PROP_CAPABILITIES);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (priv->current_caps != current_caps) {
|
||||||
|
priv->current_caps = current_caps;
|
||||||
|
_notify(self, PROP_CURRENT_CAPABILITIES);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
modem_removed_cb(NMModem *modem, gpointer user_data)
|
modem_removed_cb(NMModem *modem, gpointer user_data)
|
||||||
{
|
{
|
||||||
|
|
@ -450,7 +467,7 @@ check_connection_available(NMDevice *device,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!NM_MODEM_GET_CLASS(priv->modem)->set_mm_enabled && state <= NM_MODEM_STATE_DISABLING) {
|
if (!NM_MODEM_GET_CLASS(priv->modem)->set_enabled && state <= NM_MODEM_STATE_DISABLING) {
|
||||||
nm_utils_error_set_literal(error,
|
nm_utils_error_set_literal(error,
|
||||||
NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY,
|
NM_UTILS_ERROR_CONNECTION_AVAILABLE_TEMPORARY,
|
||||||
"modem is disabled and NM cannot enable it");
|
"modem is disabled and NM cannot enable it");
|
||||||
|
|
@ -616,7 +633,7 @@ set_enabled(NMDevice *device, gboolean enabled)
|
||||||
|
|
||||||
if (priv->modem) {
|
if (priv->modem) {
|
||||||
/* Sync the ModemManager modem enabled/disabled with rfkill/user preference */
|
/* Sync the ModemManager modem enabled/disabled with rfkill/user preference */
|
||||||
nm_modem_set_mm_enabled(priv->modem, enabled);
|
nm_modem_set_enabled(priv->modem, enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enabled == FALSE) {
|
if (enabled == FALSE) {
|
||||||
|
|
@ -644,7 +661,7 @@ is_available(NMDevice *device, NMDeviceCheckDevAvailableFlags flags)
|
||||||
if (modem_state <= NM_MODEM_STATE_INITIALIZING)
|
if (modem_state <= NM_MODEM_STATE_INITIALIZING)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (!NM_MODEM_GET_CLASS(priv->modem)->set_mm_enabled && modem_state <= NM_MODEM_STATE_DISABLING)
|
if (!NM_MODEM_GET_CLASS(priv->modem)->set_enabled && modem_state <= NM_MODEM_STATE_DISABLING)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
@ -677,6 +694,7 @@ set_modem(NMDeviceModem *self, NMModem *modem)
|
||||||
g_signal_connect(modem, NM_MODEM_AUTH_REQUESTED, G_CALLBACK(modem_auth_requested), self);
|
g_signal_connect(modem, NM_MODEM_AUTH_REQUESTED, G_CALLBACK(modem_auth_requested), self);
|
||||||
g_signal_connect(modem, NM_MODEM_AUTH_RESULT, G_CALLBACK(modem_auth_result), self);
|
g_signal_connect(modem, NM_MODEM_AUTH_RESULT, G_CALLBACK(modem_auth_result), self);
|
||||||
g_signal_connect(modem, NM_MODEM_STATE_CHANGED, G_CALLBACK(modem_state_cb), self);
|
g_signal_connect(modem, NM_MODEM_STATE_CHANGED, G_CALLBACK(modem_state_cb), self);
|
||||||
|
g_signal_connect(modem, NM_MODEM_CAPABILITIES_CHANGED, G_CALLBACK(caps_changed_cb), self);
|
||||||
g_signal_connect(modem, NM_MODEM_REMOVED, G_CALLBACK(modem_removed_cb), self);
|
g_signal_connect(modem, NM_MODEM_REMOVED, G_CALLBACK(modem_removed_cb), self);
|
||||||
|
|
||||||
g_signal_connect(modem,
|
g_signal_connect(modem,
|
||||||
|
|
|
||||||
|
|
@ -1698,7 +1698,7 @@ nm_modem_broadband_class_init(NMModemBroadbandClass *klass)
|
||||||
modem_class->stage3_ip_config_start = stage3_ip_config_start;
|
modem_class->stage3_ip_config_start = stage3_ip_config_start;
|
||||||
modem_class->disconnect = disconnect;
|
modem_class->disconnect = disconnect;
|
||||||
modem_class->deactivate_cleanup = deactivate_cleanup;
|
modem_class->deactivate_cleanup = deactivate_cleanup;
|
||||||
modem_class->set_mm_enabled = set_mm_enabled;
|
modem_class->set_enabled = set_mm_enabled;
|
||||||
modem_class->get_user_pass = get_user_pass;
|
modem_class->get_user_pass = get_user_pass;
|
||||||
modem_class->check_connection_compatible_with_modem = check_connection_compatible_with_modem;
|
modem_class->check_connection_compatible_with_modem = check_connection_compatible_with_modem;
|
||||||
modem_class->complete_connection = complete_connection;
|
modem_class->complete_connection = complete_connection;
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load diff
|
|
@ -25,6 +25,7 @@
|
||||||
#define OFONO_DBUS_INTERFACE_CONNECTION_MANAGER "org.ofono.ConnectionManager"
|
#define OFONO_DBUS_INTERFACE_CONNECTION_MANAGER "org.ofono.ConnectionManager"
|
||||||
#define OFONO_DBUS_INTERFACE_CONNECTION_CONTEXT "org.ofono.ConnectionContext"
|
#define OFONO_DBUS_INTERFACE_CONNECTION_CONTEXT "org.ofono.ConnectionContext"
|
||||||
#define OFONO_DBUS_INTERFACE_SIM_MANAGER "org.ofono.SimManager"
|
#define OFONO_DBUS_INTERFACE_SIM_MANAGER "org.ofono.SimManager"
|
||||||
|
#define OFONO_DBUS_INTERFACE_RADIO_SETTINGS "org.ofono.RadioSettings"
|
||||||
|
|
||||||
#define OFONO_ERROR_IN_PROGRESS "org.ofono.Error.InProgress"
|
#define OFONO_ERROR_IN_PROGRESS "org.ofono.Error.InProgress"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ enum {
|
||||||
AUTH_RESULT,
|
AUTH_RESULT,
|
||||||
REMOVED,
|
REMOVED,
|
||||||
STATE_CHANGED,
|
STATE_CHANGED,
|
||||||
|
CAPABILITIES_CHANGED,
|
||||||
LAST_SIGNAL,
|
LAST_SIGNAL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -338,6 +339,14 @@ nm_modem_set_state(NMModem *self, NMModemState new_state, const char *reason)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nm_modem_set_capabilities(NMModem *self,
|
||||||
|
NMDeviceModemCapabilities modem_caps,
|
||||||
|
NMDeviceModemCapabilities current_caps)
|
||||||
|
{
|
||||||
|
g_signal_emit(self, signals[CAPABILITIES_CHANGED], 0, (guint) modem_caps, (guint) current_caps);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nm_modem_set_prev_state(NMModem *self, const char *reason)
|
nm_modem_set_prev_state(NMModem *self, const char *reason)
|
||||||
{
|
{
|
||||||
|
|
@ -349,13 +358,13 @@ nm_modem_set_prev_state(NMModem *self, const char *reason)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nm_modem_set_mm_enabled(NMModem *self, gboolean enabled)
|
nm_modem_set_enabled(NMModem *self, gboolean enabled)
|
||||||
{
|
{
|
||||||
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE(self);
|
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE(self);
|
||||||
NMModemState prev_state = priv->state;
|
NMModemState prev_state = priv->state;
|
||||||
|
|
||||||
/* Not all modem classes support set_mm_enabled */
|
/* Not all modem classes support set_enabled */
|
||||||
if (!NM_MODEM_GET_CLASS(self)->set_mm_enabled) {
|
if (!NM_MODEM_GET_CLASS(self)->set_enabled) {
|
||||||
_LOGD("cannot enable modem: not implemented");
|
_LOGD("cannot enable modem: not implemented");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -382,7 +391,7 @@ nm_modem_set_mm_enabled(NMModem *self, gboolean enabled)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NM_MODEM_GET_CLASS(self)->set_mm_enabled(self, enabled);
|
NM_MODEM_GET_CLASS(self)->set_enabled(self, enabled);
|
||||||
|
|
||||||
/* Pre-empt the state change signal */
|
/* Pre-empt the state change signal */
|
||||||
nm_modem_set_state(self,
|
nm_modem_set_state(self,
|
||||||
|
|
@ -2004,4 +2013,16 @@ nm_modem_class_init(NMModemClass *klass)
|
||||||
2,
|
2,
|
||||||
G_TYPE_INT,
|
G_TYPE_INT,
|
||||||
G_TYPE_INT);
|
G_TYPE_INT);
|
||||||
|
|
||||||
|
signals[CAPABILITIES_CHANGED] = g_signal_new(NM_MODEM_CAPABILITIES_CHANGED,
|
||||||
|
G_OBJECT_CLASS_TYPE(object_class),
|
||||||
|
G_SIGNAL_RUN_FIRST,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
G_TYPE_NONE,
|
||||||
|
2,
|
||||||
|
G_TYPE_UINT,
|
||||||
|
G_TYPE_UINT);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,15 @@
|
||||||
#define NM_MODEM_DEVICE_UID "device-uid"
|
#define NM_MODEM_DEVICE_UID "device-uid"
|
||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
#define NM_MODEM_PPP_STATS "ppp-stats"
|
#define NM_MODEM_PPP_STATS "ppp-stats"
|
||||||
#define NM_MODEM_PPP_FAILED "ppp-failed"
|
#define NM_MODEM_PPP_FAILED "ppp-failed"
|
||||||
#define NM_MODEM_PREPARE_RESULT "prepare-result"
|
#define NM_MODEM_PREPARE_RESULT "prepare-result"
|
||||||
#define NM_MODEM_NEW_CONFIG "new-config"
|
#define NM_MODEM_NEW_CONFIG "new-config"
|
||||||
#define NM_MODEM_AUTH_REQUESTED "auth-requested"
|
#define NM_MODEM_AUTH_REQUESTED "auth-requested"
|
||||||
#define NM_MODEM_AUTH_RESULT "auth-result"
|
#define NM_MODEM_AUTH_RESULT "auth-result"
|
||||||
#define NM_MODEM_REMOVED "removed"
|
#define NM_MODEM_REMOVED "removed"
|
||||||
#define NM_MODEM_STATE_CHANGED "state-changed"
|
#define NM_MODEM_STATE_CHANGED "state-changed"
|
||||||
|
#define NM_MODEM_CAPABILITIES_CHANGED "capabilities-changed"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NM_MODEM_IP_METHOD_UNKNOWN = 0,
|
NM_MODEM_IP_METHOD_UNKNOWN = 0,
|
||||||
|
|
@ -126,7 +127,7 @@ typedef struct {
|
||||||
|
|
||||||
void (*stage3_ip_config_start)(NMModem *self, int addr_family, NMModemIPMethod method);
|
void (*stage3_ip_config_start)(NMModem *self, int addr_family, NMModemIPMethod method);
|
||||||
|
|
||||||
void (*set_mm_enabled)(NMModem *self, gboolean enabled);
|
void (*set_enabled)(NMModem *self, gboolean enabled);
|
||||||
|
|
||||||
void (*disconnect)(NMModem *self,
|
void (*disconnect)(NMModem *self,
|
||||||
gboolean warn,
|
gboolean warn,
|
||||||
|
|
@ -208,13 +209,17 @@ void nm_modem_deactivate_async(NMModem *self,
|
||||||
void
|
void
|
||||||
nm_modem_device_state_changed(NMModem *modem, NMDeviceState new_state, NMDeviceState old_state);
|
nm_modem_device_state_changed(NMModem *modem, NMDeviceState new_state, NMDeviceState old_state);
|
||||||
|
|
||||||
void nm_modem_set_mm_enabled(NMModem *self, gboolean enabled);
|
void nm_modem_set_enabled(NMModem *self, gboolean enabled);
|
||||||
|
|
||||||
NMModemState nm_modem_get_state(NMModem *self);
|
NMModemState nm_modem_get_state(NMModem *self);
|
||||||
void nm_modem_set_state(NMModem *self, NMModemState new_state, const char *reason);
|
void nm_modem_set_state(NMModem *self, NMModemState new_state, const char *reason);
|
||||||
void nm_modem_set_prev_state(NMModem *self, const char *reason);
|
void nm_modem_set_prev_state(NMModem *self, const char *reason);
|
||||||
const char *nm_modem_state_to_string(NMModemState state);
|
const char *nm_modem_state_to_string(NMModemState state);
|
||||||
|
|
||||||
|
void nm_modem_set_capabilities(NMModem *self,
|
||||||
|
NMDeviceModemCapabilities modem_caps,
|
||||||
|
NMDeviceModemCapabilities current_caps);
|
||||||
|
|
||||||
NMModemIPType nm_modem_get_supported_ip_types(NMModem *self);
|
NMModemIPType nm_modem_get_supported_ip_types(NMModem *self);
|
||||||
|
|
||||||
/* For the modem-manager only */
|
/* For the modem-manager only */
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue