summaryrefslogtreecommitdiffstats
path: root/core/jni/android_net_TrafficStats.cpp
diff options
context:
space:
mode:
authorKazuhiro Ondo <kazuhiro.ondo@motorola.com>2011-07-05 16:12:10 -0500
committerWink Saville <wink@google.com>2011-07-10 14:40:43 -0700
commit64ba5eaa40614877c679b3fbaaa3c2efd17d50d2 (patch)
tree301fddc93260c522cba84525f23b2f89c08baf0a /core/jni/android_net_TrafficStats.cpp
parent6b98e7128b3fbfd8b2c421286c403e4609c69708 (diff)
downloadframeworks_base-64ba5eaa40614877c679b3fbaaa3c2efd17d50d2.zip
frameworks_base-64ba5eaa40614877c679b3fbaaa3c2efd17d50d2.tar.gz
frameworks_base-64ba5eaa40614877c679b3fbaaa3c2efd17d50d2.tar.bz2
Concurrent multi-PDP support in TrafficStats
Quick fix to enable concurrent multiple PDP support in TrafficStats. Just updated the list of hard-coded mobile interfaces for now. Bug: 4553527 Change-Id: I44ce73f3000542d6457f353bb561a2275684af6b
Diffstat (limited to 'core/jni/android_net_TrafficStats.cpp')
-rw-r--r--core/jni/android_net_TrafficStats.cpp51
1 files changed, 34 insertions, 17 deletions
diff --git a/core/jni/android_net_TrafficStats.cpp b/core/jni/android_net_TrafficStats.cpp
index 0c84f11..12150b4 100644
--- a/core/jni/android_net_TrafficStats.cpp
+++ b/core/jni/android_net_TrafficStats.cpp
@@ -66,10 +66,35 @@ static jlong readNumber(char const* filename) {
#endif
}
-// Return the number from the first file which exists and contains data
-static jlong tryBoth(char const* a, char const* b) {
- jlong num = readNumber(a);
- return num >= 0 ? num : readNumber(b);
+static const char* mobile_iface_list[] = {
+ "rmnet0",
+ "rmnet1",
+ "rmnet2",
+ "rmnet3",
+ "ppp0",
+ 0
+};
+
+static jlong getAll(const char** iface_list, const char* what) {
+
+ char filename[80];
+ int idx = 0;
+ bool supported = false;
+ jlong total = 0;
+ while (iface_list[idx] != 0) {
+
+ snprintf(filename, sizeof(filename), "/sys/class/net/%s/statistics/%s",
+ iface_list[idx], what);
+ jlong number = readNumber(filename);
+ if (number >= 0) {
+ supported = true;
+ total += number;
+ }
+ idx++;
+ }
+ if (supported) return total;
+
+ return -1;
}
// Returns the sum of numbers from the specified path under /sys/class/net/*,
@@ -107,30 +132,22 @@ static jlong readTotal(char const* suffix) {
// each file every time (rather than caching which ones exist).
static jlong getMobileTxPackets(JNIEnv* env, jobject clazz) {
- return tryBoth(
- "/sys/class/net/rmnet0/statistics/tx_packets",
- "/sys/class/net/ppp0/statistics/tx_packets");
+ return getAll(mobile_iface_list, "tx_packets");
}
static jlong getMobileRxPackets(JNIEnv* env, jobject clazz) {
- return tryBoth(
- "/sys/class/net/rmnet0/statistics/rx_packets",
- "/sys/class/net/ppp0/statistics/rx_packets");
+ return getAll(mobile_iface_list, "rx_packets");
}
static jlong getMobileTxBytes(JNIEnv* env, jobject clazz) {
- return tryBoth(
- "/sys/class/net/rmnet0/statistics/tx_bytes",
- "/sys/class/net/ppp0/statistics/tx_bytes");
+ return getAll(mobile_iface_list, "tx_bytes");
}
static jlong getMobileRxBytes(JNIEnv* env, jobject clazz) {
- return tryBoth(
- "/sys/class/net/rmnet0/statistics/rx_bytes",
- "/sys/class/net/ppp0/statistics/rx_bytes");
+ return getAll(mobile_iface_list, "rx_bytes");
}
-static jlong getData(JNIEnv* env, char *what, jstring interface) {
+static jlong getData(JNIEnv* env, const char *what, jstring interface) {
char filename[80];
jboolean isCopy;