blob: 5578765effa5071f8484de8d33b779ee50a1d588 [file] [log] [blame]
// 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.io2;
/// Objective information about a filesystem node.
/// See [`Node.GetAttributes`] and [`Node.UpdateAttributes`].
///
/// The attributes of a node should be stable, independent of the
/// specific protocol used to access it.
///
/// If a particular attribute is not applicable or not supported,
/// filesystems should leave the corresponding field absent.
table NodeAttributes {
/// Describes the kinds of representations supported by the node.
/// Note: This is not the result of the connection-time negotiation,
/// which is conveyed via `representation`.
///
/// This attribute is read-only.
1: NodeProtocols protocols;
/// Describes the kinds of operations supported by the node.
/// Note: This is distinct from the rights used at connection time.
///
/// This attribute is read-only.
2: Abilities abilities;
/// Node size, in bytes.
///
/// This attribute is read-only.
3: uint64 content_size;
/// Space needed to store the node (possibly larger than size), in bytes.
///
/// This attribute is read-only.
4: uint64 storage_size;
/// Number of hard links to the node. It must be at least one.
///
/// This attribute is read-only.
5: uint64 link_count;
/// Time of creation in nanoseconds since the Unix epoch, UTC.
/// It may be updated manually after creation.
6: uint64 creation_time;
/// Time of last modification in nanoseconds since the Unix epoch, UTC.
7: uint64 modification_time;
/// An ID for the node. See [`fuchsia.io2/Id`].
/// This `id` should be unique among all entries of a directory.
///
/// This attribute is read-only.
8: Id id;
};
/// When calling [`Node.GetAttributes`], set the corresponding bit to one
/// to query that particular attribute.
/// The elements here correspond one-to-one with [`NodeAttributes`].
bits NodeAttributesQuery : uint64 {
/// Requests [`NodeAttributes.protocols`].
PROTOCOLS = 0x1;
/// Requests [`NodeAttributes.abilities`].
ABILITIES = 0x2;
/// Requests [`NodeAttributes.content_size`].
CONTENT_SIZE = 0x4;
/// Requests [`NodeAttributes.storage_size`].
STORAGE_SIZE = 0x8;
/// Requests [`NodeAttributes.link_count`].
LINK_COUNT = 0x10;
/// Requests [`NodeAttributes.creation_time`].
CREATION_TIME = 0x20;
/// Requests [`NodeAttributes.modification_time`].
MODIFICATION_TIME = 0x40;
/// Requests [`NodeAttributes.id`].
ID = 0x80;
};