| // |
| // Copyright 2016 Google Inc. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| syntax = "proto3"; |
| |
| import "google/protobuf/any.proto"; |
| import "google/protobuf/descriptor.proto"; |
| |
| // Package gNMI defines a service specification for the gRPC Network Management |
| // Interface. This interface is defined to be a standard interface via which |
| // a network management system ("client") can subscribe to state values, |
| // retrieve snapshots of state information, and manipulate the state of a data |
| // tree supported by a device ("target"). |
| // |
| // This document references the gNMI Specification which can be found at |
| // http://github.com/openconfig/reference/blob/master/rpc/gnmi |
| package gnmi; |
| |
| // Define a protobuf FileOption that defines the gNMI service version. |
| extend google.protobuf.FileOptions { |
| // The gNMI service semantic version. |
| string gnmi_service = 1001; |
| } |
| |
| // gNMI_service is the current version of the gNMI service, returned through |
| // the Capabilities RPC. |
| option (gnmi_service) = "0.5.0"; |
| |
| service gNMI { |
| // Capabilities allows the client to retrieve the set of capabilities that |
| // is supported by the target. This allows the target to validate the |
| // service version that is implemented and retrieve the set of models that |
| // the target supports. The models can then be specified in subsequent RPCs |
| // to restrict the set of data that is utilized. |
| // Reference: gNMI Specification Section 3.2 |
| rpc Capabilities(CapabilityRequest) returns (CapabilityResponse); |
| // Retrieve a snapshot of data from the target. A Get RPC requests that the |
| // target snapshots a subset of the data tree as specified by the paths |
| // included in the message and serializes this to be returned to the |
| // client using the specified encoding. |
| // Reference: gNMI Specification Section 3.3 |
| rpc Get(GetRequest) returns (GetResponse); |
| // Set allows the client to modify the state of data on the target. The |
| // paths to modified along with the new values that the client wishes |
| // to set the value to. |
| // Reference: gNMI Specification Section 3.4 |
| rpc Set(SetRequest) returns (SetResponse); |
| // Subscribe allows a client to request the target to send it values |
| // of particular paths within the data tree. These values may be streamed |
| // at a particular cadence (STREAM), sent one off on a long-lived channel |
| // (POLL), or sent as a one-off retrieval (ONCE). |
| // Reference: gNMI Specification Section 3.5 |
| rpc Subscribe(stream SubscribeRequest) returns (stream SubscribeResponse); |
| } |
| |
| // Notification is a re-usable message that is used to encode data from the |
| // target to the client. A Notification carries two types of changes to the data |
| // tree: |
| // - Deleted values (delete) - a set of paths that have been removed from the |
| // data tree. |
| // - Updated values (update) - a set of path-value pairs indicating the path |
| // whose value has changed in the data tree. |
| // Reference: gNMI Specification Section 2.1 |
| message Notification { |
| int64 timestamp = 1; // Timestamp in nanoseconds since Epoch. |
| Path prefix = 2; // Prefix used for paths in the message. |
| // An alias for the path specified in the prefix field. |
| // Reference: gNMI Specification Section 2.4.2 |
| string alias = 3; |
| repeated Update update = 4; // Data elements that have changed values. |
| repeated Path delete = 5; // Data elements that have been deleted. |
| } |
| |
| // Update is a re-usable message that is used to store a particular Path, |
| // Value pair. |
| // Reference: gNMI Specification Section 2.1 |
| message Update { |
| Path path = 1; // The path (key) for the update. |
| Value value = 2 [deprecated=true]; // The value (value) for the update. |
| TypedValue val = 3; // The explicitly typed update value. |
| uint32 duplicates = 4; // Number of coalesced duplicates. |
| } |
| |
| // TypedValue is used to encode a value being sent between the client and |
| // target (originated by either entity). |
| message TypedValue { |
| // One of the fields within the val oneof is populated with the value |
| // of the update. The type of the value being included in the Update |
| // determines which field should be populated. In the case that the |
| // encoding is a particular form of the base protobuf type, a specific |
| // field is used to store the value (e.g., json_val). |
| oneof value { |
| string string_val = 1; // String value. |
| int64 int_val = 2; // Integer value. |
| uint64 uint_val = 3; // Unsigned integer value. |
| bool bool_val = 4; // Bool value. |
| bytes bytes_val = 5; // Arbitrary byte sequence value. |
| float float_val = 6; // Floating point value. |
| Decimal64 decimal_val = 7; // Decimal64 encoded value. |
| ScalarArray leaflist_val = 8; // Mixed type scalar array value. |
| google.protobuf.Any any_val = 9; // protobuf.Any encoded bytes. |
| bytes json_val = 10; // JSON-encoded text. |
| bytes json_ietf_val = 11; // JSON-encoded text per RFC7951. |
| string ascii_val = 12; // Arbitrary ASCII text. |
| } |
| } |
| |
| // 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. |
| message Path { |
| // Elements of the path are no longer encoded as a string, but rather within |
| // the elem field as a PathElem message. |
| repeated string element = 1 [deprecated=true]; |
| string origin = 2; // Label to disambiguate path. |
| repeated PathElem elem = 3; // Elements of the path. |
| string target = 4; // The name of the target |
| // (Sec. 2.2.2.1) |
| } |
| |
| // PathElem encodes an element of a gNMI path, along ith any attributes (keys) |
| // that may be associated with it. |
| // Reference: gNMI Specification Section 2.2.2. |
| message PathElem { |
| string name = 1; // The name of the element in the path. |
| map<string, string> key = 2; // Map of key (attribute) name to value. |
| } |
| |
| // Value encodes a data tree node's value - along with the way in which |
| // the value is encoded. This message is deprecated by gNMI 0.3.0. |
| // Reference: gNMI Specification Section 2.2.3. |
| message Value { |
| option deprecated = true; |
| bytes value = 1; // Value of the variable being transmitted. |
| Encoding type = 2; // Encoding used for the value field. |
| } |
| |
| // Encoding defines the value encoding formats that are supported by the gNMI |
| // protocol. These encodings are used by both the client (when sending Set |
| // messages to modify the state of the target) and the target when serializing |
| // data to be returned to the client (in both Subscribe and Get RPCs). |
| // Reference: gNMI Specification Section 2.3 |
| enum Encoding { |
| JSON = 0; // JSON encoded text. |
| BYTES = 1; // Arbitrarily encoded bytes. |
| PROTO = 2; // Encoded according to out-of-band agreed Protobuf. |
| ASCII = 3; // ASCII text of an out-of-band agreed format. |
| JSON_IETF = 4; // JSON encoded text as per RFC7951. |
| } |
| |
| // Error message previously utilised to return errors to the client. Deprecated |
| // in favour of using the google.golang.org/genproto/googleapis/rpc/status |
| // message in the RPC response. |
| // Reference: gNMI Specification Section 2.5 |
| message Error { |
| option deprecated = true; |
| uint32 code = 1; // Canonical gRPC error code. |
| string message = 2; // Human readable error. |
| google.protobuf.Any data = 3; // Optional additional information. |
| } |
| |
| // Decimal64 is used to encode a fixed precision decimal number. The value |
| // is expressed as a set of digits with the precision specifying the |
| // number of digits following the decimal point in the digit set. |
| message Decimal64 { |
| int64 digits = 1; // Set of digits. |
| uint32 precision = 2; // Number of digits following the decimal point. |
| } |
| |
| // ScalarArray is used to encode a mixed-type array of values. |
| message ScalarArray { |
| // The set of elements within the array. Each TypedValue message should |
| // specify only elements that have a field identifier of 1-7 (i.e., the |
| // values are scalar values). |
| repeated TypedValue element = 1; |
| } |
| |
| // SubscribeRequest is the message sent by the client to the target when |
| // initiating a subscription to a set of paths within the data tree. The |
| // request field must be populated and the initial message must specify a |
| // SubscriptionList to initiate a subscription. The message is subsequently |
| // used to define aliases or trigger polled data to be sent by the target. |
| // Reference: gNMI Specification Section 3.5.1.1 |
| message SubscribeRequest { |
| oneof request { |
| SubscriptionList subscribe = 1; // Specify the paths within a subscription. |
| Poll poll = 3; // Trigger a polled update. |
| AliasList aliases = 4; // Aliases to be created. |
| } |
| } |
| |
| // Poll is sent within a SubscribeRequest to trigger the device to |
| // send telemetry updates for the paths that are associated with the |
| // subscription. |
| // Reference: gNMI Specification Section Section 3.5.1.4 |
| message Poll { |
| } |
| |
| // SubscribeResponse is the message used by the target within a Subscribe RPC. |
| // The target includes a Notification message which is used to transmit values |
| // of the path(s) that are associated with the subscription. The same message |
| // is to indicate that the target has sent all data values once (is |
| // synchronized). |
| // Reference: gNMI Specification Section 3.5.1.4 |
| message SubscribeResponse { |
| oneof response { |
| Notification update = 1; // Changed or sampled value for a path. |
| // Indicate target has sent all values associated with the subscription |
| // at least once. |
| bool sync_response = 3; |
| // Deprecated in favour of google.golang.org/genproto/googleapis/rpc/status |
| Error error = 4 [deprecated=true]; |
| } |
| } |
| |
| // SubscriptionList is used within a Subscribe message to specify the list of |
| // paths that the client wishes to subscribe to. The message consists of a |
| // list of (possibly prefixed) paths, and options that relate to the |
| // subscription. |
| // Reference: gNMI Specification Section 3.5.1.2 |
| message SubscriptionList { |
| Path prefix = 1; // Prefix used for paths. |
| repeated Subscription subscription = 2; // Set of subscriptions to create. |
| // Whether target defined aliases are allowed within the subscription. |
| bool use_aliases = 3; |
| QOSMarking qos = 4; // DSCP marking to be used. |
| // Mode of the subscription. |
| enum Mode { |
| STREAM = 0; // Values streamed by the target (Sec. 3.5.1.5.2). |
| ONCE = 1; // Values sent once-off by the target (Sec. 3.5.1.5.1). |
| POLL = 2; // Values sent in response to a poll request (Sec. 3.5.1.5.3). |
| } |
| Mode mode = 5; |
| // Whether elements of the schema that are marked as eligible for aggregation |
| // should be aggregated or not. |
| bool allow_aggregation = 6; |
| // The set of schemas that define the elements of the data tree that should |
| // be sent by the target. |
| repeated ModelData use_models = 7; |
| // The encoding that the target should use within the Notifications generated |
| // corresponding to the SubscriptionList. |
| Encoding encoding = 8; |
| // An optional field to specify that only updates to current state should be |
| // sent to a client. If set, the initial state is not sent to the client but |
| // rather only the sync message followed by any subsequent updates to the |
| // current state. For ONCE and POLL modes, this causes the server to send only |
| // the sync message (Sec. 3.5.2.3). |
| bool updates_only = 9; |
| } |
| |
| // Subscription is a single request within a SubscriptionList. The path |
| // specified is interpreted (along with the prefix) as the elements of the data |
| // tree that the client is subscribing to. The mode determines how the target |
| // should trigger updates to be sent. |
| // Reference: gNMI Specification Section 3.5.1.3 |
| message Subscription { |
| Path path = 1; // The data tree path. |
| SubscriptionMode mode = 2; // Subscription mode to be used. |
| uint64 sample_interval = 3; // ns between samples in SAMPLE mode. |
| // Indicates whether values that not changed should be sent in a SAMPLE |
| // subscription. |
| bool suppress_redundant = 4; |
| // Specifies the maximum allowable silent period in nanoseconds when |
| // suppress_redundant is in use. The target should send a value at least once |
| // in the period specified. |
| uint64 heartbeat_interval = 5; |
| } |
| |
| // SubscriptionMode is the mode of the subscription, specifying how the |
| // target must return values in a subscription. |
| // Reference: gNMI Specification Section 3.5.1.3 |
| enum SubscriptionMode { |
| TARGET_DEFINED = 0; // The target selects the relevant mode for each element. |
| ON_CHANGE = 1; // The target sends an update on element value change. |
| SAMPLE = 2; // The target samples values according to the interval. |
| } |
| |
| // QOSMarking specifies the DSCP value to be set on transmitted telemetry |
| // updates from the target. |
| // Reference: gNMI Specification Section 3.5.1.2 |
| message QOSMarking { |
| uint32 marking = 1; |
| } |
| |
| // Alias specifies a data tree path, and an associated string which defines an |
| // alias which is to be used for this path in the context of the RPC. The alias |
| // is specified as a string which is prefixed with "#" to disambiguate it from |
| // data tree element paths. |
| // Reference: gNMI Specification Section 2.4.2 |
| message Alias { |
| Path path = 1; // The path to be aliased. |
| string alias = 2; // The alias value, a string prefixed by "#". |
| } |
| |
| // AliasList specifies a list of aliases. It is used in a SubscribeRequest for |
| // a client to create a set of aliases that the target is to utilize. |
| // Reference: gNMI Specification Section 3.5.1.6 |
| message AliasList { |
| repeated Alias alias = 1; // The set of aliases to be created. |
| } |
| |
| // SetRequest is sent from a client to the target to update values in the data |
| // tree. Paths are either deleted by the client, or modified by means of being |
| // updated, or replaced. Where a replace is used, unspecified values are |
| // considered to be replaced, whereas when update is used the changes are |
| // considered to be incremental. The set of changes that are specified within |
| // a single SetRequest are considered to be a transaction. |
| // Reference: gNMI Specification Section 3.4.1 |
| message SetRequest { |
| Path prefix = 1; // Prefix used for paths in the message. |
| repeated Path delete = 2; // Paths to be deleted from the data tree. |
| repeated Update replace = 3; // Updates specifying elements to be replaced. |
| repeated Update update = 4; // Updates specifying elements to updated. |
| } |
| |
| // SetResponse is the response to a SetRequest, sent from the target to the |
| // client. It reports the result of the modifications to the data tree that were |
| // specified by the client. Errors for this RPC should be reported using the |
| // https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto |
| // message in the RPC return. The gnmi.Error message can be used to add additional |
| // details where required. |
| // Reference: gNMI Specification Section 3.4.2 |
| message SetResponse { |
| Path prefix = 1; // Prefix used for paths. |
| // A set of responses specifying the result of the operations specified in |
| // the SetRequest. |
| repeated UpdateResult response = 2; |
| Error message = 3 [deprecated=true]; // The overall status of the transaction. |
| int64 timestamp = 4; // Timestamp of transaction (ns since epoch). |
| } |
| |
| // UpdateResult is used within the SetResponse message to communicate the |
| // result of an operation specified within a SetRequest message. |
| // Reference: gNMI Specification Section 3.4.2 |
| message UpdateResult { |
| // The operation that was associated with the Path specified. |
| enum Operation { |
| INVALID = 0; |
| DELETE = 1; // The result relates to a delete of Path. |
| REPLACE = 2; // The result relates to a replace of Path. |
| UPDATE = 3; // The result relates to an update of Path. |
| } |
| // Deprecated timestamp for the UpdateResult, this field has been |
| // replaced by the timestamp within the SetResponse message, since |
| // all mutations effected by a set should be applied as a single |
| // transaction. |
| int64 timestamp = 1 [deprecated=true]; |
| Path path = 2; // Path associated with the update. |
| Error message = 3 [deprecated=true]; // Status of the update operation. |
| Operation op = 4; // Update operation type. |
| } |
| |
| // GetRequest is sent when a client initiates a Get RPC. It is used to specify |
| // the set of data elements for which the target should return a snapshot of |
| // data. The use_models field specifies the set of schema modules that are to |
| // be used by the target - where use_models is not specified then the target |
| // must use all schema models that it has. |
| // Reference: gNMI Specification Section 3.3.1 |
| message GetRequest { |
| Path prefix = 1; // Prefix used for paths. |
| repeated Path path = 2; // Paths requested by the client. |
| // Type of elements within the data tree. |
| enum DataType { |
| ALL = 0; // All data elements. |
| CONFIG = 1; // Config (rw) only elements. |
| STATE = 2; // State (ro) only elements. |
| // Data elements marked in the schema as operational. This refers to data |
| // elements whose value relates to the state of processes or interactions |
| // running on the device. |
| OPERATIONAL = 3; |
| } |
| DataType type = 3; // The type of data being requested. |
| Encoding encoding = 5; // Encoding to be used. |
| repeated ModelData use_models = 6; // The schema models to be used. |
| } |
| |
| // GetResponse is used by the target to respond to a GetRequest from a client. |
| // The set of Notifications corresponds to the data values that are requested |
| // by the client in the GetRequest. |
| // Reference: gNMI Specification Section 3.3.2 |
| message GetResponse { |
| repeated Notification notification = 1; // Data values. |
| Error error = 2 [deprecated=true]; // Errors that occurred in the Get. |
| } |
| |
| // CapabilityRequest is sent by the client in the Capabilities RPC to request |
| // that the target reports its capabilities. |
| // Reference: gNMI Specification Section 3.2.1 |
| message CapabilityRequest { |
| } |
| |
| // CapabilityResponse is used by the target to report its capabilities to the |
| // client within the Capabilities RPC. |
| // Reference: gNMI Specification Section 3.2.2 |
| message CapabilityResponse { |
| repeated ModelData supported_models = 1; // Supported schema models. |
| repeated Encoding supported_encodings = 2; // Supported encodings. |
| string gNMI_version = 3; // Supported gNMI version. |
| } |
| |
| // ModelData is used to describe a set of schema modules. It can be used in a |
| // CapabilityResponse where a target reports the set of modules that it |
| // supports, and within the SubscribeRequest and GetRequest messages to specify |
| // the set of models from which data tree elements should be reported. |
| // Reference: gNMI Specification Section 3.2.3 |
| message ModelData { |
| string name = 1; // Name of the model. |
| string organization = 2; // Organization publishing the model. |
| string version = 3; // Semantic version of the model. |
| } |