blob: 5db5e156ff58d3d6bcf4cd37ac82057f5893418b [file] [log] [blame]
// Copyright 2021 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.
#ifndef PCIGUARD_UDEV_MONITOR_H_
#define PCIGUARD_UDEV_MONITOR_H_
#include <libudev.h>
#include <map>
#include <memory>
#include <string>
#include <utility>
#include <base/files/file_descriptor_watcher_posix.h>
#include <base/files/file_path.h>
#include <brillo/udev/udev.h>
#include <brillo/udev/udev_device.h>
#include <brillo/udev/udev_monitor.h>
#include "pciguard/event_handler.h"
namespace pciguard {
// Class to monitor thunderbolt/PCI udev events
class UdevMonitor {
public:
using PcidevBlockedFn = std::function<void(const std::string& drvr)>;
explicit UdevMonitor(EventHandler* ev_handler, PcidevBlockedFn callback);
UdevMonitor(const UdevMonitor&) = delete;
UdevMonitor& operator=(const UdevMonitor&) = delete;
~UdevMonitor() = default;
private:
// Handle Udev events emanating from |udev_monitor_watcher_|.
void OnUdevEvent();
std::unique_ptr<brillo::Udev> udev_;
std::unique_ptr<brillo::UdevMonitor> udev_monitor_;
std::unique_ptr<base::FileDescriptorWatcher::Controller>
udev_monitor_watcher_;
std::unique_ptr<EventHandler> event_handler_;
PcidevBlockedFn pcidev_blocked_callback_;
};
} // namespace pciguard
#endif // PCIGUARD_UDEV_MONITOR_H_