Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d6c5802 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Support full 32 bits for socket tags.

Bug: 5321184
Change-Id: Iadb3a4ad541ef012cea35b70ad440eca4c879f42
parent f2dc6fc4
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -16,20 +16,14 @@

package com.android.server;

import android.net.NetworkStats;
import android.os.SystemProperties;
import android.util.Log;
import android.util.Slog;

import dalvik.system.SocketTagger;
import libcore.io.IoUtils;

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.net.SocketException;
import java.nio.charset.Charsets;

/**
 * Assigns tags to sockets for traffic stats.
@@ -141,8 +135,12 @@ public final class NetworkManagementSocketTagger extends SocketTagger {
     * format like {@code 0x7fffffff00000000}.
     */
    public static int kernelToTag(String string) {
        // TODO: migrate to direct integer instead of odd shifting
        return (int) (Long.decode(string) >> 32);
        int length = string.length();
        if (length > 10) {
            return Long.decode(string.substring(0, length - 8)).intValue();
        } else {
            return 0;
        }
    }

    private static native int native_tagSocketFd(FileDescriptor fd, int tag, int uid);
+7 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import static com.android.server.NetworkManagementSocketTagger.kernelToTag;

import android.content.res.Resources;
import android.net.NetworkStats;
import android.net.TrafficStats;
import android.test.AndroidTestCase;

import com.android.frameworks.coretests.R;
@@ -138,6 +139,12 @@ public class NetworkStatsFactoryTest extends AndroidTestCase {
        assertEquals(2147483647, kernelToTag("0x7fffffff00000000"));
        assertEquals(0, kernelToTag("0x0000000000000000"));
        assertEquals(2147483136, kernelToTag("0x7FFFFE0000000000"));

        assertEquals(0, kernelToTag("0x0"));
        assertEquals(0, kernelToTag("0xf00d"));
        assertEquals(1, kernelToTag("0x100000000"));
        assertEquals(14438007, kernelToTag("0xdc4e7700000000"));
        assertEquals(TrafficStats.TAG_SYSTEM_DOWNLOAD, kernelToTag("0xffffff0100000000"));
    }

    public void testNetworkStatsWithSet() throws Exception {