Fuchsia F28 release notes

Date: October 9, 2025

Version: F28

The following changes have been implemented:

Audio

The following updates have been made for Audio:

  • Modernized the audio_recording service with a new FIDL API that uses Zircon Sockets for host-driven testing and refactored it for improved reliability and simplicity.
  • Enhanced test coverage for the audio driver signalprocessing protocol. This includes adding comprehensive validation for topologies, elements, and state management, and updating the virtual audio test driver to facilitate these more rigorous tests.
  • Improved the ffx audio developer tool with a more robust play command, data-path tracing for diagnostics, and more intuitive output for the device info command.
  • Improved the reliability of audio_driver_admin_tests by adding delays after test cases to mitigate intermittent ZX_ERR_ALREADY_BOUND failures.
  • Updated audio driver tests to validate that drivers supporting stereo-only DaiFrameFormats (e.g., I2S) correctly advertise stereo-only support.

Bluetooth

The following updates have been made for Bluetooth:

  • Significant improvements to Hands-Free Profile (HFP) Hands Free role
  • Improved RFCOMM stability and performance by implementing a backpressure mechanism, separating the RX/TX datapaths, and optimizing credit watermark levels to prevent packet loss in high-throughput scenarios.
  • Introduced a new testing affordance library and a bt-affordances-server component, allowing Bluetooth control via ffx bluetooth.
  • Refactored Bluetooth host initialization to dynamically offer HCI drivers to specific bt-host components instead of exposing a shared device directory, improving security and flexibility.
  • Added a new FIDL API to allow clients to synchronize with an LE periodic advertising train.
  • Enable low power mode on supported Broadcom controllers at startup to reduce overall power consumption.
  • Speed up A2DP source integration tests by allowing for more parallel test execution.
  • Fixed and enabled previously disabled AT command tests to ensure they run as part of continuous integration checks.
  • Corrected the behavior of WatchState in the test HostServer to function properly as a Hanging Get, improving GAP test reliability.
  • Enabled the bt-snoop-from-snapshot tool to process from Starnix bugreports

Build

The following updates have been made for Build:

  • Build the Fuchsia IDK (Integratable Developer Kit) using Bazel instead of GN, a major milestone in the build system migration. This change includes removing legacy meta.json generation scripts and adding new validation for SDK atom categories, API areas, and header files.
  • Fixed a critical bug that broke incremental Bazel builds by correcting how Clang toolchain version files are tracked.
  • Improved Remote Build Execution (RBE) performance by directing multi-threaded Rust and C++ ThinLTO link jobs to larger workers and improving cache hits.
  • Improved build performance for products by performing image assembly and product bundle creation in a single, streamlined action.
  • Updated the build regenerator to print timings for slow steps to help identify performance regressions, and fixed a bug that caused unnecessary regeneration on every build.
  • Enabled frame pointers for RISC-V builds, and now correctly use the atomic ('A') ISA extension during LTO builds.

Cobalt

The following updates have been made for Cobalt:

  • Simplified channel setting logic by replacing the SetSoftwareDistributionInfo function with the more direct SetChannel.
  • Introduced cookie bucket support to the report definition for computing confidence intervals. This change also clarifies naming by renaming COOKIE_BUCKET_ID to COOKIE_BUCKET.

Component Framework

The following updates have been made for Component Framework:

  • Added a new built-in dispatcher component that can dynamically launch worker components in response to capability requests.
  • Added a GetChildOutput function to the fuchsia.component.Realm protocol, allowing a parent to access a child's output dictionary using bedrock APIs.
  • Reduced memory usage significantly in component_manager through optimizations like more efficient data representations for monikers, lazy object instantiation, and on-demand request generation.
  • Enhanced developer tooling and observability. The ffx component doctor command can now inspect dictionary contents, heapdump instrumentation can be enabled for components, and component instance IDs are now exposed via Inspect.
  • Fixed a crash that occurred when a component exposed two capabilities with the same target name to different sources, such as parent and framework.
  • Marked VMOs created from bootfs as non-resizable, improving efficiency and preventing mapping failures.
  • Made the fuchsia.time.UtcClock memory-mappable for more efficient clock reads from performance-sensitive components like Starnix.
  • Updated Component Manager's sandbox implementation to use the modern fuchsia.io/Directory.Open method, improving compatibility with the latest fuchsia.io servers.
  • Merged the full-resolver component into pkg-resolver. This merge reduces the memory footprint on eng builds by removing a component from the core set.

Diagnostics

The following updates have been made for Diagnostics:

  • Improved Archivist's reliability and performance with a new panic hook, a more efficient IOBuffer for its internal log buffer, and by moving serial log writes to a dedicated thread to prevent blocking.
  • Implemented a new Flush method for the logging service to guarantee that all buffered logs are written, which also resolves a potential termination issue in Archivist.
  • Made reading Inspect data more robust against unresponsive components. Timeouts are now applied to individual FIDL connections for lazy nodes, preventing a single slow node from blocking the entire snapshot.

Display

The following updates have been made for Display:

  • Migrated the ti-lp8556 and vim3-pwm-backlight drivers to DFv2, replacing devfs nodes with advertised FIDL services for improved component interaction.
  • Improved the stability of the Display Coordinator by unifying its threading model, ensuring synchronous client teardown to prevent use-after-free errors, and fixing an image cleanup race condition.
  • Advanced the migration from Banjo to FIDL for the display driver interface by introducing several FIDL adapters (EngineListener, DisplayEngine) and a unified EngineListener interface to abstract the underlying protocol.
  • Simplified the display FIDL and Banjo APIs by renaming ambiguous types (such as DisplayMode to DisplayTiming), removing the redundant BufferId struct, and streamlining the CheckConfig() method.
  • Enhanced VSync handling by requiring valid configuration stamps for all VSync events across all display drivers and removing the unused ability for clients to opt-out of VSyncs after enabling them.
  • Strengthened configuration validation by rejecting empty configurations, enforcing the driver-declared max_layer_count, and adding support for specifying a display_destination for color layers.
  • Improved developer experience by adding std::format support to numerous display API types and modernizing the internal api-types C++ library with better type safety and conversion patterns.

Driver Framework

The following updates have been made for Driver Framework:

  • Continued migration away from DFv1 by removing numerous deprecated DDK functions and metadata IDs. This includes the removal of device_add_metadata, configure_auto_suspend, and legacy metadata constants like DEVICE_METADATA_WIFI_CONFIG.
  • Fixed an issue with driver node stability, by ensuring driver nodes are properly quarantined when a driver host closes unexpectedly.
  • Continued the migration of drivers to DFv2, including aml-pwm, aml-nna, and aml-meson-power. The i2c-channel library was also updated with a DFv2-compatible version to support modern drivers.
  • Enabled driver components to implement a new Suspendable trait to add optional suspend and resume lifecycle hooks.
  • Streamlined the ffx driver plugin by removing several deprecated subcommands, including device, lspci, lsusb, and run-tool, and adding a new node subcommand with improved ergonomics.
  • Enhanced the Rust driver ecosystem with a new PlatformDevice trait to improve testing with fake platform devices and a helper method for parsing driver configuration from start arguments and a mock-mmio crate to support mocking MMIO operations.
  • Enabled the driver host to detect and mitigate stalled threads by proactively spawning new ones to ensure forward progress and aligning stall timer checks with the actual stall duration.
  • Fixed an issue in the platform bus driver where default IRQ modes were not configured correctly, which could cause level-triggered interrupts to fail.
  • Introduced a new core driver and FIDL library for interconnects. This system manages and aggregates bandwidth requests from multiple clients to a single vendor driver, simplifying hardware interaction.

Feedback

The following updates have been made for Feedback:

  • Products can now exclude specific annotations from snapshots via a configuration file. This reduces irrelevant data and avoids collection errors for unavailable annotations.
  • Added several new annotations for improved diagnostics, including device.total-suspended-time, system.last-reboot.total-suspended-time, system.last-reboot.runtime, and build.platform.utc-backstop.
  • Enhanced the crash_reporter FIDL API with a weight parameter, allowing a single crash report to represent multiple occurrences.
  • Reverted the switch from JSON to FXT format for fetching logs to resolve a performance issue.
  • Improved diagnostics by adding a timestamp to the system log recorder's shutdown message and logging when a report is temporarily stored due to insufficient cache space.
  • Added a new configuration option for sysinfo_feedback_id.
  • Fixed an issue where the incorrect reboot reason was reported to Cobalt.
  • Updated Feedback to check against current annotation counts instead of legacy ones.
  • Refactored redactor tests to improve clarity and maintainability.

FIDL

The following updates have been made for FIDL:

  • Optimized C++ FIDL code generation to improve build times by moving generated function bodies out of headers and into a single source file. This change results in significant compilation speedups for C++ targets.
  • Expanded the ABI compatibility checker to run against all categories of SDK FIDL libraries, improving API stability guarantees.

Firmware

The following updates have been made for Firmware:

  • Implemented a standard mechanism for passing bootloader files. Bootloader files, such as SSH keys, can now be passed to Fuchsia using the /chosen/google/bootloader-files devicetree node. A related fix ensures the scratch buffer for these files is properly aligned.

GPU and Graphics

The following updates have been made for GPU and Graphics:

  • Introduced a trusted path for GPU clients, allowing trusted components like Scenic to request higher GPU scheduling priorities. This includes a new fuchsia.vulkan.loader.TrustedService, a trusted Magma FIDL protocol, and a new magma_enumerate_devices API to simplify device discovery.
  • Added support for a STRAIGHT_ALPHA blend mode across the graphics stack, allowing rendering of source pixels that have not been premultiplied with alpha. This includes a new BlendMode2 in Flatland and updates to the Vulkan command buffer pipeline.
  • Improved power management for GPU drivers by migrating the msd-arm-mali driver to the ElementRunner protocol and creating a generic power manager in the Magma sys_driver for handling power state requests.
  • Added support for an immediate presentation mode to the Vulkan swapchain, which is useful for benchmarking by allowing clients to push frames as fast as they are rendered.
  • Updated the prebuilt Arm Mali ICDs to incorporate various improvements, including support for the VK_FORMAT_A2B10G10R10_UNORM_PACK32 format and other stability fixes.
  • Improved stability of the msd-arm-mali driver by fixing a use-after-free bug and adding logic to proactively cancel client connections that repeatedly cause hardware errors.
  • Migrated the Magma driver test to use the standard driver test fixture and fdf::AddOwnedChild(), making tests easier to write and read.

I18n

The following updates have been made for I18n:

  • Updated the localization export for Fuchsia.

IOT, Matter, and Thread

The following updates have been made for IoT, Matter, and Thread:

  • Landed lowpan ePSKc (Enhanced Pre-Shared Key for Commissioning) changed, including updating OpenThread dependencies, adding Rust bindings, and integrating with the FeatureConfig service. Feature won’t be enabled for F28.
  • Updated the LoWPAN radio platform to handle OpenThread state changes and enabled CSL (Coordinated Sampled Listening) transmitter functionality.
  • Improved the reliability of the LoWPAN border agent by implementing a retry mechanism for publishing its service upon failure.
  • Improved security by making fake directory files in Weave read-only.

Kernel

The following updates have been made for Kernel:

  • Enhanced CPU suspend and resume on ARM64. Introduced support for CPU suspend by integrating with the PSCI CPU_SUSPEND interface, and adding suspend/resume hooks for the GICv3 interrupt controller and platform timers. To improve diagnostics, introduced a new API to report system wake sources.
  • Introduced a more efficient compressed page storage system. Replaced the VmTriPageStorage implementation with a new slot-based system that significantly reduces memory storage overhead from ~24% to ~5%.

Netstack

The following updates have been made for Netstack:

  • Implemented Duplicate Address Detection (DAD) for IPv4. The DHCP client now uses this feature to prevent IP conflicts for newly acquired addresses.
  • Introduced the fuchsia.net.settings FIDL API to dynamically configure network settings, such as interface defaults and socket buffer sizes.
  • Enabled eBPF filter support for ingress and egress packets in Netstack3, allowing for advanced packet inspection and manipulation.
  • Made the socket-proxy component critical, causing the device to reboot upon termination to ensure socket availability and system stability.
  • Added FIDL support for managing interface-local route tables, enabling more granular routing control.
  • Implemented an orderly shutdown path in Netstack3 to ensure components terminate cleanly and reliably.
  • Introduced dynamic serializers for non-critical transport protocols in Netstack3, significantly reducing compilation times and binary size.
  • Enabled Netcfg support for json5 configuration files, improving readability and maintainability with features like comments and trailing commas.
  • Prevented Netstack3 from forwarding IPv6 packets with link-local addresses, conforming to RFC 4291.
  • Corrected a bug in TCP window size calculation that could cause panics with large window sizes.
  • Fixed a race condition that could cause a panic when rapidly stopping and starting Duplicate Address Detection.
  • Enhanced the Netlink subsystem to support unmanaged, interface-local route tables. It now also aligns more closely with Linux behavior by no longer installing /0 and /32 subnet routes when an IP address is added.

Platform Drivers

The following updates have been made for Platform Drivers:

  • Refactored the DWC3 USB driver significantly to a single-threaded model to simplify locking and received fixes for endpoint state tracking. Added support for regulator binding and voting on interconnect resources.
  • Introduced a new core interconnect driver to manage and aggregate bus bandwidth requests. Also improved Devicetree visitors for clocks and interrupts for more robust hardware discovery and to support wake-capable interrupts.

Power Management

The following updates have been made for Power Management:

  • Migrated multiple power drivers and components to use the ElementRunner protocol, which inverts the client/server relationship with Power Broker for more straightforward power level management. This includes UFS, msd-arm-mali, aml-sdmmc, sdmmc, and timekeeper components.
  • Enhanced power management and suspend capabilities, with a new API to report system wake sources, support for deeper power-saving states via PSCI, and finer-grained CPU power control. For improved diagnostics, the system activity governor now tracks cumulative suspend time.
  • Improved the SDMMC driver for better power management and suspend/resume handling. It now sends power-off notifications, correctly probes eMMC devices and resets bus settings on resume, and the aml-sdmmc driver was migrated to the ElementRunner power management protocol.
  • Refactored the driver power management library for wake leases significantly for improved clarity, correctness, and ease of use. This included renaming classes, clarifying responsibilities between manual and timeout-based leases, and fixing bugs related to lease invalidation across suspend/resume cycles.
  • Enhanced power management observability and diagnostics by adding more data to Inspect. This includes historical temperature sensor readings, the source of Starnix wake locks and active epoll counts, and boot/monotonic clock skew for FSH drivers.
  • Introduced a new poweroff_for_shutdown configuration to allow Power Manager to power off the device during the shutdown process, instead of rebooting.
  • Made storage power management depend on the fuchsia::suspending_token to prevent the device from entering a non-suspendable state.

Rust

The following updates have been made for Rust:

  • Made major enhancements to fuchsia-async, including a new builder pattern for creating executors, support for cooperative cancellation in Scope, and an OnInterrupt stream for handling hardware interrupts. Renamed task cancellation methods from cancel() to abort() to align with the new cancellation semantics.
  • Enhanced tooling: fx clippy now accepts glob patterns and additional flags, and host-side Rust tests produce symbolized backtraces on failure for easier debugging.

Software Delivery

The following updates have been made for Software Delivery:

  • Enabled a new "packageless" Over-the-Air (OTA) update flow. The system updater can now fetch a manifest from an HTTP/S URL to download, stage, and commit an update, removing the need for a traditional update package.
  • Added the ABI revision to the package manifest and assembled_system.json to make it easier to identify which ABI revisions are used by which packages.
  • Optimized pkg-cache memory usage by over 690 KiB. This was achieved by switching to more memory-efficient internal data structures and avoiding unnecessary data copies.
  • Introduced new APIs for more direct control over blobs. The pkg-cache and pkg-resolver components now have new APIs (RetainedBlobs, WriteBlobs, FetchBlob) for more direct control over blob fetching and garbage collection.

Starnix

The following updates have been made for Starnix:

  • Introduced throttling for crash reporting to reduce system load from crash-looping processes. If a process crashes more than 8 times in 8 minutes, subsequent reports will be throttled.
  • Added support for the io_cancel syscall, enabling asynchronous I/O cancellation.
  • Enforced the noexec mount option for get-memory and mmap on a FileObject.
  • Implemented the CAP_DAC_READ_SEARCH capability for FsNode access checks
  • Strengthened SELinux enforcement by implementing permission checks for numerous operations, including signal inheritance (siginh), filesystem mounting (mounton), and various socket and binder operations.
  • Corrected permission checks for syslog-related operations (/dev/kmsg, /proc/kmsg, syslog(2)) to align with modern Linux behavior.
  • Enabled VMO optimization for private anonymous memory. Also fixed smaps generation to support this feature, improving memory efficiency.
  • Improved performance and memory usage through several changes, including enabling Link-Time Optimization (LTO), reducing the size of the internal Mapping struct, and adding a clean_stack function to de-commit unused stack pages.
  • Updated the devpts filesystem to support multiple independent instances, each with its own set of pseudo-terminals, using the newinstance mount option.
  • Aligned the system uptime reported in /proc/uptime with Linux behavior by basing it on the boot timeline, which includes time spent in suspend.
  • Enhanced eBPF support with several new features, including 32-bit memory operations, UDP send/recv hooks, socket option hooks, and several new helper functions.
  • Fixed an uncommon issue with binder dead replies where they could be processed out of order, causing the wrong transaction to be popped from the stack.
  • Optimized Remote Binder communication by gathering all writes to be returned in a single ioctl call, reducing FIDL traffic.
  • Updated task priority and niceness handling to better align with Linux behavior, including proper RLIMIT_RTPRIO enforcement, which now defaults to zero.
  • Added new modules for fastrpc and dmaheap to provide cross-processor RPC functionality to Starnix applications.

Storage

The following updates have been made for Storage:

  • storage-host improvements. This effort includes checking the data volume with fsck before mounting, adding support for shredding encrypted volumes during factory reset, and moving core storage drivers into assembly bundles to reduce image size.
  • Enabled Fshost to support matching and routing block devices using semantic labels. This allows specific partitions to be statically routed to components, replacing the need for direct /dev/class/block access.
  • Made several performance and reliability improvements to fxfs, including dynamic read-ahead sizing based on memory pressure, more efficient flushing logic, and ensuring I/O barriers are issued correctly.
  • Added new capabilities to fxfs, including support for overwriting existing blobs via the BlobCreator protocol and initial support for streaming a blob volume to disk.
  • Migrated the C++ VFS and storage conformance tests to the modern fuchsia.io (io2) API, deprecating legacy io1 methods.
  • Improved F2FS with initial support for running on FVM, an image-based compatibility test with Linux, and an increase in the default minimum filesystem size.
  • Enhanced the block layer and associated drivers. This includes re-enabling passthrough I/O, adding support for I/O barriers in the block protocol and ramdisk driver, and migrating UFS power management to ElementRunner.
  • Added basic support for the 64bit flag to the read-only ext4 driver, enabling it to mount filesystems with larger block group descriptors.

Testing

The following updates have been made for Testing:

  • Made numerous enhancements to the Honeydew end-to-end testing framework, including a UsbPowerHub device for controlling USB power, a renamed powerserver library for power measurement, new audio and scenic affordances, improved session cleanup mechanisms, and re-enabling screenshot assertions after fixing sources of flakiness.
  • Made multiple improvements to debugger end-to-end tests to enhance stability, including better command-output synchronization, support for out-of-order output matching, additional logging, and the temporary disabling of DebugAgent integration to reduce log spam.
  • Added a new Lacewing end-to-end test to verify that a device reboots with the expected reason when instructed to do so.
  • Added new IPC benchmarks to compare different methods of transmitting large messages, including a specific benchmark for BatchStream.

Timekeeping

The following updates have been made for Timekeeping:

  • Introduced wake alarm emulation to provide a consistent fuchsia.time.alarms API on platforms lacking hardware support.
  • Added the WakeAlarms.Set() API, which uses a listener pattern as an alternative to SetAndWait, to better support escrowable components scheduling wakeups.
  • Updated Timekeeper to use the network reachability service to avoid attempting to sync time when there is no network connectivity, reducing power consumption.
  • Updated the fuchsia.time.alarms.Wake API by modifying the SetAndWait signature to improve wake lease management and removing the unused GetProperties and CancelSync methods.
  • Improved the robustness of time and alarm services by fixing a potential timer comparison overflow, ensuring Timekeeper waits for hrtimer enumeration, and preventing startup failures from duplicate clock IDs.
  • Enabled sourcing the boot time from a powered peripheral, allowing time to persist across reboots.
  • Migrated Timekeeper to the new ElementRunner protocol for improved power management integration.

Toolchain

The following updates have been made for Toolchain:

Tools

The following updates have been made for Tools:

ffx

The following updates have been made for ffx:

  • Enabled a new direct connection mode with the -d or --direct flag, allowing many commands to connect to a target without a daemon. This includes improved behavior for ffx target list and proper error handling for daemon-specific commands.
  • Added a new ffx wm tool for managing windows, with subcommands to list, focus, cycle, and set_order windows.
  • Updated the ffx target flash command to display a progress indicator, and added a new --upload option to ffx target snapshot to upload the snapshot to a GCS bucket.
  • Removed legacy methods for managing default targets, deprecating the ffx target default {set, unset} commands and the fx -d flag.
  • Fixed several stability issues, including a potential deadlock with concurrent SSH connections and a timeout when waiting for a remote control proxy.
  • Removed the ffx agis command.

fx

The following updates have been made for fx:

  • Enhanced the set-main-pb tool for managing product bundles with a text-based user interface (TUI) for easier selection and now sorts the bundle list alphabetically.
  • Enabled fx to provide helpful suggestions for mistyped commands.
  • Added new command-line flags, including --quiet for fx build, a compression level flag (-c) for fx create-pb-zip, and an option to skip SSH key patching in fx qemu.
  • Made the fx environment more reliable, using a prebuilt version of jq and fixing authentication issues with fx rbe auth.
  • Removed the deprecated --with-base flag for fx create.
  • Improved the developer workflow with automatic port forwarding in fx serve and a shared library to deduplicate URL fetching logic across packaging tools.

zxdb

The following updates have been made for zxdb:

  • Improved the zxdb debugger with PrettyType support for std::span and a fix for the display command to respect the configured integer format.

Tracing

The following updates have been made for Tracing:

  • Optimized the ktrace_provider significantly for streaming mode, featuring reduced latency, more consistent polling, faster startup, and more efficient kernel buffer reads to improve trace data reliability.
  • Enabled on-device buffering for streaming traces via ffx trace, allowing data transfer at the end of the session to reduce CPU overhead during collection.
  • Added a new blob argument type to the FXT trace format for embedding opaque data. A new fxtdump host tool is also available for inspecting and debugging FXT files.
  • Optimized the trace2json tool to use significantly less memory and run up to 40% faster by adopting a two-pass reading approach and a buffered output stream.
  • Improved Rust tracing performance by enabling argument interning to reduce trace size and by optimizing lock usage to decrease write times for ATrace events.
  • Updated the trace engine to use a new, more correct, and testable rolling buffer implementation to fix race conditions.

UI

The following updates have been made for UI:

  • Made significant improvements to Scenic's performance and diagnostics. This includes new tracing tools (scenic_session_present, run_graphics_metrics), better diagnostics for direct-to-display failures, fixes to frame prediction logic, and performance improvements from increasing Escher's cleanup interval.
  • Added support for new Vulkan image formats. Scenic now supports A2B10G10R10UnormPack32 and R8Unorm.
  • Added a frame counter overlay to Flatland for visual debugging. It can be enabled through component configuration or by setting the visual_debugging_level.
  • Increased the maximum number of hardware display layers supported by Scenic from one to the hardware-supported limit, as previous software limitations have been resolved.
  • Fixed deadlocks in the Escher external semaphore test by signaling from a background thread, improving test reliability on Lavapipe and Goldfish.

Video

The following updates have been made for Video:

  • Removed dependency on deprecated ulib/syslog.

WLAN and Connectivity

The following updates have been made for WLAN and Connectivity:

  • Made major improvements to the WLAN PHY reset and recovery mechanism, which now allows wlancfg to trigger a reset when the system is in a degraded state, improving overall stability.
  • Introduced support for powering the WLAN PHY down and up. This includes new FIDL methods for power management and ensuring the driver is correctly re-initialized after a power-up.
  • Enabled netcfg to report network status to socket-proxy, including default network changes and DNS configuration, via the new fuchsia.net.policy.properties FIDL API.
  • Improved connection stability for Broadcom Wi-Fi drivers by using the correct channel bandwidth to reduce NO_NETWORK failures and using more effective deauthentication commands to clear connection state after a failure.
  • Fixed a bug preventing Wi-Fi scanning from working in busy environments. Scan results are now sent in a VMO to avoid hitting FIDL message size limits.
  • Made WLAN roaming more reliable by filtering potential roam targets to ensure compatible security protection and by fixing a bug that prevented roaming to WPA1/WPA2 mixed-mode networks.
  • Enhanced WLAN telemetry significantly to log more detailed metrics for disconnect reasons, scan performance, connection duration, RX/TX statistics, and recovery events.