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}