From 061e184d393e22d4331f8f004be110a0176ea4dc Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Fri, 31 Aug 2012 14:05:29 +0200 Subject: [PATCH] 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 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. --- .../sierra/mm-broadband-modem-sierra-icera.c | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) 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,12 +29,69 @@ #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); G_DEFINE_TYPE_EXTENDED (MMBroadbandModemSierraIcera, mm_broadband_modem_sierra_icera, MM_TYPE_BROADBAND_MODEM_ICERA, 0, 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) */ @@ -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