1*853c0dc5SEd Tanous #pragma once 2*853c0dc5SEd Tanous #include <nlohmann/json.hpp> 3*853c0dc5SEd Tanous 4*853c0dc5SEd Tanous namespace volume 5*853c0dc5SEd Tanous { 6*853c0dc5SEd Tanous // clang-format off 7*853c0dc5SEd Tanous 8*853c0dc5SEd Tanous enum class InitializeType{ 9*853c0dc5SEd Tanous Invalid, 10*853c0dc5SEd Tanous Fast, 11*853c0dc5SEd Tanous Slow, 12*853c0dc5SEd Tanous }; 13*853c0dc5SEd Tanous 14*853c0dc5SEd Tanous enum class InitializeMethod{ 15*853c0dc5SEd Tanous Invalid, 16*853c0dc5SEd Tanous Skip, 17*853c0dc5SEd Tanous Background, 18*853c0dc5SEd Tanous Foreground, 19*853c0dc5SEd Tanous }; 20*853c0dc5SEd Tanous 21*853c0dc5SEd Tanous enum class RAIDType{ 22*853c0dc5SEd Tanous Invalid, 23*853c0dc5SEd Tanous RAID0, 24*853c0dc5SEd Tanous RAID1, 25*853c0dc5SEd Tanous RAID3, 26*853c0dc5SEd Tanous RAID4, 27*853c0dc5SEd Tanous RAID5, 28*853c0dc5SEd Tanous RAID6, 29*853c0dc5SEd Tanous RAID10, 30*853c0dc5SEd Tanous RAID01, 31*853c0dc5SEd Tanous RAID6TP, 32*853c0dc5SEd Tanous RAID1E, 33*853c0dc5SEd Tanous RAID50, 34*853c0dc5SEd Tanous RAID60, 35*853c0dc5SEd Tanous RAID00, 36*853c0dc5SEd Tanous RAID10E, 37*853c0dc5SEd Tanous RAID1Triple, 38*853c0dc5SEd Tanous RAID10Triple, 39*853c0dc5SEd Tanous None, 40*853c0dc5SEd Tanous }; 41*853c0dc5SEd Tanous 42*853c0dc5SEd Tanous enum class VolumeType{ 43*853c0dc5SEd Tanous Invalid, 44*853c0dc5SEd Tanous RawDevice, 45*853c0dc5SEd Tanous NonRedundant, 46*853c0dc5SEd Tanous Mirrored, 47*853c0dc5SEd Tanous StripedWithParity, 48*853c0dc5SEd Tanous SpannedMirrors, 49*853c0dc5SEd Tanous SpannedStripesWithParity, 50*853c0dc5SEd Tanous }; 51*853c0dc5SEd Tanous 52*853c0dc5SEd Tanous enum class EncryptionTypes{ 53*853c0dc5SEd Tanous Invalid, 54*853c0dc5SEd Tanous NativeDriveEncryption, 55*853c0dc5SEd Tanous ControllerAssisted, 56*853c0dc5SEd Tanous SoftwareAssisted, 57*853c0dc5SEd Tanous }; 58*853c0dc5SEd Tanous 59*853c0dc5SEd Tanous enum class WriteHoleProtectionPolicyType{ 60*853c0dc5SEd Tanous Invalid, 61*853c0dc5SEd Tanous Off, 62*853c0dc5SEd Tanous Journaling, 63*853c0dc5SEd Tanous DistributedLog, 64*853c0dc5SEd Tanous Oem, 65*853c0dc5SEd Tanous }; 66*853c0dc5SEd Tanous 67*853c0dc5SEd Tanous enum class VolumeUsageType{ 68*853c0dc5SEd Tanous Invalid, 69*853c0dc5SEd Tanous Data, 70*853c0dc5SEd Tanous SystemData, 71*853c0dc5SEd Tanous CacheOnly, 72*853c0dc5SEd Tanous SystemReserve, 73*853c0dc5SEd Tanous ReplicationReserve, 74*853c0dc5SEd Tanous }; 75*853c0dc5SEd Tanous 76*853c0dc5SEd Tanous enum class ReadCachePolicyType{ 77*853c0dc5SEd Tanous Invalid, 78*853c0dc5SEd Tanous ReadAhead, 79*853c0dc5SEd Tanous AdaptiveReadAhead, 80*853c0dc5SEd Tanous Off, 81*853c0dc5SEd Tanous }; 82*853c0dc5SEd Tanous 83*853c0dc5SEd Tanous enum class WriteCachePolicyType{ 84*853c0dc5SEd Tanous Invalid, 85*853c0dc5SEd Tanous WriteThrough, 86*853c0dc5SEd Tanous ProtectedWriteBack, 87*853c0dc5SEd Tanous UnprotectedWriteBack, 88*853c0dc5SEd Tanous Off, 89*853c0dc5SEd Tanous }; 90*853c0dc5SEd Tanous 91*853c0dc5SEd Tanous enum class WriteCacheStateType{ 92*853c0dc5SEd Tanous Invalid, 93*853c0dc5SEd Tanous Unprotected, 94*853c0dc5SEd Tanous Protected, 95*853c0dc5SEd Tanous Degraded, 96*853c0dc5SEd Tanous }; 97*853c0dc5SEd Tanous 98*853c0dc5SEd Tanous enum class LBAFormatType{ 99*853c0dc5SEd Tanous Invalid, 100*853c0dc5SEd Tanous LBAFormat0, 101*853c0dc5SEd Tanous LBAFormat1, 102*853c0dc5SEd Tanous LBAFormat2, 103*853c0dc5SEd Tanous LBAFormat3, 104*853c0dc5SEd Tanous LBAFormat4, 105*853c0dc5SEd Tanous LBAFormat5, 106*853c0dc5SEd Tanous LBAFormat6, 107*853c0dc5SEd Tanous LBAFormat7, 108*853c0dc5SEd Tanous LBAFormat8, 109*853c0dc5SEd Tanous LBAFormat9, 110*853c0dc5SEd Tanous LBAFormat10, 111*853c0dc5SEd Tanous LBAFormat11, 112*853c0dc5SEd Tanous LBAFormat12, 113*853c0dc5SEd Tanous LBAFormat13, 114*853c0dc5SEd Tanous LBAFormat14, 115*853c0dc5SEd Tanous LBAFormat15, 116*853c0dc5SEd Tanous }; 117*853c0dc5SEd Tanous 118*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(InitializeType, { 119*853c0dc5SEd Tanous {InitializeType::Invalid, "Invalid"}, 120*853c0dc5SEd Tanous {InitializeType::Fast, "Fast"}, 121*853c0dc5SEd Tanous {InitializeType::Slow, "Slow"}, 122*853c0dc5SEd Tanous }); 123*853c0dc5SEd Tanous 124*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(InitializeMethod, { 125*853c0dc5SEd Tanous {InitializeMethod::Invalid, "Invalid"}, 126*853c0dc5SEd Tanous {InitializeMethod::Skip, "Skip"}, 127*853c0dc5SEd Tanous {InitializeMethod::Background, "Background"}, 128*853c0dc5SEd Tanous {InitializeMethod::Foreground, "Foreground"}, 129*853c0dc5SEd Tanous }); 130*853c0dc5SEd Tanous 131*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(RAIDType, { 132*853c0dc5SEd Tanous {RAIDType::Invalid, "Invalid"}, 133*853c0dc5SEd Tanous {RAIDType::RAID0, "RAID0"}, 134*853c0dc5SEd Tanous {RAIDType::RAID1, "RAID1"}, 135*853c0dc5SEd Tanous {RAIDType::RAID3, "RAID3"}, 136*853c0dc5SEd Tanous {RAIDType::RAID4, "RAID4"}, 137*853c0dc5SEd Tanous {RAIDType::RAID5, "RAID5"}, 138*853c0dc5SEd Tanous {RAIDType::RAID6, "RAID6"}, 139*853c0dc5SEd Tanous {RAIDType::RAID10, "RAID10"}, 140*853c0dc5SEd Tanous {RAIDType::RAID01, "RAID01"}, 141*853c0dc5SEd Tanous {RAIDType::RAID6TP, "RAID6TP"}, 142*853c0dc5SEd Tanous {RAIDType::RAID1E, "RAID1E"}, 143*853c0dc5SEd Tanous {RAIDType::RAID50, "RAID50"}, 144*853c0dc5SEd Tanous {RAIDType::RAID60, "RAID60"}, 145*853c0dc5SEd Tanous {RAIDType::RAID00, "RAID00"}, 146*853c0dc5SEd Tanous {RAIDType::RAID10E, "RAID10E"}, 147*853c0dc5SEd Tanous {RAIDType::RAID1Triple, "RAID1Triple"}, 148*853c0dc5SEd Tanous {RAIDType::RAID10Triple, "RAID10Triple"}, 149*853c0dc5SEd Tanous {RAIDType::None, "None"}, 150*853c0dc5SEd Tanous }); 151*853c0dc5SEd Tanous 152*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(VolumeType, { 153*853c0dc5SEd Tanous {VolumeType::Invalid, "Invalid"}, 154*853c0dc5SEd Tanous {VolumeType::RawDevice, "RawDevice"}, 155*853c0dc5SEd Tanous {VolumeType::NonRedundant, "NonRedundant"}, 156*853c0dc5SEd Tanous {VolumeType::Mirrored, "Mirrored"}, 157*853c0dc5SEd Tanous {VolumeType::StripedWithParity, "StripedWithParity"}, 158*853c0dc5SEd Tanous {VolumeType::SpannedMirrors, "SpannedMirrors"}, 159*853c0dc5SEd Tanous {VolumeType::SpannedStripesWithParity, "SpannedStripesWithParity"}, 160*853c0dc5SEd Tanous }); 161*853c0dc5SEd Tanous 162*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(EncryptionTypes, { 163*853c0dc5SEd Tanous {EncryptionTypes::Invalid, "Invalid"}, 164*853c0dc5SEd Tanous {EncryptionTypes::NativeDriveEncryption, "NativeDriveEncryption"}, 165*853c0dc5SEd Tanous {EncryptionTypes::ControllerAssisted, "ControllerAssisted"}, 166*853c0dc5SEd Tanous {EncryptionTypes::SoftwareAssisted, "SoftwareAssisted"}, 167*853c0dc5SEd Tanous }); 168*853c0dc5SEd Tanous 169*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(WriteHoleProtectionPolicyType, { 170*853c0dc5SEd Tanous {WriteHoleProtectionPolicyType::Invalid, "Invalid"}, 171*853c0dc5SEd Tanous {WriteHoleProtectionPolicyType::Off, "Off"}, 172*853c0dc5SEd Tanous {WriteHoleProtectionPolicyType::Journaling, "Journaling"}, 173*853c0dc5SEd Tanous {WriteHoleProtectionPolicyType::DistributedLog, "DistributedLog"}, 174*853c0dc5SEd Tanous {WriteHoleProtectionPolicyType::Oem, "Oem"}, 175*853c0dc5SEd Tanous }); 176*853c0dc5SEd Tanous 177*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(VolumeUsageType, { 178*853c0dc5SEd Tanous {VolumeUsageType::Invalid, "Invalid"}, 179*853c0dc5SEd Tanous {VolumeUsageType::Data, "Data"}, 180*853c0dc5SEd Tanous {VolumeUsageType::SystemData, "SystemData"}, 181*853c0dc5SEd Tanous {VolumeUsageType::CacheOnly, "CacheOnly"}, 182*853c0dc5SEd Tanous {VolumeUsageType::SystemReserve, "SystemReserve"}, 183*853c0dc5SEd Tanous {VolumeUsageType::ReplicationReserve, "ReplicationReserve"}, 184*853c0dc5SEd Tanous }); 185*853c0dc5SEd Tanous 186*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(ReadCachePolicyType, { 187*853c0dc5SEd Tanous {ReadCachePolicyType::Invalid, "Invalid"}, 188*853c0dc5SEd Tanous {ReadCachePolicyType::ReadAhead, "ReadAhead"}, 189*853c0dc5SEd Tanous {ReadCachePolicyType::AdaptiveReadAhead, "AdaptiveReadAhead"}, 190*853c0dc5SEd Tanous {ReadCachePolicyType::Off, "Off"}, 191*853c0dc5SEd Tanous }); 192*853c0dc5SEd Tanous 193*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(WriteCachePolicyType, { 194*853c0dc5SEd Tanous {WriteCachePolicyType::Invalid, "Invalid"}, 195*853c0dc5SEd Tanous {WriteCachePolicyType::WriteThrough, "WriteThrough"}, 196*853c0dc5SEd Tanous {WriteCachePolicyType::ProtectedWriteBack, "ProtectedWriteBack"}, 197*853c0dc5SEd Tanous {WriteCachePolicyType::UnprotectedWriteBack, "UnprotectedWriteBack"}, 198*853c0dc5SEd Tanous {WriteCachePolicyType::Off, "Off"}, 199*853c0dc5SEd Tanous }); 200*853c0dc5SEd Tanous 201*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(WriteCacheStateType, { 202*853c0dc5SEd Tanous {WriteCacheStateType::Invalid, "Invalid"}, 203*853c0dc5SEd Tanous {WriteCacheStateType::Unprotected, "Unprotected"}, 204*853c0dc5SEd Tanous {WriteCacheStateType::Protected, "Protected"}, 205*853c0dc5SEd Tanous {WriteCacheStateType::Degraded, "Degraded"}, 206*853c0dc5SEd Tanous }); 207*853c0dc5SEd Tanous 208*853c0dc5SEd Tanous NLOHMANN_JSON_SERIALIZE_ENUM(LBAFormatType, { 209*853c0dc5SEd Tanous {LBAFormatType::Invalid, "Invalid"}, 210*853c0dc5SEd Tanous {LBAFormatType::LBAFormat0, "LBAFormat0"}, 211*853c0dc5SEd Tanous {LBAFormatType::LBAFormat1, "LBAFormat1"}, 212*853c0dc5SEd Tanous {LBAFormatType::LBAFormat2, "LBAFormat2"}, 213*853c0dc5SEd Tanous {LBAFormatType::LBAFormat3, "LBAFormat3"}, 214*853c0dc5SEd Tanous {LBAFormatType::LBAFormat4, "LBAFormat4"}, 215*853c0dc5SEd Tanous {LBAFormatType::LBAFormat5, "LBAFormat5"}, 216*853c0dc5SEd Tanous {LBAFormatType::LBAFormat6, "LBAFormat6"}, 217*853c0dc5SEd Tanous {LBAFormatType::LBAFormat7, "LBAFormat7"}, 218*853c0dc5SEd Tanous {LBAFormatType::LBAFormat8, "LBAFormat8"}, 219*853c0dc5SEd Tanous {LBAFormatType::LBAFormat9, "LBAFormat9"}, 220*853c0dc5SEd Tanous {LBAFormatType::LBAFormat10, "LBAFormat10"}, 221*853c0dc5SEd Tanous {LBAFormatType::LBAFormat11, "LBAFormat11"}, 222*853c0dc5SEd Tanous {LBAFormatType::LBAFormat12, "LBAFormat12"}, 223*853c0dc5SEd Tanous {LBAFormatType::LBAFormat13, "LBAFormat13"}, 224*853c0dc5SEd Tanous {LBAFormatType::LBAFormat14, "LBAFormat14"}, 225*853c0dc5SEd Tanous {LBAFormatType::LBAFormat15, "LBAFormat15"}, 226*853c0dc5SEd Tanous }); 227*853c0dc5SEd Tanous 228*853c0dc5SEd Tanous } 229*853c0dc5SEd Tanous // clang-format on 230