From 2d29832f89fe6bffe52b6e4eb27d80f49eb7430a Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Thu, 1 May 2025 14:32:17 +0900 Subject: dispatcher-connection: add new 'disconnect-request' event When bearer gets an event that should trigger a disconnection but we cannot disconnect (for example because we're waiting for pppd to close), we now trigger a new 'disconnect-request' event instead This was tested with the following hook: ``` $ cat /etc/ModemManager/connection.d/handle-disconnect-request.sh #!/bin/sh if [ "$4" != disconnect-request ]; then exit 0 fi iface=$(mmcli -b "$2" -K | awk '/bearer.status.interface/ { print $3 }') if pkill -f "pppd\>.*\<$iface\>"; then logger -t mm-disconnect-request "Killed $iface pppd" else logger -t mm-disconnect-request "No pppd found for $iface" fi ``` Signed-off-by: Dominique Martinet --- src/mm-base-bearer.c | 2 ++ src/mm-dispatcher-connection.c | 2 ++ src/mm-dispatcher-connection.h | 1 + 3 files changed, 5 insertions(+) (limited to 'src') diff --git a/src/mm-base-bearer.c b/src/mm-base-bearer.c index 2b72ec2f..f45a1ebe 100644 --- a/src/mm-base-bearer.c +++ b/src/mm-base-bearer.c @@ -1492,6 +1492,8 @@ mm_base_bearer_disconnect_force (MMBaseBearer *self) if (self->priv->ignore_disconnection_reports) { mm_obj_dbg (self, "disconnection should be forced but it's explicitly ignored"); + bearer_run_dispatcher_scripts (self, + MM_DISPATCHER_CONNECTION_EVENT_DISCONNECT_REQUEST); return; } diff --git a/src/mm-dispatcher-connection.c b/src/mm-dispatcher-connection.c index dec195d3..4cfc055c 100644 --- a/src/mm-dispatcher-connection.c +++ b/src/mm-dispatcher-connection.c @@ -66,6 +66,8 @@ mm_dispatcher_connection_event_to_string (MMDispatcherConnectionEvent event) return g_strdup ("connected"); case MM_DISPATCHER_CONNECTION_EVENT_DISCONNECTED: return g_strdup ("disconnected"); + case MM_DISPATCHER_CONNECTION_EVENT_DISCONNECT_REQUEST: + return g_strdup ("disconnect-request"); default: return NULL; } diff --git a/src/mm-dispatcher-connection.h b/src/mm-dispatcher-connection.h index 95a10c24..1f8911c1 100644 --- a/src/mm-dispatcher-connection.h +++ b/src/mm-dispatcher-connection.h @@ -35,6 +35,7 @@ typedef struct _MMDispatcherConnectionPrivate MMDispatcherConnectionPrivate; typedef enum { /*< underscore_name=mm_dispatcher_connection_event >*/ MM_DISPATCHER_CONNECTION_EVENT_CONNECTED, MM_DISPATCHER_CONNECTION_EVENT_DISCONNECTED, + MM_DISPATCHER_CONNECTION_EVENT_DISCONNECT_REQUEST, } MMDispatcherConnectionEvent; GType mm_dispatcher_connection_get_type (void); -- cgit v1.2.3-70-g09d2