diff --git a/protocols/gnmi/stub/src/main/proto/COMMIT_ID b/protocols/gnmi/stub/src/main/proto/COMMIT_ID
new file mode 100644
index 0000000..0ac43f2
--- /dev/null
+++ b/protocols/gnmi/stub/src/main/proto/COMMIT_ID
@@ -0,0 +1,2 @@
+https://github.com/openconfig/gnmi/blob/master/proto/gnmi/gnmi.proto
+8a14ac0e9ed67e08988f9913243d89f398454824
diff --git a/protocols/gnmi/stub/src/main/proto/gnmi.proto b/protocols/gnmi/stub/src/main/proto/gnmi.proto
new file mode 100644
index 0000000..d497dc0
--- /dev/null
+++ b/protocols/gnmi/stub/src/main/proto/gnmi.proto
@@ -0,0 +1,414 @@
+//
+// 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/gnmi.md
+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.4.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.
+}
+
+// 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.
+}
+
+// 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 {
+    uint64 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;
+}
+
+// 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.
+}
