LastMileLogger: Check /sys/kernel/tracing for tracefs

tracefs will be mounted at /sys/kernel/tracing when debugfs
is not mounted.

Bug: 134669095
Test: adb shell dumpsys wifi (trace present with debugfs not mounted)
Test: atest LastMileLoggerTest

Change-Id: Ia13b2efc3cea3619389cee7a32bbb5a663bca8b9
diff --git a/service/java/com/android/server/wifi/LastMileLogger.java b/service/java/com/android/server/wifi/LastMileLogger.java
index 6cf921d..1a43b6f 100644
--- a/service/java/com/android/server/wifi/LastMileLogger.java
+++ b/service/java/com/android/server/wifi/LastMileLogger.java
@@ -20,6 +20,7 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.server.wifi.util.FileUtils;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -31,16 +32,20 @@
  */
 public class LastMileLogger {
     public LastMileLogger(WifiInjector injector) {
-        this(injector, WIFI_EVENT_BUFFER_PATH, WIFI_EVENT_ENABLE_PATH, WIFI_EVENT_RELEASE_PATH);
+        File tracefsEnablePath = new File(WIFI_EVENT_ENABLE_PATH);
+        if (tracefsEnablePath.exists()) {
+            initLastMileLogger(injector, WIFI_EVENT_BUFFER_PATH, WIFI_EVENT_ENABLE_PATH,
+                    WIFI_EVENT_RELEASE_PATH);
+        } else {
+            initLastMileLogger(injector, WIFI_EVENT_BUFFER_PATH_DEBUGFS,
+                    WIFI_EVENT_ENABLE_PATH_DEBUGFS, WIFI_EVENT_RELEASE_PATH_DEBUGFS);
+        }
     }
 
     @VisibleForTesting
     public LastMileLogger(WifiInjector injector, String bufferPath, String enablePath,
                           String releasePath) {
-        mLog = injector.makeLog(TAG);
-        mEventBufferPath = bufferPath;
-        mEventEnablePath = enablePath;
-        mEventReleasePath = releasePath;
+        initLastMileLogger(injector, bufferPath, enablePath, releasePath);
     }
 
     /**
@@ -77,19 +82,34 @@
 
     private static final String TAG = "LastMileLogger";
     private static final String WIFI_EVENT_BUFFER_PATH =
-            "/sys/kernel/debug/tracing/instances/wifi/trace";
+            "/sys/kernel/tracing/instances/wifi/trace";
     private static final String WIFI_EVENT_ENABLE_PATH =
-            "/sys/kernel/debug/tracing/instances/wifi/tracing_on";
+            "/sys/kernel/tracing/instances/wifi/tracing_on";
     private static final String WIFI_EVENT_RELEASE_PATH =
+            "/sys/kernel/tracing/instances/wifi/free_buffer";
+    private static final String WIFI_EVENT_BUFFER_PATH_DEBUGFS =
+            "/sys/kernel/debug/tracing/instances/wifi/trace";
+    private static final String WIFI_EVENT_ENABLE_PATH_DEBUGFS =
+            "/sys/kernel/debug/tracing/instances/wifi/tracing_on";
+    private static final String WIFI_EVENT_RELEASE_PATH_DEBUGFS =
             "/sys/kernel/debug/tracing/instances/wifi/free_buffer";
 
-    private final String mEventBufferPath;
-    private final String mEventEnablePath;
-    private final String mEventReleasePath;
+
+    private String mEventBufferPath;
+    private String mEventEnablePath;
+    private String mEventReleasePath;
     private WifiLog mLog;
     private byte[] mLastMileLogForLastFailure;
     private FileInputStream mLastMileTraceHandle;
 
+    private void initLastMileLogger(WifiInjector injector, String bufferPath, String enablePath,
+                          String releasePath) {
+        mLog = injector.makeLog(TAG);
+        mEventBufferPath = bufferPath;
+        mEventEnablePath = enablePath;
+        mEventReleasePath = releasePath;
+    }
+
     private void enableTracing() {
         if (!ensureFailSafeIsArmed()) {
             mLog.wC("Failed to arm fail-safe.");
diff --git a/service/wifi.rc b/service/wifi.rc
index 927067b..ce879b5 100644
--- a/service/wifi.rc
+++ b/service/wifi.rc
@@ -26,6 +26,12 @@
    write /sys/kernel/debug/tracing/instances/wifi/buffer_size_kb 1
    write /sys/kernel/debug/tracing/instances/wifi/trace_options disable_on_free
 
+   mkdir /sys/kernel/tracing/instances/wifi 711
+   restorecon_recursive /sys/kernel/tracing/instances/wifi
+   write /sys/kernel/tracing/instances/wifi/tracing_on 0
+   write /sys/kernel/tracing/instances/wifi/buffer_size_kb 1
+   write /sys/kernel/tracing/instances/wifi/trace_options disable_on_free
+
    # Enable cfg80211 events for connection and key management events.
    # - Events are not actually logged until WifiService writes "1" to
    #   /sys/kernel/debug/tracing/instances/wifi/tracing_on.
@@ -39,6 +45,15 @@
    write /sys/kernel/debug/tracing/instances/wifi/events/cfg80211/rdev_set_default_mgmt_key/enable 1
    write /sys/kernel/debug/tracing/instances/wifi/events/cfg80211/rdev_set_rekey_data/enable 1
 
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/cfg80211_gtk_rekey_notify/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/rdev_add_key/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/rdev_assoc/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/rdev_auth/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/rdev_connect/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/rdev_set_default_key/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/rdev_set_default_mgmt_key/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/cfg80211/rdev_set_rekey_data/enable 1
+
    # Enable datapath events for Wifi.
    # - Events are not actually logged until WifiService writes "1" to
    #   /sys/kernel/debug/tracing/instances/wifi/tracing_on.
@@ -50,6 +65,12 @@
    write /sys/kernel/debug/tracing/instances/wifi/events/net/netif_rx/enable 1
    write /sys/kernel/debug/tracing/instances/wifi/events/net/netif_receive_skb/enable 1
 
+   write /sys/kernel/tracing/instances/wifi/events/net/filter name==${wifi.interface:-wlan0}
+   write /sys/kernel/tracing/instances/wifi/events/net/net_dev_queue/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/net/net_dev_xmit/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/net/netif_rx/enable 1
+   write /sys/kernel/tracing/instances/wifi/events/net/netif_receive_skb/enable 1
+
    # Set DAC to allow system to enable/disable, and read wifi trace
    # events.
    chown system /sys/kernel/debug/tracing/instances/wifi/tracing_on
@@ -58,8 +79,16 @@
    chmod 200 /sys/kernel/debug/tracing/instances/wifi/tracing_on
    chmod 400 /sys/kernel/debug/tracing/instances/wifi/free_buffer
    chmod 600 /sys/kernel/debug/tracing/instances/wifi/trace
+
+   chown system /sys/kernel/tracing/instances/wifi/tracing_on
+   chown system /sys/kernel/tracing/instances/wifi/free_buffer
+   chown system /sys/kernel/tracing/instances/wifi/trace
+   chmod 200 /sys/kernel/tracing/instances/wifi/tracing_on
+   chmod 400 /sys/kernel/tracing/instances/wifi/free_buffer
+   chmod 600 /sys/kernel/tracing/instances/wifi/trace
    setprop sys.wifitracing.started 1
 
 on property:sys.boot_completed=1 && property:wifi.interface=* && property:sys.wifitracing.started=1
    # Override default value.
    write /sys/kernel/debug/tracing/instances/wifi/events/net/filter name==${wifi.interface}
+   write /sys/kernel/tracing/instances/wifi/events/net/filter name==${wifi.interface}