Add gNMI device state subscriber

Change-Id: I20cb5e130f4e416bf8678aab2e5268faf24ad06b
diff --git a/protocols/gnmi/api/src/main/java/org/onosproject/gnmi/api/GnmiClient.java b/protocols/gnmi/api/src/main/java/org/onosproject/gnmi/api/GnmiClient.java
index 5beb238..6e65dd3 100644
--- a/protocols/gnmi/api/src/main/java/org/onosproject/gnmi/api/GnmiClient.java
+++ b/protocols/gnmi/api/src/main/java/org/onosproject/gnmi/api/GnmiClient.java
@@ -22,6 +22,7 @@
 import gnmi.Gnmi.GetResponse;
 import gnmi.Gnmi.SetRequest;
 import gnmi.Gnmi.SetResponse;
+import gnmi.Gnmi.SubscribeRequest;
 import org.onosproject.grpc.api.GrpcClient;
 
 import java.util.concurrent.CompletableFuture;
@@ -56,12 +57,23 @@
     CompletableFuture<SetResponse> set(SetRequest request);
 
     /**
-     * Check weather the gNMI service is available or not by sending a
-     * dummy get request message.
+     * Subscribes to a given specific gNMI path.
+     *
+     * @param request the subscribe request
+     * @return true if subscribe successfully; false otherwise
+     */
+    boolean subscribe(SubscribeRequest request);
+
+    /**
+     * Terminates the subscription channel of this device.
+     */
+    void terminateSubscriptionChannel();
+
+    /**
+     * Check weather the gNMI service is available or not by sending a dummy get
+     * request message.
      *
      * @return true if gNMI service available; false otherwise
      */
     CompletableFuture<Boolean> isServiceAvailable();
-
-    // TODO: Support gNMI subscription
 }