blob: d36193054dd68f98da6aaafd64772ee29a4f6ea7 [file] [log] [blame]
// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The kernel warning collector gathers logs from kernel warnings.
// Anomaly detector runs the kernel warning collector when it detects strings
// matching the expected warning pattern in /var/log/messages.
#ifndef CRASH_REPORTER_KERNEL_WARNING_COLLECTOR_H_
#define CRASH_REPORTER_KERNEL_WARNING_COLLECTOR_H_
#include <string>
#include <base/macros.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
#include "crash-reporter/crash_collector.h"
// Kernel warning collector.
class KernelWarningCollector : public CrashCollector {
public:
enum WarningType {
kGeneric,
kWifi,
kSMMUFault,
kSuspend,
// Iwlwifi is the name of Intel WiFi driver that we want to collect its
// error dumps.
kIwlwifi,
// Ath10k is the name of Qualcomm WiFi driver that we want to collect its
// error dumps.
kAth10k,
};
KernelWarningCollector();
KernelWarningCollector(const KernelWarningCollector&) = delete;
KernelWarningCollector& operator=(const KernelWarningCollector&) = delete;
~KernelWarningCollector() override;
// Collects warning.
bool Collect(int weight, WarningType type);
static CollectorInfo GetHandlerInfo(int32_t weight,
bool kernel_warning,
bool kernel_wifi_warning,
bool kernel_smmu_fault,
bool kernel_suspend_warning,
bool kernel_iwlwifi_error,
bool kernel_ath10k_error);
protected:
std::string warning_report_path_;
private:
friend class KernelWarningCollectorTest;
FRIEND_TEST(KernelWarningCollectorTest, CollectOK);
// Reads the full content of the kernel warn dump and its signature.
bool LoadKernelWarning(std::string* content,
std::string* signature,
std::string* func_name,
WarningType type);
bool ExtractSignature(const std::string& content,
std::string* signature,
std::string* func_name);
bool ExtractIwlwifiSignature(const std::string& content,
std::string* signature,
std::string* func_name);
bool ExtractSMMUFaultSignature(const std::string& content,
std::string* signature,
std::string* func_name);
bool ExtractAth10kSignature(const std::string& content,
std::string* signature,
std::string* func_name);
};
#endif // CRASH_REPORTER_KERNEL_WARNING_COLLECTOR_H_