Method Name Request / Response Type Description
Get GetRequest
GetResponse

Get reads and streams the contents of a file from the target.
The file is streamed by sequential messages, each containing up to
64KB of data. A final message is sent prior to closing the stream
that contains the hash of the data sent. An error is returned
if the file does not exist or there was an error reading the file.

TransferToRemote TransferToRemoteRequest
TransferToRemoteResponse

TransferToRemote transfers the contents of a file from the target to a
specified remote location. The response contains the hash of the data
transferred. An error is returned if the file does not exist, the file
transfer fails, or if there was an error reading the file. This is a
blocking call until the file transfer is complete.

Put PutRequest stream
PutResponse stream

Put streams data into a file on the target. The file is sent in
sequential messages, each message containing up to 64KB of data. A final
message must be sent that includes the hash of the data sent. An
error is returned if the location does not exist or there is an error
writing the data. If no checksum is received, the target must assume the
operation is incomplete and remove the partially transmitted file. The
target should initially write the file to a temporary location so a failure
does not destroy the original file.

Stat StatRequest
StatResponse

Stat returns metadata about a file on the target. An error is returned
if the file does not exist of there is an error in accessing the metadata.

Remove RemoveRequest
RemoveResponse

Remove removes the specified file from the target. An error is
returned if the file does not exist, is a directory, or the remove
operation encounters an error (e.g., permission denied).

GetRequest

A GetRequest specifies the remote_file to be streamed back
to the caller. The remote_file must be an absolute path to an
existing file.

Field Type Description
remote_file string

GetResponse

A GetResponse either contains the next set of bytes read from the
file or, as the last message, the hash of the data.

Field Type Description
response (one of)
contents bytes

hash gnoi.types.HashType

hash of the file.

PutRequest

A PutRequest is used to send data to be written on a file on the target.

The initial message contains an Open message. The Open message contains
information name of the file and the file's permisssions.

The remote_file must be an absolute path. If remote_file already exists on
the target, it is overwritten, otherwise it is created. If the path to
remote_file doesn't exist it will be created.

The contents to be written are streamed through multiple messages using the
contents field. Each message may contain up to 64KB of data.

The final message of the RPC contains the hash of the file contents.

Field Type Description
request (one of)
open PutRequest.Details

contents bytes

hash gnoi.types.HashType

hash of the file.

Field Type Description
remote_file string

permissions uint32

Permissions are represented as the octal format of standard UNIX
file permissions.
ex. 775: user read/write/execute, group read/write/execute,
global read/execute.

Empty message

RemoveRequest

A RemoveRequest specifies a file to be removed from the target.

Field Type Description
remote_file string

Empty message

StatInfo

StatInfo provides a file system information about a particular path.

Field Type Description
path string

last_modified uint64

Nanoseconds since epoch.

permissions uint32

Permissions are represented as the octal format of standard UNIX
file permissions.
ex. 775: user read/write/execute, group read/write/execute,
global read/execute.
The value returned in this field should be the octal number. No base
conversion should be required to read the value. For example, 0755
should result in the permissions field holding the value 755, 4644
results in the permissions field being 4644, and so on.

size uint64

umask uint32

Default file creation mask. Represented as the octal format of
standard UNIX mask.

StatRequest

StatRequest will list files at the provided path.

Field Type Description
path string

StatResponse

StatResponse contains list of stat info of the provided path.

Field Type Description
stats (repeated) StatInfo

TransferToRemoteRequest

A TransferToRemoteRequest specifies the local path to transfer to and the
details on where to transfer the data from. The local_path must be an
absolute path to the file.

Field Type Description
local_path string

remote_download gnoi.common.RemoteDownload

Details to download the remote_file being requested to a remote location.

TransferToRemoteResponse

A TransferToRemoteResponse contains the hash of the data transferred.

Field Type Description
hash gnoi.types.HashType

hash of the file.

RemoteDownload

RemoteDownload defines the details for a device to initiate a file transfer
from or to a remote location.

Field Type Description
path string

The path information containing where to download the data from or to.
For HTTP(S), this will be the URL (i.e. foo.com/file.tbz2).
For SFTP and SCP, this will be the address:/path/to/file
(i.e. host.foo.com:/bar/baz).

protocol RemoteDownload.Protocol

credentials gnoi.types.Credentials

source_address string

Optional source address used to initiate connections from the device.
It can be either an IPv4 address or an IPv6 address, depending on the
connection's destination address.

Credentials

Credentials defines credentials needed to perform authentication on a device.

Field Type Description
username string

password (one of)
cleartext string

hashed HashType

HashType

HashType defines the valid hash methods for data verification. UNSPECIFIED
should be treated an error.

Field Type Description
method HashType.HashMethod

hash bytes

Path

Path encodes a data tree path as a series of repeated strings, with
each element of the path representing a data tree node name and the
associated attributes.
Reference: gNMI Specification Section 2.2.2.

Field Type Description
origin string

Label to disambiguate path.

elem (repeated) PathElem

Elements of the path.

PathElem

PathElem encodes an element of a gNMI path, along with any attributes (keys)
that may be associated with it.
Reference: gNMI Specification Section 2.2.2.

Field Type Description
name string

The name of the element in the path.

key (repeated) PathElem.KeyEntry

Map of key (attribute) name to value.

Field Type Description
key string

value string

Name Number Description
UNSPECIFIED 0

SHA256 1

SHA512 2

MD5 3

L3Protocol

Generic Layer 3 Protocol enumeration.

Name Number Description
UNSPECIFIED 0

IPV4 1

IPV6 2

.google.protobuf.FileOptions.gnoi_version

The gNOI service semantic version.

Extension Type Base Number Description
gnoi_version string .google.protobuf.FileOptions 1002

The gNOI service semantic version.

Proto Type Notes C++ Java Python Go C# PHP Ruby
double double double float float64 double float Float
float float float float float32 float float Float
int32 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint32 instead. int32 int int int32 int integer Bignum or Fixnum (as required)
int64 Uses variable-length encoding. Inefficient for encoding negative numbers – if your field is likely to have negative values, use sint64 instead. int64 long int/long int64 long integer/string Bignum
uint32 Uses variable-length encoding. uint32 int int/long uint32 uint integer Bignum or Fixnum (as required)
uint64 Uses variable-length encoding. uint64 long int/long uint64 ulong integer/string Bignum or Fixnum (as required)
sint32 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int32s. int32 int int int32 int integer Bignum or Fixnum (as required)
sint64 Uses variable-length encoding. Signed int value. These more efficiently encode negative numbers than regular int64s. int64 long int/long int64 long integer/string Bignum
fixed32 Always four bytes. More efficient than uint32 if values are often greater than 2^28. uint32 int int uint32 uint integer Bignum or Fixnum (as required)
fixed64 Always eight bytes. More efficient than uint64 if values are often greater than 2^56. uint64 long int/long uint64 ulong integer/string Bignum
sfixed32 Always four bytes. int32 int int int32 int integer Bignum or Fixnum (as required)
sfixed64 Always eight bytes. int64 long int/long int64 long integer/string Bignum
bool bool boolean boolean bool bool boolean TrueClass/FalseClass
string A string must always contain UTF-8 encoded or 7-bit ASCII text. string String str/unicode string string string String (UTF-8)
bytes May contain any arbitrary sequence of bytes. string ByteString str []byte ByteString string String (ASCII-8BIT)

Created by Siva Sivakumar / Roman Dodin / srl-labs