blob: 81f2a80def18a00ccd17456b54a320f02ecd38f6 [file] [log] [blame]
// Copyright 2020 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 CRYPTOHOME_STORAGE_ENCRYPTED_CONTAINER_LOOPBACK_DEVICE_H_
#define CRYPTOHOME_STORAGE_ENCRYPTED_CONTAINER_LOOPBACK_DEVICE_H_
#include "cryptohome/storage/encrypted_container/backing_device.h"
#include <memory>
#include <string>
#include <base/files/file_path.h>
#include <base/values.h>
#include <brillo/blkdev_utils/loop_device.h>
#include "cryptohome/platform.h"
namespace cryptohome {
// `LoopbackDevice` represents a loop device over a sparse backing file.
class LoopbackDevice : public BackingDevice {
public:
// LoopbackDevices are defined by the following config values:
// - `name`: Name of the loopback device. This should be unique across
// loop devices. For all operations, loopback devices are queried
// by name.
// - `size`: Size of the underlying sparse file.
// - `backing_file_path`: Path of the backing sparse file.
LoopbackDevice(
const BackingDeviceConfig& config,
Platform* platform,
std::unique_ptr<brillo::LoopDeviceManager> loop_device_manager);
LoopbackDevice(const BackingDeviceConfig& config, Platform* platform);
~LoopbackDevice() = default;
// Creates the sparse backing file.
bool Create() override;
// Removes the sparse backing file. This function should only be called when
// the loopback device is not active.
bool Purge() override;
// Sets up the loopback device and sets the loopback device name.
bool Setup() override;
// Detaches the loopback device by name.
bool Teardown() override;
// Gets the device type for reporting.
BackingDeviceType GetType() override {
return BackingDeviceType::kLoopbackDevice;
}
// Gets the device path for the loop device.
base::Optional<base::FilePath> GetPath() override;
private:
friend class LoopbackDevicePeer;
const std::string name_;
const size_t size_;
const base::FilePath backing_file_path_;
Platform* platform_;
std::unique_ptr<brillo::LoopDeviceManager> loop_device_manager_;
};
} // namespace cryptohome
#endif // CRYPTOHOME_STORAGE_ENCRYPTED_CONTAINER_LOOPBACK_DEVICE_H_