diff -pruN 1.32.0-1/debian/changelog 1.32.0-1ubuntu1/debian/changelog
--- 1.32.0-1/debian/changelog	2025-04-08 21:27:39.000000000 +0000
+++ 1.32.0-1ubuntu1/debian/changelog	2025-09-02 06:09:18.000000000 +0000
@@ -1,3 +1,9 @@
+libmbim (1.32.0-1ubuntu1) questing; urgency=medium
+
+  * Add Intel mbim service to send AT command (LP: #2121842)
+
+ -- Dirk Su <dirk.su@canonical.com>  Tue, 02 Sep 2025 14:09:18 +0800
+
 libmbim (1.32.0-1) unstable; urgency=medium
 
   * New upstream version. This is the release for the RC currently in Trixie.
diff -pruN 1.32.0-1/debian/control 1.32.0-1ubuntu1/debian/control
--- 1.32.0-1/debian/control	2025-03-11 16:22:26.000000000 +0000
+++ 1.32.0-1ubuntu1/debian/control	2025-09-02 06:09:18.000000000 +0000
@@ -1,7 +1,8 @@
 Source: libmbim
 Section: libs
 Priority: optional
-Maintainer: DebianOnMobile Maintainers <debian-on-mobile-maintainers@alioth-lists.debian.net>
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
+XSBC-Original-Maintainer: DebianOnMobile Maintainers <debian-on-mobile-maintainers@alioth-lists.debian.net>
 Uploaders: Arnaud Ferraris <aferraris@debian.org>,
            Guido Günther <agx@sigxcpu.org>,
            Henry-Nicolas Tourneur <debian@nilux.be>,
diff -pruN 1.32.0-1/debian/libmbim-glib4.symbols 1.32.0-1ubuntu1/debian/libmbim-glib4.symbols
--- 1.32.0-1/debian/libmbim-glib4.symbols	2025-03-11 16:22:26.000000000 +0000
+++ 1.32.0-1ubuntu1/debian/libmbim-glib4.symbols	2025-09-02 06:09:18.000000000 +0000
@@ -50,6 +50,8 @@ libmbim-glib.so.4 libmbim-glib4 #MINVER#
  mbim_cid_get_printable@Base 1.10.0
  mbim_cid_google_get_string@Base 1.30.0
  mbim_cid_google_get_type@Base 1.30.0
+ mbim_cid_intel_at_tunnel_get_string@Base 1.32.0-1ubuntu1~
+ mbim_cid_intel_at_tunnel_get_type@Base 1.32.0-1ubuntu1~
  mbim_cid_intel_firmware_update_get_string@Base 1.16.0
  mbim_cid_intel_firmware_update_get_type@Base 1.16.0
  mbim_cid_intel_mutual_authentication_get_string@Base 1.30.0
@@ -259,6 +261,8 @@ libmbim-glib.so.4 libmbim-glib4 #MINVER#
  mbim_message_indicate_status_get_raw_information_buffer@Base 1.10.0
  mbim_message_indicate_status_get_service@Base 1.10.0
  mbim_message_indicate_status_get_service_id@Base 1.10.0
+ mbim_message_intel_at_tunnel_at_command_response_parse@Base 1.32.0-1ubuntu1~
+ mbim_message_intel_at_tunnel_at_command_set_new@Base 1.32.0-1ubuntu1~
  mbim_message_intel_firmware_update_modem_reboot_set_new@Base 1.16.0
  mbim_message_intel_firmware_update_v2_modem_reboot_set_new@Base 1.28.0
  mbim_message_intel_mutual_authentication_fcc_lock_query_new@Base 1.30.0
diff -pruN 1.32.0-1/debian/patches/mbimcli-intel-attunnel-new-service-set-at-command.patch 1.32.0-1ubuntu1/debian/patches/mbimcli-intel-attunnel-new-service-set-at-command.patch
--- 1.32.0-1/debian/patches/mbimcli-intel-attunnel-new-service-set-at-command.patch	1970-01-01 00:00:00.000000000 +0000
+++ 1.32.0-1ubuntu1/debian/patches/mbimcli-intel-attunnel-new-service-set-at-command.patch	2025-09-02 06:09:18.000000000 +0000
@@ -0,0 +1,571 @@
+From eaf237c89bbab490e6e34b202dc0edb5060c7476 Mon Sep 17 00:00:00 2001
+From: Jack Wu <wojackbb@gmail.com>
+Date: Tue, 22 Apr 2025 15:20:56 +0800
+Subject: [PATCH] mbimcli: intel-attunnel: new service, set-at-command
+
+New service for intel attunnel is created to add cid specific
+to set at command. Cids which are part of this service will be
+used by various tools to set at command to modem over MBIM.
+
+Signed-off-by: JackBB Wu <wojackbb@gmail.com>
+Origin: upstream, https://gitlab.freedesktop.org/mobile-broadband/libmbim/-/merge_requests/235
+---
+ data/mbim-service-intel-at-tunnel.json        |  18 ++
+ .../libmbim-glib/libmbim-glib-common.sections |   6 +
+ .../libmbim-glib/libmbim-glib-docs.xml        |   5 +
+ src/libmbim-glib/generated/meson.build        |   1 +
+ src/libmbim-glib/libmbim-glib.h               |   1 +
+ src/libmbim-glib/mbim-cid.c                   |  14 ++
+ src/libmbim-glib/mbim-cid.h                   |  14 ++
+ src/libmbim-glib/mbim-message.c               |   4 +
+ src/libmbim-glib/mbim-uuid.c                  |  13 ++
+ src/libmbim-glib/mbim-uuid.h                  |  13 ++
+ src/mbimcli/mbimcli-intel-at-tunnel.c         | 158 ++++++++++++++++++
+ src/mbimcli/mbimcli.c                         |   9 +
+ src/mbimcli/mbimcli.h                         |   4 +
+ src/mbimcli/meson.build                       |   1 +
+ 14 files changed, 261 insertions(+)
+ create mode 100644 data/mbim-service-intel-at-tunnel.json
+ create mode 100644 src/mbimcli/mbimcli-intel-at-tunnel.c
+
+diff --git a/data/mbim-service-intel-at-tunnel.json b/data/mbim-service-intel-at-tunnel.json
+new file mode 100644
+index 0000000..8041fb2
+--- /dev/null
++++ b/data/mbim-service-intel-at-tunnel.json
+@@ -0,0 +1,18 @@
++[
++  // *********************************************************************************
++  { "type" : "Service",
++    "name" : "Intel AT Tunnel" },
++
++  // *********************************************************************************
++  { "name"         : "AT Command",
++    "service"      : "Intel AT Tunnel",
++    "type"         : "Command",
++    "since"        : "1.34",
++    "set"        : [ { "name"          : "CommandReq",
++                       "format"        : "unsized-byte-array",
++                       "pad-array"     : "FALSE",
++                       "personal-info" : "true" } ],
++    "response"     : [ { "name"          : "CommandResp",
++                         "format"        : "unsized-byte-array",
++                         "personal-info" : "true" } ] }
++]
+diff --git a/docs/reference/libmbim-glib/libmbim-glib-common.sections b/docs/reference/libmbim-glib/libmbim-glib-common.sections
+index ee323ff..0e9797d 100644
+--- a/docs/reference/libmbim-glib/libmbim-glib-common.sections
++++ b/docs/reference/libmbim-glib/libmbim-glib-common.sections
+@@ -38,6 +38,7 @@ MBIM_UUID_INTEL_TOOLS
+ MBIM_UUID_GOOGLE
+ MBIM_UUID_FIBOCOM
+ MBIM_UUID_COMPAL
++MBIM_UUID_INTEL_AT_TUNNEL
+ <SUBSECTION Methods>
+ mbim_service_get_string
+ mbim_service_lookup_name
+@@ -85,6 +86,7 @@ MbimCidIntelTools
+ MbimCidGoogle
+ MbimCidFibocom
+ MbimCidCompal
++MbimCidIntelAtTunnel
+ <SUBSECTION Methods>
+ mbim_cid_can_set
+ mbim_cid_can_query
+@@ -115,6 +117,7 @@ mbim_cid_intel_tools_get_string
+ mbim_cid_google_get_string
+ mbim_cid_fibocom_get_string
+ mbim_cid_compal_get_string
++mbim_cid_intel_at_tunnel_get_string
+ <SUBSECTION Private>
+ mbim_cid_atds_build_string_from_mask
+ mbim_cid_basic_connect_build_string_from_mask
+@@ -141,6 +144,7 @@ mbim_cid_intel_tools_build_string_from_mask
+ mbim_cid_google_build_string_from_mask
+ mbim_cid_fibocom_build_string_from_mask
+ mbim_cid_compal_build_string_from_mask
++mbim_cid_intel_at_tunnel_build_string_from_mask
+ <SUBSECTION Standard>
+ MBIM_TYPE_CID_ATDS
+ MBIM_TYPE_CID_AUTH
+@@ -167,6 +171,7 @@ MBIM_TYPE_CID_INTEL_TOOLS
+ MBIM_TYPE_CID_GOOGLE
+ MBIM_TYPE_CID_FIBOCOM
+ MBIM_TYPE_CID_COMPAL
++MBIM_TYPE_CID_INTEL_AT_TUNNEL
+ mbim_cid_atds_get_type
+ mbim_cid_auth_get_type
+ mbim_cid_basic_connect_get_type
+@@ -192,6 +197,7 @@ mbim_cid_intel_tools_get_type
+ mbim_cid_google_get_type
+ mbim_cid_fibocom_get_type
+ mbim_cid_compal_get_type
++mbim_cid_intel_at_tunnel_get_type
+ </SECTION>
+ 
+ <SECTION>
+diff --git a/docs/reference/libmbim-glib/libmbim-glib-docs.xml b/docs/reference/libmbim-glib/libmbim-glib-docs.xml
+index de55495..ac48af5 100644
+--- a/docs/reference/libmbim-glib/libmbim-glib-docs.xml
++++ b/docs/reference/libmbim-glib/libmbim-glib-docs.xml
+@@ -107,6 +107,7 @@
+     <xi:include href="xml/mbim-intel-thermal-rf.xml"/>
+     <xi:include href="xml/mbim-intel-mutual-authentication.xml"/>
+     <xi:include href="xml/mbim-intel-tools.xml"/>
++    <xi:include href="xml/mbim-intel-at-tunnel.xml"/>
+   </chapter>
+ 
+   <chapter>
+@@ -215,6 +216,10 @@
+     <title>Index of new symbols in 1.32</title>
+     <xi:include href="xml/api-index-1.32.xml"></xi:include>
+   </chapter>
++  <chapter id="api-index-1-34" role="1.34">
++    <title>Index of new symbols in 1.34</title>
++    <xi:include href="xml/api-index-1.34.xml"></xi:include>
++  </chapter>
+ 
+   <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+ </book>
+diff --git a/src/libmbim-glib/generated/meson.build b/src/libmbim-glib/generated/meson.build
+index b19c356..aa402d6 100644
+--- a/src/libmbim-glib/generated/meson.build
++++ b/src/libmbim-glib/generated/meson.build
+@@ -149,6 +149,7 @@ services_data = [
+   ['google'],
+   ['fibocom'],
+   ['compal'],
++  ['intel-at-tunnel'],
+ ]
+ 
+ foreach service_data: services_data
+diff --git a/src/libmbim-glib/libmbim-glib.h b/src/libmbim-glib/libmbim-glib.h
+index 431f748..4254e3a 100644
+--- a/src/libmbim-glib/libmbim-glib.h
++++ b/src/libmbim-glib/libmbim-glib.h
+@@ -52,6 +52,7 @@
+ #include "mbim-google.h"
+ #include "mbim-fibocom.h"
+ #include "mbim-compal.h"
++#include "mbim-intel-at-tunnel.h"
+ 
+ /* backwards compatibility */
+ #include "mbim-compat.h"
+diff --git a/src/libmbim-glib/mbim-cid.c b/src/libmbim-glib/mbim-cid.c
+index ef67c57..80a0b20 100644
+--- a/src/libmbim-glib/mbim-cid.c
++++ b/src/libmbim-glib/mbim-cid.c
+@@ -268,6 +268,12 @@ static const CidConfig cid_fibocom_config [MBIM_CID_FIBOCOM_LAST] = {
+ static const CidConfig cid_compal_config [MBIM_CID_COMPAL_LAST] = {
+     { NO_SET, QUERY, NO_NOTIFY } /* MBIM_CID_COMPAL_AT_COMMAND */
+ };
++
++/* Note: index of the array is CID-1 */
++#define MBIM_CID_INTEL_AT_TUNNEL_LAST MBIM_CID_INTEL_AT_TUNNEL_AT_COMMAND
++static const CidConfig cid_intel_at_tunnel_config [MBIM_CID_INTEL_AT_TUNNEL_LAST] = {
++    { SET, NO_QUERY, NO_NOTIFY } /* MBIM_CID_INTEL_AT_TUNNEL_AT_COMMAND */
++};
+ gboolean
+ mbim_cid_can_set (MbimService service,
+                   guint       cid)
+@@ -329,6 +335,8 @@ mbim_cid_can_set (MbimService service,
+         return cid_fibocom_config[cid - 1].set;
+     case MBIM_SERVICE_COMPAL:
+         return cid_compal_config[cid - 1].set;
++    case MBIM_SERVICE_INTEL_AT_TUNNEL:
++        return cid_intel_at_tunnel_config[cid - 1].set;
+     case MBIM_SERVICE_INVALID:
+     case MBIM_SERVICE_LAST:
+     default:
+@@ -398,6 +406,8 @@ mbim_cid_can_query (MbimService service,
+         return cid_fibocom_config[cid - 1].query;
+     case MBIM_SERVICE_COMPAL:
+         return cid_compal_config[cid - 1].query;
++    case MBIM_SERVICE_INTEL_AT_TUNNEL:
++        return cid_intel_at_tunnel_config[cid - 1].query;
+     case MBIM_SERVICE_INVALID:
+     case MBIM_SERVICE_LAST:
+     default:
+@@ -467,6 +477,8 @@ mbim_cid_can_notify (MbimService service,
+         return cid_fibocom_config[cid - 1].notify;
+     case MBIM_SERVICE_COMPAL:
+         return cid_compal_config[cid - 1].notify;
++    case MBIM_SERVICE_INTEL_AT_TUNNEL:
++        return cid_intel_at_tunnel_config[cid - 1].notify;
+     case MBIM_SERVICE_INVALID:
+     case MBIM_SERVICE_LAST:
+     default:
+@@ -537,6 +549,8 @@ mbim_cid_get_printable (MbimService service,
+         return mbim_cid_fibocom_get_string (cid);
+     case MBIM_SERVICE_COMPAL:
+         return mbim_cid_compal_get_string (cid);
++    case MBIM_SERVICE_INTEL_AT_TUNNEL:
++        return mbim_cid_intel_at_tunnel_get_string (cid);
+ 
+     case MBIM_SERVICE_LAST:
+     default:
+diff --git a/src/libmbim-glib/mbim-cid.h b/src/libmbim-glib/mbim-cid.h
+index a6d6e84..52c475c 100644
+--- a/src/libmbim-glib/mbim-cid.h
++++ b/src/libmbim-glib/mbim-cid.h
+@@ -515,6 +515,20 @@ typedef enum { /*< since=1.32 >*/
+     MBIM_CID_COMPAL_AT_COMMAND = 1,
+ } MbimCidCompal;
+ 
++/**
++ * MbimCidIntelAtTunnel:
++ * @MBIM_CID_INTEL_AT_TUNNEL_UNKNOWN: Unknown command.
++ * @MBIM_CID_INTEL_AT_TUNNEL_AT_COMMAND: AT over MBIM message.
++ *
++ * MBIM commands in the %MBIM_SERVICE_INTEL_AT_TUNNEL service.
++ *
++ * Since: 1.34
++ */
++typedef enum { /*< since=1.34 >*/
++    MBIM_CID_INTEL_AT_TUNNEL_UNKNOWN    = 0,
++    MBIM_CID_INTEL_AT_TUNNEL_AT_COMMAND = 1,
++} MbimCidIntelAtTunnel;
++
+ /**
+  * mbim_cid_can_set:
+  * @service: a #MbimService.
+diff --git a/src/libmbim-glib/mbim-message.c b/src/libmbim-glib/mbim-message.c
+index c8e92ea..96566ff 100644
+--- a/src/libmbim-glib/mbim-message.c
++++ b/src/libmbim-glib/mbim-message.c
+@@ -46,6 +46,7 @@
+ #include "mbim-google.h"
+ #include "mbim-fibocom.h"
+ #include "mbim-compal.h"
++#include "mbim-intel-at-tunnel.h"
+ 
+ /*****************************************************************************/
+ 
+@@ -2242,6 +2243,9 @@ mbim_message_get_printable_full (const MbimMessage  *self,
+         case MBIM_SERVICE_COMPAL:
+             fields_printable = __mbim_message_compal_get_printable_fields (self, line_prefix, &inner_error);
+             break;
++        case MBIM_SERVICE_INTEL_AT_TUNNEL:
++            fields_printable = __mbim_message_intel_at_tunnel_get_printable_fields (self, line_prefix, &inner_error);
++            break;
+         case MBIM_SERVICE_INVALID:
+         case MBIM_SERVICE_LAST:
+             g_assert_not_reached ();
+diff --git a/src/libmbim-glib/mbim-uuid.c b/src/libmbim-glib/mbim-uuid.c
+index 0c03001..2e9ebc5 100644
+--- a/src/libmbim-glib/mbim-uuid.c
++++ b/src/libmbim-glib/mbim-uuid.c
+@@ -297,6 +297,14 @@ static const MbimUuid uuid_compal = {
+     .e = { 0x45, 0x1c, 0x74, 0xdd, 0xa9, 0x57 }
+ };
+ 
++static const MbimUuid uuid_intel_at_tunnel = {
++    .a = { 0xda, 0x13, 0x8c, 0x64 },
++    .b = { 0x65, 0x15 },
++    .c = { 0x48, 0x93 },
++    .d = { 0x92, 0xb2 },
++    .e = { 0xa1, 0xe1, 0xca, 0x7c, 0x81, 0xca }
++};
++
+ static GList *mbim_custom_service_list = NULL;
+ 
+ typedef struct {
+@@ -442,6 +450,8 @@ mbim_uuid_from_service (MbimService service)
+         return &uuid_fibocom;
+     case MBIM_SERVICE_COMPAL:
+         return &uuid_compal;
++    case MBIM_SERVICE_INTEL_AT_TUNNEL:
++        return &uuid_intel_at_tunnel;
+     case MBIM_SERVICE_LAST:
+         g_assert_not_reached ();
+     default:
+@@ -533,6 +543,9 @@ mbim_uuid_to_service (const MbimUuid *uuid)
+     if (mbim_uuid_cmp (uuid, &uuid_compal))
+         return MBIM_SERVICE_COMPAL;
+ 
++    if (mbim_uuid_cmp (uuid, &uuid_intel_at_tunnel))
++        return MBIM_SERVICE_INTEL_AT_TUNNEL;
++
+     for (l = mbim_custom_service_list; l != NULL; l = l->next) {
+         if (mbim_uuid_cmp (&((MbimCustomService *)l->data)->uuid, uuid))
+             return ((MbimCustomService *)l->data)->service_id;
+diff --git a/src/libmbim-glib/mbim-uuid.h b/src/libmbim-glib/mbim-uuid.h
+index 20db080..62484c8 100644
+--- a/src/libmbim-glib/mbim-uuid.h
++++ b/src/libmbim-glib/mbim-uuid.h
+@@ -119,6 +119,7 @@ gboolean mbim_uuid_from_printable (const gchar *str,
+  * @MBIM_SERVICE_GOOGLE: Google specific service. Since 1.30
+  * @MBIM_SERVICE_FIBOCOM: Fibocom specific service. Since 1.32.
+  * @MBIM_SERVICE_COMPAL: Compal specific service. Since 1.32.
++ * @MBIM_SERVICE_INTEL_AT_TUNNEL: Intel at tunnel service. Since 1.34.
+  * @MBIM_SERVICE_LAST: Internal value.
+  *
+  * Enumeration of the generic MBIM services.
+@@ -152,6 +153,7 @@ typedef enum { /*< since=1.0 >*/
+     MBIM_SERVICE_GOOGLE                      = 23,
+     MBIM_SERVICE_FIBOCOM                     = 24,
+     MBIM_SERVICE_COMPAL                      = 25,
++    MBIM_SERVICE_INTEL_AT_TUNNEL             = 26,
+ #if defined LIBMBIM_GLIB_COMPILATION
+     MBIM_SERVICE_LAST /*< skip >*/
+ #endif
+@@ -444,6 +446,17 @@ typedef enum { /*< since=1.0 >*/
+  */
+ #define MBIM_UUID_COMPAL mbim_uuid_from_service (MBIM_SERVICE_COMPAL)
+ 
++/**
++ * MBIM_UUID_INTEL_AT_TUNNEL:
++ *
++ * Get the UUID of the %MBIM_SERVICE_INTEL_AT_TUNNEL service.
++ *
++ * Returns: (transfer none): a #MbimUuid.
++ *
++ * Since: 1.34
++ */
++#define MBIM_UUID_INTEL_AT_TUNNEL mbim_uuid_from_service (MBIM_SERVICE_INTEL_AT_TUNNEL)
++
+ /**
+  * mbim_service_lookup_name:
+  * @service: a MbimService or custom service.
+diff --git a/src/mbimcli/mbimcli-intel-at-tunnel.c b/src/mbimcli/mbimcli-intel-at-tunnel.c
+new file mode 100644
+index 0000000..7478b4c
+--- /dev/null
++++ b/src/mbimcli/mbimcli-intel-at-tunnel.c
+@@ -0,0 +1,158 @@
++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* SPDX-License-Identifier: GPL-2.0-or-later */
++/*
++ * mbimcli -- Command line interface to control MBIM devices
++ *
++ * Copyright (C) 2023 chenhaotian <jackbb_wu@compal.com>
++ */
++
++#include "config.h"
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <locale.h>
++#include <string.h>
++
++#include <glib.h>
++#include <gio/gio.h>
++
++#include <libmbim-glib.h>
++
++#include "mbimcli.h"
++#include "mbimcli-helpers.h"
++
++/* Context */
++typedef struct {
++    MbimDevice *device;
++    GCancellable *cancellable;
++} Context;
++static Context *ctx;
++
++/* Options */
++static gchar *query_at_command_str;
++
++static GOptionEntry entries[] = {
++    { "intel-at-tunnel-set-at-command", 0, 0, G_OPTION_ARG_STRING, &query_at_command_str,
++      "send AT command to modem, and receive AT response",
++      "\"<AT command>\""
++    },
++    { NULL, 0, 0, 0, NULL, NULL, NULL }
++};
++
++GOptionGroup *
++mbimcli_intel_at_tunnel_get_option_group (void)
++{
++   GOptionGroup *group;
++
++   group = g_option_group_new ("intel-at-tunnel",
++                               "Intel AT Tunnel options:",
++                               "Show Intel AT Tunnel Service options",
++                               NULL,
++                               NULL);
++   g_option_group_add_entries (group, entries);
++   return group;
++}
++
++gboolean
++mbimcli_intel_at_tunnel_options_enabled (void)
++{
++    static guint n_actions = 0;
++    static gboolean checked = FALSE;
++
++    if (checked)
++        return !!n_actions;
++
++    n_actions = !!query_at_command_str;
++
++    if (n_actions > 1) {
++        g_printerr ("error: too many Intel AT Tunnel actions requested\n");
++        exit (EXIT_FAILURE);
++    }
++
++    checked = TRUE;
++    return !!n_actions;
++}
++
++static void
++context_free (Context *context)
++{
++    if (!context)
++        return;
++
++    if (context->cancellable)
++        g_object_unref (context->cancellable);
++    if (context->device)
++        g_object_unref (context->device);
++    g_slice_free (Context, context);
++}
++
++static void
++shutdown (gboolean operation_status)
++{
++    /* Cleanup context and finish async operation */
++    context_free (ctx);
++    mbimcli_async_operation_done (operation_status);
++}
++
++static void
++intel_at_tunnel_at_command_ready (MbimDevice   *device,
++                                  GAsyncResult *res)
++{
++    g_autoptr(GError)      error     = NULL;
++    guint32                ret_size  = 0;
++    const guint8           *ret_str  = NULL;
++    g_autoptr(MbimMessage) response  = NULL;
++
++    response = mbim_device_command_finish (device, res, &error);
++
++    if (!response || !mbim_message_response_get_result (response, MBIM_MESSAGE_TYPE_COMMAND_DONE, &error)) {
++        g_printerr ("error: operation failed: %s\n", error->message);
++        shutdown (FALSE);
++        return;
++    }
++
++    if (!mbim_message_intel_at_tunnel_at_command_response_parse (
++            response,
++            &ret_size,
++            &ret_str,
++            &error)) {
++        g_printerr ("error: couldn't parse response message: %s\n", error->message);
++        shutdown (FALSE);
++        return;
++    }
++
++    g_print ("%.*s\n", ret_size, ret_str);
++
++    shutdown (TRUE);
++}
++
++void
++mbimcli_intel_at_tunnel_run (MbimDevice   *device,
++                             GCancellable  *cancellable)
++{
++    g_autoptr(MbimMessage) request  = NULL;
++    g_autofree gchar       *req_str = NULL;
++    guint32                req_size = 0;
++
++    /* Initialize context */
++    ctx = g_slice_new (Context);
++    ctx->device = g_object_ref (device);
++    ctx->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
++
++    /* Request to send AT command */
++    if (query_at_command_str) {
++        req_str = g_strdup_printf ("%s\r\n", query_at_command_str);
++        req_size = strlen (req_str);
++
++        request = mbim_message_intel_at_tunnel_at_command_set_new (req_size, (const guint8 *)req_str, NULL);
++        mbim_device_command (ctx->device,
++                             request,
++                             10,
++                             ctx->cancellable,
++                             (GAsyncReadyCallback)intel_at_tunnel_at_command_ready,
++                             NULL);
++        return;
++    }
++
++    g_warn_if_reached ();
++}
+diff --git a/src/mbimcli/mbimcli.c b/src/mbimcli/mbimcli.c
+index 8b26263..bf400be 100644
+--- a/src/mbimcli/mbimcli.c
++++ b/src/mbimcli/mbimcli.c
+@@ -375,6 +375,9 @@ device_open_ready (MbimDevice   *dev,
+     case MBIM_SERVICE_COMPAL:
+         mbimcli_compal_run (dev, cancellable);
+         return;
++    case MBIM_SERVICE_INTEL_AT_TUNNEL:
++        mbimcli_intel_at_tunnel_run (dev, cancellable);
++        return;
+ 
+         /* unsupported actions in the CLI */
+     case MBIM_SERVICE_INVALID:
+@@ -535,6 +538,11 @@ parse_actions (void)
+         actions_enabled++;
+     }
+ 
++    if (mbimcli_intel_at_tunnel_options_enabled ()) {
++        service = MBIM_SERVICE_INTEL_AT_TUNNEL;
++        actions_enabled++;
++    }
++
+     /* Noop */
+     if (noop_flag)
+         actions_enabled++;
+@@ -589,6 +597,7 @@ int main (int argc, char **argv)
+     g_option_context_add_group (context, mbimcli_fibocom_get_option_group());
+     g_option_context_add_group (context, mbimcli_sms_get_option_group ());
+     g_option_context_add_group (context, mbimcli_compal_get_option_group ());
++    g_option_context_add_group (context, mbimcli_intel_at_tunnel_get_option_group ());
+ 
+     g_option_context_add_main_entries (context, main_entries, NULL);
+     if (!g_option_context_parse (context, &argc, &argv, &error)) {
+diff --git a/src/mbimcli/mbimcli.h b/src/mbimcli/mbimcli.h
+index 1358405..d596066 100644
+--- a/src/mbimcli/mbimcli.h
++++ b/src/mbimcli/mbimcli.h
+@@ -38,6 +38,7 @@ GOptionGroup *mbimcli_google_get_option_group                      (void);
+ GOptionGroup *mbimcli_fibocom_get_option_group                     (void);
+ GOptionGroup *mbimcli_sms_get_option_group                         (void);
+ GOptionGroup *mbimcli_compal_get_option_group                      (void);
++GOptionGroup *mbimcli_intel_at_tunnel_get_option_group             (void);
+ 
+ gboolean      mbimcli_basic_connect_options_enabled               (void);
+ gboolean      mbimcli_phonebook_options_enabled                   (void);
+@@ -58,6 +59,7 @@ gboolean      mbimcli_google_options_enabled                      (void);
+ gboolean      mbimcli_fibocom_options_enabled                     (void);
+ gboolean      mbimcli_sms_options_enabled                         (void);
+ gboolean      mbimcli_compal_options_enabled                      (void);
++gboolean      mbimcli_intel_at_tunnel_options_enabled             (void);
+ 
+ void          mbimcli_basic_connect_run                 (MbimDevice   *device,
+                                                          GCancellable *cancellable);
+@@ -97,6 +99,8 @@ void          mbimcli_sms_run                           (MbimDevice *device,
+                                                          GCancellable *cancellable);
+ void          mbimcli_compal_run                        (MbimDevice *device,
+                                                          GCancellable *cancellable);
++void          mbimcli_intel_at_tunnel_run               (MbimDevice *device,
++                                                         GCancellable *cancellable);
+ 
+ /* link management */
+ GOptionGroup *mbimcli_link_management_get_option_group (void);
+diff --git a/src/mbimcli/meson.build b/src/mbimcli/meson.build
+index 7228c66..8f2594f 100644
+--- a/src/mbimcli/meson.build
++++ b/src/mbimcli/meson.build
+@@ -9,6 +9,7 @@ mbimcli_sources = files(
+   'mbimcli-dss.c',
+   'mbimcli-fibocom.c',
+   'mbimcli-google.c',
++  'mbimcli-intel-at-tunnel.c',
+   'mbimcli-intel-firmware-update.c',
+   'mbimcli-intel-mutual-authentication.c',
+   'mbimcli-intel-thermal-rf.c',
+-- 
+2.43.0
+
diff -pruN 1.32.0-1/debian/patches/series 1.32.0-1ubuntu1/debian/patches/series
--- 1.32.0-1/debian/patches/series	2025-02-25 13:44:01.000000000 +0000
+++ 1.32.0-1ubuntu1/debian/patches/series	2025-09-02 06:09:18.000000000 +0000
@@ -0,0 +1 @@
+mbimcli-intel-attunnel-new-service-set-at-command.patch
