From 5acf90a224c05ee695b1c6aac622e23bec1f4394 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Wed, 13 Aug 2014 20:16:23 +0200 Subject: huawei: always use DHCP on QMI modems --- plugins/huawei/mm-broadband-modem-qmi-huawei.c | 59 +++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/plugins/huawei/mm-broadband-modem-qmi-huawei.c b/plugins/huawei/mm-broadband-modem-qmi-huawei.c index 2b0d79675..52bc7900b 100644 --- a/plugins/huawei/mm-broadband-modem-qmi-huawei.c +++ b/plugins/huawei/mm-broadband-modem-qmi-huawei.c @@ -25,8 +25,58 @@ #include "mm-log.h" #include "mm-errors-types.h" #include "mm-broadband-modem-qmi-huawei.h" +#include "mm-iface-modem.h" +#include "mm-bearer-qmi.h" -G_DEFINE_TYPE (MMBroadbandModemQmiHuawei, mm_broadband_modem_qmi_huawei, MM_TYPE_BROADBAND_MODEM_QMI) +static void iface_modem_init (MMIfaceModem *iface); + +G_DEFINE_TYPE_EXTENDED (MMBroadbandModemQmiHuawei, mm_broadband_modem_qmi_huawei, MM_TYPE_BROADBAND_MODEM_QMI, 0, + G_IMPLEMENT_INTERFACE (MM_TYPE_IFACE_MODEM, iface_modem_init)) + +/*****************************************************************************/ +/* Create Bearer (Modem interface) */ + +static MMBaseBearer * +modem_create_bearer_finish (MMIfaceModem *self, + GAsyncResult *res, + GError **error) +{ + MMBaseBearer *bearer; + + bearer = g_simple_async_result_get_op_res_gpointer (G_SIMPLE_ASYNC_RESULT (res)); + mm_dbg ("New bearer created at DBus path '%s'", mm_base_bearer_get_path (bearer)); + + return g_object_ref (bearer); +} + +static void +modem_create_bearer (MMIfaceModem *self, + MMBearerProperties *properties, + GAsyncReadyCallback callback, + gpointer user_data) +{ + MMBaseBearer *bearer; + GSimpleAsyncResult *result; + + /* Set a new ref to the bearer object as result */ + result = g_simple_async_result_new (G_OBJECT (self), + callback, + user_data, + modem_create_bearer); + + /* We just create a MMBearerQmi */ + mm_dbg ("Creating QMI bearer in Huawei QMI modem"); + bearer = mm_bearer_qmi_new (MM_BROADBAND_MODEM_QMI (self), properties); + + /* In Huawei QMI modems, always DHCP */ + g_object_set (bearer, + MM_BEARER_QMI_FORCE_DHCP, TRUE, + NULL); + + g_simple_async_result_set_op_res_gpointer (result, bearer, g_object_unref); + g_simple_async_result_complete_in_idle (result); + g_object_unref (result); +} /*****************************************************************************/ @@ -51,6 +101,13 @@ mm_broadband_modem_qmi_huawei_init (MMBroadbandModemQmiHuawei *self) { } +static void +iface_modem_init (MMIfaceModem *iface) +{ + iface->create_bearer = modem_create_bearer; + iface->create_bearer_finish = modem_create_bearer_finish; +} + static void mm_broadband_modem_qmi_huawei_class_init (MMBroadbandModemQmiHuaweiClass *klass) { -- cgit v1.2.1