aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Morgado <aleksander@lanedo.com>2012-08-31 14:05:29 +0200
committerAleksander Morgado <aleksander@lanedo.com>2012-08-31 15:11:30 +0200
commit061e184d393e22d4331f8f004be110a0176ea4dc (patch)
tree02d06f6ab6db26692b7899b4f11216f629053a3b
parenta195dabc93153c7acc220cd9daccbbf4657bbb62 (diff)
sierra: use DHCP for the USB 305 (AT&T Lightning)
This is the port to git master of the following commit: commit 44f70121f75d59dbf31a4a9a1a4e87293e509e7a Author: Dan Williams <dcbw@redhat.com> Date: Tue Aug 28 20:18:40 2012 -0500 sierra: use DHCP for the USB 305 (AT&T Lightning) For some reason, my AT&T Lightning just doesn't work with static IP (AT%IPDPADDR) any more. No traffic passes even though everything is set up the way it was before. No idea what happened. Using latest firmware 2.0.0.11. But what's interesting is on Windows the generic Sierra Watcher app uses DHCP. But on Linux, when using AT%IPDPACT, DHCP doesn't work. That's odd. But it turns out the modem supports the "standard" Sierra proprietary AT!SCACT commands, and that *does* make DHCP work. Crazy no? So since the Windows app uses DHCP, it's likely that the non-DHCP case (AT%IPDPACT/AT%IPDPADDR) either isn't well tested or isn't well supported. With that in mind, let's just use DHCP for this device in Linux too.
-rw-r--r--plugins/sierra/mm-broadband-modem-sierra-icera.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/plugins/sierra/mm-broadband-modem-sierra-icera.c b/plugins/sierra/mm-broadband-modem-sierra-icera.c
index c7d99045..42b11f5d 100644
--- a/plugins/sierra/mm-broadband-modem-sierra-icera.c
+++ b/plugins/sierra/mm-broadband-modem-sierra-icera.c
@@ -29,6 +29,7 @@
#include "mm-modem-helpers.h"
#include "mm-log.h"
#include "mm-common-sierra.h"
+#include "mm-broadband-bearer-sierra.h"
static void iface_modem_init (MMIfaceModem *iface);
@@ -36,6 +37,62 @@ G_DEFINE_TYPE_EXTENDED (MMBroadbandModemSierraIcera, mm_broadband_modem_sierra_i
G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init))
/*****************************************************************************/
+/* Create Bearer (Modem interface) */
+
+static MMBearer *
+modem_create_bearer_finish (MMIfaceModem *self,
+ GAsyncResult *res,
+ GError **error)
+{
+ MMBearer *bearer;
+
+ bearer = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res));
+ mm_dbg ("New Sierra bearer created at DBus path '%s'", mm_bearer_get_path (bearer));
+
+ return g_object_ref (bearer);
+}
+
+static void
+broadband_bearer_sierra_new_ready (GObject *source,
+ GAsyncResult *res,
+ GSimpleAsyncResult *simple)
+{
+ MMBearer *bearer = NULL;
+ GError *error = NULL;
+
+ bearer = mm_broadband_bearer_sierra_new_finish (res, &error);
+ if (!bearer)
+ g_simple_async_result_take_error (simple, error);
+ else
+ g_simple_async_result_set_op_res_gpointer (simple,
+ bearer,
+ (GDestroyNotify)g_object_unref);
+ g_simple_async_result_complete (simple);
+ g_object_unref (simple);
+}
+
+static void
+modem_create_bearer (MMIfaceModem *self,
+ MMBearerProperties *properties,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *result;
+
+ result = g_simple_async_result_new (G_OBJECT (self),
+ callback,
+ user_data,
+ modem_create_bearer);
+
+ mm_dbg ("Creating Sierra bearer...");
+ mm_broadband_bearer_sierra_new (MM_BROADBAND_MODEM_SIERRA (self),
+ properties,
+ NULL, /* cancellable */
+ (GAsyncReadyCallback)broadband_bearer_sierra_new_ready,
+ result);
+}
+
+/*****************************************************************************/
/* Setup ports (Broadband modem class) */
static void
@@ -77,6 +134,8 @@ iface_modem_init (MMIfaceModem *iface)
iface->modem_power_up_finish = mm_common_sierra_modem_power_up_finish;
iface->create_sim = mm_common_sierra_create_sim;
iface->create_sim_finish = mm_common_sierra_create_sim_finish;
+ iface->create_bearer = modem_create_bearer;
+ iface->create_bearer_finish = modem_create_bearer_finish;
}
static void