add generation of python *grpc files

Signed-off-by: uwe ottrembka <uwe.ottrembka@adtran.com>
Change-Id: I2fcbfeb78e3aedd36d6122c055fdcbe7719756b0
diff --git a/.gitignore b/.gitignore
index 8eeec50..29486a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,7 +15,7 @@
 
 # generated files that shouldn't be committed
 #*_pb2.py
-*_pb2_grpc.py
+#*_pb2_grpc.py
 *.desc
 
 # tesing related
diff --git a/Makefile b/Makefile
index ef88b66..5db361c 100644
--- a/Makefile
+++ b/Makefile
@@ -48,7 +48,7 @@
 	@echo "python PB files: $(PROTO_PYTHON_PB)"
 
 # Generic targets
-protos: go-protos
+protos: go-protos python-protos
 
 build: protos
 
@@ -61,14 +61,20 @@
 	pip install grpcio-tools googleapis-common-protos
 
 # python targets
-python-protos: dmi.pb
-	@echo "Creating *.py.pb files"
-	@${PROTOC_SH} " \
-	  set -e -o pipefail; \
-	  for x in ${PROTO_FILES}; do \
-	    echo \$$x; \
-	    protoc --python_out=python -I protos \$$x; \
-	  done"
+python-protos: venv_protos
+	@echo "Creating *.pb2.pv and *.pb2_grpc.py files"
+	source ./venv_protos/bin/activate ; set -u ;\
+	for x in $(PROTO_FILES) ; do \
+	  echo $$x; \
+	  python -m grpc_tools.protoc \
+	  -I protos \
+	  --python_out=python \
+	  --grpc_python_out=python \
+	  --descriptor_set_out=$(PROTO_PYTHON_DEST_DIR)/$(basename $(notdir $<)).desc \
+	  --include_imports \
+	  --include_source_info \
+	  $$x;\
+	done
 
 # Go targets
 go-protos: dmi.pb
diff --git a/python/dmi/commons_pb2.py b/python/dmi/commons_pb2.py
index 98fce54..d7673dc 100644
--- a/python/dmi/commons_pb2.py
+++ b/python/dmi/commons_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: dmi/commons.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
@@ -20,8 +18,9 @@
   name='dmi/commons.proto',
   package='dmi',
   syntax='proto3',
-  serialized_options=_b('Z9github.com/opencord/device-management-interface/v3/go/dmi'),
-  serialized_pb=_b('\n\x11\x64mi/commons.proto\x12\x03\x64mi*1\n\x06Status\x12\x14\n\x10UNDEFINED_STATUS\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02*i\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x10\n\x0cWRONG_METRIC\x10\x03\x12\x0f\n\x0bWRONG_EVENT\x10\x04\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')
+  serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n\x11\x64mi/commons.proto\x12\x03\x64mi*1\n\x06Status\x12\x14\n\x10UNDEFINED_STATUS\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02*i\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x10\n\x0cWRONG_METRIC\x10\x03\x12\x0f\n\x0bWRONG_EVENT\x10\x04\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
 )
 
 _STATUS = _descriptor.EnumDescriptor(
@@ -29,19 +28,23 @@
   full_name='dmi.Status',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='UNDEFINED_STATUS', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='OK', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='ERROR', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -56,27 +59,33 @@
   full_name='dmi.Reason',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='UNDEFINED_REASON', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='UNKNOWN_DEVICE', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='INTERNAL_ERROR', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='WRONG_METRIC', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='WRONG_EVENT', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
diff --git a/python/dmi/commons_pb2_grpc.py b/python/dmi/commons_pb2_grpc.py
new file mode 100644
index 0000000..2daafff
--- /dev/null
+++ b/python/dmi/commons_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/python/dmi/hw_events_mgmt_service_pb2.py b/python/dmi/hw_events_mgmt_service_pb2.py
index ae1c493..dbb4697 100644
--- a/python/dmi/hw_events_mgmt_service_pb2.py
+++ b/python/dmi/hw_events_mgmt_service_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: dmi/hw_events_mgmt_service.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
@@ -23,8 +21,9 @@
   name='dmi/hw_events_mgmt_service.proto',
   package='dmi',
   syntax='proto3',
-  serialized_options=_b('Z9github.com/opencord/device-management-interface/v3/go/dmi'),
-  serialized_pb=_b('\n dmi/hw_events_mgmt_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"N\n\tValueType\x12\x11\n\x07int_val\x18\x01 \x01(\x03H\x00\x12\x12\n\x08uint_val\x18\x02 \x01(\x04H\x00\x12\x13\n\tfloat_val\x18\x03 \x01(\x02H\x00\x42\x05\n\x03val\"G\n\nWaterMarks\x12\x1c\n\x04high\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12\x1b\n\x03low\x18\x02 \x01(\x0b\x32\x0e.dmi.ValueType\"]\n\nThresholds\x12 \n\x05upper\x18\x01 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x12 \n\x05lower\x18\x02 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x42\x0b\n\tthreshold\"c\n\x14ThresholdInformation\x12&\n\x0eobserved_value\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12#\n\nthresholds\x18\x02 \x01(\x0b\x32\x0f.dmi.Thresholds\"g\n\x08\x45ventCfg\x12\x1f\n\x08\x65vent_id\x18\x01 \x01(\x0e\x32\r.dmi.EventIds\x12\x15\n\ris_configured\x18\x02 \x01(\x08\x12#\n\nthresholds\x18\x03 \x01(\x0b\x32\x0f.dmi.Thresholds\")\n\tEventsCfg\x12\x1c\n\x05items\x18\x01 \x03(\x0b\x32\r.dmi.EventCfg\"n\n\x12ListEventsResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12\x1e\n\x06\x65vents\x18\x03 \x01(\x0b\x32\x0e.dmi.EventsCfg\"\x88\x01\n\x1a\x45ventsConfigurationRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x0e.dmi.EventsCfgH\x00\x12\x1a\n\x10reset_to_default\x18\x03 \x01(\x08H\x00\x42\x0b\n\toperation\"W\n\x1b\x45ventsConfigurationResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"j\n\rEventMetaData\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\xc8\x01\n\x05\x45vent\x12*\n\x0e\x65vent_metadata\x18\x01 \x01(\x0b\x32\x12.dmi.EventMetaData\x12\x1f\n\x08\x65vent_id\x18\x02 \x01(\x0e\x32\r.dmi.EventIds\x12-\n\traised_ts\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x31\n\x0ethreshold_info\x18\x04 \x01(\x0b\x32\x19.dmi.ThresholdInformation\x12\x10\n\x08\x61\x64\x64_info\x18\x05 \x01(\t*\xd1\x0e\n\x08\x45ventIds\x12\x18\n\x14\x45VENT_NAME_UNDEFINED\x10\x00\x12\x1e\n\x1a\x45VENT_TRANSCEIVER_PLUG_OUT\x10\x64\x12\x1d\n\x19\x45VENT_TRANSCEIVER_PLUG_IN\x10\x65\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD\x10\x66\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD\x10g\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD\x10h\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD\x10i\x12-\n)EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD\x10j\x12-\n)EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD\x10k\x12.\n*EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD\x10l\x12.\n*EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD\x10m\x12.\n*EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD\x10n\x12.\n*EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD\x10o\x12\x1d\n\x19\x45VENT_TRANSCEIVER_FAILURE\x10p\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED\x10q\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED\x10r\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED\x10s\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED\x10t\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED\x10u\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED\x10v\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED\x10w\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED\x10x\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED\x10y\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED\x10z\x12\'\n#EVENT_TRANSCEIVER_FAILURE_RECOVERED\x10{\x12\x17\n\x12\x45VENT_PSU_PLUG_OUT\x10\xc8\x01\x12\x16\n\x11\x45VENT_PSU_PLUG_IN\x10\xc9\x01\x12\x16\n\x11\x45VENT_PSU_FAILURE\x10\xca\x01\x12 \n\x1b\x45VENT_PSU_FAILURE_RECOVERED\x10\xcb\x01\x12\x16\n\x11\x45VENT_FAN_FAILURE\x10\xac\x02\x12\x17\n\x12\x45VENT_FAN_PLUG_OUT\x10\xad\x02\x12\x16\n\x11\x45VENT_FAN_PLUG_IN\x10\xae\x02\x12 \n\x1b\x45VENT_FAN_FAILURE_RECOVERED\x10\xaf\x02\x12)\n$EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL\x10\x90\x03\x12&\n!EVENT_CPU_TEMPERATURE_ABOVE_FATAL\x10\x91\x03\x12\x33\n.EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\x92\x03\x12\x30\n+EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\x93\x03\x12\x1a\n\x15\x45VENT_HW_DEVICE_RESET\x10\xf4\x03\x12/\n*EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL\x10\xf5\x03\x12,\n\'EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL\x10\xf6\x03\x12\x39\n4EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\xf7\x03\x12\x36\n1EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\xf8\x03\x32\xb7\x01\n\x1dNativeEventsManagementService\x12\x36\n\nListEvents\x12\x0f.dmi.HardwareID\x1a\x17.dmi.ListEventsResponse\x12^\n\x19UpdateEventsConfiguration\x12\x1f.dmi.EventsConfigurationRequest\x1a .dmi.EventsConfigurationResponseB;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')
+  serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n dmi/hw_events_mgmt_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"N\n\tValueType\x12\x11\n\x07int_val\x18\x01 \x01(\x03H\x00\x12\x12\n\x08uint_val\x18\x02 \x01(\x04H\x00\x12\x13\n\tfloat_val\x18\x03 \x01(\x02H\x00\x42\x05\n\x03val\"G\n\nWaterMarks\x12\x1c\n\x04high\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12\x1b\n\x03low\x18\x02 \x01(\x0b\x32\x0e.dmi.ValueType\"]\n\nThresholds\x12 \n\x05upper\x18\x01 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x12 \n\x05lower\x18\x02 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x42\x0b\n\tthreshold\"c\n\x14ThresholdInformation\x12&\n\x0eobserved_value\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12#\n\nthresholds\x18\x02 \x01(\x0b\x32\x0f.dmi.Thresholds\"g\n\x08\x45ventCfg\x12\x1f\n\x08\x65vent_id\x18\x01 \x01(\x0e\x32\r.dmi.EventIds\x12\x15\n\ris_configured\x18\x02 \x01(\x08\x12#\n\nthresholds\x18\x03 \x01(\x0b\x32\x0f.dmi.Thresholds\")\n\tEventsCfg\x12\x1c\n\x05items\x18\x01 \x03(\x0b\x32\r.dmi.EventCfg\"n\n\x12ListEventsResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12\x1e\n\x06\x65vents\x18\x03 \x01(\x0b\x32\x0e.dmi.EventsCfg\"\x88\x01\n\x1a\x45ventsConfigurationRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x0e.dmi.EventsCfgH\x00\x12\x1a\n\x10reset_to_default\x18\x03 \x01(\x08H\x00\x42\x0b\n\toperation\"W\n\x1b\x45ventsConfigurationResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"j\n\rEventMetaData\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\xc8\x01\n\x05\x45vent\x12*\n\x0e\x65vent_metadata\x18\x01 \x01(\x0b\x32\x12.dmi.EventMetaData\x12\x1f\n\x08\x65vent_id\x18\x02 \x01(\x0e\x32\r.dmi.EventIds\x12-\n\traised_ts\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x31\n\x0ethreshold_info\x18\x04 \x01(\x0b\x32\x19.dmi.ThresholdInformation\x12\x10\n\x08\x61\x64\x64_info\x18\x05 \x01(\t*\xd1\x0e\n\x08\x45ventIds\x12\x18\n\x14\x45VENT_NAME_UNDEFINED\x10\x00\x12\x1e\n\x1a\x45VENT_TRANSCEIVER_PLUG_OUT\x10\x64\x12\x1d\n\x19\x45VENT_TRANSCEIVER_PLUG_IN\x10\x65\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD\x10\x66\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD\x10g\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD\x10h\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD\x10i\x12-\n)EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD\x10j\x12-\n)EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD\x10k\x12.\n*EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD\x10l\x12.\n*EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD\x10m\x12.\n*EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD\x10n\x12.\n*EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD\x10o\x12\x1d\n\x19\x45VENT_TRANSCEIVER_FAILURE\x10p\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED\x10q\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED\x10r\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED\x10s\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED\x10t\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED\x10u\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED\x10v\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED\x10w\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED\x10x\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED\x10y\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED\x10z\x12\'\n#EVENT_TRANSCEIVER_FAILURE_RECOVERED\x10{\x12\x17\n\x12\x45VENT_PSU_PLUG_OUT\x10\xc8\x01\x12\x16\n\x11\x45VENT_PSU_PLUG_IN\x10\xc9\x01\x12\x16\n\x11\x45VENT_PSU_FAILURE\x10\xca\x01\x12 \n\x1b\x45VENT_PSU_FAILURE_RECOVERED\x10\xcb\x01\x12\x16\n\x11\x45VENT_FAN_FAILURE\x10\xac\x02\x12\x17\n\x12\x45VENT_FAN_PLUG_OUT\x10\xad\x02\x12\x16\n\x11\x45VENT_FAN_PLUG_IN\x10\xae\x02\x12 \n\x1b\x45VENT_FAN_FAILURE_RECOVERED\x10\xaf\x02\x12)\n$EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL\x10\x90\x03\x12&\n!EVENT_CPU_TEMPERATURE_ABOVE_FATAL\x10\x91\x03\x12\x33\n.EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\x92\x03\x12\x30\n+EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\x93\x03\x12\x1a\n\x15\x45VENT_HW_DEVICE_RESET\x10\xf4\x03\x12/\n*EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL\x10\xf5\x03\x12,\n\'EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL\x10\xf6\x03\x12\x39\n4EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\xf7\x03\x12\x36\n1EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\xf8\x03\x32\xb7\x01\n\x1dNativeEventsManagementService\x12\x36\n\nListEvents\x12\x0f.dmi.HardwareID\x1a\x17.dmi.ListEventsResponse\x12^\n\x19UpdateEventsConfiguration\x12\x1f.dmi.EventsConfigurationRequest\x1a .dmi.EventsConfigurationResponseB;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,dmi_dot_hw__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
 
@@ -33,175 +32,218 @@
   full_name='dmi.EventIds',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='EVENT_NAME_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_PLUG_OUT', index=1, number=100,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_PLUG_IN', index=2, number=101,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD', index=3, number=102,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD', index=4, number=103,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD', index=5, number=104,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD', index=6, number=105,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD', index=7, number=106,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD', index=8, number=107,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD', index=9, number=108,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD', index=10, number=109,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD', index=11, number=110,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD', index=12, number=111,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_FAILURE', index=13, number=112,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED', index=14, number=113,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED', index=15, number=114,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED', index=16, number=115,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED', index=17, number=116,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED', index=18, number=117,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED', index=19, number=118,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED', index=20, number=119,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED', index=21, number=120,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED', index=22, number=121,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED', index=23, number=122,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_TRANSCEIVER_FAILURE_RECOVERED', index=24, number=123,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_PSU_PLUG_OUT', index=25, number=200,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_PSU_PLUG_IN', index=26, number=201,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_PSU_FAILURE', index=27, number=202,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_PSU_FAILURE_RECOVERED', index=28, number=203,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_FAN_FAILURE', index=29, number=300,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_FAN_PLUG_OUT', index=30, number=301,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_FAN_PLUG_IN', index=31, number=302,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_FAN_FAILURE_RECOVERED', index=32, number=303,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL', index=33, number=400,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_CPU_TEMPERATURE_ABOVE_FATAL', index=34, number=401,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED', index=35, number=402,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED', index=36, number=403,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_HW_DEVICE_RESET', index=37, number=500,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL', index=38, number=501,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL', index=39, number=502,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED', index=40, number=503,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED', index=41, number=504,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -262,6 +304,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='int_val', full_name='dmi.ValueType.int_val', index=0,
@@ -269,21 +312,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='uint_val', full_name='dmi.ValueType.uint_val', index=1,
       number=2, type=4, cpp_type=4, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='float_val', full_name='dmi.ValueType.float_val', index=2,
       number=3, type=2, cpp_type=6, label=1,
       has_default_value=False, default_value=float(0),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -297,7 +340,9 @@
   oneofs=[
     _descriptor.OneofDescriptor(
       name='val', full_name='dmi.ValueType.val',
-      index=0, containing_type=None, fields=[]),
+      index=0, containing_type=None,
+      create_key=_descriptor._internal_create_key,
+    fields=[]),
   ],
   serialized_start=107,
   serialized_end=185,
@@ -310,6 +355,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='high', full_name='dmi.WaterMarks.high', index=0,
@@ -317,14 +363,14 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='low', full_name='dmi.WaterMarks.low', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -348,6 +394,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='upper', full_name='dmi.Thresholds.upper', index=0,
@@ -355,14 +402,14 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='lower', full_name='dmi.Thresholds.lower', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -376,7 +423,9 @@
   oneofs=[
     _descriptor.OneofDescriptor(
       name='threshold', full_name='dmi.Thresholds.threshold',
-      index=0, containing_type=None, fields=[]),
+      index=0, containing_type=None,
+      create_key=_descriptor._internal_create_key,
+    fields=[]),
   ],
   serialized_start=260,
   serialized_end=353,
@@ -389,6 +438,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='observed_value', full_name='dmi.ThresholdInformation.observed_value', index=0,
@@ -396,14 +446,14 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='thresholds', full_name='dmi.ThresholdInformation.thresholds', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -427,6 +477,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='event_id', full_name='dmi.EventCfg.event_id', index=0,
@@ -434,21 +485,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='is_configured', full_name='dmi.EventCfg.is_configured', index=1,
       number=2, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='thresholds', full_name='dmi.EventCfg.thresholds', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -472,6 +523,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='items', full_name='dmi.EventsCfg.items', index=0,
@@ -479,7 +531,7 @@
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -503,6 +555,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.ListEventsResponse.status', index=0,
@@ -510,21 +563,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.ListEventsResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='events', full_name='dmi.ListEventsResponse.events', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -548,6 +601,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.EventsConfigurationRequest.device_uuid', index=0,
@@ -555,21 +609,21 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='changes', full_name='dmi.EventsConfigurationRequest.changes', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reset_to_default', full_name='dmi.EventsConfigurationRequest.reset_to_default', index=2,
       number=3, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -583,7 +637,9 @@
   oneofs=[
     _descriptor.OneofDescriptor(
       name='operation', full_name='dmi.EventsConfigurationRequest.operation',
-      index=0, containing_type=None, fields=[]),
+      index=0, containing_type=None,
+      create_key=_descriptor._internal_create_key,
+    fields=[]),
   ],
   serialized_start=717,
   serialized_end=853,
@@ -596,6 +652,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.EventsConfigurationResponse.status', index=0,
@@ -603,14 +660,14 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.EventsConfigurationResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -634,6 +691,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.EventMetaData.device_uuid', index=0,
@@ -641,21 +699,21 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_uuid', full_name='dmi.EventMetaData.component_uuid', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_name', full_name='dmi.EventMetaData.component_name', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -679,6 +737,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='event_metadata', full_name='dmi.Event.event_metadata', index=0,
@@ -686,35 +745,35 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='event_id', full_name='dmi.Event.event_id', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='raised_ts', full_name='dmi.Event.raised_ts', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='threshold_info', full_name='dmi.Event.threshold_info', index=3,
       number=4, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='add_info', full_name='dmi.Event.add_info', index=4,
       number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -788,81 +847,81 @@
 DESCRIPTOR.enum_types_by_name['EventIds'] = _EVENTIDS
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-ValueType = _reflection.GeneratedProtocolMessageType('ValueType', (_message.Message,), dict(
-  DESCRIPTOR = _VALUETYPE,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+ValueType = _reflection.GeneratedProtocolMessageType('ValueType', (_message.Message,), {
+  'DESCRIPTOR' : _VALUETYPE,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ValueType)
-  ))
+  })
 _sym_db.RegisterMessage(ValueType)
 
-WaterMarks = _reflection.GeneratedProtocolMessageType('WaterMarks', (_message.Message,), dict(
-  DESCRIPTOR = _WATERMARKS,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+WaterMarks = _reflection.GeneratedProtocolMessageType('WaterMarks', (_message.Message,), {
+  'DESCRIPTOR' : _WATERMARKS,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.WaterMarks)
-  ))
+  })
 _sym_db.RegisterMessage(WaterMarks)
 
-Thresholds = _reflection.GeneratedProtocolMessageType('Thresholds', (_message.Message,), dict(
-  DESCRIPTOR = _THRESHOLDS,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+Thresholds = _reflection.GeneratedProtocolMessageType('Thresholds', (_message.Message,), {
+  'DESCRIPTOR' : _THRESHOLDS,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.Thresholds)
-  ))
+  })
 _sym_db.RegisterMessage(Thresholds)
 
-ThresholdInformation = _reflection.GeneratedProtocolMessageType('ThresholdInformation', (_message.Message,), dict(
-  DESCRIPTOR = _THRESHOLDINFORMATION,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+ThresholdInformation = _reflection.GeneratedProtocolMessageType('ThresholdInformation', (_message.Message,), {
+  'DESCRIPTOR' : _THRESHOLDINFORMATION,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ThresholdInformation)
-  ))
+  })
 _sym_db.RegisterMessage(ThresholdInformation)
 
-EventCfg = _reflection.GeneratedProtocolMessageType('EventCfg', (_message.Message,), dict(
-  DESCRIPTOR = _EVENTCFG,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+EventCfg = _reflection.GeneratedProtocolMessageType('EventCfg', (_message.Message,), {
+  'DESCRIPTOR' : _EVENTCFG,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.EventCfg)
-  ))
+  })
 _sym_db.RegisterMessage(EventCfg)
 
-EventsCfg = _reflection.GeneratedProtocolMessageType('EventsCfg', (_message.Message,), dict(
-  DESCRIPTOR = _EVENTSCFG,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+EventsCfg = _reflection.GeneratedProtocolMessageType('EventsCfg', (_message.Message,), {
+  'DESCRIPTOR' : _EVENTSCFG,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.EventsCfg)
-  ))
+  })
 _sym_db.RegisterMessage(EventsCfg)
 
-ListEventsResponse = _reflection.GeneratedProtocolMessageType('ListEventsResponse', (_message.Message,), dict(
-  DESCRIPTOR = _LISTEVENTSRESPONSE,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+ListEventsResponse = _reflection.GeneratedProtocolMessageType('ListEventsResponse', (_message.Message,), {
+  'DESCRIPTOR' : _LISTEVENTSRESPONSE,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ListEventsResponse)
-  ))
+  })
 _sym_db.RegisterMessage(ListEventsResponse)
 
-EventsConfigurationRequest = _reflection.GeneratedProtocolMessageType('EventsConfigurationRequest', (_message.Message,), dict(
-  DESCRIPTOR = _EVENTSCONFIGURATIONREQUEST,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+EventsConfigurationRequest = _reflection.GeneratedProtocolMessageType('EventsConfigurationRequest', (_message.Message,), {
+  'DESCRIPTOR' : _EVENTSCONFIGURATIONREQUEST,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.EventsConfigurationRequest)
-  ))
+  })
 _sym_db.RegisterMessage(EventsConfigurationRequest)
 
-EventsConfigurationResponse = _reflection.GeneratedProtocolMessageType('EventsConfigurationResponse', (_message.Message,), dict(
-  DESCRIPTOR = _EVENTSCONFIGURATIONRESPONSE,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+EventsConfigurationResponse = _reflection.GeneratedProtocolMessageType('EventsConfigurationResponse', (_message.Message,), {
+  'DESCRIPTOR' : _EVENTSCONFIGURATIONRESPONSE,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.EventsConfigurationResponse)
-  ))
+  })
 _sym_db.RegisterMessage(EventsConfigurationResponse)
 
-EventMetaData = _reflection.GeneratedProtocolMessageType('EventMetaData', (_message.Message,), dict(
-  DESCRIPTOR = _EVENTMETADATA,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+EventMetaData = _reflection.GeneratedProtocolMessageType('EventMetaData', (_message.Message,), {
+  'DESCRIPTOR' : _EVENTMETADATA,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.EventMetaData)
-  ))
+  })
 _sym_db.RegisterMessage(EventMetaData)
 
-Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), dict(
-  DESCRIPTOR = _EVENT,
-  __module__ = 'dmi.hw_events_mgmt_service_pb2'
+Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), {
+  'DESCRIPTOR' : _EVENT,
+  '__module__' : 'dmi.hw_events_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.Event)
-  ))
+  })
 _sym_db.RegisterMessage(Event)
 
 
@@ -874,6 +933,7 @@
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
+  create_key=_descriptor._internal_create_key,
   serialized_start=3132,
   serialized_end=3315,
   methods=[
@@ -885,6 +945,7 @@
     input_type=dmi_dot_hw__pb2._HARDWAREID,
     output_type=_LISTEVENTSRESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='UpdateEventsConfiguration',
@@ -894,6 +955,7 @@
     input_type=_EVENTSCONFIGURATIONREQUEST,
     output_type=_EVENTSCONFIGURATIONRESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
 ])
 _sym_db.RegisterServiceDescriptor(_NATIVEEVENTSMANAGEMENTSERVICE)
diff --git a/python/dmi/hw_events_mgmt_service_pb2_grpc.py b/python/dmi/hw_events_mgmt_service_pb2_grpc.py
new file mode 100644
index 0000000..2452017
--- /dev/null
+++ b/python/dmi/hw_events_mgmt_service_pb2_grpc.py
@@ -0,0 +1,104 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from dmi import hw_events_mgmt_service_pb2 as dmi_dot_hw__events__mgmt__service__pb2
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+
+
+class NativeEventsManagementServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.ListEvents = channel.unary_unary(
+                '/dmi.NativeEventsManagementService/ListEvents',
+                request_serializer=dmi_dot_hw__pb2.HardwareID.SerializeToString,
+                response_deserializer=dmi_dot_hw__events__mgmt__service__pb2.ListEventsResponse.FromString,
+                )
+        self.UpdateEventsConfiguration = channel.unary_unary(
+                '/dmi.NativeEventsManagementService/UpdateEventsConfiguration',
+                request_serializer=dmi_dot_hw__events__mgmt__service__pb2.EventsConfigurationRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__events__mgmt__service__pb2.EventsConfigurationResponse.FromString,
+                )
+
+
+class NativeEventsManagementServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def ListEvents(self, request, context):
+        """List the supported events for the passed device

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateEventsConfiguration(self, request, context):
+        """Updates the configuration of the list of events in the request

+        The default behaviour of the device is to report all the supported events

+        This configuration is persisted across reboots of the device or the device manager

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_NativeEventsManagementServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'ListEvents': grpc.unary_unary_rpc_method_handler(
+                    servicer.ListEvents,
+                    request_deserializer=dmi_dot_hw__pb2.HardwareID.FromString,
+                    response_serializer=dmi_dot_hw__events__mgmt__service__pb2.ListEventsResponse.SerializeToString,
+            ),
+            'UpdateEventsConfiguration': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateEventsConfiguration,
+                    request_deserializer=dmi_dot_hw__events__mgmt__service__pb2.EventsConfigurationRequest.FromString,
+                    response_serializer=dmi_dot_hw__events__mgmt__service__pb2.EventsConfigurationResponse.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dmi.NativeEventsManagementService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class NativeEventsManagementService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def ListEvents(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeEventsManagementService/ListEvents',
+            dmi_dot_hw__pb2.HardwareID.SerializeToString,
+            dmi_dot_hw__events__mgmt__service__pb2.ListEventsResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateEventsConfiguration(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeEventsManagementService/UpdateEventsConfiguration',
+            dmi_dot_hw__events__mgmt__service__pb2.EventsConfigurationRequest.SerializeToString,
+            dmi_dot_hw__events__mgmt__service__pb2.EventsConfigurationResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python/dmi/hw_management_service_pb2.py b/python/dmi/hw_management_service_pb2.py
index 5849aab..b84cf1a 100644
--- a/python/dmi/hw_management_service_pb2.py
+++ b/python/dmi/hw_management_service_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: dmi/hw_management_service.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -21,8 +19,9 @@
   name='dmi/hw_management_service.proto',
   package='dmi',
   syntax='proto3',
-  serialized_options=_b('Z9github.com/opencord/device-management-interface/v3/go/dmi'),
-  serialized_pb=_b('\n\x1f\x64mi/hw_management_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\":\n\x18PhysicalInventoryRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"w\n\x19PhysicalInventoryResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12 \n\tinventory\x18\x03 \x01(\x0b\x32\r.dmi.Hardware\"v\n\x19HWComponentInfoGetRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\xa1\x01\n\x19HWComponentInfoSetRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\x12)\n\x07\x63hanges\x18\x04 \x01(\x0b\x32\x18.dmi.ModifiableComponent\"V\n\x1aHWComponentInfoSetResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"w\n\x1bStartManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x03 \x01(\x0b\x32\t.dmi.Uuid\")\n\x19StopManagingDeviceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"V\n\x1aStopManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason2\xbf\x03\n\x19NativeHWManagementService\x12S\n\x13StartManagingDevice\x12\x18.dmi.ModifiableComponent\x1a .dmi.StartManagingDeviceResponse0\x01\x12U\n\x12StopManagingDevice\x12\x1e.dmi.StopManagingDeviceRequest\x1a\x1f.dmi.StopManagingDeviceResponse\x12W\n\x14GetPhysicalInventory\x12\x1d.dmi.PhysicalInventoryRequest\x1a\x1e.dmi.PhysicalInventoryResponse0\x01\x12\x46\n\x12GetHWComponentInfo\x12\x1e.dmi.HWComponentInfoGetRequest\x1a\x0e.dmi.Component0\x01\x12U\n\x12SetHWComponentInfo\x12\x1e.dmi.HWComponentInfoSetRequest\x1a\x1f.dmi.HWComponentInfoSetResponseB;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')
+  serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n\x1f\x64mi/hw_management_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\":\n\x18PhysicalInventoryRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"w\n\x19PhysicalInventoryResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12 \n\tinventory\x18\x03 \x01(\x0b\x32\r.dmi.Hardware\"v\n\x19HWComponentInfoGetRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\xa1\x01\n\x19HWComponentInfoSetRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\x12)\n\x07\x63hanges\x18\x04 \x01(\x0b\x32\x18.dmi.ModifiableComponent\"V\n\x1aHWComponentInfoSetResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"w\n\x1bStartManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x03 \x01(\x0b\x32\t.dmi.Uuid\")\n\x19StopManagingDeviceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"V\n\x1aStopManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason2\xbf\x03\n\x19NativeHWManagementService\x12S\n\x13StartManagingDevice\x12\x18.dmi.ModifiableComponent\x1a .dmi.StartManagingDeviceResponse0\x01\x12U\n\x12StopManagingDevice\x12\x1e.dmi.StopManagingDeviceRequest\x1a\x1f.dmi.StopManagingDeviceResponse\x12W\n\x14GetPhysicalInventory\x12\x1d.dmi.PhysicalInventoryRequest\x1a\x1e.dmi.PhysicalInventoryResponse0\x01\x12\x46\n\x12GetHWComponentInfo\x12\x1e.dmi.HWComponentInfoGetRequest\x1a\x0e.dmi.Component0\x01\x12U\n\x12SetHWComponentInfo\x12\x1e.dmi.HWComponentInfoSetRequest\x1a\x1f.dmi.HWComponentInfoSetResponseB;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,dmi_dot_hw__pb2.DESCRIPTOR,])
 
@@ -35,6 +34,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.PhysicalInventoryRequest.device_uuid', index=0,
@@ -42,7 +42,7 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -66,6 +66,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.PhysicalInventoryResponse.status', index=0,
@@ -73,21 +74,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.PhysicalInventoryResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='inventory', full_name='dmi.PhysicalInventoryResponse.inventory', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -111,6 +112,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.HWComponentInfoGetRequest.device_uuid', index=0,
@@ -118,21 +120,21 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_uuid', full_name='dmi.HWComponentInfoGetRequest.component_uuid', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_name', full_name='dmi.HWComponentInfoGetRequest.component_name', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -156,6 +158,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.HWComponentInfoSetRequest.device_uuid', index=0,
@@ -163,28 +166,28 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_uuid', full_name='dmi.HWComponentInfoSetRequest.component_uuid', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_name', full_name='dmi.HWComponentInfoSetRequest.component_name', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='changes', full_name='dmi.HWComponentInfoSetRequest.changes', index=3,
       number=4, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -208,6 +211,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.HWComponentInfoSetResponse.status', index=0,
@@ -215,14 +219,14 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.HWComponentInfoSetResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -246,6 +250,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.StartManagingDeviceResponse.status', index=0,
@@ -253,21 +258,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.StartManagingDeviceResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.StartManagingDeviceResponse.device_uuid', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -291,14 +296,15 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='name', full_name='dmi.StopManagingDeviceRequest.name', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -322,6 +328,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.StopManagingDeviceResponse.status', index=0,
@@ -329,14 +336,14 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.StopManagingDeviceResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -379,60 +386,60 @@
 DESCRIPTOR.message_types_by_name['StopManagingDeviceResponse'] = _STOPMANAGINGDEVICERESPONSE
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-PhysicalInventoryRequest = _reflection.GeneratedProtocolMessageType('PhysicalInventoryRequest', (_message.Message,), dict(
-  DESCRIPTOR = _PHYSICALINVENTORYREQUEST,
-  __module__ = 'dmi.hw_management_service_pb2'
+PhysicalInventoryRequest = _reflection.GeneratedProtocolMessageType('PhysicalInventoryRequest', (_message.Message,), {
+  'DESCRIPTOR' : _PHYSICALINVENTORYREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.PhysicalInventoryRequest)
-  ))
+  })
 _sym_db.RegisterMessage(PhysicalInventoryRequest)
 
-PhysicalInventoryResponse = _reflection.GeneratedProtocolMessageType('PhysicalInventoryResponse', (_message.Message,), dict(
-  DESCRIPTOR = _PHYSICALINVENTORYRESPONSE,
-  __module__ = 'dmi.hw_management_service_pb2'
+PhysicalInventoryResponse = _reflection.GeneratedProtocolMessageType('PhysicalInventoryResponse', (_message.Message,), {
+  'DESCRIPTOR' : _PHYSICALINVENTORYRESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.PhysicalInventoryResponse)
-  ))
+  })
 _sym_db.RegisterMessage(PhysicalInventoryResponse)
 
-HWComponentInfoGetRequest = _reflection.GeneratedProtocolMessageType('HWComponentInfoGetRequest', (_message.Message,), dict(
-  DESCRIPTOR = _HWCOMPONENTINFOGETREQUEST,
-  __module__ = 'dmi.hw_management_service_pb2'
+HWComponentInfoGetRequest = _reflection.GeneratedProtocolMessageType('HWComponentInfoGetRequest', (_message.Message,), {
+  'DESCRIPTOR' : _HWCOMPONENTINFOGETREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.HWComponentInfoGetRequest)
-  ))
+  })
 _sym_db.RegisterMessage(HWComponentInfoGetRequest)
 
-HWComponentInfoSetRequest = _reflection.GeneratedProtocolMessageType('HWComponentInfoSetRequest', (_message.Message,), dict(
-  DESCRIPTOR = _HWCOMPONENTINFOSETREQUEST,
-  __module__ = 'dmi.hw_management_service_pb2'
+HWComponentInfoSetRequest = _reflection.GeneratedProtocolMessageType('HWComponentInfoSetRequest', (_message.Message,), {
+  'DESCRIPTOR' : _HWCOMPONENTINFOSETREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.HWComponentInfoSetRequest)
-  ))
+  })
 _sym_db.RegisterMessage(HWComponentInfoSetRequest)
 
-HWComponentInfoSetResponse = _reflection.GeneratedProtocolMessageType('HWComponentInfoSetResponse', (_message.Message,), dict(
-  DESCRIPTOR = _HWCOMPONENTINFOSETRESPONSE,
-  __module__ = 'dmi.hw_management_service_pb2'
+HWComponentInfoSetResponse = _reflection.GeneratedProtocolMessageType('HWComponentInfoSetResponse', (_message.Message,), {
+  'DESCRIPTOR' : _HWCOMPONENTINFOSETRESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.HWComponentInfoSetResponse)
-  ))
+  })
 _sym_db.RegisterMessage(HWComponentInfoSetResponse)
 
-StartManagingDeviceResponse = _reflection.GeneratedProtocolMessageType('StartManagingDeviceResponse', (_message.Message,), dict(
-  DESCRIPTOR = _STARTMANAGINGDEVICERESPONSE,
-  __module__ = 'dmi.hw_management_service_pb2'
+StartManagingDeviceResponse = _reflection.GeneratedProtocolMessageType('StartManagingDeviceResponse', (_message.Message,), {
+  'DESCRIPTOR' : _STARTMANAGINGDEVICERESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.StartManagingDeviceResponse)
-  ))
+  })
 _sym_db.RegisterMessage(StartManagingDeviceResponse)
 
-StopManagingDeviceRequest = _reflection.GeneratedProtocolMessageType('StopManagingDeviceRequest', (_message.Message,), dict(
-  DESCRIPTOR = _STOPMANAGINGDEVICEREQUEST,
-  __module__ = 'dmi.hw_management_service_pb2'
+StopManagingDeviceRequest = _reflection.GeneratedProtocolMessageType('StopManagingDeviceRequest', (_message.Message,), {
+  'DESCRIPTOR' : _STOPMANAGINGDEVICEREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.StopManagingDeviceRequest)
-  ))
+  })
 _sym_db.RegisterMessage(StopManagingDeviceRequest)
 
-StopManagingDeviceResponse = _reflection.GeneratedProtocolMessageType('StopManagingDeviceResponse', (_message.Message,), dict(
-  DESCRIPTOR = _STOPMANAGINGDEVICERESPONSE,
-  __module__ = 'dmi.hw_management_service_pb2'
+StopManagingDeviceResponse = _reflection.GeneratedProtocolMessageType('StopManagingDeviceResponse', (_message.Message,), {
+  'DESCRIPTOR' : _STOPMANAGINGDEVICERESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.StopManagingDeviceResponse)
-  ))
+  })
 _sym_db.RegisterMessage(StopManagingDeviceResponse)
 
 
@@ -444,6 +451,7 @@
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
+  create_key=_descriptor._internal_create_key,
   serialized_start=879,
   serialized_end=1326,
   methods=[
@@ -455,6 +463,7 @@
     input_type=dmi_dot_hw__pb2._MODIFIABLECOMPONENT,
     output_type=_STARTMANAGINGDEVICERESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='StopManagingDevice',
@@ -464,6 +473,7 @@
     input_type=_STOPMANAGINGDEVICEREQUEST,
     output_type=_STOPMANAGINGDEVICERESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='GetPhysicalInventory',
@@ -473,6 +483,7 @@
     input_type=_PHYSICALINVENTORYREQUEST,
     output_type=_PHYSICALINVENTORYRESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='GetHWComponentInfo',
@@ -482,6 +493,7 @@
     input_type=_HWCOMPONENTINFOGETREQUEST,
     output_type=dmi_dot_hw__pb2._COMPONENT,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='SetHWComponentInfo',
@@ -491,6 +503,7 @@
     input_type=_HWCOMPONENTINFOSETREQUEST,
     output_type=_HWCOMPONENTINFOSETRESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
 ])
 _sym_db.RegisterServiceDescriptor(_NATIVEHWMANAGEMENTSERVICE)
diff --git a/python/dmi/hw_management_service_pb2_grpc.py b/python/dmi/hw_management_service_pb2_grpc.py
new file mode 100644
index 0000000..bead6fb
--- /dev/null
+++ b/python/dmi/hw_management_service_pb2_grpc.py
@@ -0,0 +1,212 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from dmi import hw_management_service_pb2 as dmi_dot_hw__management__service__pb2
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+
+
+class NativeHWManagementServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.StartManagingDevice = channel.unary_stream(
+                '/dmi.NativeHWManagementService/StartManagingDevice',
+                request_serializer=dmi_dot_hw__pb2.ModifiableComponent.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.StartManagingDeviceResponse.FromString,
+                )
+        self.StopManagingDevice = channel.unary_unary(
+                '/dmi.NativeHWManagementService/StopManagingDevice',
+                request_serializer=dmi_dot_hw__management__service__pb2.StopManagingDeviceRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.StopManagingDeviceResponse.FromString,
+                )
+        self.GetPhysicalInventory = channel.unary_stream(
+                '/dmi.NativeHWManagementService/GetPhysicalInventory',
+                request_serializer=dmi_dot_hw__management__service__pb2.PhysicalInventoryRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.PhysicalInventoryResponse.FromString,
+                )
+        self.GetHWComponentInfo = channel.unary_stream(
+                '/dmi.NativeHWManagementService/GetHWComponentInfo',
+                request_serializer=dmi_dot_hw__management__service__pb2.HWComponentInfoGetRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__pb2.Component.FromString,
+                )
+        self.SetHWComponentInfo = channel.unary_unary(
+                '/dmi.NativeHWManagementService/SetHWComponentInfo',
+                request_serializer=dmi_dot_hw__management__service__pb2.HWComponentInfoSetRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.HWComponentInfoSetResponse.FromString,
+                )
+
+
+class NativeHWManagementServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def StartManagingDevice(self, request, context):
+        """Initializes context for a device and sets up required states

+        In the call to StartManagingDevice, the fields of ModifiableComponent which are relevant

+        and their meanings in this context is mentioned below:

+        name = The unique name that needs to be assigned to this hardware;

+        class = COMPONENT_TYPE_UNDEFINED;

+        parent = nil;

+        alias = Optional;

+        asset_id = Optional;

+        uri = IP Address of the Hardware;

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def StopManagingDevice(self, request, context):
+        """Stop management of a device and clean up any context and caches for that device

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetPhysicalInventory(self, request, context):
+        """Get the HW inventory details of the Device

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetHWComponentInfo(self, request, context):
+        """Get the details of a particular HW component

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def SetHWComponentInfo(self, request, context):
+        """Sets the permissible attributes of a HW component

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_NativeHWManagementServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'StartManagingDevice': grpc.unary_stream_rpc_method_handler(
+                    servicer.StartManagingDevice,
+                    request_deserializer=dmi_dot_hw__pb2.ModifiableComponent.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.StartManagingDeviceResponse.SerializeToString,
+            ),
+            'StopManagingDevice': grpc.unary_unary_rpc_method_handler(
+                    servicer.StopManagingDevice,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.StopManagingDeviceRequest.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.StopManagingDeviceResponse.SerializeToString,
+            ),
+            'GetPhysicalInventory': grpc.unary_stream_rpc_method_handler(
+                    servicer.GetPhysicalInventory,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.PhysicalInventoryRequest.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.PhysicalInventoryResponse.SerializeToString,
+            ),
+            'GetHWComponentInfo': grpc.unary_stream_rpc_method_handler(
+                    servicer.GetHWComponentInfo,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.HWComponentInfoGetRequest.FromString,
+                    response_serializer=dmi_dot_hw__pb2.Component.SerializeToString,
+            ),
+            'SetHWComponentInfo': grpc.unary_unary_rpc_method_handler(
+                    servicer.SetHWComponentInfo,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.HWComponentInfoSetRequest.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.HWComponentInfoSetResponse.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dmi.NativeHWManagementService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class NativeHWManagementService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def StartManagingDevice(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/dmi.NativeHWManagementService/StartManagingDevice',
+            dmi_dot_hw__pb2.ModifiableComponent.SerializeToString,
+            dmi_dot_hw__management__service__pb2.StartManagingDeviceResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def StopManagingDevice(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeHWManagementService/StopManagingDevice',
+            dmi_dot_hw__management__service__pb2.StopManagingDeviceRequest.SerializeToString,
+            dmi_dot_hw__management__service__pb2.StopManagingDeviceResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetPhysicalInventory(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/dmi.NativeHWManagementService/GetPhysicalInventory',
+            dmi_dot_hw__management__service__pb2.PhysicalInventoryRequest.SerializeToString,
+            dmi_dot_hw__management__service__pb2.PhysicalInventoryResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetHWComponentInfo(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/dmi.NativeHWManagementService/GetHWComponentInfo',
+            dmi_dot_hw__management__service__pb2.HWComponentInfoGetRequest.SerializeToString,
+            dmi_dot_hw__pb2.Component.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def SetHWComponentInfo(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeHWManagementService/SetHWComponentInfo',
+            dmi_dot_hw__management__service__pb2.HWComponentInfoSetRequest.SerializeToString,
+            dmi_dot_hw__management__service__pb2.HWComponentInfoSetResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python/dmi/hw_metrics_mgmt_service_pb2.py b/python/dmi/hw_metrics_mgmt_service_pb2.py
index 764f5be..060606b 100644
--- a/python/dmi/hw_metrics_mgmt_service_pb2.py
+++ b/python/dmi/hw_metrics_mgmt_service_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: dmi/hw_metrics_mgmt_service.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
@@ -22,8 +20,9 @@
   name='dmi/hw_metrics_mgmt_service.proto',
   package='dmi',
   syntax='proto3',
-  serialized_options=_b('Z9github.com/opencord/device-management-interface/v3/go/dmi'),
-  serialized_pb=_b('\n!dmi/hw_metrics_mgmt_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\"a\n\x0cMetricConfig\x12#\n\tmetric_id\x18\x01 \x01(\x0e\x32\x10.dmi.MetricNames\x12\x15\n\ris_configured\x18\x02 \x01(\x08\x12\x15\n\rpoll_interval\x18\x03 \x01(\r\"3\n\rMetricsConfig\x12\"\n\x07metrics\x18\x01 \x03(\x0b\x32\x11.dmi.MetricConfig\"t\n\x13ListMetricsResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12#\n\x07metrics\x18\x03 \x01(\x0b\x32\x12.dmi.MetricsConfig\"\x8d\x01\n\x1bMetricsConfigurationRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12%\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x12.dmi.MetricsConfigH\x00\x12\x1a\n\x10reset_to_default\x18\x03 \x01(\x08H\x00\x42\x0b\n\toperation\"X\n\x1cMetricsConfigurationResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"k\n\x0eMetricMetaData\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\x84\x01\n\x06Metric\x12#\n\tmetric_id\x18\x01 \x01(\x0e\x32\x10.dmi.MetricNames\x12,\n\x0fmetric_metadata\x18\x02 \x01(\x0b\x32\x13.dmi.MetricMetaData\x12\'\n\x05value\x18\x03 \x01(\x0b\x32\x18.dmi.ComponentSensorData\"_\n\x10GetMetricRequest\x12&\n\tmeta_data\x18\x01 \x01(\x0b\x32\x13.dmi.MetricMetaData\x12#\n\tmetric_id\x18\x02 \x01(\x0e\x32\x10.dmi.MetricNames*\xd9\x05\n\x0bMetricNames\x12\x19\n\x15METRIC_NAME_UNDEFINED\x10\x00\x12\x14\n\x10METRIC_FAN_SPEED\x10\x01\x12\x13\n\x0fMETRIC_CPU_TEMP\x10\x64\x12\x1f\n\x1bMETRIC_CPU_USAGE_PERCENTAGE\x10\x65\x12\x1c\n\x17METRIC_TRANSCEIVER_TEMP\x10\xc8\x01\x12\x1f\n\x1aMETRIC_TRANSCEIVER_VOLTAGE\x10\xc9\x01\x12\x1c\n\x17METRIC_TRANSCEIVER_BIAS\x10\xca\x01\x12 \n\x1bMETRIC_TRANSCEIVER_RX_POWER\x10\xcb\x01\x12 \n\x1bMETRIC_TRANSCEIVER_TX_POWER\x10\xcc\x01\x12\"\n\x1dMETRIC_TRANSCEIVER_WAVELENGTH\x10\xcd\x01\x12\x15\n\x10METRIC_DISK_TEMP\x10\xac\x02\x12\x19\n\x14METRIC_DISK_CAPACITY\x10\xad\x02\x12\x16\n\x11METRIC_DISK_USAGE\x10\xae\x02\x12!\n\x1cMETRIC_DISK_USAGE_PERCENTAGE\x10\xaf\x02\x12&\n!METRIC_DISK_READ_WRITE_PERCENTAGE\x10\xb0\x02\x12(\n#METRIC_DISK_FAULTY_CELLS_PERCENTAGE\x10\xb1\x02\x12\x14\n\x0fMETRIC_RAM_TEMP\x10\x90\x03\x12\x18\n\x13METRIC_RAM_CAPACITY\x10\x91\x03\x12\x15\n\x10METRIC_RAM_USAGE\x10\x92\x03\x12 \n\x1bMETRIC_RAM_USAGE_PERCENTAGE\x10\x93\x03\x12\x15\n\x10METRIC_POWER_MAX\x10\xf4\x03\x12\x17\n\x12METRIC_POWER_USAGE\x10\xf5\x03\x12\"\n\x1dMETRIC_POWER_USAGE_PERCENTAGE\x10\xf6\x03\x12\"\n\x1dMETRIC_INNER_SURROUNDING_TEMP\x10\xd8\x04\x32\xee\x01\n\x1eNativeMetricsManagementService\x12\x38\n\x0bListMetrics\x12\x0f.dmi.HardwareID\x1a\x18.dmi.ListMetricsResponse\x12\x61\n\x1aUpdateMetricsConfiguration\x12 .dmi.MetricsConfigurationRequest\x1a!.dmi.MetricsConfigurationResponse\x12/\n\tGetMetric\x12\x15.dmi.GetMetricRequest\x1a\x0b.dmi.MetricB;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')
+  serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n!dmi/hw_metrics_mgmt_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\"a\n\x0cMetricConfig\x12#\n\tmetric_id\x18\x01 \x01(\x0e\x32\x10.dmi.MetricNames\x12\x15\n\ris_configured\x18\x02 \x01(\x08\x12\x15\n\rpoll_interval\x18\x03 \x01(\r\"3\n\rMetricsConfig\x12\"\n\x07metrics\x18\x01 \x03(\x0b\x32\x11.dmi.MetricConfig\"t\n\x13ListMetricsResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\x12#\n\x07metrics\x18\x03 \x01(\x0b\x32\x12.dmi.MetricsConfig\"\x8d\x01\n\x1bMetricsConfigurationRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12%\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x12.dmi.MetricsConfigH\x00\x12\x1a\n\x10reset_to_default\x18\x03 \x01(\x08H\x00\x42\x0b\n\toperation\"X\n\x1cMetricsConfigurationResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"k\n\x0eMetricMetaData\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\x84\x01\n\x06Metric\x12#\n\tmetric_id\x18\x01 \x01(\x0e\x32\x10.dmi.MetricNames\x12,\n\x0fmetric_metadata\x18\x02 \x01(\x0b\x32\x13.dmi.MetricMetaData\x12\'\n\x05value\x18\x03 \x01(\x0b\x32\x18.dmi.ComponentSensorData\"_\n\x10GetMetricRequest\x12&\n\tmeta_data\x18\x01 \x01(\x0b\x32\x13.dmi.MetricMetaData\x12#\n\tmetric_id\x18\x02 \x01(\x0e\x32\x10.dmi.MetricNames*\xd9\x05\n\x0bMetricNames\x12\x19\n\x15METRIC_NAME_UNDEFINED\x10\x00\x12\x14\n\x10METRIC_FAN_SPEED\x10\x01\x12\x13\n\x0fMETRIC_CPU_TEMP\x10\x64\x12\x1f\n\x1bMETRIC_CPU_USAGE_PERCENTAGE\x10\x65\x12\x1c\n\x17METRIC_TRANSCEIVER_TEMP\x10\xc8\x01\x12\x1f\n\x1aMETRIC_TRANSCEIVER_VOLTAGE\x10\xc9\x01\x12\x1c\n\x17METRIC_TRANSCEIVER_BIAS\x10\xca\x01\x12 \n\x1bMETRIC_TRANSCEIVER_RX_POWER\x10\xcb\x01\x12 \n\x1bMETRIC_TRANSCEIVER_TX_POWER\x10\xcc\x01\x12\"\n\x1dMETRIC_TRANSCEIVER_WAVELENGTH\x10\xcd\x01\x12\x15\n\x10METRIC_DISK_TEMP\x10\xac\x02\x12\x19\n\x14METRIC_DISK_CAPACITY\x10\xad\x02\x12\x16\n\x11METRIC_DISK_USAGE\x10\xae\x02\x12!\n\x1cMETRIC_DISK_USAGE_PERCENTAGE\x10\xaf\x02\x12&\n!METRIC_DISK_READ_WRITE_PERCENTAGE\x10\xb0\x02\x12(\n#METRIC_DISK_FAULTY_CELLS_PERCENTAGE\x10\xb1\x02\x12\x14\n\x0fMETRIC_RAM_TEMP\x10\x90\x03\x12\x18\n\x13METRIC_RAM_CAPACITY\x10\x91\x03\x12\x15\n\x10METRIC_RAM_USAGE\x10\x92\x03\x12 \n\x1bMETRIC_RAM_USAGE_PERCENTAGE\x10\x93\x03\x12\x15\n\x10METRIC_POWER_MAX\x10\xf4\x03\x12\x17\n\x12METRIC_POWER_USAGE\x10\xf5\x03\x12\"\n\x1dMETRIC_POWER_USAGE_PERCENTAGE\x10\xf6\x03\x12\"\n\x1dMETRIC_INNER_SURROUNDING_TEMP\x10\xd8\x04\x32\xee\x01\n\x1eNativeMetricsManagementService\x12\x38\n\x0bListMetrics\x12\x0f.dmi.HardwareID\x1a\x18.dmi.ListMetricsResponse\x12\x61\n\x1aUpdateMetricsConfiguration\x12 .dmi.MetricsConfigurationRequest\x1a!.dmi.MetricsConfigurationResponse\x12/\n\tGetMetric\x12\x15.dmi.GetMetricRequest\x1a\x0b.dmi.MetricB;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,dmi_dot_hw__pb2.DESCRIPTOR,])
 
@@ -32,103 +31,128 @@
   full_name='dmi.MetricNames',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='METRIC_NAME_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_FAN_SPEED', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_CPU_TEMP', index=2, number=100,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_CPU_USAGE_PERCENTAGE', index=3, number=101,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_TRANSCEIVER_TEMP', index=4, number=200,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_TRANSCEIVER_VOLTAGE', index=5, number=201,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_TRANSCEIVER_BIAS', index=6, number=202,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_TRANSCEIVER_RX_POWER', index=7, number=203,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_TRANSCEIVER_TX_POWER', index=8, number=204,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_TRANSCEIVER_WAVELENGTH', index=9, number=205,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_DISK_TEMP', index=10, number=300,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_DISK_CAPACITY', index=11, number=301,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_DISK_USAGE', index=12, number=302,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_DISK_USAGE_PERCENTAGE', index=13, number=303,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_DISK_READ_WRITE_PERCENTAGE', index=14, number=304,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_DISK_FAULTY_CELLS_PERCENTAGE', index=15, number=305,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_RAM_TEMP', index=16, number=400,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_RAM_CAPACITY', index=17, number=401,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_RAM_USAGE', index=18, number=402,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_RAM_USAGE_PERCENTAGE', index=19, number=403,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_POWER_MAX', index=20, number=500,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_POWER_USAGE', index=21, number=501,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_POWER_USAGE_PERCENTAGE', index=22, number=502,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='METRIC_INNER_SURROUNDING_TEMP', index=23, number=600,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -171,6 +195,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='metric_id', full_name='dmi.MetricConfig.metric_id', index=0,
@@ -178,21 +203,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='is_configured', full_name='dmi.MetricConfig.is_configured', index=1,
       number=2, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='poll_interval', full_name='dmi.MetricConfig.poll_interval', index=2,
       number=3, type=13, cpp_type=3, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -216,6 +241,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='metrics', full_name='dmi.MetricsConfig.metrics', index=0,
@@ -223,7 +249,7 @@
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -247,6 +273,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.ListMetricsResponse.status', index=0,
@@ -254,21 +281,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.ListMetricsResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='metrics', full_name='dmi.ListMetricsResponse.metrics', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -292,6 +319,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.MetricsConfigurationRequest.device_uuid', index=0,
@@ -299,21 +327,21 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='changes', full_name='dmi.MetricsConfigurationRequest.changes', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reset_to_default', full_name='dmi.MetricsConfigurationRequest.reset_to_default', index=2,
       number=3, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -327,7 +355,9 @@
   oneofs=[
     _descriptor.OneofDescriptor(
       name='operation', full_name='dmi.MetricsConfigurationRequest.operation',
-      index=0, containing_type=None, fields=[]),
+      index=0, containing_type=None,
+      create_key=_descriptor._internal_create_key,
+    fields=[]),
   ],
   serialized_start=346,
   serialized_end=487,
@@ -340,6 +370,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.MetricsConfigurationResponse.status', index=0,
@@ -347,14 +378,14 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.MetricsConfigurationResponse.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -378,6 +409,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.MetricMetaData.device_uuid', index=0,
@@ -385,21 +417,21 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_uuid', full_name='dmi.MetricMetaData.component_uuid', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='component_name', full_name='dmi.MetricMetaData.component_name', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -423,6 +455,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='metric_id', full_name='dmi.Metric.metric_id', index=0,
@@ -430,21 +463,21 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='metric_metadata', full_name='dmi.Metric.metric_metadata', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='value', full_name='dmi.Metric.value', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -468,6 +501,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='meta_data', full_name='dmi.GetMetricRequest.meta_data', index=0,
@@ -475,14 +509,14 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='metric_id', full_name='dmi.GetMetricRequest.metric_id', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -532,60 +566,60 @@
 DESCRIPTOR.enum_types_by_name['MetricNames'] = _METRICNAMES
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-MetricConfig = _reflection.GeneratedProtocolMessageType('MetricConfig', (_message.Message,), dict(
-  DESCRIPTOR = _METRICCONFIG,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+MetricConfig = _reflection.GeneratedProtocolMessageType('MetricConfig', (_message.Message,), {
+  'DESCRIPTOR' : _METRICCONFIG,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.MetricConfig)
-  ))
+  })
 _sym_db.RegisterMessage(MetricConfig)
 
-MetricsConfig = _reflection.GeneratedProtocolMessageType('MetricsConfig', (_message.Message,), dict(
-  DESCRIPTOR = _METRICSCONFIG,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+MetricsConfig = _reflection.GeneratedProtocolMessageType('MetricsConfig', (_message.Message,), {
+  'DESCRIPTOR' : _METRICSCONFIG,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.MetricsConfig)
-  ))
+  })
 _sym_db.RegisterMessage(MetricsConfig)
 
-ListMetricsResponse = _reflection.GeneratedProtocolMessageType('ListMetricsResponse', (_message.Message,), dict(
-  DESCRIPTOR = _LISTMETRICSRESPONSE,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+ListMetricsResponse = _reflection.GeneratedProtocolMessageType('ListMetricsResponse', (_message.Message,), {
+  'DESCRIPTOR' : _LISTMETRICSRESPONSE,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ListMetricsResponse)
-  ))
+  })
 _sym_db.RegisterMessage(ListMetricsResponse)
 
-MetricsConfigurationRequest = _reflection.GeneratedProtocolMessageType('MetricsConfigurationRequest', (_message.Message,), dict(
-  DESCRIPTOR = _METRICSCONFIGURATIONREQUEST,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+MetricsConfigurationRequest = _reflection.GeneratedProtocolMessageType('MetricsConfigurationRequest', (_message.Message,), {
+  'DESCRIPTOR' : _METRICSCONFIGURATIONREQUEST,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.MetricsConfigurationRequest)
-  ))
+  })
 _sym_db.RegisterMessage(MetricsConfigurationRequest)
 
-MetricsConfigurationResponse = _reflection.GeneratedProtocolMessageType('MetricsConfigurationResponse', (_message.Message,), dict(
-  DESCRIPTOR = _METRICSCONFIGURATIONRESPONSE,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+MetricsConfigurationResponse = _reflection.GeneratedProtocolMessageType('MetricsConfigurationResponse', (_message.Message,), {
+  'DESCRIPTOR' : _METRICSCONFIGURATIONRESPONSE,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.MetricsConfigurationResponse)
-  ))
+  })
 _sym_db.RegisterMessage(MetricsConfigurationResponse)
 
-MetricMetaData = _reflection.GeneratedProtocolMessageType('MetricMetaData', (_message.Message,), dict(
-  DESCRIPTOR = _METRICMETADATA,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+MetricMetaData = _reflection.GeneratedProtocolMessageType('MetricMetaData', (_message.Message,), {
+  'DESCRIPTOR' : _METRICMETADATA,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.MetricMetaData)
-  ))
+  })
 _sym_db.RegisterMessage(MetricMetaData)
 
-Metric = _reflection.GeneratedProtocolMessageType('Metric', (_message.Message,), dict(
-  DESCRIPTOR = _METRIC,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+Metric = _reflection.GeneratedProtocolMessageType('Metric', (_message.Message,), {
+  'DESCRIPTOR' : _METRIC,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.Metric)
-  ))
+  })
 _sym_db.RegisterMessage(Metric)
 
-GetMetricRequest = _reflection.GeneratedProtocolMessageType('GetMetricRequest', (_message.Message,), dict(
-  DESCRIPTOR = _GETMETRICREQUEST,
-  __module__ = 'dmi.hw_metrics_mgmt_service_pb2'
+GetMetricRequest = _reflection.GeneratedProtocolMessageType('GetMetricRequest', (_message.Message,), {
+  'DESCRIPTOR' : _GETMETRICREQUEST,
+  '__module__' : 'dmi.hw_metrics_mgmt_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.GetMetricRequest)
-  ))
+  })
 _sym_db.RegisterMessage(GetMetricRequest)
 
 
@@ -597,6 +631,7 @@
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
+  create_key=_descriptor._internal_create_key,
   serialized_start=1653,
   serialized_end=1891,
   methods=[
@@ -608,6 +643,7 @@
     input_type=dmi_dot_hw__pb2._HARDWAREID,
     output_type=_LISTMETRICSRESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='UpdateMetricsConfiguration',
@@ -617,6 +653,7 @@
     input_type=_METRICSCONFIGURATIONREQUEST,
     output_type=_METRICSCONFIGURATIONRESPONSE,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='GetMetric',
@@ -626,6 +663,7 @@
     input_type=_GETMETRICREQUEST,
     output_type=_METRIC,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
 ])
 _sym_db.RegisterServiceDescriptor(_NATIVEMETRICSMANAGEMENTSERVICE)
diff --git a/python/dmi/hw_metrics_mgmt_service_pb2_grpc.py b/python/dmi/hw_metrics_mgmt_service_pb2_grpc.py
new file mode 100644
index 0000000..825d4ee
--- /dev/null
+++ b/python/dmi/hw_metrics_mgmt_service_pb2_grpc.py
@@ -0,0 +1,142 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from dmi import hw_metrics_mgmt_service_pb2 as dmi_dot_hw__metrics__mgmt__service__pb2
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+
+
+class NativeMetricsManagementServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.ListMetrics = channel.unary_unary(
+                '/dmi.NativeMetricsManagementService/ListMetrics',
+                request_serializer=dmi_dot_hw__pb2.HardwareID.SerializeToString,
+                response_deserializer=dmi_dot_hw__metrics__mgmt__service__pb2.ListMetricsResponse.FromString,
+                )
+        self.UpdateMetricsConfiguration = channel.unary_unary(
+                '/dmi.NativeMetricsManagementService/UpdateMetricsConfiguration',
+                request_serializer=dmi_dot_hw__metrics__mgmt__service__pb2.MetricsConfigurationRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__metrics__mgmt__service__pb2.MetricsConfigurationResponse.FromString,
+                )
+        self.GetMetric = channel.unary_unary(
+                '/dmi.NativeMetricsManagementService/GetMetric',
+                request_serializer=dmi_dot_hw__metrics__mgmt__service__pb2.GetMetricRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__metrics__mgmt__service__pb2.Metric.FromString,
+                )
+
+
+class NativeMetricsManagementServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def ListMetrics(self, request, context):
+        """List the supported metrics for the passed device.

+        This would be the first call that you make to know about the metrics that a particular device supports and

+        then use the UpdateMetricsConfiguration API to monitor only the required metrics.

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def UpdateMetricsConfiguration(self, request, context):
+        """Updates the configuration of the list of metrics in the request

+        Acts upon single metric configuration, collection of a single metric can be started/stopped

+        by changing its configuration.

+        

+        This configuration is persisted across restart of the device or the device manager

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetMetric(self, request, context):
+        """Get the instantenous value of a metric

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_NativeMetricsManagementServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'ListMetrics': grpc.unary_unary_rpc_method_handler(
+                    servicer.ListMetrics,
+                    request_deserializer=dmi_dot_hw__pb2.HardwareID.FromString,
+                    response_serializer=dmi_dot_hw__metrics__mgmt__service__pb2.ListMetricsResponse.SerializeToString,
+            ),
+            'UpdateMetricsConfiguration': grpc.unary_unary_rpc_method_handler(
+                    servicer.UpdateMetricsConfiguration,
+                    request_deserializer=dmi_dot_hw__metrics__mgmt__service__pb2.MetricsConfigurationRequest.FromString,
+                    response_serializer=dmi_dot_hw__metrics__mgmt__service__pb2.MetricsConfigurationResponse.SerializeToString,
+            ),
+            'GetMetric': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetMetric,
+                    request_deserializer=dmi_dot_hw__metrics__mgmt__service__pb2.GetMetricRequest.FromString,
+                    response_serializer=dmi_dot_hw__metrics__mgmt__service__pb2.Metric.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dmi.NativeMetricsManagementService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class NativeMetricsManagementService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def ListMetrics(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeMetricsManagementService/ListMetrics',
+            dmi_dot_hw__pb2.HardwareID.SerializeToString,
+            dmi_dot_hw__metrics__mgmt__service__pb2.ListMetricsResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def UpdateMetricsConfiguration(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeMetricsManagementService/UpdateMetricsConfiguration',
+            dmi_dot_hw__metrics__mgmt__service__pb2.MetricsConfigurationRequest.SerializeToString,
+            dmi_dot_hw__metrics__mgmt__service__pb2.MetricsConfigurationResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetMetric(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeMetricsManagementService/GetMetric',
+            dmi_dot_hw__metrics__mgmt__service__pb2.GetMetricRequest.SerializeToString,
+            dmi_dot_hw__metrics__mgmt__service__pb2.Metric.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python/dmi/hw_pb2.py b/python/dmi/hw_pb2.py
index 3030cfb..be97116 100644
--- a/python/dmi/hw_pb2.py
+++ b/python/dmi/hw_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: dmi/hw.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
@@ -21,8 +19,9 @@
   name='dmi/hw.proto',
   package='dmi',
   syntax='proto3',
-  serialized_options=_b('Z9github.com/opencord/device-management-interface/v3/go/dmi'),
-  serialized_pb=_b('\n\x0c\x64mi/hw.proto\x12\x03\x64mi\x1a\x1fgoogle/protobuf/timestamp.proto\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"%\n\nHardwareID\x12\x17\n\x04uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"\x12\n\x03Uri\x12\x0b\n\x03uri\x18\x01 \x01(\t\"\xb5\x02\n\x0e\x43omponentState\x12\x36\n\x12state_last_changed\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12-\n\x0b\x61\x64min_state\x18\x02 \x01(\x0e\x32\x18.dmi.ComponentAdminState\x12+\n\noper_state\x18\x03 \x01(\x0e\x32\x17.dmi.ComponentOperState\x12-\n\x0busage_state\x18\x04 \x01(\x0e\x32\x18.dmi.ComponentUsageState\x12-\n\x0b\x61larm_state\x18\x05 \x01(\x0e\x32\x18.dmi.ComponentAlarmState\x12\x31\n\rstandby_state\x18\x06 \x01(\x0e\x32\x1a.dmi.ComponentStandbyState\"\x98\x02\n\x13\x43omponentSensorData\x12\r\n\x05value\x18\x01 \x01(\x05\x12\"\n\x04type\x18\x02 \x01(\x0e\x32\x14.dmi.SensorValueType\x12$\n\x05scale\x18\x03 \x01(\x0e\x32\x15.dmi.SensorValueScale\x12\x11\n\tprecision\x18\x04 \x01(\x05\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.dmi.SensorStatus\x12\x15\n\runits_display\x18\x06 \x01(\t\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x19\n\x11value_update_rate\x18\x08 \x01(\r\x12\x11\n\tdata_type\x18\t \x01(\t\"\xf9\x03\n\tComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06parent\x18\x04 \x01(\t\x12\x16\n\x0eparent_rel_pos\x18\x05 \x01(\x05\x12 \n\x08\x63hildren\x18\x06 \x03(\x0b\x32\x0e.dmi.Component\x12\x14\n\x0chardware_rev\x18\x07 \x01(\t\x12\x14\n\x0c\x66irmware_rev\x18\x08 \x01(\t\x12\x14\n\x0csoftware_rev\x18\t \x01(\t\x12\x12\n\nserial_num\x18\n \x01(\t\x12\x10\n\x08mfg_name\x18\x0b \x01(\t\x12\x12\n\nmodel_name\x18\x0c \x01(\t\x12\r\n\x05\x61lias\x18\r \x01(\t\x12\x10\n\x08\x61sset_id\x18\x0e \x01(\t\x12\x0e\n\x06is_fru\x18\x0f \x01(\x08\x12,\n\x08mfg_date\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\x03uri\x18\x11 \x01(\x0b\x32\x08.dmi.Uri\x12\x17\n\x04uuid\x18\x12 \x01(\x0b\x32\t.dmi.Uuid\x12\"\n\x05state\x18\x13 \x01(\x0b\x32\x13.dmi.ComponentState\x12-\n\x0bsensor_data\x18\x14 \x03(\x0b\x32\x18.dmi.ComponentSensorData\"Y\n\x08Hardware\x12/\n\x0blast_change\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1c\n\x04root\x18\x02 \x01(\x0b\x32\x0e.dmi.Component\"\xe5\x01\n\x13ModifiableComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x1e\n\x06parent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\x12\x16\n\x0eparent_rel_pos\x18\x04 \x01(\x05\x12\r\n\x05\x61lias\x18\x05 \x01(\t\x12\x10\n\x08\x61sset_id\x18\x06 \x01(\t\x12\x15\n\x03uri\x18\x07 \x01(\x0b\x32\x08.dmi.Uri\x12-\n\x0b\x61\x64min_state\x18\x08 \x01(\x0e\x32\x18.dmi.ComponentAdminState*\xb4\x03\n\rComponentType\x12\x1c\n\x18\x43OMPONENT_TYPE_UNDEFINED\x10\x00\x12\x1a\n\x16\x43OMPONENT_TYPE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMPONENT_TYPE_CHASSIS\x10\x02\x12\x1c\n\x18\x43OMPONENT_TYPE_BACKPLANE\x10\x03\x12\x1c\n\x18\x43OMPONENT_TYPE_CONTAINER\x10\x04\x12\x1f\n\x1b\x43OMPONENT_TYPE_POWER_SUPPLY\x10\x05\x12\x16\n\x12\x43OMPONENT_TYPE_FAN\x10\x06\x12\x19\n\x15\x43OMPONENT_TYPE_SENSOR\x10\x07\x12\x19\n\x15\x43OMPONENT_TYPE_MODULE\x10\x08\x12\x17\n\x13\x43OMPONENT_TYPE_PORT\x10\t\x12\x16\n\x12\x43OMPONENT_TYPE_CPU\x10\n\x12\x1a\n\x16\x43OMPONENT_TYPE_BATTERY\x10\x0b\x12\x1a\n\x16\x43OMPONENT_TYPE_STORAGE\x10\x0c\x12\x19\n\x15\x43OMPONENT_TYPE_MEMORY\x10\r\x12\x1e\n\x1a\x43OMPONENT_TYPE_TRANSCEIVER\x10\x0e*\xb3\x01\n\x13\x43omponentAdminState\x12\x1e\n\x1a\x43OMP_ADMIN_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ADMIN_STATE_UNKNOWN\x10\x01\x12\x1b\n\x17\x43OMP_ADMIN_STATE_LOCKED\x10\x02\x12\"\n\x1e\x43OMP_ADMIN_STATE_SHUTTING_DOWN\x10\x03\x12\x1d\n\x19\x43OMP_ADMIN_STATE_UNLOCKED\x10\x04*\xa8\x01\n\x12\x43omponentOperState\x12\x1d\n\x19\x43OMP_OPER_STATE_UNDEFINED\x10\x00\x12\x1b\n\x17\x43OMP_OPER_STATE_UNKNOWN\x10\x01\x12\x1c\n\x18\x43OMP_OPER_STATE_DISABLED\x10\x02\x12\x1b\n\x17\x43OMP_OPER_STATE_ENABLED\x10\x03\x12\x1b\n\x17\x43OMP_OPER_STATE_TESTING\x10\x04*\xa6\x01\n\x13\x43omponentUsageState\x12\x1e\n\x1a\x43OMP_USAGE_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_USAGE_STATE_UNKNOWN\x10\x01\x12\x19\n\x15\x43OMP_USAGE_STATE_IDLE\x10\x02\x12\x1b\n\x17\x43OMP_USAGE_STATE_ACTIVE\x10\x03\x12\x19\n\x15\x43OMP_USAGE_STATE_BUSY\x10\x04*\x8e\x02\n\x13\x43omponentAlarmState\x12\x1e\n\x1a\x43OMP_ALARM_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ALARM_STATE_UNKNOWN\x10\x01\x12!\n\x1d\x43OMP_ALARM_STATE_UNDER_REPAIR\x10\x02\x12\x1d\n\x19\x43OMP_ALARM_STATE_CRITICAL\x10\x03\x12\x1a\n\x16\x43OMP_ALARM_STATE_MAJOR\x10\x04\x12\x1a\n\x16\x43OMP_ALARM_STATE_MINOR\x10\x05\x12\x1c\n\x18\x43OMP_ALARM_STATE_WARNING\x10\x06\x12!\n\x1d\x43OMP_ALARM_STATE_INTERMEDIATE\x10\x07*\xbc\x01\n\x15\x43omponentStandbyState\x12 \n\x1c\x43OMP_STANDBY_STATE_UNDEFINED\x10\x00\x12\x1e\n\x1a\x43OMP_STANDBY_STATE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMP_STANDBY_STATE_HOT\x10\x02\x12\x1b\n\x17\x43OMP_STANDBY_STATE_COLD\x10\x03\x12(\n$COMP_STANDBY_STATE_PROVIDING_SERVICE\x10\x04*\xa1\x03\n\x0fSensorValueType\x12\x1f\n\x1bSENSOR_VALUE_TYPE_UNDEFINED\x10\x00\x12\x1b\n\x17SENSOR_VALUE_TYPE_OTHER\x10\x01\x12\x1d\n\x19SENSOR_VALUE_TYPE_UNKNOWN\x10\x02\x12\x1e\n\x1aSENSOR_VALUE_TYPE_VOLTS_AC\x10\x03\x12\x1e\n\x1aSENSOR_VALUE_TYPE_VOLTS_DC\x10\x04\x12\x1d\n\x19SENSOR_VALUE_TYPE_AMPERES\x10\x05\x12\x1b\n\x17SENSOR_VALUE_TYPE_WATTS\x10\x06\x12\x1b\n\x17SENSOR_VALUE_TYPE_HERTZ\x10\x07\x12\x1d\n\x19SENSOR_VALUE_TYPE_CELSIUS\x10\x08\x12 \n\x1cSENSOR_VALUE_TYPE_PERCENT_RH\x10\t\x12\x19\n\x15SENSOR_VALUE_TYPE_RPM\x10\n\x12\x19\n\x15SENSOR_VALUE_TYPE_CMM\x10\x0b\x12!\n\x1dSENSOR_VALUE_TYPE_TRUTH_VALUE\x10\x0c*\xa8\x04\n\x10SensorValueScale\x12 \n\x1cSENSOR_VALUE_SCALE_UNDEFINED\x10\x00\x12\x1c\n\x18SENSOR_VALUE_SCALE_YOCTO\x10\x01\x12\x1c\n\x18SENSOR_VALUE_SCALE_ZEPTO\x10\x02\x12\x1b\n\x17SENSOR_VALUE_SCALE_ATTO\x10\x03\x12\x1c\n\x18SENSOR_VALUE_SCALE_FEMTO\x10\x04\x12\x1b\n\x17SENSOR_VALUE_SCALE_PICO\x10\x05\x12\x1b\n\x17SENSOR_VALUE_SCALE_NANO\x10\x06\x12\x1c\n\x18SENSOR_VALUE_SCALE_MICRO\x10\x07\x12\x1c\n\x18SENSOR_VALUE_SCALE_MILLI\x10\x08\x12\x1c\n\x18SENSOR_VALUE_SCALE_UNITS\x10\t\x12\x1b\n\x17SENSOR_VALUE_SCALE_KILO\x10\n\x12\x1b\n\x17SENSOR_VALUE_SCALE_MEGA\x10\x0b\x12\x1b\n\x17SENSOR_VALUE_SCALE_GIGA\x10\x0c\x12\x1b\n\x17SENSOR_VALUE_SCALE_TERA\x10\r\x12\x1b\n\x17SENSOR_VALUE_SCALE_PETA\x10\x0e\x12\x1a\n\x16SENSOR_VALUE_SCALE_EXA\x10\x0f\x12\x1c\n\x18SENSOR_VALUE_SCALE_ZETTA\x10\x10\x12\x1c\n\x18SENSOR_VALUE_SCALE_YOTTA\x10\x11*\x82\x01\n\x0cSensorStatus\x12\x1b\n\x17SENSOR_STATUS_UNDEFINED\x10\x00\x12\x14\n\x10SENSOR_STATUS_OK\x10\x01\x12\x1d\n\x19SENSOR_STATUS_UNAVAILABLE\x10\x02\x12 \n\x1cSENSOR_STATUS_NONOPERATIONAL\x10\x03\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')
+  serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n\x0c\x64mi/hw.proto\x12\x03\x64mi\x1a\x1fgoogle/protobuf/timestamp.proto\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"%\n\nHardwareID\x12\x17\n\x04uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"\x12\n\x03Uri\x12\x0b\n\x03uri\x18\x01 \x01(\t\"\xb5\x02\n\x0e\x43omponentState\x12\x36\n\x12state_last_changed\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12-\n\x0b\x61\x64min_state\x18\x02 \x01(\x0e\x32\x18.dmi.ComponentAdminState\x12+\n\noper_state\x18\x03 \x01(\x0e\x32\x17.dmi.ComponentOperState\x12-\n\x0busage_state\x18\x04 \x01(\x0e\x32\x18.dmi.ComponentUsageState\x12-\n\x0b\x61larm_state\x18\x05 \x01(\x0e\x32\x18.dmi.ComponentAlarmState\x12\x31\n\rstandby_state\x18\x06 \x01(\x0e\x32\x1a.dmi.ComponentStandbyState\"\x98\x02\n\x13\x43omponentSensorData\x12\r\n\x05value\x18\x01 \x01(\x05\x12\"\n\x04type\x18\x02 \x01(\x0e\x32\x14.dmi.SensorValueType\x12$\n\x05scale\x18\x03 \x01(\x0e\x32\x15.dmi.SensorValueScale\x12\x11\n\tprecision\x18\x04 \x01(\x05\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.dmi.SensorStatus\x12\x15\n\runits_display\x18\x06 \x01(\t\x12-\n\ttimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x19\n\x11value_update_rate\x18\x08 \x01(\r\x12\x11\n\tdata_type\x18\t \x01(\t\"\xf9\x03\n\tComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x13\n\x0b\x64\x65scription\x18\x03 \x01(\t\x12\x0e\n\x06parent\x18\x04 \x01(\t\x12\x16\n\x0eparent_rel_pos\x18\x05 \x01(\x05\x12 \n\x08\x63hildren\x18\x06 \x03(\x0b\x32\x0e.dmi.Component\x12\x14\n\x0chardware_rev\x18\x07 \x01(\t\x12\x14\n\x0c\x66irmware_rev\x18\x08 \x01(\t\x12\x14\n\x0csoftware_rev\x18\t \x01(\t\x12\x12\n\nserial_num\x18\n \x01(\t\x12\x10\n\x08mfg_name\x18\x0b \x01(\t\x12\x12\n\nmodel_name\x18\x0c \x01(\t\x12\r\n\x05\x61lias\x18\r \x01(\t\x12\x10\n\x08\x61sset_id\x18\x0e \x01(\t\x12\x0e\n\x06is_fru\x18\x0f \x01(\x08\x12,\n\x08mfg_date\x18\x10 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x15\n\x03uri\x18\x11 \x01(\x0b\x32\x08.dmi.Uri\x12\x17\n\x04uuid\x18\x12 \x01(\x0b\x32\t.dmi.Uuid\x12\"\n\x05state\x18\x13 \x01(\x0b\x32\x13.dmi.ComponentState\x12-\n\x0bsensor_data\x18\x14 \x03(\x0b\x32\x18.dmi.ComponentSensorData\"Y\n\x08Hardware\x12/\n\x0blast_change\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1c\n\x04root\x18\x02 \x01(\x0b\x32\x0e.dmi.Component\"\xe5\x01\n\x13ModifiableComponent\x12\x0c\n\x04name\x18\x01 \x01(\t\x12!\n\x05\x63lass\x18\x02 \x01(\x0e\x32\x12.dmi.ComponentType\x12\x1e\n\x06parent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\x12\x16\n\x0eparent_rel_pos\x18\x04 \x01(\x05\x12\r\n\x05\x61lias\x18\x05 \x01(\t\x12\x10\n\x08\x61sset_id\x18\x06 \x01(\t\x12\x15\n\x03uri\x18\x07 \x01(\x0b\x32\x08.dmi.Uri\x12-\n\x0b\x61\x64min_state\x18\x08 \x01(\x0e\x32\x18.dmi.ComponentAdminState*\xb4\x03\n\rComponentType\x12\x1c\n\x18\x43OMPONENT_TYPE_UNDEFINED\x10\x00\x12\x1a\n\x16\x43OMPONENT_TYPE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMPONENT_TYPE_CHASSIS\x10\x02\x12\x1c\n\x18\x43OMPONENT_TYPE_BACKPLANE\x10\x03\x12\x1c\n\x18\x43OMPONENT_TYPE_CONTAINER\x10\x04\x12\x1f\n\x1b\x43OMPONENT_TYPE_POWER_SUPPLY\x10\x05\x12\x16\n\x12\x43OMPONENT_TYPE_FAN\x10\x06\x12\x19\n\x15\x43OMPONENT_TYPE_SENSOR\x10\x07\x12\x19\n\x15\x43OMPONENT_TYPE_MODULE\x10\x08\x12\x17\n\x13\x43OMPONENT_TYPE_PORT\x10\t\x12\x16\n\x12\x43OMPONENT_TYPE_CPU\x10\n\x12\x1a\n\x16\x43OMPONENT_TYPE_BATTERY\x10\x0b\x12\x1a\n\x16\x43OMPONENT_TYPE_STORAGE\x10\x0c\x12\x19\n\x15\x43OMPONENT_TYPE_MEMORY\x10\r\x12\x1e\n\x1a\x43OMPONENT_TYPE_TRANSCEIVER\x10\x0e*\xb3\x01\n\x13\x43omponentAdminState\x12\x1e\n\x1a\x43OMP_ADMIN_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ADMIN_STATE_UNKNOWN\x10\x01\x12\x1b\n\x17\x43OMP_ADMIN_STATE_LOCKED\x10\x02\x12\"\n\x1e\x43OMP_ADMIN_STATE_SHUTTING_DOWN\x10\x03\x12\x1d\n\x19\x43OMP_ADMIN_STATE_UNLOCKED\x10\x04*\xa8\x01\n\x12\x43omponentOperState\x12\x1d\n\x19\x43OMP_OPER_STATE_UNDEFINED\x10\x00\x12\x1b\n\x17\x43OMP_OPER_STATE_UNKNOWN\x10\x01\x12\x1c\n\x18\x43OMP_OPER_STATE_DISABLED\x10\x02\x12\x1b\n\x17\x43OMP_OPER_STATE_ENABLED\x10\x03\x12\x1b\n\x17\x43OMP_OPER_STATE_TESTING\x10\x04*\xa6\x01\n\x13\x43omponentUsageState\x12\x1e\n\x1a\x43OMP_USAGE_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_USAGE_STATE_UNKNOWN\x10\x01\x12\x19\n\x15\x43OMP_USAGE_STATE_IDLE\x10\x02\x12\x1b\n\x17\x43OMP_USAGE_STATE_ACTIVE\x10\x03\x12\x19\n\x15\x43OMP_USAGE_STATE_BUSY\x10\x04*\x8e\x02\n\x13\x43omponentAlarmState\x12\x1e\n\x1a\x43OMP_ALARM_STATE_UNDEFINED\x10\x00\x12\x1c\n\x18\x43OMP_ALARM_STATE_UNKNOWN\x10\x01\x12!\n\x1d\x43OMP_ALARM_STATE_UNDER_REPAIR\x10\x02\x12\x1d\n\x19\x43OMP_ALARM_STATE_CRITICAL\x10\x03\x12\x1a\n\x16\x43OMP_ALARM_STATE_MAJOR\x10\x04\x12\x1a\n\x16\x43OMP_ALARM_STATE_MINOR\x10\x05\x12\x1c\n\x18\x43OMP_ALARM_STATE_WARNING\x10\x06\x12!\n\x1d\x43OMP_ALARM_STATE_INTERMEDIATE\x10\x07*\xbc\x01\n\x15\x43omponentStandbyState\x12 \n\x1c\x43OMP_STANDBY_STATE_UNDEFINED\x10\x00\x12\x1e\n\x1a\x43OMP_STANDBY_STATE_UNKNOWN\x10\x01\x12\x1a\n\x16\x43OMP_STANDBY_STATE_HOT\x10\x02\x12\x1b\n\x17\x43OMP_STANDBY_STATE_COLD\x10\x03\x12(\n$COMP_STANDBY_STATE_PROVIDING_SERVICE\x10\x04*\xa1\x03\n\x0fSensorValueType\x12\x1f\n\x1bSENSOR_VALUE_TYPE_UNDEFINED\x10\x00\x12\x1b\n\x17SENSOR_VALUE_TYPE_OTHER\x10\x01\x12\x1d\n\x19SENSOR_VALUE_TYPE_UNKNOWN\x10\x02\x12\x1e\n\x1aSENSOR_VALUE_TYPE_VOLTS_AC\x10\x03\x12\x1e\n\x1aSENSOR_VALUE_TYPE_VOLTS_DC\x10\x04\x12\x1d\n\x19SENSOR_VALUE_TYPE_AMPERES\x10\x05\x12\x1b\n\x17SENSOR_VALUE_TYPE_WATTS\x10\x06\x12\x1b\n\x17SENSOR_VALUE_TYPE_HERTZ\x10\x07\x12\x1d\n\x19SENSOR_VALUE_TYPE_CELSIUS\x10\x08\x12 \n\x1cSENSOR_VALUE_TYPE_PERCENT_RH\x10\t\x12\x19\n\x15SENSOR_VALUE_TYPE_RPM\x10\n\x12\x19\n\x15SENSOR_VALUE_TYPE_CMM\x10\x0b\x12!\n\x1dSENSOR_VALUE_TYPE_TRUTH_VALUE\x10\x0c*\xa8\x04\n\x10SensorValueScale\x12 \n\x1cSENSOR_VALUE_SCALE_UNDEFINED\x10\x00\x12\x1c\n\x18SENSOR_VALUE_SCALE_YOCTO\x10\x01\x12\x1c\n\x18SENSOR_VALUE_SCALE_ZEPTO\x10\x02\x12\x1b\n\x17SENSOR_VALUE_SCALE_ATTO\x10\x03\x12\x1c\n\x18SENSOR_VALUE_SCALE_FEMTO\x10\x04\x12\x1b\n\x17SENSOR_VALUE_SCALE_PICO\x10\x05\x12\x1b\n\x17SENSOR_VALUE_SCALE_NANO\x10\x06\x12\x1c\n\x18SENSOR_VALUE_SCALE_MICRO\x10\x07\x12\x1c\n\x18SENSOR_VALUE_SCALE_MILLI\x10\x08\x12\x1c\n\x18SENSOR_VALUE_SCALE_UNITS\x10\t\x12\x1b\n\x17SENSOR_VALUE_SCALE_KILO\x10\n\x12\x1b\n\x17SENSOR_VALUE_SCALE_MEGA\x10\x0b\x12\x1b\n\x17SENSOR_VALUE_SCALE_GIGA\x10\x0c\x12\x1b\n\x17SENSOR_VALUE_SCALE_TERA\x10\r\x12\x1b\n\x17SENSOR_VALUE_SCALE_PETA\x10\x0e\x12\x1a\n\x16SENSOR_VALUE_SCALE_EXA\x10\x0f\x12\x1c\n\x18SENSOR_VALUE_SCALE_ZETTA\x10\x10\x12\x1c\n\x18SENSOR_VALUE_SCALE_YOTTA\x10\x11*\x82\x01\n\x0cSensorStatus\x12\x1b\n\x17SENSOR_STATUS_UNDEFINED\x10\x00\x12\x14\n\x10SENSOR_STATUS_OK\x10\x01\x12\x1d\n\x19SENSOR_STATUS_UNAVAILABLE\x10\x02\x12 \n\x1cSENSOR_STATUS_NONOPERATIONAL\x10\x03\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
 
@@ -31,67 +30,83 @@
   full_name='dmi.ComponentType',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_UNKNOWN', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_CHASSIS', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_BACKPLANE', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_CONTAINER', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_POWER_SUPPLY', index=5, number=5,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_FAN', index=6, number=6,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_SENSOR', index=7, number=7,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_MODULE', index=8, number=8,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_PORT', index=9, number=9,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_CPU', index=10, number=10,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_BATTERY', index=11, number=11,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_STORAGE', index=12, number=12,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_MEMORY', index=13, number=13,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMPONENT_TYPE_TRANSCEIVER', index=14, number=14,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -106,27 +121,33 @@
   full_name='dmi.ComponentAdminState',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='COMP_ADMIN_STATE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ADMIN_STATE_UNKNOWN', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ADMIN_STATE_LOCKED', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ADMIN_STATE_SHUTTING_DOWN', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ADMIN_STATE_UNLOCKED', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -141,27 +162,33 @@
   full_name='dmi.ComponentOperState',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='COMP_OPER_STATE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_OPER_STATE_UNKNOWN', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_OPER_STATE_DISABLED', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_OPER_STATE_ENABLED', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_OPER_STATE_TESTING', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -176,27 +203,33 @@
   full_name='dmi.ComponentUsageState',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='COMP_USAGE_STATE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_USAGE_STATE_UNKNOWN', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_USAGE_STATE_IDLE', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_USAGE_STATE_ACTIVE', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_USAGE_STATE_BUSY', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -211,39 +244,48 @@
   full_name='dmi.ComponentAlarmState',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_UNKNOWN', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_UNDER_REPAIR', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_CRITICAL', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_MAJOR', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_MINOR', index=5, number=5,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_WARNING', index=6, number=6,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_ALARM_STATE_INTERMEDIATE', index=7, number=7,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -258,27 +300,33 @@
   full_name='dmi.ComponentStandbyState',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='COMP_STANDBY_STATE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_STANDBY_STATE_UNKNOWN', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_STANDBY_STATE_HOT', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_STANDBY_STATE_COLD', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMP_STANDBY_STATE_PROVIDING_SERVICE', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -293,59 +341,73 @@
   full_name='dmi.SensorValueType',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_OTHER', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_UNKNOWN', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_VOLTS_AC', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_VOLTS_DC', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_AMPERES', index=5, number=5,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_WATTS', index=6, number=6,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_HERTZ', index=7, number=7,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_CELSIUS', index=8, number=8,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_PERCENT_RH', index=9, number=9,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_RPM', index=10, number=10,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_CMM', index=11, number=11,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_TYPE_TRUTH_VALUE', index=12, number=12,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -360,79 +422,98 @@
   full_name='dmi.SensorValueScale',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_YOCTO', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_ZEPTO', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_ATTO', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_FEMTO', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_PICO', index=5, number=5,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_NANO', index=6, number=6,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_MICRO', index=7, number=7,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_MILLI', index=8, number=8,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_UNITS', index=9, number=9,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_KILO', index=10, number=10,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_MEGA', index=11, number=11,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_GIGA', index=12, number=12,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_TERA', index=13, number=13,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_PETA', index=14, number=14,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_EXA', index=15, number=15,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_ZETTA', index=16, number=16,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_VALUE_SCALE_YOTTA', index=17, number=17,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -447,23 +528,28 @@
   full_name='dmi.SensorStatus',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='SENSOR_STATUS_UNDEFINED', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_STATUS_OK', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_STATUS_UNAVAILABLE', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='SENSOR_STATUS_NONOPERATIONAL', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -560,14 +646,15 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='uuid', full_name='dmi.Uuid.uuid', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -591,6 +678,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='uuid', full_name='dmi.HardwareID.uuid', index=0,
@@ -598,7 +686,7 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -622,14 +710,15 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='uri', full_name='dmi.Uri.uri', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -653,6 +742,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='state_last_changed', full_name='dmi.ComponentState.state_last_changed', index=0,
@@ -660,42 +750,42 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='admin_state', full_name='dmi.ComponentState.admin_state', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='oper_state', full_name='dmi.ComponentState.oper_state', index=2,
       number=3, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='usage_state', full_name='dmi.ComponentState.usage_state', index=3,
       number=4, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='alarm_state', full_name='dmi.ComponentState.alarm_state', index=4,
       number=5, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='standby_state', full_name='dmi.ComponentState.standby_state', index=5,
       number=6, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -719,6 +809,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='value', full_name='dmi.ComponentSensorData.value', index=0,
@@ -726,63 +817,63 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='type', full_name='dmi.ComponentSensorData.type', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='scale', full_name='dmi.ComponentSensorData.scale', index=2,
       number=3, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='precision', full_name='dmi.ComponentSensorData.precision', index=3,
       number=4, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.ComponentSensorData.status', index=4,
       number=5, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='units_display', full_name='dmi.ComponentSensorData.units_display', index=5,
       number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='timestamp', full_name='dmi.ComponentSensorData.timestamp', index=6,
       number=7, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='value_update_rate', full_name='dmi.ComponentSensorData.value_update_rate', index=7,
       number=8, type=13, cpp_type=3, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='data_type', full_name='dmi.ComponentSensorData.data_type', index=8,
       number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -806,147 +897,148 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='name', full_name='dmi.Component.name', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='class', full_name='dmi.Component.class', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='description', full_name='dmi.Component.description', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='parent', full_name='dmi.Component.parent', index=3,
       number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='parent_rel_pos', full_name='dmi.Component.parent_rel_pos', index=4,
       number=5, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='children', full_name='dmi.Component.children', index=5,
       number=6, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='hardware_rev', full_name='dmi.Component.hardware_rev', index=6,
       number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='firmware_rev', full_name='dmi.Component.firmware_rev', index=7,
       number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='software_rev', full_name='dmi.Component.software_rev', index=8,
       number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='serial_num', full_name='dmi.Component.serial_num', index=9,
       number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='mfg_name', full_name='dmi.Component.mfg_name', index=10,
       number=11, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='model_name', full_name='dmi.Component.model_name', index=11,
       number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='alias', full_name='dmi.Component.alias', index=12,
       number=13, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='asset_id', full_name='dmi.Component.asset_id', index=13,
       number=14, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='is_fru', full_name='dmi.Component.is_fru', index=14,
       number=15, type=8, cpp_type=7, label=1,
       has_default_value=False, default_value=False,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='mfg_date', full_name='dmi.Component.mfg_date', index=15,
       number=16, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='uri', full_name='dmi.Component.uri', index=16,
       number=17, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='uuid', full_name='dmi.Component.uuid', index=17,
       number=18, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='state', full_name='dmi.Component.state', index=18,
       number=19, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='sensor_data', full_name='dmi.Component.sensor_data', index=19,
       number=20, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -970,6 +1062,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='last_change', full_name='dmi.Hardware.last_change', index=0,
@@ -977,14 +1070,14 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='root', full_name='dmi.Hardware.root', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -1008,63 +1101,64 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='name', full_name='dmi.ModifiableComponent.name', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='class', full_name='dmi.ModifiableComponent.class', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='parent', full_name='dmi.ModifiableComponent.parent', index=2,
       number=3, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='parent_rel_pos', full_name='dmi.ModifiableComponent.parent_rel_pos', index=3,
       number=4, type=5, cpp_type=1, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='alias', full_name='dmi.ModifiableComponent.alias', index=4,
       number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='asset_id', full_name='dmi.ModifiableComponent.asset_id', index=5,
       number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='uri', full_name='dmi.ModifiableComponent.uri', index=6,
       number=7, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='admin_state', full_name='dmi.ModifiableComponent.admin_state', index=7,
       number=8, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -1124,60 +1218,60 @@
 DESCRIPTOR.enum_types_by_name['SensorStatus'] = _SENSORSTATUS
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), dict(
-  DESCRIPTOR = _UUID,
-  __module__ = 'dmi.hw_pb2'
+Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), {
+  'DESCRIPTOR' : _UUID,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.Uuid)
-  ))
+  })
 _sym_db.RegisterMessage(Uuid)
 
-HardwareID = _reflection.GeneratedProtocolMessageType('HardwareID', (_message.Message,), dict(
-  DESCRIPTOR = _HARDWAREID,
-  __module__ = 'dmi.hw_pb2'
+HardwareID = _reflection.GeneratedProtocolMessageType('HardwareID', (_message.Message,), {
+  'DESCRIPTOR' : _HARDWAREID,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.HardwareID)
-  ))
+  })
 _sym_db.RegisterMessage(HardwareID)
 
-Uri = _reflection.GeneratedProtocolMessageType('Uri', (_message.Message,), dict(
-  DESCRIPTOR = _URI,
-  __module__ = 'dmi.hw_pb2'
+Uri = _reflection.GeneratedProtocolMessageType('Uri', (_message.Message,), {
+  'DESCRIPTOR' : _URI,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.Uri)
-  ))
+  })
 _sym_db.RegisterMessage(Uri)
 
-ComponentState = _reflection.GeneratedProtocolMessageType('ComponentState', (_message.Message,), dict(
-  DESCRIPTOR = _COMPONENTSTATE,
-  __module__ = 'dmi.hw_pb2'
+ComponentState = _reflection.GeneratedProtocolMessageType('ComponentState', (_message.Message,), {
+  'DESCRIPTOR' : _COMPONENTSTATE,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ComponentState)
-  ))
+  })
 _sym_db.RegisterMessage(ComponentState)
 
-ComponentSensorData = _reflection.GeneratedProtocolMessageType('ComponentSensorData', (_message.Message,), dict(
-  DESCRIPTOR = _COMPONENTSENSORDATA,
-  __module__ = 'dmi.hw_pb2'
+ComponentSensorData = _reflection.GeneratedProtocolMessageType('ComponentSensorData', (_message.Message,), {
+  'DESCRIPTOR' : _COMPONENTSENSORDATA,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ComponentSensorData)
-  ))
+  })
 _sym_db.RegisterMessage(ComponentSensorData)
 
-Component = _reflection.GeneratedProtocolMessageType('Component', (_message.Message,), dict(
-  DESCRIPTOR = _COMPONENT,
-  __module__ = 'dmi.hw_pb2'
+Component = _reflection.GeneratedProtocolMessageType('Component', (_message.Message,), {
+  'DESCRIPTOR' : _COMPONENT,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.Component)
-  ))
+  })
 _sym_db.RegisterMessage(Component)
 
-Hardware = _reflection.GeneratedProtocolMessageType('Hardware', (_message.Message,), dict(
-  DESCRIPTOR = _HARDWARE,
-  __module__ = 'dmi.hw_pb2'
+Hardware = _reflection.GeneratedProtocolMessageType('Hardware', (_message.Message,), {
+  'DESCRIPTOR' : _HARDWARE,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.Hardware)
-  ))
+  })
 _sym_db.RegisterMessage(Hardware)
 
-ModifiableComponent = _reflection.GeneratedProtocolMessageType('ModifiableComponent', (_message.Message,), dict(
-  DESCRIPTOR = _MODIFIABLECOMPONENT,
-  __module__ = 'dmi.hw_pb2'
+ModifiableComponent = _reflection.GeneratedProtocolMessageType('ModifiableComponent', (_message.Message,), {
+  'DESCRIPTOR' : _MODIFIABLECOMPONENT,
+  '__module__' : 'dmi.hw_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ModifiableComponent)
-  ))
+  })
 _sym_db.RegisterMessage(ModifiableComponent)
 
 
diff --git a/python/dmi/hw_pb2_grpc.py b/python/dmi/hw_pb2_grpc.py
new file mode 100644
index 0000000..2daafff
--- /dev/null
+++ b/python/dmi/hw_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/python/dmi/sw_image_pb2.py b/python/dmi/sw_image_pb2.py
index 8a4497e..ffe3b09 100644
--- a/python/dmi/sw_image_pb2.py
+++ b/python/dmi/sw_image_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: dmi/sw_image.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -20,8 +18,9 @@
   name='dmi/sw_image.proto',
   package='dmi',
   syntax='proto3',
-  serialized_options=_b('Z9github.com/opencord/device-management-interface/v3/go/dmi'),
-  serialized_pb=_b('\n\x12\x64mi/sw_image.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\"3\n\x0cImageVersion\x12\x12\n\nimage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"x\n\x10ImageInformation\x12 \n\x05image\x18\x01 \x01(\x0b\x32\x11.dmi.ImageVersion\x12\x1c\n\x14image_install_script\x18\x02 \x01(\t\x12\x11\n\timage_url\x18\x03 \x01(\t\x12\x11\n\tsha256sum\x18\x05 \x01(\t\"\xf9\x03\n\x0bImageStatus\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\'\n\x06reason\x18\x02 \x01(\x0e\x32\x17.dmi.ImageStatus.Reason\x12*\n\x05state\x18\x03 \x01(\x0e\x32\x1b.dmi.ImageStatus.ImageState\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\"\xcf\x01\n\nImageState\x12\x13\n\x0fUNDEFINED_STATE\x10\x00\x12\x11\n\rCOPYING_IMAGE\x10\x01\x12\x14\n\x10INSTALLING_IMAGE\x10\x02\x12\x13\n\x0f\x43OMMITING_IMAGE\x10\x03\x12\x14\n\x10REBOOTING_DEVICE\x10\x04\x12\x14\n\x10UPGRADE_COMPLETE\x10\x05\x12\x12\n\x0eUPGRADE_FAILED\x10\x06\x12\x17\n\x13\x41\x43TIVATION_COMPLETE\x10\x07\x12\x15\n\x11\x41\x43TIVATION_FAILED\x10\x08\"\x90\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x14\n\x10\x45RROR_IN_REQUEST\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x19\n\x15\x44\x45VICE_IN_WRONG_STATE\x10\x03\x12\x11\n\rINVALID_IMAGE\x10\x04\x12\x18\n\x14WRONG_IMAGE_CHECKSUM\x10\x05\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')
+  serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n\x12\x64mi/sw_image.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\"3\n\x0cImageVersion\x12\x12\n\nimage_name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"x\n\x10ImageInformation\x12 \n\x05image\x18\x01 \x01(\x0b\x32\x11.dmi.ImageVersion\x12\x1c\n\x14image_install_script\x18\x02 \x01(\t\x12\x11\n\timage_url\x18\x03 \x01(\t\x12\x11\n\tsha256sum\x18\x05 \x01(\t\"\xf9\x03\n\x0bImageStatus\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\'\n\x06reason\x18\x02 \x01(\x0e\x32\x17.dmi.ImageStatus.Reason\x12*\n\x05state\x18\x03 \x01(\x0e\x32\x1b.dmi.ImageStatus.ImageState\x12\x13\n\x0b\x64\x65scription\x18\x04 \x01(\t\"\xcf\x01\n\nImageState\x12\x13\n\x0fUNDEFINED_STATE\x10\x00\x12\x11\n\rCOPYING_IMAGE\x10\x01\x12\x14\n\x10INSTALLING_IMAGE\x10\x02\x12\x13\n\x0f\x43OMMITING_IMAGE\x10\x03\x12\x14\n\x10REBOOTING_DEVICE\x10\x04\x12\x14\n\x10UPGRADE_COMPLETE\x10\x05\x12\x12\n\x0eUPGRADE_FAILED\x10\x06\x12\x17\n\x13\x41\x43TIVATION_COMPLETE\x10\x07\x12\x15\n\x11\x41\x43TIVATION_FAILED\x10\x08\"\x90\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x14\n\x10\x45RROR_IN_REQUEST\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x19\n\x15\x44\x45VICE_IN_WRONG_STATE\x10\x03\x12\x11\n\rINVALID_IMAGE\x10\x04\x12\x18\n\x14WRONG_IMAGE_CHECKSUM\x10\x05\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,])
 
@@ -32,43 +31,53 @@
   full_name='dmi.ImageStatus.ImageState',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='UNDEFINED_STATE', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COPYING_IMAGE', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='INSTALLING_IMAGE', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='COMMITING_IMAGE', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='REBOOTING_DEVICE', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='UPGRADE_COMPLETE', index=5, number=5,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='UPGRADE_FAILED', index=6, number=6,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='ACTIVATION_COMPLETE', index=7, number=7,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='ACTIVATION_FAILED', index=8, number=8,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -82,31 +91,38 @@
   full_name='dmi.ImageStatus.Reason',
   filename=None,
   file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
   values=[
     _descriptor.EnumValueDescriptor(
       name='UNDEFINED_REASON', index=0, number=0,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='ERROR_IN_REQUEST', index=1, number=1,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='INTERNAL_ERROR', index=2, number=2,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='DEVICE_IN_WRONG_STATE', index=3, number=3,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='INVALID_IMAGE', index=4, number=4,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
       name='WRONG_IMAGE_CHECKSUM', index=5, number=5,
       serialized_options=None,
-      type=None),
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
@@ -122,21 +138,22 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='image_name', full_name='dmi.ImageVersion.image_name', index=0,
       number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='version', full_name='dmi.ImageVersion.version', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -160,6 +177,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='image', full_name='dmi.ImageInformation.image', index=0,
@@ -167,28 +185,28 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='image_install_script', full_name='dmi.ImageInformation.image_install_script', index=1,
       number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='image_url', full_name='dmi.ImageInformation.image_url', index=2,
       number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='sha256sum', full_name='dmi.ImageInformation.sha256sum', index=3,
       number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -212,6 +230,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='status', full_name='dmi.ImageStatus.status', index=0,
@@ -219,28 +238,28 @@
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='reason', full_name='dmi.ImageStatus.reason', index=1,
       number=2, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='state', full_name='dmi.ImageStatus.state', index=2,
       number=3, type=14, cpp_type=8, label=1,
       has_default_value=False, default_value=0,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='description', full_name='dmi.ImageStatus.description', index=3,
       number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
+      has_default_value=False, default_value=b"".decode('utf-8'),
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -270,25 +289,25 @@
 DESCRIPTOR.message_types_by_name['ImageStatus'] = _IMAGESTATUS
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-ImageVersion = _reflection.GeneratedProtocolMessageType('ImageVersion', (_message.Message,), dict(
-  DESCRIPTOR = _IMAGEVERSION,
-  __module__ = 'dmi.sw_image_pb2'
+ImageVersion = _reflection.GeneratedProtocolMessageType('ImageVersion', (_message.Message,), {
+  'DESCRIPTOR' : _IMAGEVERSION,
+  '__module__' : 'dmi.sw_image_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ImageVersion)
-  ))
+  })
 _sym_db.RegisterMessage(ImageVersion)
 
-ImageInformation = _reflection.GeneratedProtocolMessageType('ImageInformation', (_message.Message,), dict(
-  DESCRIPTOR = _IMAGEINFORMATION,
-  __module__ = 'dmi.sw_image_pb2'
+ImageInformation = _reflection.GeneratedProtocolMessageType('ImageInformation', (_message.Message,), {
+  'DESCRIPTOR' : _IMAGEINFORMATION,
+  '__module__' : 'dmi.sw_image_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ImageInformation)
-  ))
+  })
 _sym_db.RegisterMessage(ImageInformation)
 
-ImageStatus = _reflection.GeneratedProtocolMessageType('ImageStatus', (_message.Message,), dict(
-  DESCRIPTOR = _IMAGESTATUS,
-  __module__ = 'dmi.sw_image_pb2'
+ImageStatus = _reflection.GeneratedProtocolMessageType('ImageStatus', (_message.Message,), {
+  'DESCRIPTOR' : _IMAGESTATUS,
+  '__module__' : 'dmi.sw_image_pb2'
   # @@protoc_insertion_point(class_scope:dmi.ImageStatus)
-  ))
+  })
 _sym_db.RegisterMessage(ImageStatus)
 
 
diff --git a/python/dmi/sw_image_pb2_grpc.py b/python/dmi/sw_image_pb2_grpc.py
new file mode 100644
index 0000000..2daafff
--- /dev/null
+++ b/python/dmi/sw_image_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/python/dmi/sw_management_service_pb2.py b/python/dmi/sw_management_service_pb2.py
index d9637b6..f3aadee 100644
--- a/python/dmi/sw_management_service_pb2.py
+++ b/python/dmi/sw_management_service_pb2.py
@@ -2,8 +2,6 @@
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: dmi/sw_management_service.proto
 
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
 from google.protobuf import descriptor as _descriptor
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
@@ -21,8 +19,9 @@
   name='dmi/sw_management_service.proto',
   package='dmi',
   syntax='proto3',
-  serialized_options=_b('Z9github.com/opencord/device-management-interface/v3/go/dmi'),
-  serialized_pb=_b('\n\x1f\x64mi/sw_management_service.proto\x12\x03\x64mi\x1a\x0c\x64mi/hw.proto\x1a\x12\x64mi/sw_image.proto\"u\n\x1aSoftwareVersionInformation\x12*\n\x0f\x61\x63tive_versions\x18\x01 \x03(\x0b\x32\x11.dmi.ImageVersion\x12+\n\x10standby_versions\x18\x02 \x03(\x0b\x32\x11.dmi.ImageVersion\"a\n\x14\x44ownloadImageRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12)\n\nimage_info\x18\x02 \x01(\x0b\x32\x15.dmi.ImageInformation2\x9c\x02\n\x1fNativeSoftwareManagementService\x12\x46\n\x12GetSoftwareVersion\x12\x0f.dmi.HardwareID\x1a\x1f.dmi.SoftwareVersionInformation\x12>\n\rDownloadImage\x12\x19.dmi.DownloadImageRequest\x1a\x10.dmi.ImageStatus0\x01\x12\x34\n\rActivateImage\x12\x0f.dmi.HardwareID\x1a\x10.dmi.ImageStatus0\x01\x12;\n\x14RevertToStandbyImage\x12\x0f.dmi.HardwareID\x1a\x10.dmi.ImageStatus0\x01\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3')
+  serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
+  create_key=_descriptor._internal_create_key,
+  serialized_pb=b'\n\x1f\x64mi/sw_management_service.proto\x12\x03\x64mi\x1a\x0c\x64mi/hw.proto\x1a\x12\x64mi/sw_image.proto\"u\n\x1aSoftwareVersionInformation\x12*\n\x0f\x61\x63tive_versions\x18\x01 \x03(\x0b\x32\x11.dmi.ImageVersion\x12+\n\x10standby_versions\x18\x02 \x03(\x0b\x32\x11.dmi.ImageVersion\"a\n\x14\x44ownloadImageRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12)\n\nimage_info\x18\x02 \x01(\x0b\x32\x15.dmi.ImageInformation2\x9c\x02\n\x1fNativeSoftwareManagementService\x12\x46\n\x12GetSoftwareVersion\x12\x0f.dmi.HardwareID\x1a\x1f.dmi.SoftwareVersionInformation\x12>\n\rDownloadImage\x12\x19.dmi.DownloadImageRequest\x1a\x10.dmi.ImageStatus0\x01\x12\x34\n\rActivateImage\x12\x0f.dmi.HardwareID\x1a\x10.dmi.ImageStatus0\x01\x12;\n\x14RevertToStandbyImage\x12\x0f.dmi.HardwareID\x1a\x10.dmi.ImageStatus0\x01\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[dmi_dot_hw__pb2.DESCRIPTOR,dmi_dot_sw__image__pb2.DESCRIPTOR,])
 
@@ -35,6 +34,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='active_versions', full_name='dmi.SoftwareVersionInformation.active_versions', index=0,
@@ -42,14 +42,14 @@
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='standby_versions', full_name='dmi.SoftwareVersionInformation.standby_versions', index=1,
       number=2, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -73,6 +73,7 @@
   filename=None,
   file=DESCRIPTOR,
   containing_type=None,
+  create_key=_descriptor._internal_create_key,
   fields=[
     _descriptor.FieldDescriptor(
       name='device_uuid', full_name='dmi.DownloadImageRequest.device_uuid', index=0,
@@ -80,14 +81,14 @@
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
     _descriptor.FieldDescriptor(
       name='image_info', full_name='dmi.DownloadImageRequest.image_info', index=1,
       number=2, type=11, cpp_type=10, label=1,
       has_default_value=False, default_value=None,
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
   ],
   extensions=[
   ],
@@ -112,18 +113,18 @@
 DESCRIPTOR.message_types_by_name['DownloadImageRequest'] = _DOWNLOADIMAGEREQUEST
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
-SoftwareVersionInformation = _reflection.GeneratedProtocolMessageType('SoftwareVersionInformation', (_message.Message,), dict(
-  DESCRIPTOR = _SOFTWAREVERSIONINFORMATION,
-  __module__ = 'dmi.sw_management_service_pb2'
+SoftwareVersionInformation = _reflection.GeneratedProtocolMessageType('SoftwareVersionInformation', (_message.Message,), {
+  'DESCRIPTOR' : _SOFTWAREVERSIONINFORMATION,
+  '__module__' : 'dmi.sw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.SoftwareVersionInformation)
-  ))
+  })
 _sym_db.RegisterMessage(SoftwareVersionInformation)
 
-DownloadImageRequest = _reflection.GeneratedProtocolMessageType('DownloadImageRequest', (_message.Message,), dict(
-  DESCRIPTOR = _DOWNLOADIMAGEREQUEST,
-  __module__ = 'dmi.sw_management_service_pb2'
+DownloadImageRequest = _reflection.GeneratedProtocolMessageType('DownloadImageRequest', (_message.Message,), {
+  'DESCRIPTOR' : _DOWNLOADIMAGEREQUEST,
+  '__module__' : 'dmi.sw_management_service_pb2'
   # @@protoc_insertion_point(class_scope:dmi.DownloadImageRequest)
-  ))
+  })
 _sym_db.RegisterMessage(DownloadImageRequest)
 
 
@@ -135,6 +136,7 @@
   file=DESCRIPTOR,
   index=0,
   serialized_options=None,
+  create_key=_descriptor._internal_create_key,
   serialized_start=293,
   serialized_end=577,
   methods=[
@@ -146,6 +148,7 @@
     input_type=dmi_dot_hw__pb2._HARDWAREID,
     output_type=_SOFTWAREVERSIONINFORMATION,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='DownloadImage',
@@ -155,6 +158,7 @@
     input_type=_DOWNLOADIMAGEREQUEST,
     output_type=dmi_dot_sw__image__pb2._IMAGESTATUS,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='ActivateImage',
@@ -164,6 +168,7 @@
     input_type=dmi_dot_hw__pb2._HARDWAREID,
     output_type=dmi_dot_sw__image__pb2._IMAGESTATUS,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
   _descriptor.MethodDescriptor(
     name='RevertToStandbyImage',
@@ -173,6 +178,7 @@
     input_type=dmi_dot_hw__pb2._HARDWAREID,
     output_type=dmi_dot_sw__image__pb2._IMAGESTATUS,
     serialized_options=None,
+    create_key=_descriptor._internal_create_key,
   ),
 ])
 _sym_db.RegisterServiceDescriptor(_NATIVESOFTWAREMANAGEMENTSERVICE)
diff --git a/python/dmi/sw_management_service_pb2_grpc.py b/python/dmi/sw_management_service_pb2_grpc.py
new file mode 100644
index 0000000..dad1652
--- /dev/null
+++ b/python/dmi/sw_management_service_pb2_grpc.py
@@ -0,0 +1,174 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+from dmi import sw_image_pb2 as dmi_dot_sw__image__pb2
+from dmi import sw_management_service_pb2 as dmi_dot_sw__management__service__pb2
+
+
+class NativeSoftwareManagementServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.GetSoftwareVersion = channel.unary_unary(
+                '/dmi.NativeSoftwareManagementService/GetSoftwareVersion',
+                request_serializer=dmi_dot_hw__pb2.HardwareID.SerializeToString,
+                response_deserializer=dmi_dot_sw__management__service__pb2.SoftwareVersionInformation.FromString,
+                )
+        self.DownloadImage = channel.unary_stream(
+                '/dmi.NativeSoftwareManagementService/DownloadImage',
+                request_serializer=dmi_dot_sw__management__service__pb2.DownloadImageRequest.SerializeToString,
+                response_deserializer=dmi_dot_sw__image__pb2.ImageStatus.FromString,
+                )
+        self.ActivateImage = channel.unary_stream(
+                '/dmi.NativeSoftwareManagementService/ActivateImage',
+                request_serializer=dmi_dot_hw__pb2.HardwareID.SerializeToString,
+                response_deserializer=dmi_dot_sw__image__pb2.ImageStatus.FromString,
+                )
+        self.RevertToStandbyImage = channel.unary_stream(
+                '/dmi.NativeSoftwareManagementService/RevertToStandbyImage',
+                request_serializer=dmi_dot_hw__pb2.HardwareID.SerializeToString,
+                response_deserializer=dmi_dot_sw__image__pb2.ImageStatus.FromString,
+                )
+
+
+class NativeSoftwareManagementServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def GetSoftwareVersion(self, request, context):
+        """Get the software version information of the Active and Standby images

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def DownloadImage(self, request, context):
+        """Downloads and installs the image in the standby partition, returns the status/progress of the Install

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def ActivateImage(self, request, context):
+        """Activates and runs the OLT with the image in the standby partition. If things are fine this image will

+        henceforth be marked as the Active Partition. The old working image would remain on the Standby partition.

+        Any possibly required (sub-)steps like "commit" are left to the "Device Manager"

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def RevertToStandbyImage(self, request, context):
+        """Marks the image in the Standby as Active and reboots the device, so that it boots from that image which was in the standby.

+        This API is to be used if operator wants to go back to the pervious software

+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_NativeSoftwareManagementServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'GetSoftwareVersion': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetSoftwareVersion,
+                    request_deserializer=dmi_dot_hw__pb2.HardwareID.FromString,
+                    response_serializer=dmi_dot_sw__management__service__pb2.SoftwareVersionInformation.SerializeToString,
+            ),
+            'DownloadImage': grpc.unary_stream_rpc_method_handler(
+                    servicer.DownloadImage,
+                    request_deserializer=dmi_dot_sw__management__service__pb2.DownloadImageRequest.FromString,
+                    response_serializer=dmi_dot_sw__image__pb2.ImageStatus.SerializeToString,
+            ),
+            'ActivateImage': grpc.unary_stream_rpc_method_handler(
+                    servicer.ActivateImage,
+                    request_deserializer=dmi_dot_hw__pb2.HardwareID.FromString,
+                    response_serializer=dmi_dot_sw__image__pb2.ImageStatus.SerializeToString,
+            ),
+            'RevertToStandbyImage': grpc.unary_stream_rpc_method_handler(
+                    servicer.RevertToStandbyImage,
+                    request_deserializer=dmi_dot_hw__pb2.HardwareID.FromString,
+                    response_serializer=dmi_dot_sw__image__pb2.ImageStatus.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'dmi.NativeSoftwareManagementService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class NativeSoftwareManagementService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def GetSoftwareVersion(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeSoftwareManagementService/GetSoftwareVersion',
+            dmi_dot_hw__pb2.HardwareID.SerializeToString,
+            dmi_dot_sw__management__service__pb2.SoftwareVersionInformation.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def DownloadImage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/dmi.NativeSoftwareManagementService/DownloadImage',
+            dmi_dot_sw__management__service__pb2.DownloadImageRequest.SerializeToString,
+            dmi_dot_sw__image__pb2.ImageStatus.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def ActivateImage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/dmi.NativeSoftwareManagementService/ActivateImage',
+            dmi_dot_hw__pb2.HardwareID.SerializeToString,
+            dmi_dot_sw__image__pb2.ImageStatus.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def RevertToStandbyImage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_stream(request, target, '/dmi.NativeSoftwareManagementService/RevertToStandbyImage',
+            dmi_dot_hw__pb2.HardwareID.SerializeToString,
+            dmi_dot_sw__image__pb2.ImageStatus.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/test/test-python-proto-consistency.sh b/test/test-python-proto-consistency.sh
index b938b01..27e6f15 100755
--- a/test/test-python-proto-consistency.sh
+++ b/test/test-python-proto-consistency.sh
@@ -33,7 +33,7 @@
 fi
 
 # delete and regenerate python protos
-rm -rf python/dmi.pb2 python/*/*.pb2.py python_temp
+rm -rf python/dmi/*
 make python-protos
 
 # Running git status ensures correct git diff-index picks up changes