aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOliver Kästner <git@oliver-kaestner.de>2023-10-16 23:13:28 +0200
committerAleksander Morgado <aleksander@aleksander.es>2024-04-12 11:17:18 +0000
commit2e4dc6911fed12320bddae3d1f19b7b334d52f2c (patch)
treed8ca5f03e1b7273496a4e74099edeb426d6b135c /src
parent4f1864921acfa70b9f3d0aea68810ff3b2afc765 (diff)
huawei: handle IPv6 connection status changes
Diffstat (limited to 'src')
-rw-r--r--src/plugins/huawei/mm-broadband-modem-huawei.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/plugins/huawei/mm-broadband-modem-huawei.c b/src/plugins/huawei/mm-broadband-modem-huawei.c
index 88f97ad5..641e2ed6 100644
--- a/src/plugins/huawei/mm-broadband-modem-huawei.c
+++ b/src/plugins/huawei/mm-broadband-modem-huawei.c
@@ -2001,14 +2001,18 @@ static void
bearer_report_connection_status (MMBaseBearer *bearer,
NdisstatResult *ndisstat_result)
{
- if (ndisstat_result->ipv4_available) {
- /* TODO: MMBroadbandBearerHuawei does not currently support IPv6.
- * When it does, we should check the IP family associated with each bearer. */
- mm_base_bearer_report_connection_status (bearer,
- ndisstat_result->ipv4_connected ?
- MM_BEARER_CONNECTION_STATUS_CONNECTED :
- MM_BEARER_CONNECTION_STATUS_DISCONNECTED);
- }
+ MMBearerConnectionStatus status;
+
+ /* Note: unsolicited ^NDISSTAT messages can contain:
+ * a) only IPv4, b) both IPv4 and IPv6, c) only IPv6 connection status
+ * A disconnect (^NDISDUP=1,0) seems to trigger two separate messages though
+ */
+ status = (ndisstat_result->ipv4_available && ndisstat_result->ipv4_connected) ||
+ (ndisstat_result->ipv6_available && ndisstat_result->ipv6_connected) ?
+ MM_BEARER_CONNECTION_STATUS_CONNECTED :
+ MM_BEARER_CONNECTION_STATUS_DISCONNECTED;
+
+ mm_base_bearer_report_connection_status (bearer, status);
}
static void