Merge "Correctly dump IPv4 downstream flows." am: a8afcd3b0e am: 18e6921d00

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1737399

Change-Id: If26c0f68ed30df42ff8f78a5d83b6961db32d703
This commit is contained in:
Lorenzo Colitti
2021-06-16 11:38:01 +00:00
committed by Automerger Merge Worker

View File

@@ -786,6 +786,7 @@ public class BpfCoordinator {
dumpIpv6ForwardingRules(pw); dumpIpv6ForwardingRules(pw);
dumpIpv4ForwardingRules(pw); dumpIpv4ForwardingRules(pw);
pw.decreaseIndent(); pw.decreaseIndent();
pw.println();
pw.println("Device map:"); pw.println("Device map:");
pw.increaseIndent(); pw.increaseIndent();
@@ -872,24 +873,33 @@ public class BpfCoordinator {
} }
} }
private String ipv4RuleToString(long now, Tether4Key key, Tether4Value value) { private String ipv4RuleToString(long now, boolean downstream,
final String private4, public4, dst4; Tether4Key key, Tether4Value value) {
final String src4, public4, dst4;
final int publicPort;
try { try {
private4 = InetAddress.getByAddress(key.src4).getHostAddress(); src4 = InetAddress.getByAddress(key.src4).getHostAddress();
dst4 = InetAddress.getByAddress(key.dst4).getHostAddress(); if (downstream) {
public4 = InetAddress.getByAddress(value.src46).getHostAddress(); public4 = InetAddress.getByAddress(key.dst4).getHostAddress();
publicPort = key.dstPort;
} else {
public4 = InetAddress.getByAddress(value.src46).getHostAddress();
publicPort = value.srcPort;
}
dst4 = InetAddress.getByAddress(value.dst46).getHostAddress();
} catch (UnknownHostException impossible) { } catch (UnknownHostException impossible) {
throw new AssertionError("4-byte array not valid IPv4 address!"); throw new AssertionError("IP address array not valid IPv4 address!");
} }
long ageMs = (now - value.lastUsed) / 1_000_000;
return String.format("[%s] %d(%s) %s:%d -> %d(%s) %s:%d -> %s:%d %dms", final long ageMs = (now - value.lastUsed) / 1_000_000;
key.dstMac, key.iif, getIfName(key.iif), private4, key.srcPort, return String.format("[%s] %d(%s) %s:%d -> %d(%s) %s:%d -> %s:%d [%s] %dms",
key.dstMac, key.iif, getIfName(key.iif), src4, key.srcPort,
value.oif, getIfName(value.oif), value.oif, getIfName(value.oif),
public4, value.srcPort, dst4, key.dstPort, ageMs); public4, publicPort, dst4, value.dstPort, value.ethDstMac, ageMs);
} }
private void dumpIpv4ForwardingRuleMap(long now, BpfMap<Tether4Key, Tether4Value> map, private void dumpIpv4ForwardingRuleMap(long now, boolean downstream,
IndentingPrintWriter pw) throws ErrnoException { BpfMap<Tether4Key, Tether4Value> map, IndentingPrintWriter pw) throws ErrnoException {
if (map == null) { if (map == null) {
pw.println("No IPv4 support"); pw.println("No IPv4 support");
return; return;
@@ -898,7 +908,7 @@ public class BpfCoordinator {
pw.println("No rules"); pw.println("No rules");
return; return;
} }
map.forEach((k, v) -> pw.println(ipv4RuleToString(now, k, v))); map.forEach((k, v) -> pw.println(ipv4RuleToString(now, downstream, k, v)));
} }
private void dumpIpv4ForwardingRules(IndentingPrintWriter pw) { private void dumpIpv4ForwardingRules(IndentingPrintWriter pw) {
@@ -906,14 +916,14 @@ public class BpfCoordinator {
try (BpfMap<Tether4Key, Tether4Value> upstreamMap = mDeps.getBpfUpstream4Map(); try (BpfMap<Tether4Key, Tether4Value> upstreamMap = mDeps.getBpfUpstream4Map();
BpfMap<Tether4Key, Tether4Value> downstreamMap = mDeps.getBpfDownstream4Map()) { BpfMap<Tether4Key, Tether4Value> downstreamMap = mDeps.getBpfDownstream4Map()) {
pw.println("IPv4 Upstream: [inDstMac] iif(iface) src -> nat -> dst"); pw.println("IPv4 Upstream: [inDstMac] iif(iface) src -> nat -> dst [outDstMac] age");
pw.increaseIndent(); pw.increaseIndent();
dumpIpv4ForwardingRuleMap(now, upstreamMap, pw); dumpIpv4ForwardingRuleMap(now, UPSTREAM, upstreamMap, pw);
pw.decreaseIndent(); pw.decreaseIndent();
pw.println("IPv4 Downstream: [inDstMac] iif(iface) src -> nat -> dst"); pw.println("IPv4 Downstream: [inDstMac] iif(iface) src -> nat -> dst [outDstMac] age");
pw.increaseIndent(); pw.increaseIndent();
dumpIpv4ForwardingRuleMap(now, downstreamMap, pw); dumpIpv4ForwardingRuleMap(now, DOWNSTREAM, downstreamMap, pw);
pw.decreaseIndent(); pw.decreaseIndent();
} catch (ErrnoException e) { } catch (ErrnoException e) {
pw.println("Error dumping IPv4 map: " + e); pw.println("Error dumping IPv4 map: " + e);