blob: 2cfbc8e757cc8b4ea349c4d3e7ae01e49088857f [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: NodeProtocolSet 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;
};
/// 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;
};