| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| library fuchsia.fs; |
| |
| using fuchsia.io2; |
| using zx; |
| |
| /// `Query` exposes objective filesystem information independent of specific |
| /// files and directories. |
| [Discoverable] |
| protocol Query { |
| /// Queries the filesystem. |
| /// |
| /// + `query` specifies the fields in `FilesystemInfo` that the caller is |
| /// interested in. |
| /// - `info` see [`fuchsia.fs/FilesystemInfo`] for details on the fields. |
| /// |
| GetInfo(FilesystemInfoQuery query) -> (FilesystemInfo info) error zx.status; |
| |
| /// Checks if a node is associated with this filesystem, given some token |
| /// representing a connection to that node. |
| IsNodeInFilesystem(zx.handle:EVENT token) -> (bool is_in_filesystem); |
| }; |
| |
| /// Information about a filesystem. |
| /// |
| /// If a particular field is not applicable or not supported, implementations |
| /// should leave it absent. |
| resource table FilesystemInfo { |
| /// The number of data bytes which may be stored in the filesystem. |
| 1: uint64 total_bytes; |
| |
| /// The number of data bytes which are in use by the filesystem. |
| /// Note that this value may change in the mean time. |
| 2: uint64 used_bytes; |
| |
| /// The number of nodes which may be stored in the filesystem. |
| 3: uint64 total_nodes; |
| |
| /// The number of nodes used by the filesystem. |
| /// Note that this value may change in the mean time. |
| 4: uint64 used_nodes; |
| |
| /// The amount of space which may be allocated from the underlying |
| /// volume manager. Note that this value may change in the mean time. |
| 5: uint64 free_shared_pool_bytes; |
| |
| /// A globally unique identifier for this filesystem instance. |
| 6: zx.handle:EVENT fs_id; |
| |
| /// The size of a single filesystem block. |
| 7: uint32 block_size; |
| |
| /// The maximum length of a filesystem name. |
| 8: uint32 max_node_name_size; |
| |
| /// A unique identifier for the type of the underlying filesystem. |
| 9: FsType fs_type; |
| |
| /// The name of the filesystem. |
| 10: string:MAX_FS_NAME_LENGTH name; |
| |
| /// Path to the device backing this filesystem. |
| 11: fuchsia.io2.Path device_path; |
| }; |
| |
| /// When calling [`Query.GetInfo`], set the corresponding bit to one |
| /// to query a particular field. |
| /// The elements here correspond one-to-one with [`FilesystemInfo`]. |
| bits FilesystemInfoQuery : uint64 { |
| /// Requests [`FilesystemInfoQuery.total_bytes`]. |
| TOTAL_BYTES = 0x1; |
| |
| /// Requests [`FilesystemInfoQuery.used_bytes`]. |
| USED_BYTES = 0x2; |
| |
| /// Requests [`FilesystemInfoQuery.total_nodes`]. |
| TOTAL_NODES = 0x4; |
| |
| /// Requests [`FilesystemInfoQuery.used_nodes`]. |
| USED_NODES = 0x8; |
| |
| /// Requests [`FilesystemInfoQuery.free_shared_pool_bytes`]. |
| FREE_SHARED_POOL_BYTES = 0x10; |
| |
| /// Requests [`FilesystemInfoQuery.fs_id`]. |
| FS_ID = 0x20; |
| |
| /// Requests [`FilesystemInfoQuery.block_size`]. |
| BLOCK_SIZE = 0x40; |
| |
| /// Requests [`FilesystemInfoQuery.max_node_name_size`]. |
| MAX_NODE_NAME_SIZE = 0x80; |
| |
| /// Requests [`FilesystemInfoQuery.fs_type`]. |
| FS_TYPE = 0x100; |
| |
| /// Requests [`FilesystemInfoQuery.name`]. |
| NAME = 0x200; |
| |
| /// Requests [`FilesystemInfoQuery.device_path`]. |
| DEVICE_PATH = 0x400; |
| }; |
| |
| /// The maximum length of the name of a filesystem. |
| const uint64 MAX_FS_NAME_LENGTH = 32; |
| |
| /// The type of the filesystem. |
| /// |
| /// This enum should be flexible, to accommodate future additions. |
| enum FsType : uint32 { |
| BLOBFS = 0x9e694d21; |
| FACTORYFS = 0x1e694d21; |
| FATFS = 0xce694d21; |
| MINFS = 0x6e694d21; |
| MEMFS = 0x3e694d21; |
| }; |