From bc7b4ee5b64721b4ea75106030db8eec3eed7b62 Mon Sep 17 00:00:00 2001
From: PedroDuarte536 <pedro.dld536@gmail.com>
Date: Wed, 7 May 2025 18:35:58 +0100
Subject: [PATCH] accept gnmi connections via PROTO

---
 .../service/drivers/gnmi_openconfig/GnmiSessionHandler.py     | 3 ++-
 .../service/drivers/gnmi_openconfig/tools/Capabilities.py     | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py b/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py
index 03a55f472..85967e019 100644
--- a/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py
+++ b/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py
@@ -38,6 +38,7 @@ class GnmiSessionHandler:
         self._username  = settings.get('username')
         self._password  = settings.get('password')
         self._use_tls   = settings.get('use_tls', False)
+        self._encoding = settings.get('encoding')
         self._channel : Optional[grpc.Channel] = None
         self._stub : Optional[gNMIStub] = None
         self._monit_thread = None
@@ -90,7 +91,7 @@ class GnmiSessionHandler:
 
         get_request = GetRequest()
         get_request.type = GetRequest.DataType.ALL
-        get_request.encoding = Encoding.JSON_IETF
+        get_request.encoding = Encoding.Value(self._encoding) if self._encoding else Encoding.JSON_IETF
         #get_request.use_models.add() # kept empty: return for all models supported
         for i,resource_key in enumerate(resource_keys):
             str_resource_name = 'resource_key[#{:d}]'.format(i)
diff --git a/src/device/service/drivers/gnmi_openconfig/tools/Capabilities.py b/src/device/service/drivers/gnmi_openconfig/tools/Capabilities.py
index a57f0d731..3f0afda11 100644
--- a/src/device/service/drivers/gnmi_openconfig/tools/Capabilities.py
+++ b/src/device/service/drivers/gnmi_openconfig/tools/Capabilities.py
@@ -44,6 +44,6 @@ def check_capabilities(
     if len(supported_encodings) == 0:
         # pylint: disable=broad-exception-raised
         raise Exception('No supported encodings found')
-    if 'JSON_IETF' not in supported_encodings:
+    if len({'JSON_IETF', 'PROTO'}.intersection(supported_encodings)) == 0:
         # pylint: disable=broad-exception-raised
-        raise Exception('JSON_IETF encoding not supported')
+        raise Exception('JSON_IETF or PROTO encodings not supported')
-- 
GitLab