From 704b8013f15a1d2f7f341126ee141a549e8d0228 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Tue, 15 Jun 2021 11:56:34 +0900 Subject: [PATCH] Dump underlying BPF traffic stats as well as higher-level stats. This provides a better way to tell whether traffic is flowing. Test: manual Bug: 190783768 Change-Id: If557b0a18fc0aea1bf6a65d91547fc1930098ed0 --- .../tethering/BpfCoordinator.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java index 8adcbd9ff9..0ce889886b 100644 --- a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java +++ b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java @@ -773,6 +773,12 @@ public class BpfCoordinator { } pw.decreaseIndent(); + pw.println("BPF stats:"); + pw.increaseIndent(); + dumpBpfStats(pw); + pw.decreaseIndent(); + pw.println(); + pw.println("Forwarding rules:"); pw.increaseIndent(); dumpIpv6UpstreamRules(pw); @@ -800,6 +806,22 @@ public class BpfCoordinator { upstreamIfindex), stats.toString())); } } + private void dumpBpfStats(@NonNull IndentingPrintWriter pw) { + try (BpfMap map = mDeps.getBpfStatsMap()) { + if (map == null) { + pw.println("No BPF stats map"); + return; + } + if (map.isEmpty()) { + pw.println(""); + } + map.forEach((k, v) -> { + pw.println(String.format("%s: %s", k, v)); + }); + } catch (ErrnoException e) { + pw.println("Error dumping BPF stats map: " + e); + } + } private void dumpIpv6ForwardingRules(@NonNull IndentingPrintWriter pw) { if (mIpv6ForwardingRules.size() == 0) {