libdm: fetch and present device status flags

Fetch detailed information for devices through its flags and store in
helper Info class, i.e.:
- active
- access
- activeTable
- inactiveTable
- bufferFull

Change-Id: I3241c5bca00e038d19f99390f40710ca7cff8456
Bug: 137759376
Test: manual test
Signed-off-by: Alessio Balsini <balsini@google.com>
This commit is contained in:
Alessio Balsini 2019-07-29 20:14:46 +01:00 committed by Alessio Balsini
parent 60fa8b8ad2
commit 1b80a23c57
2 changed files with 27 additions and 0 deletions

View file

@ -150,6 +150,15 @@ bool DeviceMapper::GetDeviceUniquePath(const std::string& name, std::string* pat
return true;
}
std::optional<DeviceMapper::Info> DeviceMapper::GetDetailedInfo(const std::string& name) const {
struct dm_ioctl io;
InitIo(&io, name);
if (ioctl(fd_, DM_DEV_STATUS, &io) < 0) {
return std::nullopt;
}
return Info(io.flags);
}
DmDeviceState DeviceMapper::GetState(const std::string& name) const {
struct dm_ioctl io;
InitIo(&io, name);

View file

@ -27,6 +27,7 @@
#include <chrono>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>
@ -70,10 +71,27 @@ class DeviceMapper final {
uint64_t dev_;
};
class Info {
uint32_t flags_;
public:
explicit Info(uint32_t flags) : flags_(flags) {}
bool IsActiveTablePresent() const { return flags_ & DM_ACTIVE_PRESENT_FLAG; }
bool IsBufferFull() const { return flags_ & DM_BUFFER_FULL_FLAG; }
bool IsInactiveTablePresent() const { return flags_ & DM_INACTIVE_PRESENT_FLAG; }
bool IsReadOnly() const { return flags_ & DM_READONLY_FLAG; }
bool IsSuspended() const { return flags_ & DM_SUSPEND_FLAG; }
};
// Removes a device mapper device with the given name.
// Returns 'true' on success, false otherwise.
bool DeleteDevice(const std::string& name);
// Fetches and returns the complete state of the underlying device mapper
// device with given name.
std::optional<Info> GetDetailedInfo(const std::string& name) const;
// Returns the current state of the underlying device mapper device
// with given name.
// One of INVALID, SUSPENDED or ACTIVE.