How to Inspect Tethering States and Hotspot Clients on Android Using ADB dumpsys tethering

Android provides versatile network sharing capabilities—enabling handsets to act as portable Wi-Fi hotspots (SoftAP), USB network adapters (RNDIS/NCM), and Bluetooth Personal Area Network (PAN) gateways. Behind the simple settings toggle lies the Tethering subsystem (TetheringService / TetheringManager), which coordinates network interface binding, DHCP IP assignment, Netfilter NAT packet forwarding, upstream cellular backhaul routing, and carrier entitlement checks. When diagnosing hotspot disconnection loops, carrier tethering blocks, IP address exhaustion, or unexpected client disconnections, Android Debug Bridge (ADB) allows developers and network engineers to inspect internal tethering topology using dumpsys tethering.

Architecture of the Android Tethering Subsystem

The Android tethering stack operates across multiple system layers:

  • Downstream Interfaces: Local network interfaces created on the handset to serve connected clients:
    • wlan0 / wlan1 / ap0: Wi-Fi SoftAP access point interface.
    • rndis0 / ncm0: USB Ethernet emulation interface.
    • bt-pan: Bluetooth network encapsulation daemon.
    • eth0: External USB-C to RJ-45 Ethernet tethering adapter.
  • Upstream Interfaces: The active wide-area network connection providing internet connectivity (e.g. rmnet_data0 for cellular data or wlan0 for Wi-Fi bridge).
  • Offload Hardware Engine: Hardware packet acceleration (e.g. Qualcomm IPA or BPF offload) that routes packets directly between modems and Wi-Fi chips, bypassing main CPU wakeups.
  • Entitlement Check: Carrier-provisioned checks that verify whether mobile subscription plans permit network sharing.

Dumping Tethering State via ADB

With an Android device connected and USB debugging authorised, query the tethering subsystem from your terminal:

adb shell dumpsys tethering

The output provides an extensive report detailing active tethering modes, downstream client tables, upstream selection logic, and configuration limits.

Inspecting Downstream Interfaces and Active Tethering Modes

In the command output, locate the interface tracking section:

Tethering:
  mTrackedInterfaces:
    wlan0: [TETHERING_WIFI]
    rndis0: [TETHERING_USB]
  mTetherStates:
    wlan0: STATE_TETHERED
    rndis0: STATE_AVAILABLE

Operational states include:

  • STATE_AVAILABLE: The hardware interface is detected and capable of network sharing, but tethering is currently switched off.
  • STATE_TETHERED: The interface is actively serving clients, running a DHCP daemon, and routing packets via NAT.
  • STATE_ERROR: An interface failure occurred (such as driver crash or failure to obtain an IP lease).

Auditing Active Hotspot Clients and DHCP Leases

When external devices (such as laptops or tablets) connect to your Android Wi-Fi hotspot, dumpsys tethering records connected client MAC addresses and allocated IP addresses:

adb shell dumpsys tethering | grep -A 10 "Connected clients"

Examine the client lease records:

Connected clients:
  ClientInfo{hostname='ThinkPad-X1', macAddress='18:65:90:3d:12:4a', ipAddress='192.168.43.15', tetheringType=WIFI}
  ClientInfo{hostname='iPad-Pro', macAddress='34:a3:95:81:cd:20', ipAddress='192.168.43.42', tetheringType=WIFI}

This allows network engineers to verify whether connecting clients obtain valid IPv4/IPv6 leases within the local 192.168.43.0/24 subnet.

Inspecting Upstream Network Routing and Offload Status

Tethering requires routing packets from local clients to the primary cellular interface. Review the upstream selection records in the dump:

adb shell dumpsys tethering | grep -A 8 "UpstreamNetworkMonitor"

Verify that:

  • Current upstream: Network{105} / rmnet_data0: Confirms that cellular data is actively bound as the internet gateway.
  • Hardware Offload: ENABLED: Confirms that low-power modem-to-Wi-Fi hardware packet forwarding is active, saving battery life. If hardware offload is FAILED or DISABLED, CPU usage and thermals will increase during heavy downloads.

Testing USB and Wi-Fi Tethering via ADB Commands

You can toggle tethering modes programmatically using the cmd connectivity utility directly from ADB:

# Start USB tethering
adb shell svc usb setFunctions rndis

# Start Wi-Fi hotspot (SoftAP)
adb shell cmd wifi start-softap MyHotspot wpa2 "SecurePassword123"

# Stop Wi-Fi hotspot
adb shell cmd wifi stop-softap

Bypassing Carrier Tethering Entitlement Checks for Testing

Some cellular carriers enforce carrier entitlement checks (DUN / Dial-Up Networking APN restrictions) that disable the hotspot toggle. In developer environments, you can override entitlement requirements via ADB global settings:

# Disable carrier provisioning entitlement check
adb shell settings put global tether_dun_required 0

# Allow tethering without provisioning app validation
adb shell settings put global tether_supported 1

Restart the networking stack to apply the override:

adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

Troubleshooting Tethering Errors in Logcat

If connected devices report “Connected, no internet” or the hotspot immediately switches off after activation, capture tethering lifecycle events:

adb logcat -d -s Tethering:V TetheringService:V IpServer:V

Look for common error codes such as TETHER_ERROR_NO_ERROR, TETHER_ERROR_PROVISIONING_FAILED, or TETHER_ERROR_TETHER_IFACE_ERROR to identify DNS forwarding failures or missing NAT rules.

Querying dumpsys tethering provides complete transparency into Android’s routing, DHCP allocation, and hardware offload status, streamlining hotspot diagnostics across connected devices.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.