/src/estoraged/include/util.hpp
Line | Count | Source |
1 | | #pragma once |
2 | | #include "getConfig.hpp" |
3 | | |
4 | | #include <filesystem> |
5 | | #include <optional> |
6 | | #include <string> |
7 | | |
8 | | namespace estoraged |
9 | | { |
10 | | namespace util |
11 | | { |
12 | | |
13 | | struct DeviceInfo |
14 | | { |
15 | | std::filesystem::path deviceFile; |
16 | | std::filesystem::path sysfsDir; |
17 | | std::string luksName; |
18 | | std::string locationCode; |
19 | | uint64_t eraseMaxGeometry; |
20 | | uint64_t eraseMinGeometry; |
21 | | std::string driveType; |
22 | | std::string driveProtocol; |
23 | | |
24 | | DeviceInfo(std::filesystem::path& deviceFile, |
25 | | std::filesystem::path& sysfsDir, std::string& luksName, |
26 | | std::string& locationCode, uint64_t eraseMaxGeometry, |
27 | | uint64_t eraseMinGeometry, std::string& driveType, |
28 | | std::string& driveProtocol) : |
29 | 0 | deviceFile(deviceFile), sysfsDir(sysfsDir), luksName(luksName), |
30 | 0 | locationCode(locationCode), eraseMaxGeometry(eraseMaxGeometry), |
31 | 0 | eraseMinGeometry(eraseMinGeometry), driveType(driveType), |
32 | 0 | driveProtocol(driveProtocol) |
33 | 0 | {} |
34 | | }; |
35 | | |
36 | | /** @brief finds the size of the linux block device in bytes |
37 | | * @param[in] devpath - the name of the linux block device |
38 | | * @return size of a block device using the devPath |
39 | | */ |
40 | | uint64_t findSizeOfBlockDevice(const std::string& devPath); |
41 | | |
42 | | /** @brief finds the predicted life left for a eMMC device |
43 | | * @param[in] sysfsPath - The path to the linux sysfs interface |
44 | | * @return the life remaining for the emmc, as a percentage. |
45 | | */ |
46 | | uint8_t findPredictedMediaLifeLeftPercent(const std::string& sysfsPath); |
47 | | |
48 | | /** @brief Get the part number (aka part name) for the storage device |
49 | | * @param[in] sysfsPath - The path to the linux sysfs interface. |
50 | | * @return part name as a string (or "unknown" if it couldn't be retrieved) |
51 | | */ |
52 | | std::string getPartNumber(const std::filesystem::path& sysfsPath); |
53 | | |
54 | | /** @brief Get the serial number for the storage device |
55 | | * @param[in] sysfsPath - The path to the linux sysfs interface. |
56 | | * @return serial name as a string (or "unknown" if it couldn't be retrieved) |
57 | | */ |
58 | | std::string getSerialNumber(const std::filesystem::path& sysfsPath); |
59 | | |
60 | | /** @brief Look for the device described by the provided StorageData. |
61 | | * @details Currently, this function assumes that there's only one eMMC. |
62 | | * When we need to support multiple eMMCs, we will put more information in |
63 | | * the EntityManager config, to differentiate between them. Also, if we |
64 | | * want to support other types of storage devices, this function will need |
65 | | * to be updated. |
66 | | * |
67 | | * @param[in] data - map of properties from the config object. |
68 | | * @param[in] searchDir - directory to search for devices in sysfs, e.g. |
69 | | * /sys/block |
70 | | * @return DeviceInfo - metadata for the device if device is found. Null |
71 | | * otherwise. |
72 | | */ |
73 | | std::optional<DeviceInfo> findDevice(const StorageData& data, |
74 | | const std::filesystem::path& searchDir); |
75 | | |
76 | | } // namespace util |
77 | | |
78 | | } // namespace estoraged |