Begin collecting xtables iface counters.
Add method to parse new iface_stat_fmt proc stats, or return null when kernel support is unavailable. Add test and remove older, unused parsing code. Create new "xt" recorder to persist the new xtables counters when available. Add SSID support to NetworkIdentity to fix policy tests. Bug: 6422414 Change-Id: I77f70e9acb79a559ab626f3af5c4f3599801ed43
This commit is contained in:
@@ -31,18 +31,20 @@ public class NetworkState implements Parcelable {
|
||||
public final LinkCapabilities linkCapabilities;
|
||||
/** Currently only used by testing. */
|
||||
public final String subscriberId;
|
||||
public final String networkId;
|
||||
|
||||
public NetworkState(NetworkInfo networkInfo, LinkProperties linkProperties,
|
||||
LinkCapabilities linkCapabilities) {
|
||||
this(networkInfo, linkProperties, linkCapabilities, null);
|
||||
this(networkInfo, linkProperties, linkCapabilities, null, null);
|
||||
}
|
||||
|
||||
public NetworkState(NetworkInfo networkInfo, LinkProperties linkProperties,
|
||||
LinkCapabilities linkCapabilities, String subscriberId) {
|
||||
LinkCapabilities linkCapabilities, String subscriberId, String networkId) {
|
||||
this.networkInfo = networkInfo;
|
||||
this.linkProperties = linkProperties;
|
||||
this.linkCapabilities = linkCapabilities;
|
||||
this.subscriberId = subscriberId;
|
||||
this.networkId = networkId;
|
||||
}
|
||||
|
||||
public NetworkState(Parcel in) {
|
||||
@@ -50,6 +52,7 @@ public class NetworkState implements Parcelable {
|
||||
linkProperties = in.readParcelable(null);
|
||||
linkCapabilities = in.readParcelable(null);
|
||||
subscriberId = in.readString();
|
||||
networkId = in.readString();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -63,6 +66,7 @@ public class NetworkState implements Parcelable {
|
||||
out.writeParcelable(linkProperties, flags);
|
||||
out.writeParcelable(linkCapabilities, flags);
|
||||
out.writeString(subscriberId);
|
||||
out.writeString(networkId);
|
||||
}
|
||||
|
||||
public static final Creator<NetworkState> CREATOR = new Creator<NetworkState>() {
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
ifname total_skb_rx_bytes total_skb_rx_packets total_skb_tx_bytes total_skb_tx_packets
|
||||
rmnet2 4968 35 3081 39
|
||||
rmnet1 11153922 8051 190226 2468
|
||||
rmnet0 6824 16 5692 10
|
||||
@@ -80,58 +80,6 @@ public class NetworkStatsFactoryTest extends AndroidTestCase {
|
||||
assertStatsEntry(stats, "rmnet2", 10001, SET_DEFAULT, 0x0, 1125899906842624L, 984L);
|
||||
}
|
||||
|
||||
public void testNetworkStatsSummary() throws Exception {
|
||||
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
||||
|
||||
final NetworkStats stats = mFactory.readNetworkStatsSummary();
|
||||
assertEquals(6, stats.size());
|
||||
assertStatsEntry(stats, "lo", UID_ALL, SET_ALL, TAG_NONE, 8308L, 8308L);
|
||||
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 1507570L, 489339L);
|
||||
assertStatsEntry(stats, "ifb0", UID_ALL, SET_ALL, TAG_NONE, 52454L, 0L);
|
||||
assertStatsEntry(stats, "ifb1", UID_ALL, SET_ALL, TAG_NONE, 52454L, 0L);
|
||||
assertStatsEntry(stats, "sit0", UID_ALL, SET_ALL, TAG_NONE, 0L, 0L);
|
||||
assertStatsEntry(stats, "ip6tnl0", UID_ALL, SET_ALL, TAG_NONE, 0L, 0L);
|
||||
}
|
||||
|
||||
public void testNetworkStatsSummaryDown() throws Exception {
|
||||
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
||||
stageLong(1L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/active"));
|
||||
stageLong(1024L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_bytes"));
|
||||
stageLong(128L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/rx_packets"));
|
||||
stageLong(2048L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_bytes"));
|
||||
stageLong(256L, new File(mTestProc, "net/xt_qtaguid/iface_stat/wlan0/tx_packets"));
|
||||
|
||||
final NetworkStats stats = mFactory.readNetworkStatsSummary();
|
||||
assertEquals(7, stats.size());
|
||||
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 1507570L, 489339L);
|
||||
assertStatsEntry(stats, "wlan0", UID_ALL, SET_ALL, TAG_NONE, 1024L, 2048L);
|
||||
}
|
||||
|
||||
public void testNetworkStatsCombined() throws Exception {
|
||||
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
||||
stageLong(1L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/active"));
|
||||
stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
|
||||
stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
|
||||
stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
|
||||
stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
|
||||
|
||||
final NetworkStats stats = mFactory.readNetworkStatsSummary();
|
||||
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 1507570L + 10L,
|
||||
2205L + 20L, 489339L + 30L, 2237L + 40L);
|
||||
}
|
||||
|
||||
public void testNetworkStatsCombinedInactive() throws Exception {
|
||||
stageFile(R.raw.net_dev_typical, new File(mTestProc, "net/dev"));
|
||||
stageLong(0L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/active"));
|
||||
stageLong(10L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_bytes"));
|
||||
stageLong(20L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/rx_packets"));
|
||||
stageLong(30L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_bytes"));
|
||||
stageLong(40L, new File(mTestProc, "net/xt_qtaguid/iface_stat/rmnet0/tx_packets"));
|
||||
|
||||
final NetworkStats stats = mFactory.readNetworkStatsSummary();
|
||||
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 10L, 20L, 30L, 40L);
|
||||
}
|
||||
|
||||
public void testKernelTags() throws Exception {
|
||||
assertEquals(0, kernelToTag("0x0000000000000000"));
|
||||
assertEquals(0x32, kernelToTag("0x0000003200000000"));
|
||||
@@ -152,13 +100,24 @@ public class NetworkStatsFactoryTest extends AndroidTestCase {
|
||||
public void testNetworkStatsSingle() throws Exception {
|
||||
stageFile(R.raw.xt_qtaguid_iface_typical, new File(mTestProc, "net/xt_qtaguid/iface_stat_all"));
|
||||
|
||||
final NetworkStats stats = mFactory.readNetworkStatsSummary();
|
||||
final NetworkStats stats = mFactory.readNetworkStatsSummaryDev();
|
||||
assertEquals(6, stats.size());
|
||||
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 2112L, 24L, 700L, 10L);
|
||||
assertStatsEntry(stats, "test1", UID_ALL, SET_ALL, TAG_NONE, 6L, 8L, 10L, 12L);
|
||||
assertStatsEntry(stats, "test2", UID_ALL, SET_ALL, TAG_NONE, 1L, 2L, 3L, 4L);
|
||||
}
|
||||
|
||||
public void testNetworkStatsXt() throws Exception {
|
||||
stageFile(R.raw.xt_qtaguid_iface_fmt_typical,
|
||||
new File(mTestProc, "net/xt_qtaguid/iface_stat_fmt"));
|
||||
|
||||
final NetworkStats stats = mFactory.readNetworkStatsSummaryXt();
|
||||
assertEquals(3, stats.size());
|
||||
assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 6824L, 16L, 5692L, 10L);
|
||||
assertStatsEntry(stats, "rmnet1", UID_ALL, SET_ALL, TAG_NONE, 11153922L, 8051L, 190226L, 2468L);
|
||||
assertStatsEntry(stats, "rmnet2", UID_ALL, SET_ALL, TAG_NONE, 4968L, 35L, 3081L, 39L);
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy a {@link Resources#openRawResource(int)} into {@link File} for
|
||||
* testing purposes.
|
||||
|
||||
@@ -30,7 +30,7 @@ import static android.net.NetworkStats.TAG_NONE;
|
||||
import static android.net.NetworkStats.UID_ALL;
|
||||
import static android.net.NetworkStatsHistory.FIELD_ALL;
|
||||
import static android.net.NetworkTemplate.buildTemplateMobileAll;
|
||||
import static android.net.NetworkTemplate.buildTemplateWifi;
|
||||
import static android.net.NetworkTemplate.buildTemplateWifiWildcard;
|
||||
import static android.net.TrafficStats.MB_IN_BYTES;
|
||||
import static android.net.TrafficStats.UID_REMOVED;
|
||||
import static android.net.TrafficStats.UID_TETHERING;
|
||||
@@ -94,7 +94,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
private static final String IMSI_1 = "310004";
|
||||
private static final String IMSI_2 = "310260";
|
||||
|
||||
private static NetworkTemplate sTemplateWifi = buildTemplateWifi();
|
||||
private static NetworkTemplate sTemplateWifi = buildTemplateWifiWildcard();
|
||||
private static NetworkTemplate sTemplateImsi1 = buildTemplateMobileAll(IMSI_1);
|
||||
private static NetworkTemplate sTemplateImsi2 = buildTemplateMobileAll(IMSI_2);
|
||||
|
||||
@@ -136,7 +136,6 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
mService = new NetworkStatsService(
|
||||
mServiceContext, mNetManager, mAlarmManager, mTime, mStatsDir, mSettings);
|
||||
mService.bindConnectivityManager(mConnManager);
|
||||
mSession = mService.openSession();
|
||||
|
||||
mElapsedRealtime = 0L;
|
||||
|
||||
@@ -154,6 +153,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
|
||||
replay();
|
||||
mService.systemReady();
|
||||
mSession = mService.openSession();
|
||||
verifyAndReset();
|
||||
|
||||
mNetworkObserver = networkObserver.getValue();
|
||||
@@ -820,7 +820,8 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
}
|
||||
|
||||
private void expectNetworkStatsSummary(NetworkStats summary) throws Exception {
|
||||
expect(mNetManager.getNetworkStatsSummary()).andReturn(summary).atLeastOnce();
|
||||
expect(mNetManager.getNetworkStatsSummaryDev()).andReturn(summary).atLeastOnce();
|
||||
expect(mNetManager.getNetworkStatsSummaryXt()).andReturn(summary).atLeastOnce();
|
||||
}
|
||||
|
||||
private void expectNetworkStatsUidDetail(NetworkStats detail) throws Exception {
|
||||
@@ -851,6 +852,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
|
||||
final Config config = new Config(bucketDuration, persistBytes, deleteAge, deleteAge);
|
||||
expect(mSettings.getDevConfig()).andReturn(config).anyTimes();
|
||||
expect(mSettings.getXtConfig()).andReturn(config).anyTimes();
|
||||
expect(mSettings.getUidConfig()).andReturn(config).anyTimes();
|
||||
expect(mSettings.getUidTagConfig()).andReturn(config).anyTimes();
|
||||
}
|
||||
@@ -912,7 +914,7 @@ public class NetworkStatsServiceTest extends AndroidTestCase {
|
||||
info.setDetailedState(DetailedState.CONNECTED, null, null);
|
||||
final LinkProperties prop = new LinkProperties();
|
||||
prop.setInterfaceName(TEST_IFACE);
|
||||
return new NetworkState(info, prop, null, subscriberId);
|
||||
return new NetworkState(info, prop, null, subscriberId, null);
|
||||
}
|
||||
|
||||
private static NetworkState buildMobile4gState(String iface) {
|
||||
|
||||
Reference in New Issue
Block a user