fuchsia.io

Added: 7

PROTOCOLS

AdvisoryLocking

Defined in fuchsia.io/locking.fidl

Advisory locking protocol.

This protocol is intended to be composed into the |File| protocol to provide support for advisory locking.

Advisory locks are purely advisory. They do not prevent actual read or write operations from occurring on the file, either through this connection or through other connections.

These primitives are designed to support the flock() and fcntl(), specifically F_SETLK, F_SETLKW, and F_GETLK, functionality that code running on Fuchsia expects from other operating systems.

AdvisoryLock

Acquires an advisory lock on the underlying file.

The lock lasts until either this connection is closed or this method is called with |AdvisoryLockType.UNLOCK| to release the lock explicitly.

Advisory locks are purely advisory. They do not prevent actual read or write operations from occurring on the file, either through this connection or through other connections.

This method requires the following rights:

Errors

  • ZX_ERR_BAD_STATE The specified type of lock cannot be acquired. For example, another connection might hold a conflicting lock type.
  • ZX_ERR_NOT_SUPPORTED This file does not support advisory locking.
  • ZX_ERR_ACCESS_DENIED This connection does not have sufficient rights to acquire the given type of lock.

Request

NameType
request AdvisoryLockRequest

Response

NameType
payload AdvisoryLocking_AdvisoryLock_Result

Directory

Defined in fuchsia.io/directory.fidl

AdvisoryLock

Acquires an advisory lock on the underlying file.

The lock lasts until either this connection is closed or this method is called with |AdvisoryLockType.UNLOCK| to release the lock explicitly.

Advisory locks are purely advisory. They do not prevent actual read or write operations from occurring on the file, either through this connection or through other connections.

This method requires the following rights:

Errors

  • ZX_ERR_BAD_STATE The specified type of lock cannot be acquired. For example, another connection might hold a conflicting lock type.
  • ZX_ERR_NOT_SUPPORTED This file does not support advisory locking.
  • ZX_ERR_ACCESS_DENIED This connection does not have sufficient rights to acquire the given type of lock.

Request

NameType
request AdvisoryLockRequest

Response

NameType
payload AdvisoryLocking_AdvisoryLock_Result

Clone

Create another connection to the same remote object.

flags may be any of:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

All other flags are ignored.

The OpenFlags.RIGHT_* bits in flags request corresponding rights over the resulting cloned object. The cloned object must have rights less than or equal to the original object, otherwise returns ZX_ERR_ACCESS_DENIED. Alternatively, pass OpenFlags.CLONE_SAME_RIGHTS to inherit the rights on the source connection. It is invalid to pass any of the OpenFlags.RIGHT_* flags together with OpenFlags.CLONE_SAME_RIGHTS.

Request

NameType
flags OpenFlags
object server_end<Node>

Close

Terminates the connection.

After calling Close, the client must not send any other requests.

Servers, after sending the status response, should close the connection regardless of status and without sending an epitaph.

Closing the client end of the channel should be semantically equivalent to calling Close without knowing when the close has completed or its status.

Request

<EMPTY>

Response

NameType
payload fuchsia.unknown/Closeable_Close_Result

Creates a symbolic link.

name is the name to be given to the created symbolic link. target is the target of the symbolic link, which has no meaning on the server. The server will perform no validation of target except for a server chosen maximum length. connection is an optional server end of a channel that will speak the Symlink protocol on the successfully created node.

  • Rights.MODIFY_DIRECTORY

  • error ZX_ERR_ALREADY_EXISTS if name already exists.

  • error ZX_ERR_BAD_PATH if target exceeds the server length limit for symbolic links.

  • error ZX_ERR_INVALID_ARGS if name is not a valid Name.

  • error ZX_ERR_NOT_SUPPORTED if creating symbolic links is not supported by the server.

Added: HEAD
NameType
name Name
target SymlinkTarget
connection server_end<Symlink>?
NameType
payload Directory2_CreateSymlink_Result

Enumerate

Initiates a directory listing operation over the input channel, starting at seek offset 0.

This method requires the Rights.ENUMERATE right. If this right is absent, iterator will be closed with a ZX_ERR_ACCESS_DENIED epitaph.

Request

NameType
options DirectoryEnumerateOptions
iterator server_end<DirectoryIterator>

GetAttr

Acquires information about the node.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
attributes NodeAttributes

GetAttributes

Acquires information about the node.

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.

  • query a bit-mask specifying which attributes to fetch. The server should not return more than necessary.
  • attributes the returned attributes.

This method requires the Rights.GET_ATTRIBUTES right.

Request

NameType
query NodeAttributesQuery

Response

NameType
payload Node2_GetAttributes_Result

GetConnectionInfo

Acquires information about the connection.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload ConnectionInfo

GetExtendedAttribute

Get the value associated with the given attribute name for this node.

Attribute names have a maximum length of MAX_ATTRIBUTE_NAME. No particular structure is imposed on them.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_GetExtendedAttribute_Result

GetFlags

Acquires the Directory.Open rights and flags used to access this file.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
flags OpenFlags

GetToken

Acquires a token to a Directory which can be used to identify access to it at a later point in time. The token will remain valid for as long as the connection requesting the token remains open.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

<EMPTY>

Response

NameType
s zx/Status
token handle<handle>?

Creates a link to an object named src by the name dst, within a directory represented by token.

src must be a resolved object name. Including "/" in the string will return ZX_ERR_INVALID_ARGS.

dst must be a resolved object name. Including "/" in the string will return ZX_ERR_INVALID_ARGS.

This method requires following rights: OpenFlags.RIGHT_WRITABLE and OpenFlags.RIGHT_READABLE, otherwise returns ZX_ERR_BAD_HANDLE.

This will be atomic with respect to renaming or unlinking the source concurrently e.g. if there are two actors operating concurrently, and one actor performs a rename that affects the source within this directory, and the other does a link, each will appear to occur atomically in an unspecified order.

NameType
src string[255]
dst_parent_token handle<handle>
dst string[255]
NameType
s zx/Status

ListExtendedAttributes

Creates an iterator over all the extended attribute names associated with this node. If an error occurs it is returned as an epitaph on the iterator request channel, and then the channel is closed.

GetExtendedAttributes can be used with any of these names to retrieve the associated value.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
iterator server_end<ExtendedAttributeIterator>

OnOpen

An event produced eagerly by a FIDL server if requested by OpenFlags.DESCRIBE.

Indicates the success or failure of the open operation, and optionally describes the object. If the status is ZX_OK, info contains descriptive information about the object (the same as would be returned by Describe).

Response

NameType
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

An event produced eagerly by the server if requested by NodeFlags.GET_REPRESENTATION. This event will be the first message from the server, and is sent exactly once.

The active variant corresponds to one of the supported protocols of the node, and represents the result of the connection-time negotiation. Provides auxiliary handles if applicable.

If the client specified more than one protocol in protocols during Directory.Open, the Representation carries additionally the result of the connection-time negotiation via its tag.

The elements have one-to-one correspondence with the members of NodeProtocolKinds.

This is a special case of fuchsia.unknown/Queryable.Query + inherent Describe methods on the specific protocols. It exists as an optimization to avoid an additional round trip.

Response

NameType
payload Representation

Open

Opens a new object relative to this directory object.

path may contain multiple segments, separated by "/" characters, and should never be empty; i.e. "" is an invalid path. A trailing slash implies OpenFlags.DIRECTORY. Components must not be empty (i.e. "foo//bar" is invalid). ".." is disallowed anywhere in the path. "." is only allowed if the path is exactly ".", but not otherwise. A leading '/' is allowed (and is treated the same way as if not present, i.e. "/foo/bar' and "foo/bar" are the same).

If an unknown value is sent for flags the connection should be closed.

OpenFlags.RIGHT_* flags provided in flags will restrict access rights on the object channel which will be connected to the opened entity.

Rights are never increased. When you open a nested entity within a directory, you may only request the same rights as what the directory connection already has, or a subset of those. Exceeding those rights causes an access denied error to be transmitted in the OnOpen event if applicable, and the object connection closed.

mode is ignored.

Added: 12

Request

NameType
flags OpenFlags
mode ModeType
path string[4095]
object server_end<Node>

Open2

Opens or creates a new node relative to this directory node.

This method requires the following rights on the current connection:

Errors are presented as an epitaph on the object_request channel.

  • error ZX_ERR_ACCESS_DENIED if the requested rights exceeds what is allowed.
  • error ZX_ERR_BAD_PATH if path is invalid.

Request

NameType
path Path
protocols ConnectionProtocols
object_request handle<channel>

Query

Request

<EMPTY>

Response

NameType
protocol vector<uint8>

QueryFilesystem

Query the filesystem for filesystem-specific information.

Request

<EMPTY>

Response

NameType
s zx/Status
info FilesystemInfo?

ReadDirents

Reads a collection of variably sized dirents into a buffer. The number of dirents in a directory may be very large: akin to calling read multiple times on a file, directories have a seek offset which is updated on subsequent calls to ReadDirents. Each call to ReadDirents will only return whole dirent structures, they will not get split across ReadDirent calls. When the seek offset reaches the end, dirents will be empty.

These dirents are of the form:

struct dirent {
  // Describes the inode of the entry.
  uint64 ino;
  // Describes the length of the dirent name in bytes.
  uint8 size;
  // Describes the type of the entry. Aligned with the
  // POSIX d_type values. Use `DirentType` constants.
  uint8 type;
  // Unterminated name of entry.
  char name[0];
}

This method does not require any rights, since one could always probe for directory contents by triggering name conflicts during file creation.

Request

NameType
max_bytes uint64

Response

NameType
s zx/Status
dirents vector<uint8>[8192]

RemoveExtendedAttribute

Remove the specified extended attribute.

If the attribute doesn't exist, ZX_ERR_NOT_FOUND is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_RemoveExtendedAttribute_Result

Rename

Renames a node named src to the name dst, in a directory represented by dst_parent_token.

src and dst must be valid node names. See Name for what constitutes a valid name.

This method requires the following rights on both the current connection, and the connection identified by dst_parent_token:

The following requirements are necessary to avoid rights escalations.

If the source and destination directory differ, the source directory must also have the maximal set of abilities supported for files, which would typically be Rights.READ_BYTES, Rights.WRITE_BYTES, Rights.GET_ATTRIBUTES and Rights.UPDATE_ATTRIBUTES. Some filesystems might also support the Rights.EXECUTE right.

If src refers to a directory, and differs from the destination directory, then the source directory must have also have the Rights.CONNECT and Rights.TRAVERSE rights.

  • error ZX_ERR_INVALID_ARGS if src or dst is invalid.
  • error ZX_ERR_ACCESS_DENIED for insufficient rights.

Request

NameType
src Name
dst_parent_token Token
dst Name

Response

NameType
payload Directory2_Rename_Result

Reopen

Creates another connection to the same node.

Request

NameType
rights_request RightsRequest
object_request server_end<Node>

Rewind

Resets the directory seek offset.

This method does not require any rights, similar to ReadDirents.

Request

<EMPTY>

Response

NameType
s zx/Status

SetAttr

Updates information about the node.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

NameType
flags NodeAttributeFlags
attributes NodeAttributes

Response

NameType
s zx/Status

SetExtendedAttribute

Set the value for the given attribute name to value for this node.

The attribute name may exist, in which case the attribute is updated. If the attribute doesn't exist, it is created. The name should have no null bytes in it. If it does, ZX_ERR_INVALID_ARGS is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

Response

NameType
payload Node2_SetExtendedAttribute_Result

SetFlags

Changes the Directory.Open flags used to access the file. Supported flags which can be turned on / off:

  • OpenFlags.APPEND

This method does not require any rights.

Request

NameType
flags OpenFlags

Response

NameType
s zx/Status

Sync

Synchronizes updates to the node to the underlying media, if it exists.

This method will return when the filesystem server has flushed the relevant updates to the underlying media, but does not guarantee the underlying media has persisted the information, nor that any information is committed to hardware. Clients may use Sync to ensure ordering between operations.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload Node2_Sync_Result

Removes a child node from the this directory's list of entries.

Note: this does not guarantee that the underlying object is destroyed. Although the link will be removed from the containing directory, objects with multiple references (such as files which are still open) will not actually be destroyed until all references are closed.

  • error ZX_ERR_ACCESS_DENIED if the connection does not have Rights.WRITE_BYTES.
  • error ZX_ERR_NOT_SUPPORTED if the underlying filesystem does not support writing.
  • error ZX_ERR_BAD_PATH if name is invalid.
  • error ZX_ERR_NOT_EMPTY if name refers to a non-empty directory.
  • error ZX_ERR_UNAVAILABLE if name refers to a mount point, containing a remote channel.
  • error ZX_ERR_NOT_DIR if the options requested a directory but something other than a directory was found.

Other errors may be returned for filesystem-specific reasons.

This method requires the following rights:

NameType
name Name
options UnlinkOptions
NameType
payload Directory2_Unlink_Result

UpdateAttributes

Updates information about the node.

  • attributes the presence of a table field in attributes indicates the intent to update the corresponding attribute.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Request

NameType
payload MutableNodeAttributes

Response

NameType
payload Node2_UpdateAttributes_Result

Watch

Watches a directory, receiving events of added messages on the watcher request channel.

Options must be zero; it is reserved.

This method does not require any rights, similar to ReadDirents.

Request

NameType
mask WatchMask
options uint32
watcher server_end<DirectoryWatcher>

Response

NameType
s zx/Status

Directory1

Defined in fuchsia.io/directory.fidl

Directory defines a node which is capable of containing other Objects.

Clone

Create another connection to the same remote object.

flags may be any of:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

All other flags are ignored.

The OpenFlags.RIGHT_* bits in flags request corresponding rights over the resulting cloned object. The cloned object must have rights less than or equal to the original object, otherwise returns ZX_ERR_ACCESS_DENIED. Alternatively, pass OpenFlags.CLONE_SAME_RIGHTS to inherit the rights on the source connection. It is invalid to pass any of the OpenFlags.RIGHT_* flags together with OpenFlags.CLONE_SAME_RIGHTS.

Request

NameType
flags OpenFlags
object server_end<Node>

GetAttr

Acquires information about the node.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
attributes NodeAttributes

GetFlags

Acquires the Directory.Open rights and flags used to access this file.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
flags OpenFlags

GetToken

Acquires a token to a Directory which can be used to identify access to it at a later point in time. The token will remain valid for as long as the connection requesting the token remains open.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

<EMPTY>

Response

NameType
s zx/Status
token handle<handle>?

Creates a link to an object named src by the name dst, within a directory represented by token.

src must be a resolved object name. Including "/" in the string will return ZX_ERR_INVALID_ARGS.

dst must be a resolved object name. Including "/" in the string will return ZX_ERR_INVALID_ARGS.

This method requires following rights: OpenFlags.RIGHT_WRITABLE and OpenFlags.RIGHT_READABLE, otherwise returns ZX_ERR_BAD_HANDLE.

This will be atomic with respect to renaming or unlinking the source concurrently e.g. if there are two actors operating concurrently, and one actor performs a rename that affects the source within this directory, and the other does a link, each will appear to occur atomically in an unspecified order.

NameType
src string[255]
dst_parent_token handle<handle>
dst string[255]
NameType
s zx/Status

OnOpen

An event produced eagerly by a FIDL server if requested by OpenFlags.DESCRIBE.

Indicates the success or failure of the open operation, and optionally describes the object. If the status is ZX_OK, info contains descriptive information about the object (the same as would be returned by Describe).

Response

NameType
s zx/Status
info NodeInfoDeprecated?

Open

Opens a new object relative to this directory object.

path may contain multiple segments, separated by "/" characters, and should never be empty; i.e. "" is an invalid path. A trailing slash implies OpenFlags.DIRECTORY. Components must not be empty (i.e. "foo//bar" is invalid). ".." is disallowed anywhere in the path. "." is only allowed if the path is exactly ".", but not otherwise. A leading '/' is allowed (and is treated the same way as if not present, i.e. "/foo/bar' and "foo/bar" are the same).

If an unknown value is sent for flags the connection should be closed.

OpenFlags.RIGHT_* flags provided in flags will restrict access rights on the object channel which will be connected to the opened entity.

Rights are never increased. When you open a nested entity within a directory, you may only request the same rights as what the directory connection already has, or a subset of those. Exceeding those rights causes an access denied error to be transmitted in the OnOpen event if applicable, and the object connection closed.

mode is ignored.

Added: 12

Request

NameType
flags OpenFlags
mode ModeType
path string[4095]
object server_end<Node>

QueryFilesystem

Query the filesystem for filesystem-specific information.

Request

<EMPTY>

Response

NameType
s zx/Status
info FilesystemInfo?

ReadDirents

Reads a collection of variably sized dirents into a buffer. The number of dirents in a directory may be very large: akin to calling read multiple times on a file, directories have a seek offset which is updated on subsequent calls to ReadDirents. Each call to ReadDirents will only return whole dirent structures, they will not get split across ReadDirent calls. When the seek offset reaches the end, dirents will be empty.

These dirents are of the form:

struct dirent {
  // Describes the inode of the entry.
  uint64 ino;
  // Describes the length of the dirent name in bytes.
  uint8 size;
  // Describes the type of the entry. Aligned with the
  // POSIX d_type values. Use `DirentType` constants.
  uint8 type;
  // Unterminated name of entry.
  char name[0];
}

This method does not require any rights, since one could always probe for directory contents by triggering name conflicts during file creation.

Request

NameType
max_bytes uint64

Response

NameType
s zx/Status
dirents vector<uint8>[8192]

Rewind

Resets the directory seek offset.

This method does not require any rights, similar to ReadDirents.

Request

<EMPTY>

Response

NameType
s zx/Status

SetAttr

Updates information about the node.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

NameType
flags NodeAttributeFlags
attributes NodeAttributes

Response

NameType
s zx/Status

SetFlags

Changes the Directory.Open flags used to access the file. Supported flags which can be turned on / off:

  • OpenFlags.APPEND

This method does not require any rights.

Request

NameType
flags OpenFlags

Response

NameType
s zx/Status

Watch

Watches a directory, receiving events of added messages on the watcher request channel.

Options must be zero; it is reserved.

This method does not require any rights, similar to ReadDirents.

Request

NameType
mask WatchMask
options uint32
watcher server_end<DirectoryWatcher>

Response

NameType
s zx/Status

Directory2

Defined in fuchsia.io/directory2.fidl

A Node2 that is capable of containing other nodes.

AdvisoryLock

Acquires an advisory lock on the underlying file.

The lock lasts until either this connection is closed or this method is called with |AdvisoryLockType.UNLOCK| to release the lock explicitly.

Advisory locks are purely advisory. They do not prevent actual read or write operations from occurring on the file, either through this connection or through other connections.

This method requires the following rights:

Errors

  • ZX_ERR_BAD_STATE The specified type of lock cannot be acquired. For example, another connection might hold a conflicting lock type.
  • ZX_ERR_NOT_SUPPORTED This file does not support advisory locking.
  • ZX_ERR_ACCESS_DENIED This connection does not have sufficient rights to acquire the given type of lock.

Request

NameType
request AdvisoryLockRequest

Response

NameType
payload AdvisoryLocking_AdvisoryLock_Result

Close

Terminates the connection.

After calling Close, the client must not send any other requests.

Servers, after sending the status response, should close the connection regardless of status and without sending an epitaph.

Closing the client end of the channel should be semantically equivalent to calling Close without knowing when the close has completed or its status.

Request

<EMPTY>

Response

NameType
payload fuchsia.unknown/Closeable_Close_Result

Creates a symbolic link.

name is the name to be given to the created symbolic link. target is the target of the symbolic link, which has no meaning on the server. The server will perform no validation of target except for a server chosen maximum length. connection is an optional server end of a channel that will speak the Symlink protocol on the successfully created node.

  • Rights.MODIFY_DIRECTORY

  • error ZX_ERR_ALREADY_EXISTS if name already exists.

  • error ZX_ERR_BAD_PATH if target exceeds the server length limit for symbolic links.

  • error ZX_ERR_INVALID_ARGS if name is not a valid Name.

  • error ZX_ERR_NOT_SUPPORTED if creating symbolic links is not supported by the server.

Added: HEAD
NameType
name Name
target SymlinkTarget
connection server_end<Symlink>?
NameType
payload Directory2_CreateSymlink_Result

Enumerate

Initiates a directory listing operation over the input channel, starting at seek offset 0.

This method requires the Rights.ENUMERATE right. If this right is absent, iterator will be closed with a ZX_ERR_ACCESS_DENIED epitaph.

Request

NameType
options DirectoryEnumerateOptions
iterator server_end<DirectoryIterator>

GetAttributes

Acquires information about the node.

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.

  • query a bit-mask specifying which attributes to fetch. The server should not return more than necessary.
  • attributes the returned attributes.

This method requires the Rights.GET_ATTRIBUTES right.

Request

NameType
query NodeAttributesQuery

Response

NameType
payload Node2_GetAttributes_Result

GetConnectionInfo

Acquires information about the connection.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload ConnectionInfo

GetExtendedAttribute

Get the value associated with the given attribute name for this node.

Attribute names have a maximum length of MAX_ATTRIBUTE_NAME. No particular structure is imposed on them.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_GetExtendedAttribute_Result

ListExtendedAttributes

Creates an iterator over all the extended attribute names associated with this node. If an error occurs it is returned as an epitaph on the iterator request channel, and then the channel is closed.

GetExtendedAttributes can be used with any of these names to retrieve the associated value.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
iterator server_end<ExtendedAttributeIterator>

OnRepresentation

An event produced eagerly by the server if requested by NodeFlags.GET_REPRESENTATION. This event will be the first message from the server, and is sent exactly once.

The active variant corresponds to one of the supported protocols of the node, and represents the result of the connection-time negotiation. Provides auxiliary handles if applicable.

If the client specified more than one protocol in protocols during Directory.Open, the Representation carries additionally the result of the connection-time negotiation via its tag.

The elements have one-to-one correspondence with the members of NodeProtocolKinds.

This is a special case of fuchsia.unknown/Queryable.Query + inherent Describe methods on the specific protocols. It exists as an optimization to avoid an additional round trip.

Response

NameType
payload Representation

Open2

Opens or creates a new node relative to this directory node.

This method requires the following rights on the current connection:

Errors are presented as an epitaph on the object_request channel.

  • error ZX_ERR_ACCESS_DENIED if the requested rights exceeds what is allowed.
  • error ZX_ERR_BAD_PATH if path is invalid.

Request

NameType
path Path
protocols ConnectionProtocols
object_request handle<channel>

Query

Request

<EMPTY>

Response

NameType
protocol vector<uint8>

RemoveExtendedAttribute

Remove the specified extended attribute.

If the attribute doesn't exist, ZX_ERR_NOT_FOUND is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_RemoveExtendedAttribute_Result

Rename

Renames a node named src to the name dst, in a directory represented by dst_parent_token.

src and dst must be valid node names. See Name for what constitutes a valid name.

This method requires the following rights on both the current connection, and the connection identified by dst_parent_token:

The following requirements are necessary to avoid rights escalations.

If the source and destination directory differ, the source directory must also have the maximal set of abilities supported for files, which would typically be Rights.READ_BYTES, Rights.WRITE_BYTES, Rights.GET_ATTRIBUTES and Rights.UPDATE_ATTRIBUTES. Some filesystems might also support the Rights.EXECUTE right.

If src refers to a directory, and differs from the destination directory, then the source directory must have also have the Rights.CONNECT and Rights.TRAVERSE rights.

  • error ZX_ERR_INVALID_ARGS if src or dst is invalid.
  • error ZX_ERR_ACCESS_DENIED for insufficient rights.

Request

NameType
src Name
dst_parent_token Token
dst Name

Response

NameType
payload Directory2_Rename_Result

Reopen

Creates another connection to the same node.

Request

NameType
rights_request RightsRequest
object_request server_end<Node>

SetExtendedAttribute

Set the value for the given attribute name to value for this node.

The attribute name may exist, in which case the attribute is updated. If the attribute doesn't exist, it is created. The name should have no null bytes in it. If it does, ZX_ERR_INVALID_ARGS is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

Response

NameType
payload Node2_SetExtendedAttribute_Result

Sync

Synchronizes updates to the node to the underlying media, if it exists.

This method will return when the filesystem server has flushed the relevant updates to the underlying media, but does not guarantee the underlying media has persisted the information, nor that any information is committed to hardware. Clients may use Sync to ensure ordering between operations.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload Node2_Sync_Result

Removes a child node from the this directory's list of entries.

Note: this does not guarantee that the underlying object is destroyed. Although the link will be removed from the containing directory, objects with multiple references (such as files which are still open) will not actually be destroyed until all references are closed.

  • error ZX_ERR_ACCESS_DENIED if the connection does not have Rights.WRITE_BYTES.
  • error ZX_ERR_NOT_SUPPORTED if the underlying filesystem does not support writing.
  • error ZX_ERR_BAD_PATH if name is invalid.
  • error ZX_ERR_NOT_EMPTY if name refers to a non-empty directory.
  • error ZX_ERR_UNAVAILABLE if name refers to a mount point, containing a remote channel.
  • error ZX_ERR_NOT_DIR if the options requested a directory but something other than a directory was found.

Other errors may be returned for filesystem-specific reasons.

This method requires the following rights:

NameType
name Name
options UnlinkOptions
NameType
payload Directory2_Unlink_Result

UpdateAttributes

Updates information about the node.

  • attributes the presence of a table field in attributes indicates the intent to update the corresponding attribute.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Request

NameType
payload MutableNodeAttributes

Response

NameType
payload Node2_UpdateAttributes_Result

DirectoryIterator

Defined in fuchsia.io/directory2.fidl

GetNext

Reads a collection of variably sized directory entries into a buffer.

The number of entries in a directory may be very large: akin to calling read multiple times on a file, directories have a seek offset which is updated on subsequent calls to Enumerate. The caller should always use a receiving buffer size as large as the maximum channel limit.

When the end of iteration is reached, the returned entries vector will be empty.

This method does not require any rights, as the rights are checked in the Directory.Enumerate call.

Request

<EMPTY>

Response

NameType
payload DirectoryIterator_GetNext_Result

DirectoryWatcher

Defined in fuchsia.io/directory.fidl

DirectoryWatcher transmits messages from a filesystem server about events happening in the filesystem. Clients can register new watchers using the Directory.Watch method, where they can filter which events they want to receive notifications for.

The DirectoryWatcher will send messages of the form:

struct {
  uint8 event;
  uint8 len;
  char name[];
};

Where names are NOT null-terminated. The name is the relative path to the entry the event is refering to. It will be empty if the event isn't referencing a particular entry (e.g. for the IDLE event).

ExtendedAttributeIterator

Defined in fuchsia.io/node2.fidl

Added: HEAD

GetNext

Get the next chunk of extended attribute names. If this is the last chunk, last will be true, and the channel will be closed after the call.

Request

<EMPTY>

Response

NameType
payload ExtendedAttributeIterator_GetNext_Result

File

Defined in fuchsia.io/file2.fidl

A Node which contains a sequence of bytes of definite length.

NOTE: cloned connections do not share their seek offset with their source connection.

AdvisoryLock

Acquires an advisory lock on the underlying file.

The lock lasts until either this connection is closed or this method is called with |AdvisoryLockType.UNLOCK| to release the lock explicitly.

Advisory locks are purely advisory. They do not prevent actual read or write operations from occurring on the file, either through this connection or through other connections.

This method requires the following rights:

Errors

  • ZX_ERR_BAD_STATE The specified type of lock cannot be acquired. For example, another connection might hold a conflicting lock type.
  • ZX_ERR_NOT_SUPPORTED This file does not support advisory locking.
  • ZX_ERR_ACCESS_DENIED This connection does not have sufficient rights to acquire the given type of lock.

Request

NameType
request AdvisoryLockRequest

Response

NameType
payload AdvisoryLocking_AdvisoryLock_Result

Allocate

Pre-allocate on-disk space for this file.

Added: HEAD

Request

NameType
offset uint64
length uint64
mode AllocateMode

Response

NameType
payload File_Allocate_Result

Clone

Create another connection to the same remote object.

flags may be any of:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

All other flags are ignored.

The OpenFlags.RIGHT_* bits in flags request corresponding rights over the resulting cloned object. The cloned object must have rights less than or equal to the original object, otherwise returns ZX_ERR_ACCESS_DENIED. Alternatively, pass OpenFlags.CLONE_SAME_RIGHTS to inherit the rights on the source connection. It is invalid to pass any of the OpenFlags.RIGHT_* flags together with OpenFlags.CLONE_SAME_RIGHTS.

Request

NameType
flags OpenFlags
object server_end<Node>

Close

Terminates the connection.

After calling Close, the client must not send any other requests.

Servers, after sending the status response, should close the connection regardless of status and without sending an epitaph.

Closing the client end of the channel should be semantically equivalent to calling Close without knowing when the close has completed or its status.

Request

<EMPTY>

Response

NameType
payload fuchsia.unknown/Closeable_Close_Result

Describe

Request

<EMPTY>

Response

NameType
payload FileInfo

EnableVerity

Enables verification for the file (permanently) which involves computing a merkle tree for the file. Forces a flush prior to building the merkle tree to ensure cached data is captured. Future reads will be verified against the computed merkle tree and writes will be rejected. This method can take some time to complete as it depends on the size of the file. This method can be aborted by closing the connection that this method was issued on.

This method requires the Rights.UPDATE_ATTRIBUTES right. Returns ZX_ERR_NOT_SUPPORTED if the filesystem does not support verity. Returns ZX_ERR_ALREADY_EXISTS if the file was already fsverity-enabled. Also returns any error that might arise from reading the file, or from flushing the file, such as ZX_ERR_IO.

Added: HEAD

Request

NameType
options VerificationOptions

Response

NameType
payload File_EnableVerity_Result

GetAttr

Acquires information about the node.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
attributes NodeAttributes

GetAttributes

Acquires information about the node.

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.

  • query a bit-mask specifying which attributes to fetch. The server should not return more than necessary.
  • attributes the returned attributes.

This method requires the Rights.GET_ATTRIBUTES right.

Request

NameType
query NodeAttributesQuery

Response

NameType
payload Node2_GetAttributes_Result

GetBackingMemory

Acquires a zx.Handle:VMO representing this file, if there is one, with the requested access rights.

Implementations are not required to implement files backed by VMOs so this request may fail. Additionally, implementations may only support a certain subset of the flags. Clients should be prepared with fallback behavior if this request fails.

If a client specifies neither PRIVATE_CLONE nor SHARED_BUFFER, the implementation is free to choose the semantics of the returned VMO.

  • request flags a VmoFlags indicating the desired mode of access.
  • error a zx.Status value indicating the failure.

This method requires the following rights:

Request

NameType
flags VmoFlags

Response

NameType
payload File_GetBackingMemory_Result

GetConnectionInfo

Acquires information about the connection.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload ConnectionInfo

GetExtendedAttribute

Get the value associated with the given attribute name for this node.

Attribute names have a maximum length of MAX_ATTRIBUTE_NAME. No particular structure is imposed on them.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_GetExtendedAttribute_Result

GetFlags

Acquires the Directory.Open rights and flags used to access this file.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
flags OpenFlags

LinkInto

Creates a link to this this object with name dst in the directory represented by dst_parent_token.

dst must be a resolved object name. Including "/" in the string will return ZX_ERR_INVALID_ARGS.

This method requires the maximal set of rights supported by the filesystem for this object. For files this would typically be Rights.READ_BYTES, Rights.WRITE_BYTES, Rights.GET_ATTRIBUTES and Rights.UPDATE_ATTRIBUTES. Some filesystems might also support the Rights.EXECUTE right. Insufficient rights will result in ZX_ERR_ACCESS_DENIED.

If this object has no links, it will fail with ZX_ERR_NOT_FOUND.

This method does not have the same atomicity properties has the Directory::Link method, which means that calling Open then LinkInto is not equivalent to Directory::Link because LinkInto will not prevent the source from being renamed or unlinked.

Request

NameType
dst_parent_token Token
dst Name

Response

NameType
payload Linkable_LinkInto_Result

ListExtendedAttributes

Creates an iterator over all the extended attribute names associated with this node. If an error occurs it is returned as an epitaph on the iterator request channel, and then the channel is closed.

GetExtendedAttributes can be used with any of these names to retrieve the associated value.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
iterator server_end<ExtendedAttributeIterator>

OnOpen

An event produced eagerly by a FIDL server if requested by OpenFlags.DESCRIBE.

Indicates the success or failure of the open operation, and optionally describes the object. If the status is ZX_OK, info contains descriptive information about the object (the same as would be returned by Describe).

Response

NameType
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

An event produced eagerly by the server if requested by NodeFlags.GET_REPRESENTATION. This event will be the first message from the server, and is sent exactly once.

The active variant corresponds to one of the supported protocols of the node, and represents the result of the connection-time negotiation. Provides auxiliary handles if applicable.

If the client specified more than one protocol in protocols during Directory.Open, the Representation carries additionally the result of the connection-time negotiation via its tag.

The elements have one-to-one correspondence with the members of NodeProtocolKinds.

This is a special case of fuchsia.unknown/Queryable.Query + inherent Describe methods on the specific protocols. It exists as an optimization to avoid an additional round trip.

Response

NameType
payload Representation

Query

Request

<EMPTY>

Response

NameType
protocol vector<uint8>

QueryFilesystem

Query the filesystem for filesystem-specific information.

Request

<EMPTY>

Response

NameType
s zx/Status
info FilesystemInfo?

Read

Reads up to 'count' bytes at the seek offset. The seek offset is moved forward by the number of bytes read.

Invariants

  • The returned data.length will never be greater than count.
  • If data.length is less than count, it means that the seek offset has reached the end of file as part of this operation.
  • If data.length is zero while count is not, it means that the seek offset is already at or beyond the end of file, and no data could be read.
  • If count is zero, the server should perform all the checks ensuring read access without actually read anything, and return an empty data vector.

This method requires the Rights.READ_BYTES right.

Returns ZX_ERR_OUT_OF_RANGE if count is greater than MAX_TRANSFER_SIZE.

Request

NameType
count uint64

Response

NameType
payload Readable_Read_Result

ReadAt

Reads up to 'count' bytes at the provided offset. Does not affect the seek offset.

Invariants

  • The returned data.length will never be greater than count.
  • If data.length is less than count, it means that ReadAt has hit the end of file as part of this operation.
  • If data.length is zero while count is not, it means that offset is at or past the end of file, and no data can be read.
  • If count is zero, the server should perform all the checks ensuring read access without actually reading anything, and return an empty data vector.

This method requires the Rights.READ_BYTES right.

Returns ZX_ERR_OUT_OF_RANGE if count is greater than MAX_TRANSFER_SIZE.

Request

NameType
count uint64
offset uint64

Response

NameType
payload File_ReadAt_Result

RemoveExtendedAttribute

Remove the specified extended attribute.

If the attribute doesn't exist, ZX_ERR_NOT_FOUND is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_RemoveExtendedAttribute_Result

Reopen

Creates another connection to the same node.

Request

NameType
rights_request RightsRequest
object_request server_end<Node>

Resize

Shrinks or grows the file size to 'length' bytes.

If file size is reduced by this operation, the extra trailing data' is discarded. If file size is increased by this operation, the extended area appears as if it was zeroed.

This method requires the Rights.WRITE_BYTES right.

Request

NameType
length uint64

Response

NameType
payload File_Resize_Result

Seek

Moves the offset at which the next invocation of Read or Write will occur. The seek offset is specific to each file connection.

  • request origin the reference point where offset will be based on.
  • request offset the number of bytes to seek.
  • response offset_from_start the adjusted seek offset, from the start of the file.

This method does not require any rights.

Request

NameType
origin SeekOrigin
offset int64

Response

NameType
payload File_Seek_Result

SetAttr

Updates information about the node.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

NameType
flags NodeAttributeFlags
attributes NodeAttributes

Response

NameType
s zx/Status

SetExtendedAttribute

Set the value for the given attribute name to value for this node.

The attribute name may exist, in which case the attribute is updated. If the attribute doesn't exist, it is created. The name should have no null bytes in it. If it does, ZX_ERR_INVALID_ARGS is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

Response

NameType
payload Node2_SetExtendedAttribute_Result

SetFlags

Changes the Directory.Open flags used to access the file. Supported flags which can be turned on / off:

  • OpenFlags.APPEND

This method does not require any rights.

Request

NameType
flags OpenFlags

Response

NameType
s zx/Status

Sync

Synchronizes updates to the node to the underlying media, if it exists.

This method will return when the filesystem server has flushed the relevant updates to the underlying media, but does not guarantee the underlying media has persisted the information, nor that any information is committed to hardware. Clients may use Sync to ensure ordering between operations.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload Node2_Sync_Result

UpdateAttributes

Updates information about the node.

  • attributes the presence of a table field in attributes indicates the intent to update the corresponding attribute.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Request

NameType
payload MutableNodeAttributes

Response

NameType
payload Node2_UpdateAttributes_Result

Write

Writes data at the seek offset. The seek offset is moved forward by the number of bytes written. If the file is in append mode, the seek offset is first set to the end of the file, followed by the write, in one atomic step.

The file size may grow if the seek offset plus data.length is beyond the current end of file.

  • request data the byte buffer to write to the file.
  • response actual_count the number of bytes written.

Invariants

  • The returned actual_count will never be greater than data.length.
  • If the server is unable to write all the data due to e.g. not enough space, actual_count may be less than data.length. If no bytes could be written, an error is returned.
  • If data.length is zero, the server should perform all the checks ensuring write access without mutating the file and return a successful write of zero bytes. The seek offset is still updated if in append mode.

This method requires the Rights.WRITE_BYTES right.

Request

NameType
data Transfer

Response

NameType
payload Writable_Write_Result

WriteAt

Writes data at the provided offset. Does not affect the seek offset.

The file size may grow if offset plus data.length is past the current end of file.

  • request data the byte buffer to write to the file.
  • request offset the offset from start of the file to begin writing.
  • response actual_count the number of bytes written.

Invariants

  • The returned actual_count will never be greater than data.length.
  • If the server is unable to write all the data due to e.g. not enough space, actual_count may be less than data.length. If no bytes could be written, an error is returned.
  • If data.length is zero, the server should perform all the checks ensuring write access without mutating the file, and will return a successful write of zero bytes.

This method requires the Rights.WRITE_BYTES right.

Request

NameType
data Transfer
offset uint64

Response

NameType
payload File_WriteAt_Result

Linkable

Defined in fuchsia.io/node2.fidl

Added: HEAD

LinkInto

Creates a link to this this object with name dst in the directory represented by dst_parent_token.

dst must be a resolved object name. Including "/" in the string will return ZX_ERR_INVALID_ARGS.

This method requires the maximal set of rights supported by the filesystem for this object. For files this would typically be Rights.READ_BYTES, Rights.WRITE_BYTES, Rights.GET_ATTRIBUTES and Rights.UPDATE_ATTRIBUTES. Some filesystems might also support the Rights.EXECUTE right. Insufficient rights will result in ZX_ERR_ACCESS_DENIED.

If this object has no links, it will fail with ZX_ERR_NOT_FOUND.

This method does not have the same atomicity properties has the Directory::Link method, which means that calling Open then LinkInto is not equivalent to Directory::Link because LinkInto will not prevent the source from being renamed or unlinked.

Request

NameType
dst_parent_token Token
dst Name

Response

NameType
payload Linkable_LinkInto_Result

Node

Defined in fuchsia.io/node.fidl

Clone

Create another connection to the same remote object.

flags may be any of:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

All other flags are ignored.

The OpenFlags.RIGHT_* bits in flags request corresponding rights over the resulting cloned object. The cloned object must have rights less than or equal to the original object, otherwise returns ZX_ERR_ACCESS_DENIED. Alternatively, pass OpenFlags.CLONE_SAME_RIGHTS to inherit the rights on the source connection. It is invalid to pass any of the OpenFlags.RIGHT_* flags together with OpenFlags.CLONE_SAME_RIGHTS.

Request

NameType
flags OpenFlags
object server_end<Node>

Close

Terminates the connection.

After calling Close, the client must not send any other requests.

Servers, after sending the status response, should close the connection regardless of status and without sending an epitaph.

Closing the client end of the channel should be semantically equivalent to calling Close without knowing when the close has completed or its status.

Request

<EMPTY>

Response

NameType
payload fuchsia.unknown/Closeable_Close_Result

GetAttr

Acquires information about the node.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
attributes NodeAttributes

GetAttributes

Acquires information about the node.

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.

  • query a bit-mask specifying which attributes to fetch. The server should not return more than necessary.
  • attributes the returned attributes.

This method requires the Rights.GET_ATTRIBUTES right.

Request

NameType
query NodeAttributesQuery

Response

NameType
payload Node2_GetAttributes_Result

GetConnectionInfo

Acquires information about the connection.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload ConnectionInfo

GetExtendedAttribute

Get the value associated with the given attribute name for this node.

Attribute names have a maximum length of MAX_ATTRIBUTE_NAME. No particular structure is imposed on them.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_GetExtendedAttribute_Result

GetFlags

Acquires the Directory.Open rights and flags used to access this file.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
flags OpenFlags

ListExtendedAttributes

Creates an iterator over all the extended attribute names associated with this node. If an error occurs it is returned as an epitaph on the iterator request channel, and then the channel is closed.

GetExtendedAttributes can be used with any of these names to retrieve the associated value.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
iterator server_end<ExtendedAttributeIterator>

OnOpen

An event produced eagerly by a FIDL server if requested by OpenFlags.DESCRIBE.

Indicates the success or failure of the open operation, and optionally describes the object. If the status is ZX_OK, info contains descriptive information about the object (the same as would be returned by Describe).

Response

NameType
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

An event produced eagerly by the server if requested by NodeFlags.GET_REPRESENTATION. This event will be the first message from the server, and is sent exactly once.

The active variant corresponds to one of the supported protocols of the node, and represents the result of the connection-time negotiation. Provides auxiliary handles if applicable.

If the client specified more than one protocol in protocols during Directory.Open, the Representation carries additionally the result of the connection-time negotiation via its tag.

The elements have one-to-one correspondence with the members of NodeProtocolKinds.

This is a special case of fuchsia.unknown/Queryable.Query + inherent Describe methods on the specific protocols. It exists as an optimization to avoid an additional round trip.

Response

NameType
payload Representation

Query

Request

<EMPTY>

Response

NameType
protocol vector<uint8>

QueryFilesystem

Query the filesystem for filesystem-specific information.

Request

<EMPTY>

Response

NameType
s zx/Status
info FilesystemInfo?

RemoveExtendedAttribute

Remove the specified extended attribute.

If the attribute doesn't exist, ZX_ERR_NOT_FOUND is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_RemoveExtendedAttribute_Result

Reopen

Creates another connection to the same node.

Request

NameType
rights_request RightsRequest
object_request server_end<Node>

SetAttr

Updates information about the node.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

NameType
flags NodeAttributeFlags
attributes NodeAttributes

Response

NameType
s zx/Status

SetExtendedAttribute

Set the value for the given attribute name to value for this node.

The attribute name may exist, in which case the attribute is updated. If the attribute doesn't exist, it is created. The name should have no null bytes in it. If it does, ZX_ERR_INVALID_ARGS is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

Response

NameType
payload Node2_SetExtendedAttribute_Result

SetFlags

Changes the Directory.Open flags used to access the file. Supported flags which can be turned on / off:

  • OpenFlags.APPEND

This method does not require any rights.

Request

NameType
flags OpenFlags

Response

NameType
s zx/Status

Sync

Synchronizes updates to the node to the underlying media, if it exists.

This method will return when the filesystem server has flushed the relevant updates to the underlying media, but does not guarantee the underlying media has persisted the information, nor that any information is committed to hardware. Clients may use Sync to ensure ordering between operations.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload Node2_Sync_Result

UpdateAttributes

Updates information about the node.

  • attributes the presence of a table field in attributes indicates the intent to update the corresponding attribute.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Request

NameType
payload MutableNodeAttributes

Response

NameType
payload Node2_UpdateAttributes_Result

Node1

Defined in fuchsia.io/node.fidl

Node defines the minimal interface for entities which can be accessed in a filesystem.

Clone

Create another connection to the same remote object.

flags may be any of:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

All other flags are ignored.

The OpenFlags.RIGHT_* bits in flags request corresponding rights over the resulting cloned object. The cloned object must have rights less than or equal to the original object, otherwise returns ZX_ERR_ACCESS_DENIED. Alternatively, pass OpenFlags.CLONE_SAME_RIGHTS to inherit the rights on the source connection. It is invalid to pass any of the OpenFlags.RIGHT_* flags together with OpenFlags.CLONE_SAME_RIGHTS.

Request

NameType
flags OpenFlags
object server_end<Node>

GetAttr

Acquires information about the node.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
attributes NodeAttributes

GetFlags

Acquires the Directory.Open rights and flags used to access this file.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
flags OpenFlags

OnOpen

An event produced eagerly by a FIDL server if requested by OpenFlags.DESCRIBE.

Indicates the success or failure of the open operation, and optionally describes the object. If the status is ZX_OK, info contains descriptive information about the object (the same as would be returned by Describe).

Response

NameType
s zx/Status
info NodeInfoDeprecated?

QueryFilesystem

Query the filesystem for filesystem-specific information.

Request

<EMPTY>

Response

NameType
s zx/Status
info FilesystemInfo?

SetAttr

Updates information about the node.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

NameType
flags NodeAttributeFlags
attributes NodeAttributes

Response

NameType
s zx/Status

SetFlags

Changes the Directory.Open flags used to access the file. Supported flags which can be turned on / off:

  • OpenFlags.APPEND

This method does not require any rights.

Request

NameType
flags OpenFlags

Response

NameType
s zx/Status

Node2

Defined in fuchsia.io/node2.fidl

Node defines the minimal protocol for entities which can be accessed in a filesystem.

Close

Terminates the connection.

After calling Close, the client must not send any other requests.

Servers, after sending the status response, should close the connection regardless of status and without sending an epitaph.

Closing the client end of the channel should be semantically equivalent to calling Close without knowing when the close has completed or its status.

Request

<EMPTY>

Response

NameType
payload fuchsia.unknown/Closeable_Close_Result

GetAttributes

Acquires information about the node.

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.

  • query a bit-mask specifying which attributes to fetch. The server should not return more than necessary.
  • attributes the returned attributes.

This method requires the Rights.GET_ATTRIBUTES right.

Request

NameType
query NodeAttributesQuery

Response

NameType
payload Node2_GetAttributes_Result

GetConnectionInfo

Acquires information about the connection.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload ConnectionInfo

GetExtendedAttribute

Get the value associated with the given attribute name for this node.

Attribute names have a maximum length of MAX_ATTRIBUTE_NAME. No particular structure is imposed on them.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_GetExtendedAttribute_Result

ListExtendedAttributes

Creates an iterator over all the extended attribute names associated with this node. If an error occurs it is returned as an epitaph on the iterator request channel, and then the channel is closed.

GetExtendedAttributes can be used with any of these names to retrieve the associated value.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
iterator server_end<ExtendedAttributeIterator>

OnRepresentation

An event produced eagerly by the server if requested by NodeFlags.GET_REPRESENTATION. This event will be the first message from the server, and is sent exactly once.

The active variant corresponds to one of the supported protocols of the node, and represents the result of the connection-time negotiation. Provides auxiliary handles if applicable.

If the client specified more than one protocol in protocols during Directory.Open, the Representation carries additionally the result of the connection-time negotiation via its tag.

The elements have one-to-one correspondence with the members of NodeProtocolKinds.

This is a special case of fuchsia.unknown/Queryable.Query + inherent Describe methods on the specific protocols. It exists as an optimization to avoid an additional round trip.

Response

NameType
payload Representation

Query

Request

<EMPTY>

Response

NameType
protocol vector<uint8>

RemoveExtendedAttribute

Remove the specified extended attribute.

If the attribute doesn't exist, ZX_ERR_NOT_FOUND is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_RemoveExtendedAttribute_Result

Reopen

Creates another connection to the same node.

Request

NameType
rights_request RightsRequest
object_request server_end<Node>

SetExtendedAttribute

Set the value for the given attribute name to value for this node.

The attribute name may exist, in which case the attribute is updated. If the attribute doesn't exist, it is created. The name should have no null bytes in it. If it does, ZX_ERR_INVALID_ARGS is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

Response

NameType
payload Node2_SetExtendedAttribute_Result

Sync

Synchronizes updates to the node to the underlying media, if it exists.

This method will return when the filesystem server has flushed the relevant updates to the underlying media, but does not guarantee the underlying media has persisted the information, nor that any information is committed to hardware. Clients may use Sync to ensure ordering between operations.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload Node2_Sync_Result

UpdateAttributes

Updates information about the node.

  • attributes the presence of a table field in attributes indicates the intent to update the corresponding attribute.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Request

NameType
payload MutableNodeAttributes

Response

NameType
payload Node2_UpdateAttributes_Result

Openable

Defined in fuchsia.io/directory.fidl

Open

Opens a new object relative to this directory object.

path may contain multiple segments, separated by "/" characters, and should never be empty; i.e. "" is an invalid path. A trailing slash implies OpenFlags.DIRECTORY. Components must not be empty (i.e. "foo//bar" is invalid). ".." is disallowed anywhere in the path. "." is only allowed if the path is exactly ".", but not otherwise. A leading '/' is allowed (and is treated the same way as if not present, i.e. "/foo/bar' and "foo/bar" are the same).

If an unknown value is sent for flags the connection should be closed.

OpenFlags.RIGHT_* flags provided in flags will restrict access rights on the object channel which will be connected to the opened entity.

Rights are never increased. When you open a nested entity within a directory, you may only request the same rights as what the directory connection already has, or a subset of those. Exceeding those rights causes an access denied error to be transmitted in the OnOpen event if applicable, and the object connection closed.

mode is ignored.

Added: 12

Request

NameType
flags OpenFlags
mode ModeType
path string[4095]
object server_end<Node>

Readable

Defined in fuchsia.io/file2.fidl

Read

Reads up to 'count' bytes at the seek offset. The seek offset is moved forward by the number of bytes read.

Invariants

  • The returned data.length will never be greater than count.
  • If data.length is less than count, it means that the seek offset has reached the end of file as part of this operation.
  • If data.length is zero while count is not, it means that the seek offset is already at or beyond the end of file, and no data could be read.
  • If count is zero, the server should perform all the checks ensuring read access without actually read anything, and return an empty data vector.

This method requires the Rights.READ_BYTES right.

Returns ZX_ERR_OUT_OF_RANGE if count is greater than MAX_TRANSFER_SIZE.

Request

NameType
count uint64

Response

NameType
payload Readable_Read_Result

Defined in fuchsia.io/symlink.fidl

A ['Node'] which contains a symbolic link.

Added: HEAD

Clone

Create another connection to the same remote object.

flags may be any of:

  • OpenFlags.RIGHT_*
  • OpenFlags.APPEND
  • OpenFlags.DESCRIBE
  • OpenFlags.CLONE_SAME_RIGHTS

All other flags are ignored.

The OpenFlags.RIGHT_* bits in flags request corresponding rights over the resulting cloned object. The cloned object must have rights less than or equal to the original object, otherwise returns ZX_ERR_ACCESS_DENIED. Alternatively, pass OpenFlags.CLONE_SAME_RIGHTS to inherit the rights on the source connection. It is invalid to pass any of the OpenFlags.RIGHT_* flags together with OpenFlags.CLONE_SAME_RIGHTS.

Request

NameType
flags OpenFlags
object server_end<Node>

Close

Terminates the connection.

After calling Close, the client must not send any other requests.

Servers, after sending the status response, should close the connection regardless of status and without sending an epitaph.

Closing the client end of the channel should be semantically equivalent to calling Close without knowing when the close has completed or its status.

Request

<EMPTY>

Response

NameType
payload fuchsia.unknown/Closeable_Close_Result

Describe

Request

<EMPTY>

Response

NameType
payload SymlinkInfo

GetAttr

Acquires information about the node.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
attributes NodeAttributes

GetAttributes

Acquires information about the node.

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.

  • query a bit-mask specifying which attributes to fetch. The server should not return more than necessary.
  • attributes the returned attributes.

This method requires the Rights.GET_ATTRIBUTES right.

Request

NameType
query NodeAttributesQuery

Response

NameType
payload Node2_GetAttributes_Result

GetConnectionInfo

Acquires information about the connection.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload ConnectionInfo

GetExtendedAttribute

Get the value associated with the given attribute name for this node.

Attribute names have a maximum length of MAX_ATTRIBUTE_NAME. No particular structure is imposed on them.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_GetExtendedAttribute_Result

GetFlags

Acquires the Directory.Open rights and flags used to access this file.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
s zx/Status
flags OpenFlags

LinkInto

Creates a link to this this object with name dst in the directory represented by dst_parent_token.

dst must be a resolved object name. Including "/" in the string will return ZX_ERR_INVALID_ARGS.

This method requires the maximal set of rights supported by the filesystem for this object. For files this would typically be Rights.READ_BYTES, Rights.WRITE_BYTES, Rights.GET_ATTRIBUTES and Rights.UPDATE_ATTRIBUTES. Some filesystems might also support the Rights.EXECUTE right. Insufficient rights will result in ZX_ERR_ACCESS_DENIED.

If this object has no links, it will fail with ZX_ERR_NOT_FOUND.

This method does not have the same atomicity properties has the Directory::Link method, which means that calling Open then LinkInto is not equivalent to Directory::Link because LinkInto will not prevent the source from being renamed or unlinked.

Request

NameType
dst_parent_token Token
dst Name

Response

NameType
payload Linkable_LinkInto_Result

ListExtendedAttributes

Creates an iterator over all the extended attribute names associated with this node. If an error occurs it is returned as an epitaph on the iterator request channel, and then the channel is closed.

GetExtendedAttributes can be used with any of these names to retrieve the associated value.

This method requires the Rights.GET_ATTRIBUTES right.

Added: HEAD

Request

NameType
iterator server_end<ExtendedAttributeIterator>

OnOpen

An event produced eagerly by a FIDL server if requested by OpenFlags.DESCRIBE.

Indicates the success or failure of the open operation, and optionally describes the object. If the status is ZX_OK, info contains descriptive information about the object (the same as would be returned by Describe).

Response

NameType
s zx/Status
info NodeInfoDeprecated?

OnRepresentation

An event produced eagerly by the server if requested by NodeFlags.GET_REPRESENTATION. This event will be the first message from the server, and is sent exactly once.

The active variant corresponds to one of the supported protocols of the node, and represents the result of the connection-time negotiation. Provides auxiliary handles if applicable.

If the client specified more than one protocol in protocols during Directory.Open, the Representation carries additionally the result of the connection-time negotiation via its tag.

The elements have one-to-one correspondence with the members of NodeProtocolKinds.

This is a special case of fuchsia.unknown/Queryable.Query + inherent Describe methods on the specific protocols. It exists as an optimization to avoid an additional round trip.

Response

NameType
payload Representation

Query

Request

<EMPTY>

Response

NameType
protocol vector<uint8>

QueryFilesystem

Query the filesystem for filesystem-specific information.

Request

<EMPTY>

Response

NameType
s zx/Status
info FilesystemInfo?

RemoveExtendedAttribute

Remove the specified extended attribute.

If the attribute doesn't exist, ZX_ERR_NOT_FOUND is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName

Response

NameType
payload Node2_RemoveExtendedAttribute_Result

Reopen

Creates another connection to the same node.

Request

NameType
rights_request RightsRequest
object_request server_end<Node>

SetAttr

Updates information about the node.

This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns ZX_ERR_BAD_HANDLE.

Request

NameType
flags NodeAttributeFlags
attributes NodeAttributes

Response

NameType
s zx/Status

SetExtendedAttribute

Set the value for the given attribute name to value for this node.

The attribute name may exist, in which case the attribute is updated. If the attribute doesn't exist, it is created. The name should have no null bytes in it. If it does, ZX_ERR_INVALID_ARGS is returned.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Added: HEAD

Request

NameType
name ExtendedAttributeName
value ExtendedAttributeValue
mode SetExtendedAttributeMode

Response

NameType
payload Node2_SetExtendedAttribute_Result

SetFlags

Changes the Directory.Open flags used to access the file. Supported flags which can be turned on / off:

  • OpenFlags.APPEND

This method does not require any rights.

Request

NameType
flags OpenFlags

Response

NameType
s zx/Status

Sync

Synchronizes updates to the node to the underlying media, if it exists.

This method will return when the filesystem server has flushed the relevant updates to the underlying media, but does not guarantee the underlying media has persisted the information, nor that any information is committed to hardware. Clients may use Sync to ensure ordering between operations.

This method does not require any rights.

Request

<EMPTY>

Response

NameType
payload Node2_Sync_Result

UpdateAttributes

Updates information about the node.

  • attributes the presence of a table field in attributes indicates the intent to update the corresponding attribute.

This method requires the Rights.UPDATE_ATTRIBUTES right.

Request

NameType
payload MutableNodeAttributes

Response

NameType
payload Node2_UpdateAttributes_Result

Writable

Defined in fuchsia.io/file2.fidl

Write

Writes data at the seek offset. The seek offset is moved forward by the number of bytes written. If the file is in append mode, the seek offset is first set to the end of the file, followed by the write, in one atomic step.

The file size may grow if the seek offset plus data.length is beyond the current end of file.

  • request data the byte buffer to write to the file.
  • response actual_count the number of bytes written.

Invariants

  • The returned actual_count will never be greater than data.length.
  • If the server is unable to write all the data due to e.g. not enough space, actual_count may be less than data.length. If no bytes could be written, an error is returned.
  • If data.length is zero, the server should perform all the checks ensuring write access without mutating the file and return a successful write of zero bytes. The seek offset is still updated if in append mode.

This method requires the Rights.WRITE_BYTES right.

Request

NameType
data Transfer

Response

NameType
payload Writable_Write_Result

STRUCTS

AdvisoryLockRange

Defined in fuchsia.io/locking.fidl

FieldTypeDescriptionDefault
origin SeekOrigin

The location in the file from which offset is computed.

No default
offset int64

The start of the byte range, expressed as an offset from origin. Cannot be negative if origin is SeekOrigin.START.

No default
length int64

The length of the byte range in bytes.

If the length is zero, then the byte range extends until the end of the file, regardless of how large the file becomes.

If the length is negative, the byte range includes the bytes offset + length up to, and including, offset - 1, provided this range does not extend beyond the beginning of the file.

No default

AdvisoryLocking_AdvisoryLock_Response

Defined in fuchsia.io/locking.fidl

<EMPTY>

Defined in fuchsia.io/directory2.fidl

<EMPTY>

Directory2_Rename_Response

Defined in fuchsia.io/directory2.fidl

<EMPTY>

Defined in fuchsia.io/directory2.fidl

<EMPTY>

DirectoryIterator_GetNext_Response

Defined in fuchsia.io/directory2.fidl

FieldTypeDescriptionDefault
entries vector<DirectoryEntry>[8192]

Information about an immediate child node of a directory.

If a particular attribute is not applicable or not supported, implementations should leave the corresponding field absent.

No default

DirectoryObject

Defined in fuchsia.io/node.fidl

<EMPTY>

ExtendedAttributeIterator_GetNext_Response

Defined in fuchsia.io/node2.fidl

FieldTypeDescriptionDefault
attributes vector<vector<uint8>>[128] No default
last bool No default

FileObject resource

Defined in fuchsia.io/node.fidl

FieldTypeDescriptionDefault
event handle<event>?

An optional event which transmits information about an object's readability or writability. This event relays information about the underlying object, not the capability granted to client: this event may be signalled "readable" on a connection that does not have the capability to read.

The "FILE_SIGNAL_" values may be observed on this event.

No default
stream handle<stream>?

A placeholder for future stream support.

Currently, servers are required not to send a handle in this field.

No default

File_Allocate_Response

Defined in fuchsia.io/file2.fidl

<EMPTY>

File_EnableVerity_Response

Defined in fuchsia.io/file2.fidl

<EMPTY>

File_GetBackingMemory_Response resource

Defined in fuchsia.io/file2.fidl

FieldTypeDescriptionDefault
vmo handle<vmo> No default

File_ReadAt_Response

Defined in fuchsia.io/file2.fidl

FieldTypeDescriptionDefault
data Transfer No default

File_Resize_Response

Defined in fuchsia.io/file2.fidl

<EMPTY>

File_Seek_Response

Defined in fuchsia.io/file2.fidl

FieldTypeDescriptionDefault
offset_from_start uint64 No default

File_WriteAt_Response

Defined in fuchsia.io/file2.fidl

FieldTypeDescriptionDefault
actual_count uint64 No default

FilesystemInfo

Defined in fuchsia.io/node.fidl

FieldTypeDescriptionDefault
total_bytes uint64

The number of data bytes which may be stored in a filesystem. This does not count metadata or other filesystem overhead like block rounding.

No default
used_bytes uint64

The number of data bytes which are in use by the filesystem. This does not count metadata or other filesystem overhead like block rounding.

No default
total_nodes uint64

The number of nodes which may be stored in the filesystem.

No default
used_nodes uint64

The number of nodes used by the filesystem.

No default
free_shared_pool_bytes uint64

The amount of additional space which may be allocated from the underlying volume manager. If unsupported or there is no space for the filesystem to grow, this will be zero.

No default
fs_id uint64

A unique identifier for this filesystem instance. Will not be preserved across reboots.

Implementors should create a kernel object (normally an event) and use its koid for the filesystem ID. This koid guarantees uniqueness in the system.

No default
block_size uint32

The size in bytes of a single filesystem block.

No default
max_filename_size uint32

The maximum length of a filesystem name.

No default
fs_type uint32

A unique identifier for the type of the underlying filesystem.

No default
padding uint32 No default
name int8[32] No default

Linkable_LinkInto_Response

Defined in fuchsia.io/node2.fidl

<EMPTY>

Node2_RemoveExtendedAttribute_Response

Defined in fuchsia.io/node2.fidl

<EMPTY>

Node2_SetExtendedAttribute_Response

Defined in fuchsia.io/node2.fidl

<EMPTY>

Node2_Sync_Response

Defined in fuchsia.io/node2.fidl

<EMPTY>

Node2_UpdateAttributes_Response

Defined in fuchsia.io/node2.fidl

<EMPTY>

NodeAttributes

Defined in fuchsia.io/node.fidl

NodeAttributes defines generic information about a filesystem node.

FieldTypeDescriptionDefault
mode uint32

Protection bits and node type information describe in 'mode'.

No default
id uint64

A filesystem-unique ID.

No default
content_size uint64

Node size, in bytes.

No default
storage_size uint64

Space needed to store node (possibly larger than size), in bytes.

No default
creation_time uint64

Time of creation (may be updated manually after creation) in ns since Unix epoch, UTC.

No default
modification_time uint64

Time of last modification in ns since Unix epoch, UTC.

No default

NodeAttributes2

Defined in fuchsia.io/node2.fidl

FieldTypeDescriptionDefault
mutable_attributes MutableNodeAttributes No default
immutable_attributes ImmutableNodeAttributes No default

Readable_Read_Response

Defined in fuchsia.io/file2.fidl

FieldTypeDescriptionDefault
data Transfer No default

Service

Defined in fuchsia.io/node.fidl

<EMPTY>

SymlinkObject

Defined in fuchsia.io/node.fidl

FieldTypeDescriptionDefault
target SymlinkTarget No default

Writable_Write_Response

Defined in fuchsia.io/file2.fidl

FieldTypeDescriptionDefault
actual_count uint64 No default

ENUMS

AdvisoryLockType strict

Type: uint32

Defined in fuchsia.io/locking.fidl

NameValueDescription
1

Zero or more connections can hold read locks on a file simultaneously.

2

At most one connection can hold a write lock on a file simultaneously. When a write lock is held on a file, no other types of locks can be held on that file.

3

The region specifies a region to be unlocked.

DirentType strict

Type: uint8

Defined in fuchsia.io/directory.fidl

NameValueDescription
0

A dirent with an unknown type.

4

A dirent representing a directory object.

6

A dirent representing a block device object.

8

A dirent representing a file object.

16

A dirent representing a service object.

HashAlgorithm flexible

Type: uint8

Defined in fuchsia.io/file2.fidl

Denotes which hash algorithm is used to build the merkle tree for fsverity-enabled files.

Added: HEAD

NameValueDescription
1
2

OpenMode strict

Type: uint32

Defined in fuchsia.io/directory2.fidl

NameValueDescription
1

Only succeed if the object exists.

2

Create the object if it does not exist, otherwise open existing. The check and the creation are performed in one atomic step.

3

Assert that the object does not exist, then create it. The assertion and creation are performed in one atomic step.

SeekOrigin strict

Type: uint32

Defined in fuchsia.io/file2.fidl

The reference point for updating the seek offset. See File.Seek.

This enum matches the zx_stream_seek_origin_t enum.

NameValueDescription
0

Seek from the start of the file. The seek offset will be set to offset bytes. The seek offset cannot be negative in this case.

1

Seek from the current position in the file. The seek offset will be the current seek offset plus offset bytes.

2

Seek from the end of the file. The seek offset will be the file size plus offset bytes.

SetExtendedAttributeMode strict

Type: uint32

Defined in fuchsia.io/node2.fidl

NameValueDescription
1

Set the value of the extended attribute regardless of whether it already exists.

2

Create a new extended attribute. Fail if it already exists.

3

Replace the value of an existing extended attribute. Fail if it doesn't already exist.

WatchEvent strict

Type: uint8

Defined in fuchsia.io/directory.fidl

NameValueDescription
0

Indicates the directory being watched has been deleted. The name returned for this event will be . (dot), as it is refering to the directory itself.

1

Indicates a node has been created (either new or moved) into a directory.

2

Identifies a node has been removed (either deleted or moved) from the directory.

3

Identifies a node already existed in the directory when watching started.

4

Identifies that no more EXISTING events will be sent. The name returned for this event will be empty, as it is not refering to a specific entry.

TABLES

AdvisoryLockRequest

Defined in fuchsia.io/locking.fidl

OrdinalFieldTypeDescription
type AdvisoryLockType

The type of lock to be acquired.

If this field is absent, the AdvisoryLock method will fail with ZX_ERR_INVALID_ARGS.

range AdvisoryLockRange

The byte range within the file to be locked.

The range can extend beyond the end of the file but cannot extend beyond the beginning of the file.

If this field is absent, the range defaults to the entire file.

wait bool

Whether the file should wait reply to the AdvisoryLock method until the requested lock can be acquired.

If this field is absent, the file will not wait.

ConnectionInfo resource

Defined in fuchsia.io/node2.fidl

OrdinalFieldTypeDescription
rights Rights

The rights possessed by the current connection. Note: rights limits the set of operations allowed on the connection, but does not guarantee their availability. For example, one may have the Rights.EXECUTE right on a file connection, but the file itself does not have the EXECUTE ability, and hence cannot be executed. See ConnectionOptions.rights.

ConnectorInfo

Defined in fuchsia.io/node2.fidl

OrdinalFieldTypeDescription
attributes NodeAttributes2

Requested attributes for the object. This is only populated if requested.

Added: HEAD

DirectoryEntry

Defined in fuchsia.io/directory2.fidl

OrdinalFieldTypeDescription
name Name

Name of the node. This field must be present.

protocols NodeProtocolKinds

Describes the kinds of representations supported by the node.

abilities Abilities

Describes the kinds of operations supported by the node.

id Id

An ID for the node. See Id. This id should be unique among all entries of a directory.

DirectoryEnumerateOptions

Defined in fuchsia.io/directory2.fidl

OrdinalFieldTypeDescription

DirectoryInfo

Defined in fuchsia.io/directory2.fidl

OrdinalFieldTypeDescription
attributes NodeAttributes2

Requested attributes for the directory. This is only populated if requested.

Added: HEAD

DirectoryProtocolOptions

Defined in fuchsia.io/directory2.fidl

OrdinalFieldTypeDescription
optional_rights Rights

Optional rights to be negotiated.

When present, indicates that the caller requests additional optional rights equal to the intersection of this value and the rights on the requesting connection. This acts as a high water mark that prevents rights escalation as this request is proxied over multiple hops; each proxy must intersect the value with the rights on the requesting connection before proxying on.

This field is necessary to express POSIX semantics where open of a directory must be O_RDONLY yet openat can be used to open non-directory nodes within that directory with privileges exceeding O_RDONLY. This means that POSIX clients must always set this to the full set of Rights to implement open or openat calls which do not forbid directories (e.g. O_WRONLY and O_RDWR do forbid directories).

FileInfo resource

Defined in fuchsia.io/file2.fidl

Auxiliary data for the file representation of a node.

OrdinalFieldTypeDescription
is_append bool

True if the file is opened in append mode. In append mode, the seek offset is moved to the end before every write, the two steps performed in an atomic manner.

observer handle<event>

An optional event which transmits information about an object's readability or writability. This event relays information about the underlying object, not the capability granted to client: this event may be signalled "readable" on a connection that does not have the capability to read.

This event will be present if the following conditions are met:

  • The available_operations on the file connection is not empty.
  • The filesystem supports signalling readability/writability events.

The FileSignal values may be observed on this event.

stream handle<stream>

An optional stream object, which can be used to read to and write from the file.

Reading and writing the file using the stream object can be up to 20x faster than reading and writing the file using the Read and Write operations in the File protocol.

attributes NodeAttributes2

Requested attributes for the file. This is only populated if requested.

Added: HEAD

ImmutableNodeAttributes

Defined in fuchsia.io/node2.fidl

OrdinalFieldTypeDescription
protocols NodeProtocolKinds

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.

abilities Abilities

Describes the kinds of operations supported by the node. Note: This is distinct from the rights used at connection time.

content_size uint64

Node size, in bytes.

storage_size uint64

Space needed to store the node (possibly larger than size), in bytes.

id Id

An ID for the node. See Id. This id should be unique among all entries of a directory.

change_time uint64

Time of last change to the metadata in nanoseconds since the Unix epoch, UTC.

Added: HEAD
options VerificationOptions

Contains the verification options for verity-enabled files.

Added: HEAD
root_hash vector<uint8>[64]

The root hash for the file. Not all filesystems support this across all files.

Added: HEAD
verity_enabled bool

True if this file is verity-enabled.

Added: HEAD

MutableNodeAttributes

Defined in fuchsia.io/node2.fidl

OrdinalFieldTypeDescription
creation_time uint64

Time of creation in nanoseconds since the Unix epoch, UTC.

modification_time uint64

Time of last modification in nanoseconds since the Unix epoch, UTC.

mode uint32

POSIX compatibility attributes. Most filesystems will not support these. Those that do must simply store and retrieve them (e.g. as extended attributes) and not attempt to interpret them (e.g. by doing permission checks or handling device opens specially).

Added: HEAD
uid uint32
Added: HEAD
gid uint32
Added: HEAD
rdev uint64
Added: HEAD
access_time uint64

Time of last access in nanoseconds since the Unix epoch, UTC. Note that servers might not always update this if this is the only attribute being updated.

Added: HEAD

NodeOptions

Defined in fuchsia.io/directory2.fidl

OrdinalFieldTypeDescription
flags NodeFlags
protocols NodeProtocols

Callers may assert the type of the object by setting the protocol corresponding to the expected type:

  • If the caller expected a directory but the node cannot be accessed as a directory, the error is ZX_ERR_NOT_DIR.

  • If the caller expected a file but the node cannot be accessed as a file, the error is ZX_ERR_NOT_FILE.

  • In other mismatched cases, and for an empty table, the error is ZX_ERR_WRONG_TYPE.

If more than one protocol is present, the resultant protocol may become any one of them. Callers should specify NodeFlags.GET_REPRESENTATION to receive a Node.OnRepresentation event, in order to ascertain the protocol.

If absent, indicates that the caller accepts any Node protocol (including Node itself for connector nodes, for instance).

mode OpenMode

Specifies behavior with respect to existence. If an object is to be created, its type is specified by protocols; it must be present. If a valid object type cannot be unambiguously inferred e.g. both directory and file are set, the request must fail.

rights Rights

Requested rights on the new connection.

If rights exceed the rights of the requesting connection then object_request will be closed with a ZX_ERR_ACCESS_DENIED epitaph.

This applies in addition to DirectoryProtocolOptions.optional_rights.

If absent, inherits appropriate rights from the requesting connection. For example, if using the node protocol, only the GET_ATTRIBUTES right is inherited.

attributes NodeAttributesQuery

If the GET_REPRESENTATION flag is set, attributes to be returned in Node.OnRepresentation. This requires the GET_ATTRIBUTES right on the parent connection, but this is not required on the resulting connection.

Added: HEAD
create_attributes MutableNodeAttributes

If an object is to be created, this specifies attributes that should be stored with the object at creation time. Servers might not support setting any or all attributes in which case they will return ZX_ERR_NOT_SUPPORTED.

Added: HEAD

NodeProtocols

Defined in fuchsia.io/directory2.fidl

OrdinalFieldTypeDescription
directory DirectoryProtocolOptions
file FileProtocolFlags
node NodeProtocolFlags

Asks for the node protocol. The only right supported is GET_ATTRIBUTES. Calling SetFlags on the resulting connection will result in ZX_ERR_BAD_HANDLE. If NodeFlags.GET_REPRESENTATION is specified, the connector variant will be returned (even if the object supports a different representation).

Added: HEAD

RightsRequest

Defined in fuchsia.io/node2.fidl

OrdinalFieldTypeDescription
rights Rights

Requested rights on the new connection.

If rights exceed the rights of the requesting connection then object_request will be closed with a ZX_ERR_ACCESS_DENIED epitaph.

If absent, inherits the rights from the requesting connection.

SymlinkInfo

Defined in fuchsia.io/symlink.fidl

Added: HEAD

OrdinalFieldTypeDescription
target SymlinkTarget

The symbolic link has no meaning on the server; the client is free to interpret the target however it chooses.

attributes NodeAttributes2

Requested attributes for the symbolic link. This is only populated if requested.

Added: HEAD

UnlinkOptions

Defined in fuchsia.io/directory2.fidl

OrdinalFieldTypeDescription
flags UnlinkFlags

VerificationOptions

Defined in fuchsia.io/file2.fidl

Set of options used to enable verity on a file.

Added: HEAD

OrdinalFieldTypeDescription
hash_algorithm HashAlgorithm
salt vector<uint8>[32]

salt is prepended to each block before it is hashed.

UNIONS

AdvisoryLocking_AdvisoryLock_Result strict

Defined in fuchsia.io/locking.fidl

OrdinalVariantTypeDescription
response AdvisoryLocking_AdvisoryLock_Response
err zx/Status

ConnectionProtocols flexible

Defined in fuchsia.io/directory2.fidl

OrdinalVariantTypeDescription
connector ConnectorFlags

Requests that the node's underlying protocol be served on the connection.

node NodeOptions

Requests that the underlying Node protocol be served on the connection.

Defined in fuchsia.io/directory2.fidl

OrdinalVariantTypeDescription

Directory2_Rename_Result strict

Defined in fuchsia.io/directory2.fidl

OrdinalVariantTypeDescription
response Directory2_Rename_Response
err zx/Status

Defined in fuchsia.io/directory2.fidl

OrdinalVariantTypeDescription

DirectoryIterator_GetNext_Result strict

Defined in fuchsia.io/directory2.fidl

OrdinalVariantTypeDescription
response DirectoryIterator_GetNext_Response
err zx/Status

ExtendedAttributeIterator_GetNext_Result strict

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response ExtendedAttributeIterator_GetNext_Response
err zx/Status

ExtendedAttributeValue strict resource

Defined in fuchsia.io/node2.fidl

The value type for an extended attribute. If the value is less than 32768 bytes, then it is included inline. Values larger than this size are written into a vmo buffer.

Added: HEAD
OrdinalVariantTypeDescription
bytes vector<uint8>[32768]
buffer handle<vmo>

File_Allocate_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response File_Allocate_Response
err zx/Status

File_EnableVerity_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response File_EnableVerity_Response
err zx/Status

File_GetBackingMemory_Result strict resource

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response File_GetBackingMemory_Response
err zx/Status

File_ReadAt_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response File_ReadAt_Response
err zx/Status

File_Resize_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response File_Resize_Response
err zx/Status

File_Seek_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response File_Seek_Response
err zx/Status

File_WriteAt_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response File_WriteAt_Response
err zx/Status

Linkable_LinkInto_Result strict

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response Linkable_LinkInto_Response
err zx/Status

Node2_GetAttributes_Result strict

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response NodeAttributes2
err zx/Status

Node2_GetExtendedAttribute_Result strict resource

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response ExtendedAttributeValue
err zx/Status

Node2_RemoveExtendedAttribute_Result strict

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response Node2_RemoveExtendedAttribute_Response
err zx/Status

Node2_SetExtendedAttribute_Result strict

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response Node2_SetExtendedAttribute_Response
err zx/Status

Node2_Sync_Result strict

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response Node2_Sync_Response
err zx/Status

Node2_UpdateAttributes_Result strict

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
response Node2_UpdateAttributes_Response
err zx/Status

NodeInfoDeprecated strict resource

Defined in fuchsia.io/node.fidl

OrdinalVariantTypeDescription
service Service

No protocol information was supplied by the connection.

file FileObject

The connection composes File.

directory DirectoryObject

The connection composes Directory.

Readable_Read_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response Readable_Read_Response
err zx/Status

Representation flexible resource

Defined in fuchsia.io/node2.fidl

OrdinalVariantTypeDescription
connector ConnectorInfo

Auxiliary data for the connector representation of a node, used for protocol discovery and connection.

It supports connecting to arbitrary protocols exported by the filesystem server at a path, including ones that do not compose Node2.

See NodeProtocolKinds.CONNECTOR.

directory DirectoryInfo

Auxiliary data for the directory representation of a node. The selection of this variant in Representation implies that the connection speaks the Directory protocol.

See NodeProtocolKinds.DIRECTORY.

file FileInfo

Auxiliary data for the file representation of a node. The selection of this variant in Representation implies that the connection speaks the File protocol.

See NodeProtocolKinds.FILE.

Writable_Write_Result strict

Defined in fuchsia.io/file2.fidl

OrdinalVariantTypeDescription
response Writable_Write_Response
err zx/Status

BITS

AllocateMode flexible

Type: uint32

Defined in fuchsia.io/file2.fidl

NameValueDescription
1
2
4
8
16
32

ConnectorFlags flexible

Type: uint64

Defined in fuchsia.io/directory2.fidl

NameValueDescription

FileProtocolFlags flexible

Type: uint64

Defined in fuchsia.io/directory2.fidl

NameValueDescription
1

Opens the file in append mode, i.e. the connection should seek to the end of the file before every write.

If the file does not support appending, it should result in a ZX_ERR_NOT_SUPPORTED epitaph. Currently, only fileProtocols.FILE connections may be configured for appending.

2

Truncates the object before usage, by setting its length to 0. Requires the Rights.WRITE_BYTES right on the connection.

If the file does not support truncating, it should result in a ZX_ERR_NOT_SUPPORTED epitaph.

FileSignal strict

Type: uint32

Defined in fuchsia.io/file2.fidl

NameValueDescription
16777216

Indicates the file is ready for reading.

33554432

Indicates the file is ready for writing.

ModeType strict

Type: uint32

Defined in fuchsia.io/directory.fidl

NameValueDescription
2147483648

NodeAttributeFlags strict

Type: uint32

Defined in fuchsia.io/node.fidl

The fields of 'attributes' which are used to update the Node are indicated by the 'flags' argument.

NameValueDescription
1
2

NodeAttributesQuery strict

Type: uint64

Defined in fuchsia.io/node2.fidl

NameValueDescription
1

Requests NodeAttributes.protocols.

2

Requests NodeAttributes.abilities.

4

Requests NodeAttributes.content_size.

8

Requests NodeAttributes.storage_size.

32

Requests NodeAttributes.id.

64

Requests NodeAttributes.creation_time.

128

Requests NodeAttributes.modification_time.

256

Posix attributes.

Added: HEAD
512
Added: HEAD
1024
Added: HEAD
2048
Added: HEAD
4096
Added: HEAD
8192
Added: HEAD
16384

Verity attributes.

Added: HEAD
32768
Added: HEAD
65536
Added: HEAD

NodeFlags flexible

Type: uint64

Defined in fuchsia.io/directory2.fidl

NameValueDescription
1

Requests that an Node.OnRepresentation event be sent as the first message on the protocol request.

This is a special case of fuchsia.unknown/Queryable.Query + inherent Describe methods on the specific protocols. It exists as an optimization to avoid an additional round trip.

NodeProtocolFlags flexible

Type: uint64

Defined in fuchsia.io/directory2.fidl

NameValueDescription
1

Only allow the connection if the underlying object is a directory. An attempt to open something other than a directory will result in a ZX_ERR_NOT_DIR epitaph.

NodeProtocolKinds flexible

Type: uint64

Defined in fuchsia.io/node-protocols.fidl

A node may have multiple supported representations when opening, even though it may have a fixed underlying identity.

Today, a file is accessed via the File protocol, and sends a Representation.FileInfo when opened with GET_REPRESENTATION. However, in the future we might introduce a more sophisticated FileV2 protocol, or a more efficient SuperFastFile backed by a specialized kernel object. New clients can request the more advanced representations by specifying the corresponding bits in NodeProtocolKinds, whereas existing clients would continue to talk to the node via the old representation.

NodeProtocolKinds enables forward-compatibility through a form of protocol negotiation.

The elements have one-to-one correspondence with the members of Representation.

NameValueDescription
1

The connector representation of a node.

The connection will speak either Node or the target protocol, depending on the flags used during opening.

2

The directory representation of a node.

The connection will speak the Directory protocol.

4

The file representation of a node.

The connection will speak the File protocol.

OpenFlags strict

Type: uint32

Defined in fuchsia.io/directory.fidl

NameValueDescription
1

Can read from target object.

2

Can write to target object.

8

Connection can map target object executable.

65536

Create the object if it doesn't exist.

131072

(with Create) Fail if the object already exists.

262144

Truncate the object before usage.

524288

Assert that the object to be opened is a directory. Return an error if the target object is not a directory.

1048576

Seek to the end of the object before all writes.

4194304

Open a reference to the object, not the object itself. It is ONLY valid to pass the following flags together with NODE_REFERENCE:

  • DIRECTORY
  • NOT_DIRECTORY
  • DESCRIBE otherwise an error is returned. If an object is opened or cloned using this method, the resulting connection does not carry any permission flags. The resulting connection allows a limited set of operations: GetAttr, Clone, Close, Describe, and GetFlags. The connection will speak the Node protocol. Calling SetAttr or SetFlags will result in ZX_ERR_BAD_HANDLE.
8388608

Requests that an "OnOpen" event is sent to the interface request.

The event will contain a non-null NodeInfoDeprecated if the open/clone is successful. This can be used to open a protocol that does not compose fuchsia.io/Node; the event is sent as if the protocol is fuchsia.io/Node and then the target protocol is used exclusively.

134217728

Specify this flag to request POSIX-compatibility with respect to write permission handling. Currently, it affects permission handling specifically during Open:

  • If the target path is a directory, the rights on the new connection expand to include WRITABLE if and only if the current connection and all intermediate mount points are writable.
  • Otherwise, this flag is ignored. It is an access denied error to request more rights than those on the current connection, or any intermediate mount points.

If this flag is omitted, opening always uses the requested rights, failing the operation with access denied error if requested rights exceeds the rights attached to the current connection.

If the requesting connection is read-only and the requested rights are read-only, the flag may be ignored by the server, and is not forwarded downstream. This is an implementation detail, necessary to enforce hierarchical permissions across mount points, and should have no effect on the expected behavior for clients.

268435456

Specify this flag to request POSIX-compatibility with respect to execute permission handling. Currently, it affects permission handling specifically during Open:

  • If the target path is a directory, the rights on the new connection expand to include EXECUTABLE if and only if the current connection and all intermediate mount points are executable.
  • Otherwise, this flag is ignored. It is an access denied error to request more rights than those on the current connection, or any intermediate mount points.

If this flag is omitted, opening always uses the requested rights, failing the operation with access denied error if requested rights exceeds the rights attached to the current connection.

If the requesting connection is read-only and the requested rights are read-only, the flag may be ignored by the server, and is not forwarded downstream. This is an implementation detail, necessary to enforce hierarchical permissions across mount points, and should have no effect on the expected behavior for clients.

33554432

Assert that the object to be opened is not a directory. Return an error if the target object is a directory.

67108864

When used during clone, the new connection inherits the rights on the source connection, regardless if it is a file or directory. Otherwise, clone attempts to use the requested rights. It is invalid to pass any of the RIGHT_* flags together with OpenFlags.CLONE_SAME_RIGHTS.

16777216

Open the target object as a block device.

Operations strict

Type: uint64

Defined in fuchsia.io/rights-abilities.fidl

The common members definition behind Rights and Abilities. Note that Directory operations are distinct from File operations, with the exception of some common operations (e.g. GET_ATTRIBUTES) defined on the underlying Node.

NameValueDescription
1

Connecting to a service.

2

Reading from the byte contents of a node.

4

Writing to the byte contents of a node.

8

Execute the byte contents of a node.

16

Reading the attributes of a node.

32

Updating the attributes of a node.

64

Reading the list of entries in a directory.

128

Opening a node from a directory.

When used in ConnectionOptions.rights, it must be specified together with Rights.ENUMERATE, since one can always probe the directory contents by opening children.

256

Modifying the list of entries in a directory. For example: node creation, renaming, linking, unlinking, etc.

When used in ConnectionOptions.rights, it must be specified together with Rights.ENUMERATE, since one can always probe the directory contents by triggering name conflicts during node creation.

SymlinkProtocolFlags flexible

Type: uint64

Defined in fuchsia.io/directory2.fidl

NameValueDescription

UnlinkFlags strict

Type: uint64

Defined in fuchsia.io/directory2.fidl

NameValueDescription
1

If set, the unlink will fail (with ZX_ERR_NOT_DIR) if the object is not a directory.

VmoFlags strict

Type: uint32

Defined in fuchsia.io/file2.fidl

NameValueDescription
1

Requests that the VMO be readable.

2

Requests that the VMO be writable.

4

Request that the VMO be executable.

65536

Require a copy-on-write clone of the underlying VMO. The request should fail if the VMO cannot be cloned. May not be supplied with SHARED_BUFFER.

A private clone uses at least the guarantees of the ZX_VMO_CHILD_SNAPSHOT_AT_LEAST_ON_WRITE flag to zx_vmo_create_child(). This means that the returned VMO will be copy-on-write (if WRITE is requested) but that it may or may not reflect subsequent content changes to the underlying file. The returned VMO will not reflect size changes to the file. These semantics match those of the POSIX mmap() MAP_PRIVATE flag.

In some cases, clients requiring a guaranteed snapshot of the file can use SHARED_BUFFER and then use zx_vmo_create_child() with ZX_VMO_CHILD_SNAPSHOT. However, in addition to cases where the implementation can't return a SHARED_BUFFER, creating a full snapshot will fail if the VMO is attached to the pager. Since most filesystems will use the paging system, the full snapshot approach should only be used in specific cases where the client is talking to a known server.

131072

Require a VMO that provides direct access to the contents of the file's underlying VMO. The request should fail if such a VMO cannot be provided. May not be supplied with PRIVATE_CLONE.

The returned VMO may not be resizable even when WRITE access is requested. In this case, File.Resize should be used to resize the file.

WatchMask strict

Type: uint32

Defined in fuchsia.io/directory.fidl

NameValueDescription
1

Used by Directory.Watch. Requests transmission of WatchEvent.DELETED.

2

Used by Directory.Watch. Requests transmission of WatchEvent.ADDED.

4

Used by Directory.Watch. Requests transmission of WatchEvent.REMOVED.

8

Used by Directory.Watch. Requests transmission of WatchEvent.EXISTING.

16

Used by Directory.Watch. Requests transmission of WatchEvent.IDLE.

CONSTANTS

NameValueTypeDescription
DIRECTORY_PROTOCOL_NAME fuchsia.io/Directory String
FILE_PROTOCOL_NAME fuchsia.io/File String
INO_UNKNOWN 18446744073709551615 uint64

Nodes which do not have ino values should return this value from Readdir and GetAttr.

MAX_ATTRIBUTE_NAME 255 uint64

The maximum size for an extended attribute name.

Added: HEAD
MAX_BUF 8192 uint64

The maximal buffer size which can be transmitted for buffered operations. This capacity is currently set somewhat arbitrarily.

MAX_FILENAME 255 uint64

The maximum length, in bytes, of a single filesystem component.

MAX_FS_NAME_BUFFER 32 uint64
MAX_INLINE_ATTRIBUTE_VALUE 32768 uint64

The maximum size for an extended attribute value to be included inline. Values larger than this size are passed in a vmo.

Added: HEAD
MAX_LIST_ATTRIBUTES_CHUNK 128 uint64

The maximum size of a chunk in the ListExtendedAttributes iterator.

Added: HEAD
MAX_NAME_LENGTH 255 uint64

The maximum length, in bytes, of a single filesystem component.

MAX_PATH_LENGTH 4095 uint64

The maximum length, in bytes, of a filesystem path.

MAX_TRANSFER_SIZE 8192 uint64

The maximum I/O size that is allowed for read/write operations using byte vectors.

MODE_PROTECTION_MASK 4095 uint32

Bits reserved for posix protections. Native fuchsia filesystems are not required to set bits contained within MODE_PROTECTION_MASK, but filesystems that wish to do so may refer to sys/stat.h for their definitions.

MODE_TYPE_BLOCK_DEVICE 24576 uint32
MODE_TYPE_DIRECTORY 16384 uint32
MODE_TYPE_FILE 32768 uint32
MODE_TYPE_MASK 1044480 uint32

Bits indicating node type. The canonical mechanism to check for a node type is to take 'mode', bitwise AND it with the MODE_TYPE_MASK, and check exact equality against a mode type.

MODE_TYPE_SERVICE 65536 uint32
NODE_PROTOCOL_NAME fuchsia.io/Node String
OPEN_FLAGS_ALLOWED_WITH_NODE_REFERENCE

Flags used when opening a node reference must fall within this mask.

OPEN_RIGHTS

All known rights.

RW_STAR_DIR

Alias for directory permission alias rw*

RX_STAR_DIR

Alias for directory permission alias rx*

R_STAR_DIR

Alias for directory permission alias r*

W_STAR_DIR

Alias for directory permission alias w*

X_STAR_DIR

Alias for directory permission alias x*

ALIASES

NameValueDescription
Abilities fuchsia.io/Operations

Abilities are properties intrinsic to a node. They specify which operations are supported by it.

Invoking an operation without corresponding support in the node results in a ZX_ERR_NOT_SUPPORTED error. Note that if both the access denied and the not supported error conditions apply, the access denied case takes precedence.

ExtendedAttributeName vector[MAX_ATTRIBUTE_NAME]

The name of an extended attribute. It can not contain any null bytes. Other than that and the maximum size, no particular structure is imposed on the name.

Added: HEAD
Id uint64

The type to identify a node, if the implementation supports some notion of unique node ID.

Uniqueness Guarantees

A client is usually presented with a directory tree that is the result of composing together multiple backing implementation instances. An ID would be unique within the corresponding instance only. Their boundaries are rather implicit on Fuchsia, as a result of transparently-forwarding directory proxies. It could be common for a client to observe identical Ids when traversing a directory tree, when it encounters nodes from different backing instances. Therefore, the ID is best used for debugging and informational purposes.

The fuchsia.fs/FilesystemInfo.fs_id field may be used to disambiguate IDs from different backing instances.

Name string[MAX_NAME_LENGTH]

The type for the name of a node, i.e. a single path component. E.g. foo

Invariants

A valid node name must meet the following criteria:

  • It cannot be longer than MAX_NAME_LENGTH.
  • It cannot be empty.
  • It cannot be ".." (dot-dot).
  • It cannot be "." (single dot).
  • It cannot contain "/".
  • It cannot contain embedded NUL.
Path string[MAX_PATH_LENGTH]

A path is a string of one or more components, separated by "/". E.g. foo/bar/baz

Invariants

A valid path must meet the following criteria:

  • It cannot be empty.
  • It cannot be longer than MAX_PATH_LENGTH.
  • It cannot have a leading "/".
  • It cannot have a trailing "/".
  • It must be exactly "." OR each of its components must be a valid Name.

Paths should be transformed into their canonical forms at client side. For example, a client should convert "foo/bar/.././baz/" to "foo/baz" before using it as a path.

Rights fuchsia.io/Operations

Rights are properties specific to a connection. They limit which operations are allowed on a connection.

Invoking an operation without the corresponding right results in a ZX_ERR_ACCESS_DENIED error.

SymlinkTarget vector[MAX_PATH_LENGTH]
Token zx/Handle

The type to identify a connection to a node. It represents a capability: a reference to a node with associated rights.

Transfer vector[MAX_TRANSFER_SIZE]

The byte vector type used for read/write operations.