osd_attributes.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. #ifndef __OSD_ATTRIBUTES_H__
  2. #define __OSD_ATTRIBUTES_H__
  3. #include "osd_protocol.h"
  4. /*
  5. * Contains types and constants that define attribute pages and attribute
  6. * numbers and their data types.
  7. */
  8. #define ATTR_SET(pg, id, l, ptr) \
  9. { .attr_page = pg, .attr_id = id, .len = l, .val_ptr = ptr }
  10. #define ATTR_DEF(pg, id, l) ATTR_SET(pg, id, l, NULL)
  11. /* osd-r10 4.7.3 Attributes pages */
  12. enum {
  13. OSD_APAGE_OBJECT_FIRST = 0x0,
  14. OSD_APAGE_OBJECT_DIRECTORY = 0,
  15. OSD_APAGE_OBJECT_INFORMATION = 1,
  16. OSD_APAGE_OBJECT_QUOTAS = 2,
  17. OSD_APAGE_OBJECT_TIMESTAMP = 3,
  18. OSD_APAGE_OBJECT_COLLECTIONS = 4,
  19. OSD_APAGE_OBJECT_SECURITY = 5,
  20. OSD_APAGE_OBJECT_LAST = 0x2fffffff,
  21. OSD_APAGE_PARTITION_FIRST = 0x30000000,
  22. OSD_APAGE_PARTITION_DIRECTORY = OSD_APAGE_PARTITION_FIRST + 0,
  23. OSD_APAGE_PARTITION_INFORMATION = OSD_APAGE_PARTITION_FIRST + 1,
  24. OSD_APAGE_PARTITION_QUOTAS = OSD_APAGE_PARTITION_FIRST + 2,
  25. OSD_APAGE_PARTITION_TIMESTAMP = OSD_APAGE_PARTITION_FIRST + 3,
  26. OSD_APAGE_PARTITION_SECURITY = OSD_APAGE_PARTITION_FIRST + 5,
  27. OSD_APAGE_PARTITION_LAST = 0x5FFFFFFF,
  28. OSD_APAGE_COLLECTION_FIRST = 0x60000000,
  29. OSD_APAGE_COLLECTION_DIRECTORY = OSD_APAGE_COLLECTION_FIRST + 0,
  30. OSD_APAGE_COLLECTION_INFORMATION = OSD_APAGE_COLLECTION_FIRST + 1,
  31. OSD_APAGE_COLLECTION_TIMESTAMP = OSD_APAGE_COLLECTION_FIRST + 3,
  32. OSD_APAGE_COLLECTION_SECURITY = OSD_APAGE_COLLECTION_FIRST + 5,
  33. OSD_APAGE_COLLECTION_LAST = 0x8FFFFFFF,
  34. OSD_APAGE_ROOT_FIRST = 0x90000000,
  35. OSD_APAGE_ROOT_DIRECTORY = OSD_APAGE_ROOT_FIRST + 0,
  36. OSD_APAGE_ROOT_INFORMATION = OSD_APAGE_ROOT_FIRST + 1,
  37. OSD_APAGE_ROOT_QUOTAS = OSD_APAGE_ROOT_FIRST + 2,
  38. OSD_APAGE_ROOT_TIMESTAMP = OSD_APAGE_ROOT_FIRST + 3,
  39. OSD_APAGE_ROOT_SECURITY = OSD_APAGE_ROOT_FIRST + 5,
  40. OSD_APAGE_ROOT_LAST = 0xBFFFFFFF,
  41. OSD_APAGE_RESERVED_TYPE_FIRST = 0xC0000000,
  42. OSD_APAGE_RESERVED_TYPE_LAST = 0xEFFFFFFF,
  43. OSD_APAGE_COMMON_FIRST = 0xF0000000,
  44. OSD_APAGE_COMMON_LAST = 0xFFFFFFFE,
  45. OSD_APAGE_REQUEST_ALL = 0xFFFFFFFF,
  46. };
  47. /* subcategories of attr pages within each range above */
  48. enum {
  49. OSD_APAGE_STD_FIRST = 0x0,
  50. OSD_APAGE_STD_DIRECTORY = 0,
  51. OSD_APAGE_STD_INFORMATION = 1,
  52. OSD_APAGE_STD_QUOTAS = 2,
  53. OSD_APAGE_STD_TIMESTAMP = 3,
  54. OSD_APAGE_STD_COLLECTIONS = 4,
  55. OSD_APAGE_STD_POLICY_SECURITY = 5,
  56. OSD_APAGE_STD_LAST = 0x0000007F,
  57. OSD_APAGE_RESERVED_FIRST = 0x00000080,
  58. OSD_APAGE_RESERVED_LAST = 0x00007FFF,
  59. OSD_APAGE_OTHER_STD_FIRST = 0x00008000,
  60. OSD_APAGE_OTHER_STD_LAST = 0x0000EFFF,
  61. OSD_APAGE_PUBLIC_FIRST = 0x0000F000,
  62. OSD_APAGE_PUBLIC_LAST = 0x0000FFFF,
  63. OSD_APAGE_APP_DEFINED_FIRST = 0x00010000,
  64. OSD_APAGE_APP_DEFINED_LAST = 0x1FFFFFFF,
  65. OSD_APAGE_VENDOR_SPECIFIC_FIRST = 0x20000000,
  66. OSD_APAGE_VENDOR_SPECIFIC_LAST = 0x2FFFFFFF,
  67. };
  68. enum {
  69. OSD_ATTR_PAGE_IDENTIFICATION = 0, /* in all pages 40 bytes */
  70. };
  71. struct page_identification {
  72. u8 vendor_identification[8];
  73. u8 page_identification[32];
  74. } __packed;
  75. struct osd_attr_page_header {
  76. __be32 page_number;
  77. __be32 page_length;
  78. } __packed;
  79. /* 7.1.2.8 Root Information attributes page (OSD_APAGE_ROOT_INFORMATION) */
  80. enum {
  81. OSD_ATTR_RI_OSD_SYSTEM_ID = 0x3, /* 20 */
  82. OSD_ATTR_RI_VENDOR_IDENTIFICATION = 0x4, /* 8 */
  83. OSD_ATTR_RI_PRODUCT_IDENTIFICATION = 0x5, /* 16 */
  84. OSD_ATTR_RI_PRODUCT_MODEL = 0x6, /* 32 */
  85. OSD_ATTR_RI_PRODUCT_REVISION_LEVEL = 0x7, /* 4 */
  86. OSD_ATTR_RI_PRODUCT_SERIAL_NUMBER = 0x8, /* variable */
  87. OSD_ATTR_RI_OSD_NAME = 0x9, /* variable */
  88. OSD_ATTR_RI_TOTAL_CAPACITY = 0x80, /* 8 */
  89. OSD_ATTR_RI_USED_CAPACITY = 0x81, /* 8 */
  90. OSD_ATTR_RI_NUMBER_OF_PARTITIONS = 0xC0, /* 8 */
  91. OSD_ATTR_RI_CLOCK = 0x100, /* 6 */
  92. };
  93. /* Root_Information_attributes_page does not have a get_page structure */
  94. /* 7.1.2.9 Partition Information attributes page
  95. * (OSD_APAGE_PARTITION_INFORMATION)
  96. */
  97. enum {
  98. OSD_ATTR_PI_PARTITION_ID = 0x1, /* 8 */
  99. OSD_ATTR_PI_USERNAME = 0x9, /* variable */
  100. OSD_ATTR_PI_USED_CAPACITY = 0x81, /* 8 */
  101. OSD_ATTR_PI_NUMBER_OF_OBJECTS = 0xC1, /* 8 */
  102. };
  103. /* Partition Information attributes page does not have a get_page structure */
  104. /* 7.1.2.10 Collection Information attributes page
  105. * (OSD_APAGE_COLLECTION_INFORMATION)
  106. */
  107. enum {
  108. OSD_ATTR_CI_PARTITION_ID = 0x1, /* 8 */
  109. OSD_ATTR_CI_COLLECTION_OBJECT_ID = 0x2, /* 8 */
  110. OSD_ATTR_CI_USERNAME = 0x9, /* variable */
  111. OSD_ATTR_CI_USED_CAPACITY = 0x81, /* 8 */
  112. };
  113. /* Collection Information attributes page does not have a get_page structure */
  114. /* 7.1.2.11 User Object Information attributes page
  115. * (OSD_APAGE_OBJECT_INFORMATION)
  116. */
  117. enum {
  118. OSD_ATTR_OI_PARTITION_ID = 0x1, /* 8 */
  119. OSD_ATTR_OI_OBJECT_ID = 0x2, /* 8 */
  120. OSD_ATTR_OI_USERNAME = 0x9, /* variable */
  121. OSD_ATTR_OI_USED_CAPACITY = 0x81, /* 8 */
  122. OSD_ATTR_OI_LOGICAL_LENGTH = 0x82, /* 8 */
  123. };
  124. /* Object Information attributes page does not have a get_page structure */
  125. /* 7.1.2.12 Root Quotas attributes page (OSD_APAGE_ROOT_QUOTAS) */
  126. enum {
  127. OSD_ATTR_RQ_DEFAULT_MAXIMUM_USER_OBJECT_LENGTH = 0x1, /* 8 */
  128. OSD_ATTR_RQ_PARTITION_CAPACITY_QUOTA = 0x10001, /* 8 */
  129. OSD_ATTR_RQ_PARTITION_OBJECT_COUNT = 0x10002, /* 8 */
  130. OSD_ATTR_RQ_PARTITION_COLLECTIONS_PER_USER_OBJECT = 0x10081, /* 4 */
  131. OSD_ATTR_RQ_PARTITION_COUNT = 0x20002, /* 8 */
  132. };
  133. struct Root_Quotas_attributes_page {
  134. struct osd_attr_page_header hdr; /* id=R+2, size=0x24 */
  135. __be64 default_maximum_user_object_length;
  136. __be64 partition_capacity_quota;
  137. __be64 partition_object_count;
  138. __be64 partition_collections_per_user_object;
  139. __be64 partition_count;
  140. } __packed;
  141. /* 7.1.2.13 Partition Quotas attributes page (OSD_APAGE_PARTITION_QUOTAS)*/
  142. enum {
  143. OSD_ATTR_PQ_DEFAULT_MAXIMUM_USER_OBJECT_LENGTH = 0x1, /* 8 */
  144. OSD_ATTR_PQ_CAPACITY_QUOTA = 0x10001, /* 8 */
  145. OSD_ATTR_PQ_OBJECT_COUNT = 0x10002, /* 8 */
  146. OSD_ATTR_PQ_COLLECTIONS_PER_USER_OBJECT = 0x10081, /* 4 */
  147. };
  148. struct Partition_Quotas_attributes_page {
  149. struct osd_attr_page_header hdr; /* id=P+2, size=0x1C */
  150. __be64 default_maximum_user_object_length;
  151. __be64 capacity_quota;
  152. __be64 object_count;
  153. __be64 collections_per_user_object;
  154. } __packed;
  155. /* 7.1.2.14 User Object Quotas attributes page (OSD_APAGE_OBJECT_QUOTAS) */
  156. enum {
  157. OSD_ATTR_OQ_MAXIMUM_LENGTH = 0x1, /* 8 */
  158. };
  159. struct Object_Quotas_attributes_page {
  160. struct osd_attr_page_header hdr; /* id=U+2, size=0x8 */
  161. __be64 maximum_length;
  162. } __packed;
  163. /* 7.1.2.15 Root Timestamps attributes page (OSD_APAGE_ROOT_TIMESTAMP) */
  164. enum {
  165. OSD_ATTR_RT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */
  166. OSD_ATTR_RT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */
  167. OSD_ATTR_RT_TIMESTAMP_BYPASS = 0xFFFFFFFE, /* 1 */
  168. };
  169. struct root_timestamps_attributes_page {
  170. struct osd_attr_page_header hdr; /* id=R+3, size=0xD */
  171. struct osd_timestamp attributes_accessed_time;
  172. struct osd_timestamp attributes_modified_time;
  173. u8 timestamp_bypass;
  174. } __packed;
  175. /* 7.1.2.16 Partition Timestamps attributes page
  176. * (OSD_APAGE_PARTITION_TIMESTAMP)
  177. */
  178. enum {
  179. OSD_ATTR_PT_CREATED_TIME = 0x1, /* 6 */
  180. OSD_ATTR_PT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */
  181. OSD_ATTR_PT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */
  182. OSD_ATTR_PT_DATA_ACCESSED_TIME = 0x4, /* 6 */
  183. OSD_ATTR_PT_DATA_MODIFIED_TIME = 0x5, /* 6 */
  184. OSD_ATTR_PT_TIMESTAMP_BYPASS = 0xFFFFFFFE, /* 1 */
  185. };
  186. struct partition_timestamps_attributes_page {
  187. struct osd_attr_page_header hdr; /* id=P+3, size=0x1F */
  188. struct osd_timestamp created_time;
  189. struct osd_timestamp attributes_accessed_time;
  190. struct osd_timestamp attributes_modified_time;
  191. struct osd_timestamp data_accessed_time;
  192. struct osd_timestamp data_modified_time;
  193. u8 timestamp_bypass;
  194. } __packed;
  195. /* 7.1.2.17/18 Collection/Object Timestamps attributes page
  196. * (OSD_APAGE_COLLECTION_TIMESTAMP/OSD_APAGE_OBJECT_TIMESTAMP)
  197. */
  198. enum {
  199. OSD_ATTR_OT_CREATED_TIME = 0x1, /* 6 */
  200. OSD_ATTR_OT_ATTRIBUTES_ACCESSED_TIME = 0x2, /* 6 */
  201. OSD_ATTR_OT_ATTRIBUTES_MODIFIED_TIME = 0x3, /* 6 */
  202. OSD_ATTR_OT_DATA_ACCESSED_TIME = 0x4, /* 6 */
  203. OSD_ATTR_OT_DATA_MODIFIED_TIME = 0x5, /* 6 */
  204. };
  205. /* same for collection */
  206. struct object_timestamps_attributes_page {
  207. struct osd_attr_page_header hdr; /* id=C+3/3, size=0x1E */
  208. struct osd_timestamp created_time;
  209. struct osd_timestamp attributes_accessed_time;
  210. struct osd_timestamp attributes_modified_time;
  211. struct osd_timestamp data_accessed_time;
  212. struct osd_timestamp data_modified_time;
  213. } __packed;
  214. /* 7.1.2.19 Collections attributes page */
  215. /* TBD */
  216. /* 7.1.2.20 Root Policy/Security attributes page (OSD_APAGE_ROOT_SECURITY) */
  217. enum {
  218. OSD_ATTR_RS_DEFAULT_SECURITY_METHOD = 0x1, /* 1 */
  219. OSD_ATTR_RS_OLDEST_VALID_NONCE_LIMIT = 0x2, /* 6 */
  220. OSD_ATTR_RS_NEWEST_VALID_NONCE_LIMIT = 0x3, /* 6 */
  221. OSD_ATTR_RS_PARTITION_DEFAULT_SECURITY_METHOD = 0x6, /* 1 */
  222. OSD_ATTR_RS_SUPPORTED_SECURITY_METHODS = 0x7, /* 2 */
  223. OSD_ATTR_RS_ADJUSTABLE_CLOCK = 0x9, /* 6 */
  224. OSD_ATTR_RS_MASTER_KEY_IDENTIFIER = 0x7FFD, /* 0 or 7 */
  225. OSD_ATTR_RS_ROOT_KEY_IDENTIFIER = 0x7FFE, /* 0 or 7 */
  226. OSD_ATTR_RS_SUPPORTED_INTEGRITY_ALGORITHM_0 = 0x80000000,/* 1,(x16)*/
  227. OSD_ATTR_RS_SUPPORTED_DH_GROUP_0 = 0x80000010,/* 1,(x16)*/
  228. };
  229. struct root_security_attributes_page {
  230. struct osd_attr_page_header hdr; /* id=R+5, size=0x3F */
  231. u8 default_security_method;
  232. u8 partition_default_security_method;
  233. __be16 supported_security_methods;
  234. u8 mki_valid_rki_valid;
  235. struct osd_timestamp oldest_valid_nonce_limit;
  236. struct osd_timestamp newest_valid_nonce_limit;
  237. struct osd_timestamp adjustable_clock;
  238. u8 master_key_identifier[32-25];
  239. u8 root_key_identifier[39-32];
  240. u8 supported_integrity_algorithm[16];
  241. u8 supported_dh_group[16];
  242. } __packed;
  243. /* 7.1.2.21 Partition Policy/Security attributes page
  244. * (OSD_APAGE_PARTITION_SECURITY)
  245. */
  246. enum {
  247. OSD_ATTR_PS_DEFAULT_SECURITY_METHOD = 0x1, /* 1 */
  248. OSD_ATTR_PS_OLDEST_VALID_NONCE = 0x2, /* 6 */
  249. OSD_ATTR_PS_NEWEST_VALID_NONCE = 0x3, /* 6 */
  250. OSD_ATTR_PS_REQUEST_NONCE_LIST_DEPTH = 0x4, /* 2 */
  251. OSD_ATTR_PS_FROZEN_WORKING_KEY_BIT_MASK = 0x5, /* 2 */
  252. OSD_ATTR_PS_PARTITION_KEY_IDENTIFIER = 0x7FFF, /* 0 or 7 */
  253. OSD_ATTR_PS_WORKING_KEY_IDENTIFIER_FIRST = 0x8000, /* 0 or 7 */
  254. OSD_ATTR_PS_WORKING_KEY_IDENTIFIER_LAST = 0x800F, /* 0 or 7 */
  255. OSD_ATTR_PS_POLICY_ACCESS_TAG = 0x40000001, /* 4 */
  256. OSD_ATTR_PS_USER_OBJECT_POLICY_ACCESS_TAG = 0x40000002, /* 4 */
  257. };
  258. struct partition_security_attributes_page {
  259. struct osd_attr_page_header hdr; /* id=p+5, size=0x8f */
  260. u8 reserved[3];
  261. u8 default_security_method;
  262. struct osd_timestamp oldest_valid_nonce;
  263. struct osd_timestamp newest_valid_nonce;
  264. __be16 request_nonce_list_depth;
  265. __be16 frozen_working_key_bit_mask;
  266. __be32 policy_access_tag;
  267. __be32 user_object_policy_access_tag;
  268. u8 pki_valid;
  269. __be16 wki_00_0f_vld;
  270. struct osd_key_identifier partition_key_identifier;
  271. struct osd_key_identifier working_key_identifiers[16];
  272. } __packed;
  273. /* 7.1.2.22/23 Collection/Object Policy-Security attributes page
  274. * (OSD_APAGE_COLLECTION_SECURITY/OSD_APAGE_OBJECT_SECURITY)
  275. */
  276. enum {
  277. OSD_ATTR_OS_POLICY_ACCESS_TAG = 0x40000001, /* 4 */
  278. };
  279. struct object_security_attributes_page {
  280. struct osd_attr_page_header hdr; /* id=C+5/5, size=4 */
  281. __be32 policy_access_tag;
  282. } __packed;
  283. #endif /*ndef __OSD_ATTRIBUTES_H__*/