Loading src/android/net/ip/ConnectivityPacketTracker.java +18 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.net.util.InterfaceParams; import android.net.util.NetworkStackUtils; import android.net.util.NetworkStackUtils; import android.net.util.PacketReader; import android.net.util.PacketReader; import android.os.Handler; import android.os.Handler; import android.os.SystemClock; import android.system.ErrnoException; import android.system.ErrnoException; import android.system.Os; import android.system.Os; import android.text.TextUtils; import android.text.TextUtils; Loading @@ -35,6 +36,7 @@ import android.util.LocalLog; import android.util.Log; import android.util.Log; import com.android.internal.util.HexDump; import com.android.internal.util.HexDump; import com.android.internal.util.TokenBucket; import java.io.FileDescriptor; import java.io.FileDescriptor; import java.io.IOException; import java.io.IOException; Loading Loading @@ -63,10 +65,15 @@ public class ConnectivityPacketTracker { private static final String MARK_STOP = "--- STOP ---"; private static final String MARK_STOP = "--- STOP ---"; private static final String MARK_NAMED_START = "--- START (%s) ---"; private static final String MARK_NAMED_START = "--- START (%s) ---"; private static final String MARK_NAMED_STOP = "--- STOP (%s) ---"; private static final String MARK_NAMED_STOP = "--- STOP (%s) ---"; // Use a TokenBucket to limit CPU usage of logging packets in steady state. private static final int TOKEN_FILL_RATE = 50; // Maximum one packet every 20ms. private static final int MAX_BURST_LENGTH = 100; // Maximum burst 100 packets. private final String mTag; private final String mTag; private final LocalLog mLog; private final LocalLog mLog; private final PacketReader mPacketListener; private final PacketReader mPacketListener; private final TokenBucket mTokenBucket = new TokenBucket(TOKEN_FILL_RATE, MAX_BURST_LENGTH); private long mLastRateLimitLogTimeMs = 0; private boolean mRunning; private boolean mRunning; private String mDisplayName; private String mDisplayName; Loading Loading @@ -115,6 +122,17 @@ public class ConnectivityPacketTracker { @Override @Override protected void handlePacket(byte[] recvbuf, int length) { protected void handlePacket(byte[] recvbuf, int length) { if (!mTokenBucket.get()) { // Rate limited. Log once every second so the user knows packets are missing. final long now = SystemClock.elapsedRealtime(); if (now >= mLastRateLimitLogTimeMs + 1000) { addLogEntry("Warning: too many packets, rate-limiting to one every " + TOKEN_FILL_RATE + "ms"); mLastRateLimitLogTimeMs = now; } return; } final String summary = ConnectivityPacketSummary.summarize( final String summary = ConnectivityPacketSummary.summarize( mInterface.macAddr, recvbuf, length); mInterface.macAddr, recvbuf, length); if (summary == null) return; if (summary == null) return; Loading tests/unit/AndroidTest.xmldeleted 100644 → 0 +0 −30 Original line number Original line Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2018 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <configuration description="Runs Tests for NetworkStack"> <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup"> <option name="test-file-name" value="NetworkStackTests.apk" /> <option name="cleanup-apks" value="true" /> </target_preparer> <option name="test-suite-tag" value="apct" /> <option name="test-suite-tag" value="framework-base-presubmit" /> <option name="test-tag" value="NetworkStackTests" /> <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.server.networkstack.tests" /> <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> <option name="hidden-api-checks" value="false"/> </test> </configuration> Loading
src/android/net/ip/ConnectivityPacketTracker.java +18 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,7 @@ import android.net.util.InterfaceParams; import android.net.util.NetworkStackUtils; import android.net.util.NetworkStackUtils; import android.net.util.PacketReader; import android.net.util.PacketReader; import android.os.Handler; import android.os.Handler; import android.os.SystemClock; import android.system.ErrnoException; import android.system.ErrnoException; import android.system.Os; import android.system.Os; import android.text.TextUtils; import android.text.TextUtils; Loading @@ -35,6 +36,7 @@ import android.util.LocalLog; import android.util.Log; import android.util.Log; import com.android.internal.util.HexDump; import com.android.internal.util.HexDump; import com.android.internal.util.TokenBucket; import java.io.FileDescriptor; import java.io.FileDescriptor; import java.io.IOException; import java.io.IOException; Loading Loading @@ -63,10 +65,15 @@ public class ConnectivityPacketTracker { private static final String MARK_STOP = "--- STOP ---"; private static final String MARK_STOP = "--- STOP ---"; private static final String MARK_NAMED_START = "--- START (%s) ---"; private static final String MARK_NAMED_START = "--- START (%s) ---"; private static final String MARK_NAMED_STOP = "--- STOP (%s) ---"; private static final String MARK_NAMED_STOP = "--- STOP (%s) ---"; // Use a TokenBucket to limit CPU usage of logging packets in steady state. private static final int TOKEN_FILL_RATE = 50; // Maximum one packet every 20ms. private static final int MAX_BURST_LENGTH = 100; // Maximum burst 100 packets. private final String mTag; private final String mTag; private final LocalLog mLog; private final LocalLog mLog; private final PacketReader mPacketListener; private final PacketReader mPacketListener; private final TokenBucket mTokenBucket = new TokenBucket(TOKEN_FILL_RATE, MAX_BURST_LENGTH); private long mLastRateLimitLogTimeMs = 0; private boolean mRunning; private boolean mRunning; private String mDisplayName; private String mDisplayName; Loading Loading @@ -115,6 +122,17 @@ public class ConnectivityPacketTracker { @Override @Override protected void handlePacket(byte[] recvbuf, int length) { protected void handlePacket(byte[] recvbuf, int length) { if (!mTokenBucket.get()) { // Rate limited. Log once every second so the user knows packets are missing. final long now = SystemClock.elapsedRealtime(); if (now >= mLastRateLimitLogTimeMs + 1000) { addLogEntry("Warning: too many packets, rate-limiting to one every " + TOKEN_FILL_RATE + "ms"); mLastRateLimitLogTimeMs = now; } return; } final String summary = ConnectivityPacketSummary.summarize( final String summary = ConnectivityPacketSummary.summarize( mInterface.macAddr, recvbuf, length); mInterface.macAddr, recvbuf, length); if (summary == null) return; if (summary == null) return; Loading
tests/unit/AndroidTest.xmldeleted 100644 → 0 +0 −30 Original line number Original line Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <!-- Copyright (C) 2018 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <configuration description="Runs Tests for NetworkStack"> <target_preparer class="com.android.tradefed.targetprep.TestAppInstallSetup"> <option name="test-file-name" value="NetworkStackTests.apk" /> <option name="cleanup-apks" value="true" /> </target_preparer> <option name="test-suite-tag" value="apct" /> <option name="test-suite-tag" value="framework-base-presubmit" /> <option name="test-tag" value="NetworkStackTests" /> <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.server.networkstack.tests" /> <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> <option name="hidden-api-checks" value="false"/> </test> </configuration>