mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-24 21:50:34 +01: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_unref;
|
||||
nm_modem_owns_port;
|
||||
nm_modem_set_mm_enabled;
|
||||
nm_modem_set_enabled;
|
||||
nm_modem_stage3_ip_config_start;
|
||||
nm_modem_state_to_string;
|
||||
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).
|
||||
*/
|
||||
|
||||
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. */
|
||||
nm_device_state_changed(device,
|
||||
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
|
||||
* 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) {
|
||||
/* 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);
|
||||
}
|
||||
|
||||
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
|
||||
modem_removed_cb(NMModem *modem, gpointer user_data)
|
||||
{
|
||||
|
|
@ -450,7 +467,7 @@ check_connection_available(NMDevice *device,
|
|||
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_CONNECTION_AVAILABLE_TEMPORARY,
|
||||
"modem is disabled and NM cannot enable it");
|
||||
|
|
@ -616,7 +633,7 @@ set_enabled(NMDevice *device, gboolean enabled)
|
|||
|
||||
if (priv->modem) {
|
||||
/* 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) {
|
||||
|
|
@ -644,7 +661,7 @@ is_available(NMDevice *device, NMDeviceCheckDevAvailableFlags flags)
|
|||
if (modem_state <= NM_MODEM_STATE_INITIALIZING)
|
||||
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 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_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_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,
|
||||
|
|
|
|||
|
|
@ -1698,7 +1698,7 @@ nm_modem_broadband_class_init(NMModemBroadbandClass *klass)
|
|||
modem_class->stage3_ip_config_start = stage3_ip_config_start;
|
||||
modem_class->disconnect = disconnect;
|
||||
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->check_connection_compatible_with_modem = check_connection_compatible_with_modem;
|
||||
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_CONTEXT "org.ofono.ConnectionContext"
|
||||
#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"
|
||||
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ enum {
|
|||
AUTH_RESULT,
|
||||
REMOVED,
|
||||
STATE_CHANGED,
|
||||
CAPABILITIES_CHANGED,
|
||||
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
|
||||
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
|
||||
nm_modem_set_mm_enabled(NMModem *self, gboolean enabled)
|
||||
nm_modem_set_enabled(NMModem *self, gboolean enabled)
|
||||
{
|
||||
NMModemPrivate *priv = NM_MODEM_GET_PRIVATE(self);
|
||||
NMModemState prev_state = priv->state;
|
||||
|
||||
/* Not all modem classes support set_mm_enabled */
|
||||
if (!NM_MODEM_GET_CLASS(self)->set_mm_enabled) {
|
||||
/* Not all modem classes support set_enabled */
|
||||
if (!NM_MODEM_GET_CLASS(self)->set_enabled) {
|
||||
_LOGD("cannot enable modem: not implemented");
|
||||
return;
|
||||
}
|
||||
|
|
@ -382,7 +391,7 @@ nm_modem_set_mm_enabled(NMModem *self, gboolean enabled)
|
|||
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 */
|
||||
nm_modem_set_state(self,
|
||||
|
|
@ -2004,4 +2013,16 @@ nm_modem_class_init(NMModemClass *klass)
|
|||
2,
|
||||
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"
|
||||
|
||||
/* Signals */
|
||||
#define NM_MODEM_PPP_STATS "ppp-stats"
|
||||
#define NM_MODEM_PPP_FAILED "ppp-failed"
|
||||
#define NM_MODEM_PREPARE_RESULT "prepare-result"
|
||||
#define NM_MODEM_NEW_CONFIG "new-config"
|
||||
#define NM_MODEM_AUTH_REQUESTED "auth-requested"
|
||||
#define NM_MODEM_AUTH_RESULT "auth-result"
|
||||
#define NM_MODEM_REMOVED "removed"
|
||||
#define NM_MODEM_STATE_CHANGED "state-changed"
|
||||
#define NM_MODEM_PPP_STATS "ppp-stats"
|
||||
#define NM_MODEM_PPP_FAILED "ppp-failed"
|
||||
#define NM_MODEM_PREPARE_RESULT "prepare-result"
|
||||
#define NM_MODEM_NEW_CONFIG "new-config"
|
||||
#define NM_MODEM_AUTH_REQUESTED "auth-requested"
|
||||
#define NM_MODEM_AUTH_RESULT "auth-result"
|
||||
#define NM_MODEM_REMOVED "removed"
|
||||
#define NM_MODEM_STATE_CHANGED "state-changed"
|
||||
#define NM_MODEM_CAPABILITIES_CHANGED "capabilities-changed"
|
||||
|
||||
typedef enum {
|
||||
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 (*set_mm_enabled)(NMModem *self, gboolean enabled);
|
||||
void (*set_enabled)(NMModem *self, gboolean enabled);
|
||||
|
||||
void (*disconnect)(NMModem *self,
|
||||
gboolean warn,
|
||||
|
|
@ -208,13 +209,17 @@ void nm_modem_deactivate_async(NMModem *self,
|
|||
void
|
||||
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);
|
||||
void nm_modem_set_state(NMModem *self, NMModemState new_state, const char *reason);
|
||||
void nm_modem_set_prev_state(NMModem *self, const char *reason);
|
||||
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);
|
||||
|
||||
/* For the modem-manager only */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue