Merge "Add L2~L4 information to packet wakeup logs and metrics"

am: 6ee20ca7d3

Change-Id: I8fea75c477d4b5fbbded7dee2dff8644c6f97241
This commit is contained in:
Hugo Benichi
2017-11-13 04:06:11 +00:00
committed by android-build-merger
8 changed files with 295 additions and 92 deletions

View File

@@ -16,6 +16,10 @@
package android.net.metrics;
import android.net.MacAddress;
import java.util.StringJoiner;
/**
* An event logged when NFLOG notifies userspace of a wakeup packet for
* watched interfaces.
@@ -23,12 +27,35 @@ package android.net.metrics;
*/
public class WakeupEvent {
public String iface;
public long timestampMs;
public int uid;
public int ethertype;
public byte[] dstHwAddr;
public String srcIp;
public String dstIp;
public int ipNextHeader;
public int srcPort;
public int dstPort;
public long timestampMs;
@Override
public String toString() {
return String.format("WakeupEvent(%tT.%tL, %s, uid: %d)",
timestampMs, timestampMs, iface, uid);
StringJoiner j = new StringJoiner(", ", "WakeupEvent(", ")");
j.add(String.format("%tT.%tL", timestampMs, timestampMs));
j.add(iface);
j.add("uid: " + Integer.toString(uid));
j.add("eth=0x" + Integer.toHexString(ethertype));
j.add("dstHw=" + MacAddress.stringAddrFromByteAddr(dstHwAddr));
if (ipNextHeader > 0) {
j.add("ipNxtHdr=" + ipNextHeader);
j.add("srcIp=" + srcIp);
j.add("dstIp=" + dstIp);
if (srcPort > -1) {
j.add("srcPort=" + srcPort);
}
if (dstPort > -1) {
j.add("dstPort=" + dstPort);
}
}
return j.toString();
}
}

View File

@@ -16,8 +16,12 @@
package android.net.metrics;
import android.net.MacAddress;
import android.os.Process;
import android.os.SystemClock;
import android.util.SparseIntArray;
import java.util.StringJoiner;
/**
* An event logged per interface and that aggregates WakeupEvents for that interface.
@@ -38,6 +42,13 @@ public class WakeupStats {
public long noUidWakeups = 0;
public long durationSec = 0;
public long l2UnicastCount = 0;
public long l2MulticastCount = 0;
public long l2BroadcastCount = 0;
public final SparseIntArray ethertypes = new SparseIntArray();
public final SparseIntArray ipNextHeaders = new SparseIntArray();
public WakeupStats(String iface) {
this.iface = iface;
}
@@ -68,20 +79,56 @@ public class WakeupStats {
}
break;
}
switch (MacAddress.macAddressType(ev.dstHwAddr)) {
case UNICAST:
l2UnicastCount++;
break;
case MULTICAST:
l2MulticastCount++;
break;
case BROADCAST:
l2BroadcastCount++;
break;
default:
break;
}
increment(ethertypes, ev.ethertype);
if (ev.ipNextHeader >= 0) {
increment(ipNextHeaders, ev.ipNextHeader);
}
}
@Override
public String toString() {
updateDuration();
return new StringBuilder()
.append("WakeupStats(").append(iface)
.append(", total: ").append(totalWakeups)
.append(", root: ").append(rootWakeups)
.append(", system: ").append(systemWakeups)
.append(", apps: ").append(applicationWakeups)
.append(", non-apps: ").append(nonApplicationWakeups)
.append(", no uid: ").append(noUidWakeups)
.append(", ").append(durationSec).append("s)")
.toString();
StringJoiner j = new StringJoiner(", ", "WakeupStats(", ")");
j.add(iface);
j.add("" + durationSec + "s");
j.add("total: " + totalWakeups);
j.add("root: " + rootWakeups);
j.add("system: " + systemWakeups);
j.add("apps: " + applicationWakeups);
j.add("non-apps: " + nonApplicationWakeups);
j.add("no uid: " + noUidWakeups);
j.add(String.format("l2 unicast/multicast/broadcast: %d/%d/%d",
l2UnicastCount, l2MulticastCount, l2BroadcastCount));
for (int i = 0; i < ethertypes.size(); i++) {
int eth = ethertypes.keyAt(i);
int count = ethertypes.valueAt(i);
j.add(String.format("ethertype 0x%x: %d", eth, count));
}
for (int i = 0; i < ipNextHeaders.size(); i++) {
int proto = ipNextHeaders.keyAt(i);
int count = ipNextHeaders.valueAt(i);
j.add(String.format("ipNxtHdr %d: %d", proto, count));
}
return j.toString();
}
private static void increment(SparseIntArray counters, int key) {
int newcount = counters.get(key, 0) + 1;
counters.put(key, newcount);
}
}

View File

@@ -489,7 +489,7 @@ message NetworkStats {
// Represents statistics from NFLOG wakeup events due to ingress packets.
// Since oc-mr1.
// Next tag: 8.
// Next tag: 13.
message WakeupStats {
// The time duration in seconds covered by these stats, for deriving
// exact wakeup rates.
@@ -517,6 +517,24 @@ message WakeupStats {
// The total number of wakeup packets with no associated socket or uid.
optional int64 no_uid_wakeups = 7;
// Counts of all different ethertype values from wakeup packets received.
repeated Pair ethertype_counts = 8;
// Counts of all different IP next header values from wakeup packets received.
repeated Pair ip_next_header_counts = 9;
// The total number of wakeup packets whose destination hardware address was
// a unicast address.
optional int64 l2_unicast_count = 10;
// The total number of wakeup packets whose destination hardware address was
// a multicast address.
optional int64 l2_multicast_count = 11;
// The total number of wakeup packets whose destination hardware address was
// a broadcast address.
optional int64 l2_broadcast_count = 12;
}
// Represents one of the IP connectivity event defined in this file.

View File

@@ -128,6 +128,11 @@ final public class IpConnectivityEventBuilder {
wakeupStats.nonApplicationWakeups = in.nonApplicationWakeups;
wakeupStats.applicationWakeups = in.applicationWakeups;
wakeupStats.noUidWakeups = in.noUidWakeups;
wakeupStats.l2UnicastCount = in.l2UnicastCount;
wakeupStats.l2MulticastCount = in.l2MulticastCount;
wakeupStats.l2BroadcastCount = in.l2BroadcastCount;
wakeupStats.ethertypeCounts = toPairArray(in.ethertypes);
wakeupStats.ipNextHeaderCounts = toPairArray(in.ipNextHeaders);
final IpConnectivityEvent out = buildEvent(0, 0, in.iface);
out.setWakeupStats(wakeupStats);
return out;

View File

@@ -58,7 +58,6 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
private static final String TAG = NetdEventListenerService.class.getSimpleName();
private static final boolean DBG = false;
private static final boolean VDBG = false;
// Rate limit connect latency logging to 1 measurement per 15 seconds (5760 / day) with maximum
// bursts of 5000 measurements.
@@ -198,8 +197,6 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
public synchronized void onDnsEvent(int netId, int eventType, int returnCode, int latencyMs,
String hostname, String[] ipAddresses, int ipAddressesCount, int uid)
throws RemoteException {
maybeVerboseLog("onDnsEvent(%d, %d, %d, %dms)", netId, eventType, returnCode, latencyMs);
long timestamp = System.currentTimeMillis();
getMetricsForNetwork(timestamp, netId).addDnsResult(eventType, returnCode, latencyMs);
@@ -215,8 +212,6 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
// This method must not block or perform long-running operations.
public synchronized void onConnectEvent(int netId, int error, int latencyMs, String ipAddr,
int port, int uid) throws RemoteException {
maybeVerboseLog("onConnectEvent(%d, %d, %dms)", netId, error, latencyMs);
long timestamp = System.currentTimeMillis();
getMetricsForNetwork(timestamp, netId).addConnectResult(error, latencyMs, ipAddr);
@@ -232,11 +227,8 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
}
@Override
public synchronized void onWakeupEvent(String prefix, int uid, int gid, long timestampNs) {
maybeVerboseLog("onWakeupEvent(%s, %d, %d, %sns)", prefix, uid, gid, timestampNs);
// TODO: add ip protocol and port
public synchronized void onWakeupEvent(String prefix, int uid, int ethertype, int ipNextHeader,
byte[] dstHw, String srcIp, String dstIp, int srcPort, int dstPort, long timestampNs) {
String iface = prefix.replaceFirst(WAKEUP_EVENT_IFACE_PREFIX, "");
final long timestampMs;
if (timestampNs > 0) {
@@ -245,15 +237,22 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
timestampMs = System.currentTimeMillis();
}
addWakeupEvent(iface, timestampMs, uid);
}
@GuardedBy("this")
private void addWakeupEvent(String iface, long timestampMs, int uid) {
WakeupEvent event = new WakeupEvent();
event.iface = iface;
event.timestampMs = timestampMs;
event.uid = uid;
event.ethertype = ethertype;
event.dstHwAddr = dstHw;
event.srcIp = srcIp;
event.dstIp = dstIp;
event.ipNextHeader = ipNextHeader;
event.srcPort = srcPort;
event.dstPort = dstPort;
addWakeupEvent(event);
}
private void addWakeupEvent(WakeupEvent event) {
String iface = event.iface;
mWakeupEvents.append(event);
WakeupStats stats = mWakeupStats.get(iface);
if (stats == null) {
@@ -333,10 +332,6 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
if (DBG) Log.d(TAG, String.format(s, args));
}
private static void maybeVerboseLog(String s, Object... args) {
if (VDBG) Log.d(TAG, String.format(s, args));
}
/** Helper class for buffering summaries of NetworkMetrics at regular time intervals */
static class NetworkMetricsSnapshot {

View File

@@ -508,6 +508,13 @@ public class IpConnectivityEventBuilderTest {
stats.rootWakeups = 2;
stats.systemWakeups = 3;
stats.noUidWakeups = 3;
stats.l2UnicastCount = 5;
stats.l2MulticastCount = 1;
stats.l2BroadcastCount = 2;
stats.ethertypes.put(0x800, 3);
stats.ethertypes.put(0x86dd, 3);
stats.ipNextHeaders.put(6, 5);
IpConnectivityEvent got = IpConnectivityEventBuilder.toProto(stats);
String want = String.join("\n",
@@ -521,6 +528,21 @@ public class IpConnectivityEventBuilderTest {
" wakeup_stats <",
" application_wakeups: 5",
" duration_sec: 0",
" ethertype_counts <",
" key: 2048",
" value: 3",
" >",
" ethertype_counts <",
" key: 34525",
" value: 3",
" >",
" ip_next_header_counts <",
" key: 6",
" value: 5",
" >",
" l2_broadcast_count: 2",
" l2_multicast_count: 1",
" l2_unicast_count: 5",
" no_uid_wakeups: 3",
" non_application_wakeups: 1",
" root_wakeups: 2",

View File

@@ -78,6 +78,9 @@ public class IpConnectivityMetricsTest {
private static final String EXAMPLE_IPV4 = "192.0.2.1";
private static final String EXAMPLE_IPV6 = "2001:db8:1200::2:1";
private static final byte[] MAC_ADDR =
{(byte)0x84, (byte)0xc9, (byte)0xb2, (byte)0x6a, (byte)0xed, (byte)0x4b};
@Mock Context mCtx;
@Mock IIpConnectivityMetrics mMockService;
@Mock ConnectivityManager mCm;
@@ -351,13 +354,21 @@ public class IpConnectivityMetricsTest {
dnsEvent(101, EVENT_GETHOSTBYNAME, 0, 34);
// iface, uid
wakeupEvent("wlan0", 1000);
wakeupEvent("rmnet0", 10123);
wakeupEvent("wlan0", 1000);
wakeupEvent("rmnet0", 10008);
wakeupEvent("wlan0", -1);
wakeupEvent("wlan0", 10008);
wakeupEvent("rmnet0", 1000);
final byte[] mac = {0x48, 0x7c, 0x2b, 0x6a, 0x3e, 0x4b};
final String srcIp = "192.168.2.1";
final String dstIp = "192.168.2.23";
final int sport = 2356;
final int dport = 13489;
final long now = 1001L;
final int v4 = 0x800;
final int tcp = 6;
final int udp = 17;
wakeupEvent("wlan0", 1000, v4, tcp, mac, srcIp, dstIp, sport, dport, 1001L);
wakeupEvent("wlan0", 10123, v4, tcp, mac, srcIp, dstIp, sport, dport, 1001L);
wakeupEvent("wlan0", 1000, v4, udp, mac, srcIp, dstIp, sport, dport, 1001L);
wakeupEvent("wlan0", 10008, v4, udp, mac, srcIp, dstIp, sport, dport, 1001L);
wakeupEvent("wlan0", -1, v4, udp, mac, srcIp, dstIp, sport, dport, 1001L);
wakeupEvent("wlan0", 10008, v4, tcp, mac, srcIp, dstIp, sport, dport, 1001L);
long timeMs = mService.mDefaultNetworkMetrics.creationTimeMs;
final long cell = BitUtils.packBits(new int[]{NetworkCapabilities.TRANSPORT_CELLULAR});
@@ -560,34 +571,33 @@ public class IpConnectivityMetricsTest {
">",
"events <",
" if_name: \"\"",
" link_layer: 2",
" network_id: 0",
" time_ms: 0",
" transports: 0",
" wakeup_stats <",
" application_wakeups: 2",
" duration_sec: 0",
" no_uid_wakeups: 0",
" non_application_wakeups: 0",
" root_wakeups: 0",
" system_wakeups: 1",
" total_wakeups: 3",
" >",
">",
"events <",
" if_name: \"\"",
" link_layer: 4",
" network_id: 0",
" time_ms: 0",
" transports: 0",
" wakeup_stats <",
" application_wakeups: 1",
" application_wakeups: 3",
" duration_sec: 0",
" ethertype_counts <",
" key: 2048",
" value: 6",
" >",
" ip_next_header_counts <",
" key: 6",
" value: 3",
" >",
" ip_next_header_counts <",
" key: 17",
" value: 3",
" >",
" l2_broadcast_count: 0",
" l2_multicast_count: 0",
" l2_unicast_count: 6",
" no_uid_wakeups: 1",
" non_application_wakeups: 0",
" root_wakeups: 0",
" system_wakeups: 2",
" total_wakeups: 4",
" total_wakeups: 6",
" >",
">",
"version: 2\n");
@@ -610,9 +620,10 @@ public class IpConnectivityMetricsTest {
mNetdListener.onDnsEvent(netId, type, result, latency, "", null, 0, 0);
}
void wakeupEvent(String iface, int uid) throws Exception {
void wakeupEvent(String iface, int uid, int ether, int ip, byte[] mac, String srcIp,
String dstIp, int sport, int dport, long now) throws Exception {
String prefix = NetdEventListenerService.WAKEUP_EVENT_IFACE_PREFIX + iface;
mNetdListener.onWakeupEvent(prefix, uid, uid, 0);
mNetdListener.onWakeupEvent(prefix, uid, ether, ip, mac, srcIp, dstIp, sport, dport, now);
}
NetworkAgentInfo makeNai(int netId, int score, boolean ipv4, boolean ipv6, long transports) {

View File

@@ -61,7 +61,10 @@ public class NetdEventListenerServiceTest {
private static final String EXAMPLE_IPV4 = "192.0.2.1";
private static final String EXAMPLE_IPV6 = "2001:db8:1200::2:1";
NetdEventListenerService mNetdEventListenerService;
private static final byte[] MAC_ADDR =
{(byte)0x84, (byte)0xc9, (byte)0xb2, (byte)0x6a, (byte)0xed, (byte)0x4b};
NetdEventListenerService mService;
ConnectivityManager mCm;
@Before
@@ -75,28 +78,49 @@ public class NetdEventListenerServiceTest {
when(mCm.getNetworkCapabilities(new Network(100))).thenReturn(ncWifi);
when(mCm.getNetworkCapabilities(new Network(101))).thenReturn(ncCell);
mNetdEventListenerService = new NetdEventListenerService(mCm);
mService = new NetdEventListenerService(mCm);
}
@Test
public void testWakeupEventLogging() throws Exception {
final int BUFFER_LENGTH = NetdEventListenerService.WAKEUP_EVENT_BUFFER_LENGTH;
final long now = System.currentTimeMillis();
final String iface = "wlan0";
final byte[] mac = MAC_ADDR;
final String srcIp = "192.168.2.1";
final String dstIp = "192.168.2.23";
final String srcIp6 = "2001:db8:4:fd00:a585:13d1:6a23:4fb4";
final String dstIp6 = "2001:db8:4006:807::200a";
final int sport = 2356;
final int dport = 13489;
final int v4 = 0x800;
final int v6 = 0x86dd;
final int tcp = 6;
final int udp = 17;
final int icmp6 = 58;
// Baseline without any event
String[] baseline = listNetdEvent();
long now = System.currentTimeMillis();
String prefix = "iface:wlan0";
int[] uids = { 10001, 10002, 10004, 1000, 10052, 10023, 10002, 10123, 10004 };
for (int uid : uids) {
mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, now);
}
int[] uids = {10001, 10002, 10004, 1000, 10052, 10023, 10002, 10123, 10004};
wakeupEvent(iface, uids[0], v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent(iface, uids[1], v6, udp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent(iface, uids[2], v6, udp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent(iface, uids[3], v4, icmp6, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent(iface, uids[4], v6, tcp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent(iface, uids[5], v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent(iface, uids[6], v6, udp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent(iface, uids[7], v6, tcp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent(iface, uids[8], v6, udp, mac, srcIp6, dstIp6, sport, dport, now);
String[] events2 = remove(listNetdEvent(), baseline);
int expectedLength2 = uids.length + 1; // +1 for the WakeupStats line
assertEquals(expectedLength2, events2.length);
assertContains(events2[0], "WakeupStats");
assertContains(events2[0], "wlan0");
assertContains(events2[0], "0x800");
assertContains(events2[0], "0x86dd");
for (int i = 0; i < uids.length; i++) {
String got = events2[i+1];
assertContains(got, "WakeupEvent");
@@ -107,7 +131,7 @@ public class NetdEventListenerServiceTest {
int uid = 20000;
for (int i = 0; i < BUFFER_LENGTH * 2; i++) {
long ts = now + 10;
mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, ts);
wakeupEvent(iface, uid, 0x800, 6, mac, srcIp, dstIp, 23, 24, ts);
}
String[] events3 = remove(listNetdEvent(), baseline);
@@ -123,7 +147,7 @@ public class NetdEventListenerServiceTest {
}
uid = 45678;
mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, now);
wakeupEvent(iface, uid, 0x800, 6, mac, srcIp, dstIp, 23, 24, now);
String[] events4 = remove(listNetdEvent(), baseline);
String lastEvent = events4[events4.length - 1];
@@ -134,21 +158,36 @@ public class NetdEventListenerServiceTest {
@Test
public void testWakeupStatsLogging() throws Exception {
wakeupEvent("wlan0", 1000);
wakeupEvent("rmnet0", 10123);
wakeupEvent("wlan0", 1000);
wakeupEvent("rmnet0", 10008);
wakeupEvent("wlan0", -1);
wakeupEvent("wlan0", 10008);
wakeupEvent("rmnet0", 1000);
wakeupEvent("wlan0", 10004);
wakeupEvent("wlan0", 1000);
wakeupEvent("wlan0", 0);
wakeupEvent("wlan0", -1);
wakeupEvent("rmnet0", 10052);
wakeupEvent("wlan0", 0);
wakeupEvent("rmnet0", 1000);
wakeupEvent("wlan0", 1010);
final byte[] mac = MAC_ADDR;
final String srcIp = "192.168.2.1";
final String dstIp = "192.168.2.23";
final String srcIp6 = "2401:fa00:4:fd00:a585:13d1:6a23:4fb4";
final String dstIp6 = "2404:6800:4006:807::200a";
final int sport = 2356;
final int dport = 13489;
final long now = 1001L;
final int v4 = 0x800;
final int v6 = 0x86dd;
final int tcp = 6;
final int udp = 17;
final int icmp6 = 58;
wakeupEvent("wlan0", 1000, v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("rmnet0", 10123, v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("wlan0", 1000, v4, udp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("rmnet0", 10008, v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("wlan0", -1, v6, icmp6, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent("wlan0", 10008, v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("rmnet0", 1000, v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("wlan0", 10004, v4, udp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("wlan0", 1000, v6, tcp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent("wlan0", 0, v6, udp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent("wlan0", -1, v6, icmp6, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent("rmnet0", 10052, v4, tcp, mac, srcIp, dstIp, sport, dport, now);
wakeupEvent("wlan0", 0, v6, udp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent("rmnet0", 1000, v6, tcp, mac, srcIp6, dstIp6, sport, dport, now);
wakeupEvent("wlan0", 1010, v4, udp, mac, srcIp, dstIp, sport, dport, now);
String got = flushStatistics();
String want = String.join("\n",
@@ -162,6 +201,21 @@ public class NetdEventListenerServiceTest {
" wakeup_stats <",
" application_wakeups: 3",
" duration_sec: 0",
" ethertype_counts <",
" key: 2048",
" value: 4",
" >",
" ethertype_counts <",
" key: 34525",
" value: 1",
" >",
" ip_next_header_counts <",
" key: 6",
" value: 5",
" >",
" l2_broadcast_count: 0",
" l2_multicast_count: 0",
" l2_unicast_count: 5",
" no_uid_wakeups: 0",
" non_application_wakeups: 0",
" root_wakeups: 0",
@@ -178,6 +232,29 @@ public class NetdEventListenerServiceTest {
" wakeup_stats <",
" application_wakeups: 2",
" duration_sec: 0",
" ethertype_counts <",
" key: 2048",
" value: 5",
" >",
" ethertype_counts <",
" key: 34525",
" value: 5",
" >",
" ip_next_header_counts <",
" key: 6",
" value: 3",
" >",
" ip_next_header_counts <",
" key: 17",
" value: 5",
" >",
" ip_next_header_counts <",
" key: 58",
" value: 2",
" >",
" l2_broadcast_count: 0",
" l2_multicast_count: 0",
" l2_unicast_count: 10",
" no_uid_wakeups: 2",
" non_application_wakeups: 1",
" root_wakeups: 2",
@@ -401,7 +478,7 @@ public class NetdEventListenerServiceTest {
Thread connectEventAction(int netId, int error, int latencyMs, String ipAddr) {
return new Thread(() -> {
try {
mNetdEventListenerService.onConnectEvent(netId, error, latencyMs, ipAddr, 80, 1);
mService.onConnectEvent(netId, error, latencyMs, ipAddr, 80, 1);
} catch (Exception e) {
fail(e.toString());
}
@@ -409,12 +486,13 @@ public class NetdEventListenerServiceTest {
}
void dnsEvent(int netId, int type, int result, int latency) throws Exception {
mNetdEventListenerService.onDnsEvent(netId, type, result, latency, "", null, 0, 0);
mService.onDnsEvent(netId, type, result, latency, "", null, 0, 0);
}
void wakeupEvent(String iface, int uid) throws Exception {
void wakeupEvent(String iface, int uid, int ether, int ip, byte[] mac, String srcIp,
String dstIp, int sport, int dport, long now) throws Exception {
String prefix = NetdEventListenerService.WAKEUP_EVENT_IFACE_PREFIX + iface;
mNetdEventListenerService.onWakeupEvent(prefix, uid, uid, 0);
mService.onWakeupEvent(prefix, uid, ether, ip, mac, srcIp, dstIp, sport, dport, now);
}
void asyncDump(long durationMs) throws Exception {
@@ -422,7 +500,7 @@ public class NetdEventListenerServiceTest {
final PrintWriter pw = new PrintWriter(new FileOutputStream("/dev/null"));
new Thread(() -> {
while (System.currentTimeMillis() < stop) {
mNetdEventListenerService.list(pw);
mService.list(pw);
}
}).start();
}
@@ -431,7 +509,7 @@ public class NetdEventListenerServiceTest {
String flushStatistics() throws Exception {
IpConnectivityMetrics metricsService =
new IpConnectivityMetrics(mock(Context.class), (ctx) -> 2000);
metricsService.mNetdListener = mNetdEventListenerService;
metricsService.mNetdListener = mService;
StringWriter buffer = new StringWriter();
PrintWriter writer = new PrintWriter(buffer);
@@ -453,7 +531,7 @@ public class NetdEventListenerServiceTest {
String[] listNetdEvent() throws Exception {
StringWriter buffer = new StringWriter();
PrintWriter writer = new PrintWriter(buffer);
mNetdEventListenerService.list(writer);
mService.list(writer);
return buffer.toString().split("\\n");
}