summaryrefslogtreecommitdiffstats
path: root/drivers/huaweimodem
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/huaweimodem')
-rw-r--r--drivers/huaweimodem/gprs-context.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/huaweimodem/gprs-context.c b/drivers/huaweimodem/gprs-context.c
index c36060b1..265963ee 100644
--- a/drivers/huaweimodem/gprs-context.c
+++ b/drivers/huaweimodem/gprs-context.c
@@ -50,6 +50,7 @@ struct gprs_context_data {
GAtChat *chat;
unsigned int active_context;
unsigned int dhcp_source;
+ unsigned int dhcp_count;
union {
ofono_gprs_context_cb_t down_cb; /* Down callback */
ofono_gprs_context_up_cb_t up_cb; /* Up callback */
@@ -64,8 +65,13 @@ static gboolean dhcp_poll(gpointer user_data)
struct ofono_gprs_context *gc = user_data;
struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);
- check_dhcp(gc);
+ if (gcd->dhcp_count > 10)
+ CALLBACK_WITH_FAILURE(gcd->up_cb, NULL, 0, NULL, NULL,
+ NULL, NULL, gcd->cb_data);
+ else
+ check_dhcp(gc);
+ gcd->dhcp_count++;
gcd->dhcp_source = 0;
return FALSE;
@@ -189,6 +195,8 @@ static void at_ndisdup_up_cb(gboolean ok, GAtResult *result,
gcd->up_cb = cb;
gcd->cb_data = cbd->data;
+ gcd->dhcp_count = 0;
+
check_dhcp(gc);
return;
}