OSDN Git Service

Also dump the last APF program to be installed.
authorLorenzo Colitti <lorenzo@google.com>
Tue, 22 Mar 2016 15:23:29 +0000 (00:23 +0900)
committerPaul Jensen <pauljensen@google.com>
Tue, 22 Mar 2016 17:34:01 +0000 (13:34 -0400)
Bug: 26238573
Bug: 27768019
Change-Id: I8b036258aca5ac32ef4bba0f0de7d0b9e7d40886

services/core/java/com/android/server/connectivity/ApfFilter.java

index d62a0b3..0014665 100644 (file)
@@ -90,6 +90,7 @@ public class ApfFilter {
     }
 
     private static final String TAG = "ApfFilter";
+    private static final boolean DBG = true;
     private static final boolean VDBG = false;
 
     private final ConnectivityService mConnectivityService;
@@ -205,6 +206,10 @@ public class ApfFilter {
         // For debugging only. How many times this RA was seen.
         int seenCount = 0;
 
+        // For debugging only. Returns the hex representation of the last matching packet.
+        String getLastMatchingPacket() {
+            return HexDump.toHexString(mPacket.array(), 0, mPacket.capacity(), false /* lowercase */);
+        }
 
         private String IPv6AddresstoString(int pos) {
             try {
@@ -454,7 +459,7 @@ public class ApfFilter {
     private long mLastInstalledProgramMinLifetime;
 
     // For debugging only. The length in bytes of the last program.
-    private long mLastInstalledProgramLength;
+    private byte[] mLastInstalledProgram;
 
     private void installNewProgram() {
         if (mRas.size() == 0) return;
@@ -495,7 +500,7 @@ public class ApfFilter {
         }
         mLastTimeInstalledProgram = curTime();
         mLastInstalledProgramMinLifetime = programMinLifetime;
-        mLastInstalledProgramLength = program.length;
+        mLastInstalledProgram = program;
         if (VDBG) {
             hexDump("Installing filter: ", program, program.length);
         } else {
@@ -515,7 +520,7 @@ public class ApfFilter {
     }
 
     private void hexDump(String msg, byte[] packet, int length) {
-        log(msg + HexDump.toHexString(packet, 0, length));
+        log(msg + HexDump.toHexString(packet, 0, length, false /* lowercase */));
     }
 
     private void processRa(byte[] packet, int length) {
@@ -608,7 +613,7 @@ public class ApfFilter {
 
         pw.println(String.format(
                 "Last program length %d, installed %ds ago, lifetime %d",
-                mLastInstalledProgramLength, curTime() - mLastTimeInstalledProgram,
+                mLastInstalledProgram.length, curTime() - mLastTimeInstalledProgram,
                 mLastInstalledProgramMinLifetime));
 
         pw.println("RA filters:");
@@ -618,8 +623,22 @@ public class ApfFilter {
             pw.increaseIndent();
             pw.println(String.format(
                     "Seen: %d, last %ds ago", ra.seenCount, curTime() - ra.mLastSeen));
+            if (DBG) {
+                pw.println("Last match:");
+                pw.increaseIndent();
+                pw.println(ra.getLastMatchingPacket());
+                pw.decreaseIndent();
+            }
             pw.decreaseIndent();
         }
+
+        if (DBG) {
+            pw.println("Last program:");
+            pw.increaseIndent();
+            pw.println(HexDump.toHexString(mLastInstalledProgram, false /* lowercase */));
+            pw.decreaseIndent();
+        }
+
         pw.decreaseIndent();
     }
 }