diff options
author | Aleksander Morgado <aleksander@aleksander.es> | 2014-08-13 20:16:23 +0200 |
---|---|---|
committer | Aleksander Morgado <aleksander@aleksander.es> | 2014-08-13 20:16:23 +0200 |
commit | 5acf90a224c05ee695b1c6aac622e23bec1f4394 (patch) | |
tree | 8352a5f839de266b07667e646393e130e3175036 | |
parent | 5944641318f09cd1f79801cd551e7e11548b2211 (diff) | |
download | ModemManager-aleksander/huawei-qmi-always-dhcp.tar.gz |
huawei: always use DHCP on QMI modemsaleksander/huawei-qmi-always-dhcp
-rw-r--r-- | plugins/huawei/mm-broadband-modem-qmi-huawei.c | 59 |
1 files changed, 58 insertions, 1 deletions
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); +} /*****************************************************************************/ @@ -52,6 +102,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) { } |