From 70f43ee58e78edadd644663fbb8d96346769a35f Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Tue, 15 Jun 2021 12:42:53 +0900 Subject: [PATCH] Improve dumping IPv4 map entries. 1. Dump both upstream and downstream rules. 2. Also dump rule last used time. Test: manual Bug: 190783768 Change-Id: I3fffbf4a5dea68e61349de8b41bea49b8a319f86 --- .../tethering/BpfCoordinator.java | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java index 0ce889886b..36a2f10fdd 100644 --- a/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java +++ b/Tethering/src/com/android/networkstack/tethering/BpfCoordinator.java @@ -48,6 +48,7 @@ import android.net.util.InterfaceParams; import android.net.util.SharedLog; import android.net.util.TetheringUtils.ForwardedStats; import android.os.Handler; +import android.os.SystemClock; import android.system.ErrnoException; import android.text.TextUtils; import android.util.Log; @@ -871,7 +872,7 @@ public class BpfCoordinator { } } - private String ipv4RuleToString(Tether4Key key, Tether4Value value) { + private String ipv4RuleToString(long now, Tether4Key key, Tether4Value value) { final String private4, public4, dst4; try { private4 = InetAddress.getByAddress(key.src4).getHostAddress(); @@ -880,29 +881,43 @@ public class BpfCoordinator { } catch (UnknownHostException impossible) { throw new AssertionError("4-byte array not valid IPv4 address!"); } - return String.format("[%s] %d(%s) %s:%d -> %d(%s) %s:%d -> %s:%d", + long ageMs = (now - value.lastUsed) / 1_000_000; + return String.format("[%s] %d(%s) %s:%d -> %d(%s) %s:%d -> %s:%d %dms", key.dstMac, key.iif, getIfName(key.iif), private4, key.srcPort, value.oif, getIfName(value.oif), - public4, value.srcPort, dst4, key.dstPort); + public4, value.srcPort, dst4, key.dstPort, ageMs); + } + + private void dumpIpv4ForwardingRuleMap(long now, BpfMap map, + IndentingPrintWriter pw) throws ErrnoException { + if (map == null) { + pw.println("No IPv4 support"); + return; + } + if (map.isEmpty()) { + pw.println("No rules"); + return; + } + map.forEach((k, v) -> pw.println(ipv4RuleToString(now, k, v))); } private void dumpIpv4ForwardingRules(IndentingPrintWriter pw) { - try (BpfMap map = mDeps.getBpfUpstream4Map()) { - if (map == null) { - pw.println("No IPv4 support"); - return; - } - if (map.isEmpty()) { - pw.println("No IPv4 rules"); - return; - } - pw.println("IPv4: [inDstMac] iif(iface) src -> nat -> dst"); + final long now = SystemClock.elapsedRealtimeNanos(); + + try (BpfMap upstreamMap = mDeps.getBpfUpstream4Map(); + BpfMap downstreamMap = mDeps.getBpfDownstream4Map()) { + pw.println("IPv4 Upstream: [inDstMac] iif(iface) src -> nat -> dst"); pw.increaseIndent(); - map.forEach((k, v) -> pw.println(ipv4RuleToString(k, v))); + dumpIpv4ForwardingRuleMap(now, upstreamMap, pw); + pw.decreaseIndent(); + + pw.println("IPv4 Downstream: [inDstMac] iif(iface) src -> nat -> dst"); + pw.increaseIndent(); + dumpIpv4ForwardingRuleMap(now, downstreamMap, pw); + pw.decreaseIndent(); } catch (ErrnoException e) { pw.println("Error dumping IPv4 map: " + e); } - pw.decreaseIndent(); } /**