generate python proto files, third trial ;)
add test for generated python files

Signed-off-by: uwe ottrembka <uwe.ottrembka@adtran.com>
Change-Id: Id336c263bbc9420bd4c64093ab37ba6da5c77514
diff --git a/.gitignore b/.gitignore
index f265739..8eeec50 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,7 +14,7 @@
 java
 
 # generated files that shouldn't be committed
-*_pb2.py
+#*_pb2.py
 *_pb2_grpc.py
 *.desc
 
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..ceeea23
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1 @@
+include VERSION
diff --git a/Makefile b/Makefile
index f838eae..ef88b66 100644
--- a/Makefile
+++ b/Makefile
@@ -25,35 +25,51 @@
 PROTOC_SH = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/go/src/github.com/opencord/device-management-interface/v3 $(shell test -t 0 && echo "-it") --workdir=/go/src/github.com/opencord/device-management-interface/v3 voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-protoc sh -c
 GO        = docker run --rm --user $$(id -u):$$(id -g) -v ${CURDIR}:/app $(shell test -t 0 && echo "-it") -v gocache:/.cache -v gocache-${VOLTHA_TOOLS_VERSION}:/go/pkg voltha/voltha-ci-tools:${VOLTHA_TOOLS_VERSION}-golang go
 
-# Function to extract the last path component from go_package line in .proto files
-define go_package_path
-$(shell grep go_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
+# Function to extract the last path component from package line in .proto files
+define if_package_path
+$(shell grep if_package $(1) | sed -n 's/.*\/\(.*\)";/\1/p')
 endef
 
 # Variables
 PROTO_FILES := $(sort $(wildcard protos/dmi/*.proto))
 
 PROTO_GO_DEST_DIR := go
-PROTO_GO_PB:= $(foreach f, $(PROTO_FILES), $(patsubst protos/dmi/%.proto,$(PROTO_GO_DEST_DIR)/$(call go_package_path,$(f))/%.pb.go,$(f)))
+PROTO_GO_PB:= $(foreach f, $(PROTO_FILES), $(patsubst protos/dmi/%.proto,$(PROTO_GO_DEST_DIR)/$(call if_package_path,$(f))/%.pb.go,$(f)))
+
+PROTO_PYTHON_DEST_DIR := python
+PROTO_PYTHON_PB:= $(foreach f, $(PROTO_FILES), $(patsubst protos/dmi/%.proto,$(PROTO_PYTHON_DEST_DIR)/$(call if_package_path,$(f))/%.pb2.py,$(f)))
+
 # Force pb file to be regenrated every time.  Otherwise the make process assumes generated version is still valid
 .PHONY: dmi.pb
 
 print:
 	@echo "Proto files: $(PROTO_FILES)"
 	@echo "Go PB files: $(PROTO_GO_PB)"
+	@echo "python PB files: $(PROTO_PYTHON_PB)"
 
 # Generic targets
 protos: go-protos
 
 build: protos
 
-test: go-test
+test: go-test python-test
+
 
 venv_protos:
 	virtualenv -p python3 $@;\
 	source ./$@/bin/activate ; set -u ;\
 	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"
+
 # Go targets
 go-protos: dmi.pb
 	@echo "Creating *.go.pb files"
@@ -74,3 +90,7 @@
 go-test:
 	test/test-go-proto-consistency.sh
 	${GO} mod verify
+
+python-test: tox.ini
+	test/test-python-proto-consistency.sh
+	tox 
diff --git a/python/dmi/commons_pb2.py b/python/dmi/commons_pb2.py
new file mode 100644
index 0000000..98fce54
--- /dev/null
+++ b/python/dmi/commons_pb2.py
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+# 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
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  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')
+)
+
+_STATUS = _descriptor.EnumDescriptor(
+  name='Status',
+  full_name='dmi.Status',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='UNDEFINED_STATUS', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='OK', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='ERROR', index=2, number=2,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=26,
+  serialized_end=75,
+)
+_sym_db.RegisterEnumDescriptor(_STATUS)
+
+Status = enum_type_wrapper.EnumTypeWrapper(_STATUS)
+_REASON = _descriptor.EnumDescriptor(
+  name='Reason',
+  full_name='dmi.Reason',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='UNDEFINED_REASON', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='UNKNOWN_DEVICE', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='INTERNAL_ERROR', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='WRONG_METRIC', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='WRONG_EVENT', index=4, number=4,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=77,
+  serialized_end=182,
+)
+_sym_db.RegisterEnumDescriptor(_REASON)
+
+Reason = enum_type_wrapper.EnumTypeWrapper(_REASON)
+UNDEFINED_STATUS = 0
+OK = 1
+ERROR = 2
+UNDEFINED_REASON = 0
+UNKNOWN_DEVICE = 1
+INTERNAL_ERROR = 2
+WRONG_METRIC = 3
+WRONG_EVENT = 4
+
+
+DESCRIPTOR.enum_types_by_name['Status'] = _STATUS
+DESCRIPTOR.enum_types_by_name['Reason'] = _REASON
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+
+DESCRIPTOR._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/python/dmi/hw_events_mgmt_service_pb2.py b/python/dmi/hw_events_mgmt_service_pb2.py
new file mode 100644
index 0000000..ae1c493
--- /dev/null
+++ b/python/dmi/hw_events_mgmt_service_pb2.py
@@ -0,0 +1,903 @@
+# -*- coding: utf-8 -*-
+# 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
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from dmi import commons_pb2 as dmi_dot_commons__pb2
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  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')
+  ,
+  dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,dmi_dot_hw__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
+
+_EVENTIDS = _descriptor.EnumDescriptor(
+  name='EventIds',
+  full_name='dmi.EventIds',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_NAME_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_PLUG_OUT', index=1, number=100,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_PLUG_IN', index=2, number=101,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD', index=3, number=102,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD', index=4, number=103,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD', index=5, number=104,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD', index=6, number=105,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD', index=7, number=106,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD', index=8, number=107,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD', index=9, number=108,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD', index=10, number=109,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD', index=11, number=110,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD', index=12, number=111,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_FAILURE', index=13, number=112,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED', index=14, number=113,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED', index=15, number=114,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED', index=16, number=115,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED', index=17, number=116,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED', index=18, number=117,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED', index=19, number=118,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED', index=20, number=119,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED', index=21, number=120,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED', index=22, number=121,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED', index=23, number=122,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_TRANSCEIVER_FAILURE_RECOVERED', index=24, number=123,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_PSU_PLUG_OUT', index=25, number=200,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_PSU_PLUG_IN', index=26, number=201,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_PSU_FAILURE', index=27, number=202,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_PSU_FAILURE_RECOVERED', index=28, number=203,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_FAN_FAILURE', index=29, number=300,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_FAN_PLUG_OUT', index=30, number=301,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_FAN_PLUG_IN', index=31, number=302,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_FAN_FAILURE_RECOVERED', index=32, number=303,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL', index=33, number=400,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_CPU_TEMPERATURE_ABOVE_FATAL', index=34, number=401,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED', index=35, number=402,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED', index=36, number=403,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_HW_DEVICE_RESET', index=37, number=500,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL', index=38, number=501,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL', index=39, number=502,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED', index=40, number=503,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED', index=41, number=504,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=1256,
+  serialized_end=3129,
+)
+_sym_db.RegisterEnumDescriptor(_EVENTIDS)
+
+EventIds = enum_type_wrapper.EnumTypeWrapper(_EVENTIDS)
+EVENT_NAME_UNDEFINED = 0
+EVENT_TRANSCEIVER_PLUG_OUT = 100
+EVENT_TRANSCEIVER_PLUG_IN = 101
+EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD = 102
+EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD = 103
+EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD = 104
+EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD = 105
+EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD = 106
+EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD = 107
+EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD = 108
+EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD = 109
+EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD = 110
+EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD = 111
+EVENT_TRANSCEIVER_FAILURE = 112
+EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED = 113
+EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED = 114
+EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED = 115
+EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED = 116
+EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED = 117
+EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED = 118
+EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED = 119
+EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED = 120
+EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED = 121
+EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED = 122
+EVENT_TRANSCEIVER_FAILURE_RECOVERED = 123
+EVENT_PSU_PLUG_OUT = 200
+EVENT_PSU_PLUG_IN = 201
+EVENT_PSU_FAILURE = 202
+EVENT_PSU_FAILURE_RECOVERED = 203
+EVENT_FAN_FAILURE = 300
+EVENT_FAN_PLUG_OUT = 301
+EVENT_FAN_PLUG_IN = 302
+EVENT_FAN_FAILURE_RECOVERED = 303
+EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL = 400
+EVENT_CPU_TEMPERATURE_ABOVE_FATAL = 401
+EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED = 402
+EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED = 403
+EVENT_HW_DEVICE_RESET = 500
+EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL = 501
+EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL = 502
+EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED = 503
+EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED = 504
+
+
+
+_VALUETYPE = _descriptor.Descriptor(
+  name='ValueType',
+  full_name='dmi.ValueType',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='int_val', full_name='dmi.ValueType.int_val', index=0,
+      number=1, type=3, cpp_type=2, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+    _descriptor.OneofDescriptor(
+      name='val', full_name='dmi.ValueType.val',
+      index=0, containing_type=None, fields=[]),
+  ],
+  serialized_start=107,
+  serialized_end=185,
+)
+
+
+_WATERMARKS = _descriptor.Descriptor(
+  name='WaterMarks',
+  full_name='dmi.WaterMarks',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='high', full_name='dmi.WaterMarks.high', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=187,
+  serialized_end=258,
+)
+
+
+_THRESHOLDS = _descriptor.Descriptor(
+  name='Thresholds',
+  full_name='dmi.Thresholds',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='upper', full_name='dmi.Thresholds.upper', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+    _descriptor.OneofDescriptor(
+      name='threshold', full_name='dmi.Thresholds.threshold',
+      index=0, containing_type=None, fields=[]),
+  ],
+  serialized_start=260,
+  serialized_end=353,
+)
+
+
+_THRESHOLDINFORMATION = _descriptor.Descriptor(
+  name='ThresholdInformation',
+  full_name='dmi.ThresholdInformation',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='observed_value', full_name='dmi.ThresholdInformation.observed_value', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=355,
+  serialized_end=454,
+)
+
+
+_EVENTCFG = _descriptor.Descriptor(
+  name='EventCfg',
+  full_name='dmi.EventCfg',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='event_id', full_name='dmi.EventCfg.event_id', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=456,
+  serialized_end=559,
+)
+
+
+_EVENTSCFG = _descriptor.Descriptor(
+  name='EventsCfg',
+  full_name='dmi.EventsCfg',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='items', full_name='dmi.EventsCfg.items', index=0,
+      number=1, 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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=561,
+  serialized_end=602,
+)
+
+
+_LISTEVENTSRESPONSE = _descriptor.Descriptor(
+  name='ListEventsResponse',
+  full_name='dmi.ListEventsResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.ListEventsResponse.status', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=604,
+  serialized_end=714,
+)
+
+
+_EVENTSCONFIGURATIONREQUEST = _descriptor.Descriptor(
+  name='EventsConfigurationRequest',
+  full_name='dmi.EventsConfigurationRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.EventsConfigurationRequest.device_uuid', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+    _descriptor.OneofDescriptor(
+      name='operation', full_name='dmi.EventsConfigurationRequest.operation',
+      index=0, containing_type=None, fields=[]),
+  ],
+  serialized_start=717,
+  serialized_end=853,
+)
+
+
+_EVENTSCONFIGURATIONRESPONSE = _descriptor.Descriptor(
+  name='EventsConfigurationResponse',
+  full_name='dmi.EventsConfigurationResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.EventsConfigurationResponse.status', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=855,
+  serialized_end=942,
+)
+
+
+_EVENTMETADATA = _descriptor.Descriptor(
+  name='EventMetaData',
+  full_name='dmi.EventMetaData',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.EventMetaData.device_uuid', index=0,
+      number=1, 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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=944,
+  serialized_end=1050,
+)
+
+
+_EVENT = _descriptor.Descriptor(
+  name='Event',
+  full_name='dmi.Event',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='event_metadata', full_name='dmi.Event.event_metadata', index=0,
+      number=1, 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),
+    _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),
+    _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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1053,
+  serialized_end=1253,
+)
+
+_VALUETYPE.oneofs_by_name['val'].fields.append(
+  _VALUETYPE.fields_by_name['int_val'])
+_VALUETYPE.fields_by_name['int_val'].containing_oneof = _VALUETYPE.oneofs_by_name['val']
+_VALUETYPE.oneofs_by_name['val'].fields.append(
+  _VALUETYPE.fields_by_name['uint_val'])
+_VALUETYPE.fields_by_name['uint_val'].containing_oneof = _VALUETYPE.oneofs_by_name['val']
+_VALUETYPE.oneofs_by_name['val'].fields.append(
+  _VALUETYPE.fields_by_name['float_val'])
+_VALUETYPE.fields_by_name['float_val'].containing_oneof = _VALUETYPE.oneofs_by_name['val']
+_WATERMARKS.fields_by_name['high'].message_type = _VALUETYPE
+_WATERMARKS.fields_by_name['low'].message_type = _VALUETYPE
+_THRESHOLDS.fields_by_name['upper'].message_type = _WATERMARKS
+_THRESHOLDS.fields_by_name['lower'].message_type = _WATERMARKS
+_THRESHOLDS.oneofs_by_name['threshold'].fields.append(
+  _THRESHOLDS.fields_by_name['upper'])
+_THRESHOLDS.fields_by_name['upper'].containing_oneof = _THRESHOLDS.oneofs_by_name['threshold']
+_THRESHOLDS.oneofs_by_name['threshold'].fields.append(
+  _THRESHOLDS.fields_by_name['lower'])
+_THRESHOLDS.fields_by_name['lower'].containing_oneof = _THRESHOLDS.oneofs_by_name['threshold']
+_THRESHOLDINFORMATION.fields_by_name['observed_value'].message_type = _VALUETYPE
+_THRESHOLDINFORMATION.fields_by_name['thresholds'].message_type = _THRESHOLDS
+_EVENTCFG.fields_by_name['event_id'].enum_type = _EVENTIDS
+_EVENTCFG.fields_by_name['thresholds'].message_type = _THRESHOLDS
+_EVENTSCFG.fields_by_name['items'].message_type = _EVENTCFG
+_LISTEVENTSRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_LISTEVENTSRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_LISTEVENTSRESPONSE.fields_by_name['events'].message_type = _EVENTSCFG
+_EVENTSCONFIGURATIONREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_EVENTSCONFIGURATIONREQUEST.fields_by_name['changes'].message_type = _EVENTSCFG
+_EVENTSCONFIGURATIONREQUEST.oneofs_by_name['operation'].fields.append(
+  _EVENTSCONFIGURATIONREQUEST.fields_by_name['changes'])
+_EVENTSCONFIGURATIONREQUEST.fields_by_name['changes'].containing_oneof = _EVENTSCONFIGURATIONREQUEST.oneofs_by_name['operation']
+_EVENTSCONFIGURATIONREQUEST.oneofs_by_name['operation'].fields.append(
+  _EVENTSCONFIGURATIONREQUEST.fields_by_name['reset_to_default'])
+_EVENTSCONFIGURATIONREQUEST.fields_by_name['reset_to_default'].containing_oneof = _EVENTSCONFIGURATIONREQUEST.oneofs_by_name['operation']
+_EVENTSCONFIGURATIONRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_EVENTSCONFIGURATIONRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_EVENTMETADATA.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_EVENTMETADATA.fields_by_name['component_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_EVENT.fields_by_name['event_metadata'].message_type = _EVENTMETADATA
+_EVENT.fields_by_name['event_id'].enum_type = _EVENTIDS
+_EVENT.fields_by_name['raised_ts'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_EVENT.fields_by_name['threshold_info'].message_type = _THRESHOLDINFORMATION
+DESCRIPTOR.message_types_by_name['ValueType'] = _VALUETYPE
+DESCRIPTOR.message_types_by_name['WaterMarks'] = _WATERMARKS
+DESCRIPTOR.message_types_by_name['Thresholds'] = _THRESHOLDS
+DESCRIPTOR.message_types_by_name['ThresholdInformation'] = _THRESHOLDINFORMATION
+DESCRIPTOR.message_types_by_name['EventCfg'] = _EVENTCFG
+DESCRIPTOR.message_types_by_name['EventsCfg'] = _EVENTSCFG
+DESCRIPTOR.message_types_by_name['ListEventsResponse'] = _LISTEVENTSRESPONSE
+DESCRIPTOR.message_types_by_name['EventsConfigurationRequest'] = _EVENTSCONFIGURATIONREQUEST
+DESCRIPTOR.message_types_by_name['EventsConfigurationResponse'] = _EVENTSCONFIGURATIONRESPONSE
+DESCRIPTOR.message_types_by_name['EventMetaData'] = _EVENTMETADATA
+DESCRIPTOR.message_types_by_name['Event'] = _EVENT
+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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@protoc_insertion_point(class_scope:dmi.Event)
+  ))
+_sym_db.RegisterMessage(Event)
+
+
+DESCRIPTOR._options = None
+
+_NATIVEEVENTSMANAGEMENTSERVICE = _descriptor.ServiceDescriptor(
+  name='NativeEventsManagementService',
+  full_name='dmi.NativeEventsManagementService',
+  file=DESCRIPTOR,
+  index=0,
+  serialized_options=None,
+  serialized_start=3132,
+  serialized_end=3315,
+  methods=[
+  _descriptor.MethodDescriptor(
+    name='ListEvents',
+    full_name='dmi.NativeEventsManagementService.ListEvents',
+    index=0,
+    containing_service=None,
+    input_type=dmi_dot_hw__pb2._HARDWAREID,
+    output_type=_LISTEVENTSRESPONSE,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='UpdateEventsConfiguration',
+    full_name='dmi.NativeEventsManagementService.UpdateEventsConfiguration',
+    index=1,
+    containing_service=None,
+    input_type=_EVENTSCONFIGURATIONREQUEST,
+    output_type=_EVENTSCONFIGURATIONRESPONSE,
+    serialized_options=None,
+  ),
+])
+_sym_db.RegisterServiceDescriptor(_NATIVEEVENTSMANAGEMENTSERVICE)
+
+DESCRIPTOR.services_by_name['NativeEventsManagementService'] = _NATIVEEVENTSMANAGEMENTSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/python/dmi/hw_management_service_pb2.py b/python/dmi/hw_management_service_pb2.py
new file mode 100644
index 0000000..5849aab
--- /dev/null
+++ b/python/dmi/hw_management_service_pb2.py
@@ -0,0 +1,500 @@
+# -*- coding: utf-8 -*-
+# 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
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from dmi import commons_pb2 as dmi_dot_commons__pb2
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  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')
+  ,
+  dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,dmi_dot_hw__pb2.DESCRIPTOR,])
+
+
+
+
+_PHYSICALINVENTORYREQUEST = _descriptor.Descriptor(
+  name='PhysicalInventoryRequest',
+  full_name='dmi.PhysicalInventoryRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.PhysicalInventoryRequest.device_uuid', index=0,
+      number=1, 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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=73,
+  serialized_end=131,
+)
+
+
+_PHYSICALINVENTORYRESPONSE = _descriptor.Descriptor(
+  name='PhysicalInventoryResponse',
+  full_name='dmi.PhysicalInventoryResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.PhysicalInventoryResponse.status', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=133,
+  serialized_end=252,
+)
+
+
+_HWCOMPONENTINFOGETREQUEST = _descriptor.Descriptor(
+  name='HWComponentInfoGetRequest',
+  full_name='dmi.HWComponentInfoGetRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.HWComponentInfoGetRequest.device_uuid', index=0,
+      number=1, 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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=254,
+  serialized_end=372,
+)
+
+
+_HWCOMPONENTINFOSETREQUEST = _descriptor.Descriptor(
+  name='HWComponentInfoSetRequest',
+  full_name='dmi.HWComponentInfoSetRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.HWComponentInfoSetRequest.device_uuid', index=0,
+      number=1, 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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=375,
+  serialized_end=536,
+)
+
+
+_HWCOMPONENTINFOSETRESPONSE = _descriptor.Descriptor(
+  name='HWComponentInfoSetResponse',
+  full_name='dmi.HWComponentInfoSetResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.HWComponentInfoSetResponse.status', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=538,
+  serialized_end=624,
+)
+
+
+_STARTMANAGINGDEVICERESPONSE = _descriptor.Descriptor(
+  name='StartManagingDeviceResponse',
+  full_name='dmi.StartManagingDeviceResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.StartManagingDeviceResponse.status', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=626,
+  serialized_end=745,
+)
+
+
+_STOPMANAGINGDEVICEREQUEST = _descriptor.Descriptor(
+  name='StopManagingDeviceRequest',
+  full_name='dmi.StopManagingDeviceRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=747,
+  serialized_end=788,
+)
+
+
+_STOPMANAGINGDEVICERESPONSE = _descriptor.Descriptor(
+  name='StopManagingDeviceResponse',
+  full_name='dmi.StopManagingDeviceResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.StopManagingDeviceResponse.status', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=790,
+  serialized_end=876,
+)
+
+_PHYSICALINVENTORYREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_PHYSICALINVENTORYRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_PHYSICALINVENTORYRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_PHYSICALINVENTORYRESPONSE.fields_by_name['inventory'].message_type = dmi_dot_hw__pb2._HARDWARE
+_HWCOMPONENTINFOGETREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_HWCOMPONENTINFOGETREQUEST.fields_by_name['component_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_HWCOMPONENTINFOSETREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_HWCOMPONENTINFOSETREQUEST.fields_by_name['component_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_HWCOMPONENTINFOSETREQUEST.fields_by_name['changes'].message_type = dmi_dot_hw__pb2._MODIFIABLECOMPONENT
+_HWCOMPONENTINFOSETRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_HWCOMPONENTINFOSETRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_STARTMANAGINGDEVICERESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_STARTMANAGINGDEVICERESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_STARTMANAGINGDEVICERESPONSE.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_STOPMANAGINGDEVICERESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_STOPMANAGINGDEVICERESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+DESCRIPTOR.message_types_by_name['PhysicalInventoryRequest'] = _PHYSICALINVENTORYREQUEST
+DESCRIPTOR.message_types_by_name['PhysicalInventoryResponse'] = _PHYSICALINVENTORYRESPONSE
+DESCRIPTOR.message_types_by_name['HWComponentInfoGetRequest'] = _HWCOMPONENTINFOGETREQUEST
+DESCRIPTOR.message_types_by_name['HWComponentInfoSetRequest'] = _HWCOMPONENTINFOSETREQUEST
+DESCRIPTOR.message_types_by_name['HWComponentInfoSetResponse'] = _HWCOMPONENTINFOSETRESPONSE
+DESCRIPTOR.message_types_by_name['StartManagingDeviceResponse'] = _STARTMANAGINGDEVICERESPONSE
+DESCRIPTOR.message_types_by_name['StopManagingDeviceRequest'] = _STOPMANAGINGDEVICEREQUEST
+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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@protoc_insertion_point(class_scope:dmi.StopManagingDeviceResponse)
+  ))
+_sym_db.RegisterMessage(StopManagingDeviceResponse)
+
+
+DESCRIPTOR._options = None
+
+_NATIVEHWMANAGEMENTSERVICE = _descriptor.ServiceDescriptor(
+  name='NativeHWManagementService',
+  full_name='dmi.NativeHWManagementService',
+  file=DESCRIPTOR,
+  index=0,
+  serialized_options=None,
+  serialized_start=879,
+  serialized_end=1326,
+  methods=[
+  _descriptor.MethodDescriptor(
+    name='StartManagingDevice',
+    full_name='dmi.NativeHWManagementService.StartManagingDevice',
+    index=0,
+    containing_service=None,
+    input_type=dmi_dot_hw__pb2._MODIFIABLECOMPONENT,
+    output_type=_STARTMANAGINGDEVICERESPONSE,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='StopManagingDevice',
+    full_name='dmi.NativeHWManagementService.StopManagingDevice',
+    index=1,
+    containing_service=None,
+    input_type=_STOPMANAGINGDEVICEREQUEST,
+    output_type=_STOPMANAGINGDEVICERESPONSE,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetPhysicalInventory',
+    full_name='dmi.NativeHWManagementService.GetPhysicalInventory',
+    index=2,
+    containing_service=None,
+    input_type=_PHYSICALINVENTORYREQUEST,
+    output_type=_PHYSICALINVENTORYRESPONSE,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetHWComponentInfo',
+    full_name='dmi.NativeHWManagementService.GetHWComponentInfo',
+    index=3,
+    containing_service=None,
+    input_type=_HWCOMPONENTINFOGETREQUEST,
+    output_type=dmi_dot_hw__pb2._COMPONENT,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='SetHWComponentInfo',
+    full_name='dmi.NativeHWManagementService.SetHWComponentInfo',
+    index=4,
+    containing_service=None,
+    input_type=_HWCOMPONENTINFOSETREQUEST,
+    output_type=_HWCOMPONENTINFOSETRESPONSE,
+    serialized_options=None,
+  ),
+])
+_sym_db.RegisterServiceDescriptor(_NATIVEHWMANAGEMENTSERVICE)
+
+DESCRIPTOR.services_by_name['NativeHWManagementService'] = _NATIVEHWMANAGEMENTSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/python/dmi/hw_metrics_mgmt_service_pb2.py b/python/dmi/hw_metrics_mgmt_service_pb2.py
new file mode 100644
index 0000000..764f5be
--- /dev/null
+++ b/python/dmi/hw_metrics_mgmt_service_pb2.py
@@ -0,0 +1,635 @@
+# -*- coding: utf-8 -*-
+# 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
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from dmi import commons_pb2 as dmi_dot_commons__pb2
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  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')
+  ,
+  dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,dmi_dot_hw__pb2.DESCRIPTOR,])
+
+_METRICNAMES = _descriptor.EnumDescriptor(
+  name='MetricNames',
+  full_name='dmi.MetricNames',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_NAME_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_FAN_SPEED', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_CPU_TEMP', index=2, number=100,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_CPU_USAGE_PERCENTAGE', index=3, number=101,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_TRANSCEIVER_TEMP', index=4, number=200,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_TRANSCEIVER_VOLTAGE', index=5, number=201,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_TRANSCEIVER_BIAS', index=6, number=202,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_TRANSCEIVER_RX_POWER', index=7, number=203,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_TRANSCEIVER_TX_POWER', index=8, number=204,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_TRANSCEIVER_WAVELENGTH', index=9, number=205,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_DISK_TEMP', index=10, number=300,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_DISK_CAPACITY', index=11, number=301,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_DISK_USAGE', index=12, number=302,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_DISK_USAGE_PERCENTAGE', index=13, number=303,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_DISK_READ_WRITE_PERCENTAGE', index=14, number=304,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_DISK_FAULTY_CELLS_PERCENTAGE', index=15, number=305,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_RAM_TEMP', index=16, number=400,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_RAM_CAPACITY', index=17, number=401,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_RAM_USAGE', index=18, number=402,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_RAM_USAGE_PERCENTAGE', index=19, number=403,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_POWER_MAX', index=20, number=500,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_POWER_USAGE', index=21, number=501,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_POWER_USAGE_PERCENTAGE', index=22, number=502,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='METRIC_INNER_SURROUNDING_TEMP', index=23, number=600,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=921,
+  serialized_end=1650,
+)
+_sym_db.RegisterEnumDescriptor(_METRICNAMES)
+
+MetricNames = enum_type_wrapper.EnumTypeWrapper(_METRICNAMES)
+METRIC_NAME_UNDEFINED = 0
+METRIC_FAN_SPEED = 1
+METRIC_CPU_TEMP = 100
+METRIC_CPU_USAGE_PERCENTAGE = 101
+METRIC_TRANSCEIVER_TEMP = 200
+METRIC_TRANSCEIVER_VOLTAGE = 201
+METRIC_TRANSCEIVER_BIAS = 202
+METRIC_TRANSCEIVER_RX_POWER = 203
+METRIC_TRANSCEIVER_TX_POWER = 204
+METRIC_TRANSCEIVER_WAVELENGTH = 205
+METRIC_DISK_TEMP = 300
+METRIC_DISK_CAPACITY = 301
+METRIC_DISK_USAGE = 302
+METRIC_DISK_USAGE_PERCENTAGE = 303
+METRIC_DISK_READ_WRITE_PERCENTAGE = 304
+METRIC_DISK_FAULTY_CELLS_PERCENTAGE = 305
+METRIC_RAM_TEMP = 400
+METRIC_RAM_CAPACITY = 401
+METRIC_RAM_USAGE = 402
+METRIC_RAM_USAGE_PERCENTAGE = 403
+METRIC_POWER_MAX = 500
+METRIC_POWER_USAGE = 501
+METRIC_POWER_USAGE_PERCENTAGE = 502
+METRIC_INNER_SURROUNDING_TEMP = 600
+
+
+
+_METRICCONFIG = _descriptor.Descriptor(
+  name='MetricConfig',
+  full_name='dmi.MetricConfig',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='metric_id', full_name='dmi.MetricConfig.metric_id', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=75,
+  serialized_end=172,
+)
+
+
+_METRICSCONFIG = _descriptor.Descriptor(
+  name='MetricsConfig',
+  full_name='dmi.MetricsConfig',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='metrics', full_name='dmi.MetricsConfig.metrics', index=0,
+      number=1, 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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=174,
+  serialized_end=225,
+)
+
+
+_LISTMETRICSRESPONSE = _descriptor.Descriptor(
+  name='ListMetricsResponse',
+  full_name='dmi.ListMetricsResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.ListMetricsResponse.status', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=227,
+  serialized_end=343,
+)
+
+
+_METRICSCONFIGURATIONREQUEST = _descriptor.Descriptor(
+  name='MetricsConfigurationRequest',
+  full_name='dmi.MetricsConfigurationRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.MetricsConfigurationRequest.device_uuid', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+    _descriptor.OneofDescriptor(
+      name='operation', full_name='dmi.MetricsConfigurationRequest.operation',
+      index=0, containing_type=None, fields=[]),
+  ],
+  serialized_start=346,
+  serialized_end=487,
+)
+
+
+_METRICSCONFIGURATIONRESPONSE = _descriptor.Descriptor(
+  name='MetricsConfigurationResponse',
+  full_name='dmi.MetricsConfigurationResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.MetricsConfigurationResponse.status', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=489,
+  serialized_end=577,
+)
+
+
+_METRICMETADATA = _descriptor.Descriptor(
+  name='MetricMetaData',
+  full_name='dmi.MetricMetaData',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.MetricMetaData.device_uuid', index=0,
+      number=1, 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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=579,
+  serialized_end=686,
+)
+
+
+_METRIC = _descriptor.Descriptor(
+  name='Metric',
+  full_name='dmi.Metric',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='metric_id', full_name='dmi.Metric.metric_id', index=0,
+      number=1, 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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=689,
+  serialized_end=821,
+)
+
+
+_GETMETRICREQUEST = _descriptor.Descriptor(
+  name='GetMetricRequest',
+  full_name='dmi.GetMetricRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='meta_data', full_name='dmi.GetMetricRequest.meta_data', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=823,
+  serialized_end=918,
+)
+
+_METRICCONFIG.fields_by_name['metric_id'].enum_type = _METRICNAMES
+_METRICSCONFIG.fields_by_name['metrics'].message_type = _METRICCONFIG
+_LISTMETRICSRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_LISTMETRICSRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_LISTMETRICSRESPONSE.fields_by_name['metrics'].message_type = _METRICSCONFIG
+_METRICSCONFIGURATIONREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_METRICSCONFIGURATIONREQUEST.fields_by_name['changes'].message_type = _METRICSCONFIG
+_METRICSCONFIGURATIONREQUEST.oneofs_by_name['operation'].fields.append(
+  _METRICSCONFIGURATIONREQUEST.fields_by_name['changes'])
+_METRICSCONFIGURATIONREQUEST.fields_by_name['changes'].containing_oneof = _METRICSCONFIGURATIONREQUEST.oneofs_by_name['operation']
+_METRICSCONFIGURATIONREQUEST.oneofs_by_name['operation'].fields.append(
+  _METRICSCONFIGURATIONREQUEST.fields_by_name['reset_to_default'])
+_METRICSCONFIGURATIONREQUEST.fields_by_name['reset_to_default'].containing_oneof = _METRICSCONFIGURATIONREQUEST.oneofs_by_name['operation']
+_METRICSCONFIGURATIONRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_METRICSCONFIGURATIONRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_METRICMETADATA.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_METRICMETADATA.fields_by_name['component_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_METRIC.fields_by_name['metric_id'].enum_type = _METRICNAMES
+_METRIC.fields_by_name['metric_metadata'].message_type = _METRICMETADATA
+_METRIC.fields_by_name['value'].message_type = dmi_dot_hw__pb2._COMPONENTSENSORDATA
+_GETMETRICREQUEST.fields_by_name['meta_data'].message_type = _METRICMETADATA
+_GETMETRICREQUEST.fields_by_name['metric_id'].enum_type = _METRICNAMES
+DESCRIPTOR.message_types_by_name['MetricConfig'] = _METRICCONFIG
+DESCRIPTOR.message_types_by_name['MetricsConfig'] = _METRICSCONFIG
+DESCRIPTOR.message_types_by_name['ListMetricsResponse'] = _LISTMETRICSRESPONSE
+DESCRIPTOR.message_types_by_name['MetricsConfigurationRequest'] = _METRICSCONFIGURATIONREQUEST
+DESCRIPTOR.message_types_by_name['MetricsConfigurationResponse'] = _METRICSCONFIGURATIONRESPONSE
+DESCRIPTOR.message_types_by_name['MetricMetaData'] = _METRICMETADATA
+DESCRIPTOR.message_types_by_name['Metric'] = _METRIC
+DESCRIPTOR.message_types_by_name['GetMetricRequest'] = _GETMETRICREQUEST
+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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@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'
+  # @@protoc_insertion_point(class_scope:dmi.GetMetricRequest)
+  ))
+_sym_db.RegisterMessage(GetMetricRequest)
+
+
+DESCRIPTOR._options = None
+
+_NATIVEMETRICSMANAGEMENTSERVICE = _descriptor.ServiceDescriptor(
+  name='NativeMetricsManagementService',
+  full_name='dmi.NativeMetricsManagementService',
+  file=DESCRIPTOR,
+  index=0,
+  serialized_options=None,
+  serialized_start=1653,
+  serialized_end=1891,
+  methods=[
+  _descriptor.MethodDescriptor(
+    name='ListMetrics',
+    full_name='dmi.NativeMetricsManagementService.ListMetrics',
+    index=0,
+    containing_service=None,
+    input_type=dmi_dot_hw__pb2._HARDWAREID,
+    output_type=_LISTMETRICSRESPONSE,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='UpdateMetricsConfiguration',
+    full_name='dmi.NativeMetricsManagementService.UpdateMetricsConfiguration',
+    index=1,
+    containing_service=None,
+    input_type=_METRICSCONFIGURATIONREQUEST,
+    output_type=_METRICSCONFIGURATIONRESPONSE,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetMetric',
+    full_name='dmi.NativeMetricsManagementService.GetMetric',
+    index=2,
+    containing_service=None,
+    input_type=_GETMETRICREQUEST,
+    output_type=_METRIC,
+    serialized_options=None,
+  ),
+])
+_sym_db.RegisterServiceDescriptor(_NATIVEMETRICSMANAGEMENTSERVICE)
+
+DESCRIPTOR.services_by_name['NativeMetricsManagementService'] = _NATIVEMETRICSMANAGEMENTSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/python/dmi/hw_pb2.py b/python/dmi/hw_pb2.py
new file mode 100644
index 0000000..3030cfb
--- /dev/null
+++ b/python/dmi/hw_pb2.py
@@ -0,0 +1,1185 @@
+# -*- coding: utf-8 -*-
+# 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
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  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')
+  ,
+  dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,])
+
+_COMPONENTTYPE = _descriptor.EnumDescriptor(
+  name='ComponentType',
+  full_name='dmi.ComponentType',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_UNKNOWN', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_CHASSIS', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_BACKPLANE', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_CONTAINER', index=4, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_POWER_SUPPLY', index=5, number=5,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_FAN', index=6, number=6,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_SENSOR', index=7, number=7,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_MODULE', index=8, number=8,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_PORT', index=9, number=9,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_CPU', index=10, number=10,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_BATTERY', index=11, number=11,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_STORAGE', index=12, number=12,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_MEMORY', index=13, number=13,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMPONENT_TYPE_TRANSCEIVER', index=14, number=14,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=1562,
+  serialized_end=1998,
+)
+_sym_db.RegisterEnumDescriptor(_COMPONENTTYPE)
+
+ComponentType = enum_type_wrapper.EnumTypeWrapper(_COMPONENTTYPE)
+_COMPONENTADMINSTATE = _descriptor.EnumDescriptor(
+  name='ComponentAdminState',
+  full_name='dmi.ComponentAdminState',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ADMIN_STATE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ADMIN_STATE_UNKNOWN', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ADMIN_STATE_LOCKED', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ADMIN_STATE_SHUTTING_DOWN', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ADMIN_STATE_UNLOCKED', index=4, number=4,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=2001,
+  serialized_end=2180,
+)
+_sym_db.RegisterEnumDescriptor(_COMPONENTADMINSTATE)
+
+ComponentAdminState = enum_type_wrapper.EnumTypeWrapper(_COMPONENTADMINSTATE)
+_COMPONENTOPERSTATE = _descriptor.EnumDescriptor(
+  name='ComponentOperState',
+  full_name='dmi.ComponentOperState',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='COMP_OPER_STATE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_OPER_STATE_UNKNOWN', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_OPER_STATE_DISABLED', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_OPER_STATE_ENABLED', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_OPER_STATE_TESTING', index=4, number=4,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=2183,
+  serialized_end=2351,
+)
+_sym_db.RegisterEnumDescriptor(_COMPONENTOPERSTATE)
+
+ComponentOperState = enum_type_wrapper.EnumTypeWrapper(_COMPONENTOPERSTATE)
+_COMPONENTUSAGESTATE = _descriptor.EnumDescriptor(
+  name='ComponentUsageState',
+  full_name='dmi.ComponentUsageState',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='COMP_USAGE_STATE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_USAGE_STATE_UNKNOWN', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_USAGE_STATE_IDLE', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_USAGE_STATE_ACTIVE', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_USAGE_STATE_BUSY', index=4, number=4,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=2354,
+  serialized_end=2520,
+)
+_sym_db.RegisterEnumDescriptor(_COMPONENTUSAGESTATE)
+
+ComponentUsageState = enum_type_wrapper.EnumTypeWrapper(_COMPONENTUSAGESTATE)
+_COMPONENTALARMSTATE = _descriptor.EnumDescriptor(
+  name='ComponentAlarmState',
+  full_name='dmi.ComponentAlarmState',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_UNKNOWN', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_UNDER_REPAIR', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_CRITICAL', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_MAJOR', index=4, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_MINOR', index=5, number=5,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_WARNING', index=6, number=6,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_ALARM_STATE_INTERMEDIATE', index=7, number=7,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=2523,
+  serialized_end=2793,
+)
+_sym_db.RegisterEnumDescriptor(_COMPONENTALARMSTATE)
+
+ComponentAlarmState = enum_type_wrapper.EnumTypeWrapper(_COMPONENTALARMSTATE)
+_COMPONENTSTANDBYSTATE = _descriptor.EnumDescriptor(
+  name='ComponentStandbyState',
+  full_name='dmi.ComponentStandbyState',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='COMP_STANDBY_STATE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_STANDBY_STATE_UNKNOWN', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_STANDBY_STATE_HOT', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_STANDBY_STATE_COLD', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMP_STANDBY_STATE_PROVIDING_SERVICE', index=4, number=4,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=2796,
+  serialized_end=2984,
+)
+_sym_db.RegisterEnumDescriptor(_COMPONENTSTANDBYSTATE)
+
+ComponentStandbyState = enum_type_wrapper.EnumTypeWrapper(_COMPONENTSTANDBYSTATE)
+_SENSORVALUETYPE = _descriptor.EnumDescriptor(
+  name='SensorValueType',
+  full_name='dmi.SensorValueType',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_OTHER', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_UNKNOWN', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_VOLTS_AC', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_VOLTS_DC', index=4, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_AMPERES', index=5, number=5,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_WATTS', index=6, number=6,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_HERTZ', index=7, number=7,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_CELSIUS', index=8, number=8,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_PERCENT_RH', index=9, number=9,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_RPM', index=10, number=10,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_CMM', index=11, number=11,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_TYPE_TRUTH_VALUE', index=12, number=12,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=2987,
+  serialized_end=3404,
+)
+_sym_db.RegisterEnumDescriptor(_SENSORVALUETYPE)
+
+SensorValueType = enum_type_wrapper.EnumTypeWrapper(_SENSORVALUETYPE)
+_SENSORVALUESCALE = _descriptor.EnumDescriptor(
+  name='SensorValueScale',
+  full_name='dmi.SensorValueScale',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_YOCTO', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_ZEPTO', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_ATTO', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_FEMTO', index=4, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_PICO', index=5, number=5,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_NANO', index=6, number=6,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_MICRO', index=7, number=7,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_MILLI', index=8, number=8,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_UNITS', index=9, number=9,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_KILO', index=10, number=10,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_MEGA', index=11, number=11,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_GIGA', index=12, number=12,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_TERA', index=13, number=13,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_PETA', index=14, number=14,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_EXA', index=15, number=15,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_ZETTA', index=16, number=16,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_VALUE_SCALE_YOTTA', index=17, number=17,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=3407,
+  serialized_end=3959,
+)
+_sym_db.RegisterEnumDescriptor(_SENSORVALUESCALE)
+
+SensorValueScale = enum_type_wrapper.EnumTypeWrapper(_SENSORVALUESCALE)
+_SENSORSTATUS = _descriptor.EnumDescriptor(
+  name='SensorStatus',
+  full_name='dmi.SensorStatus',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_STATUS_UNDEFINED', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_STATUS_OK', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_STATUS_UNAVAILABLE', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='SENSOR_STATUS_NONOPERATIONAL', index=3, number=3,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=3962,
+  serialized_end=4092,
+)
+_sym_db.RegisterEnumDescriptor(_SENSORSTATUS)
+
+SensorStatus = enum_type_wrapper.EnumTypeWrapper(_SENSORSTATUS)
+COMPONENT_TYPE_UNDEFINED = 0
+COMPONENT_TYPE_UNKNOWN = 1
+COMPONENT_TYPE_CHASSIS = 2
+COMPONENT_TYPE_BACKPLANE = 3
+COMPONENT_TYPE_CONTAINER = 4
+COMPONENT_TYPE_POWER_SUPPLY = 5
+COMPONENT_TYPE_FAN = 6
+COMPONENT_TYPE_SENSOR = 7
+COMPONENT_TYPE_MODULE = 8
+COMPONENT_TYPE_PORT = 9
+COMPONENT_TYPE_CPU = 10
+COMPONENT_TYPE_BATTERY = 11
+COMPONENT_TYPE_STORAGE = 12
+COMPONENT_TYPE_MEMORY = 13
+COMPONENT_TYPE_TRANSCEIVER = 14
+COMP_ADMIN_STATE_UNDEFINED = 0
+COMP_ADMIN_STATE_UNKNOWN = 1
+COMP_ADMIN_STATE_LOCKED = 2
+COMP_ADMIN_STATE_SHUTTING_DOWN = 3
+COMP_ADMIN_STATE_UNLOCKED = 4
+COMP_OPER_STATE_UNDEFINED = 0
+COMP_OPER_STATE_UNKNOWN = 1
+COMP_OPER_STATE_DISABLED = 2
+COMP_OPER_STATE_ENABLED = 3
+COMP_OPER_STATE_TESTING = 4
+COMP_USAGE_STATE_UNDEFINED = 0
+COMP_USAGE_STATE_UNKNOWN = 1
+COMP_USAGE_STATE_IDLE = 2
+COMP_USAGE_STATE_ACTIVE = 3
+COMP_USAGE_STATE_BUSY = 4
+COMP_ALARM_STATE_UNDEFINED = 0
+COMP_ALARM_STATE_UNKNOWN = 1
+COMP_ALARM_STATE_UNDER_REPAIR = 2
+COMP_ALARM_STATE_CRITICAL = 3
+COMP_ALARM_STATE_MAJOR = 4
+COMP_ALARM_STATE_MINOR = 5
+COMP_ALARM_STATE_WARNING = 6
+COMP_ALARM_STATE_INTERMEDIATE = 7
+COMP_STANDBY_STATE_UNDEFINED = 0
+COMP_STANDBY_STATE_UNKNOWN = 1
+COMP_STANDBY_STATE_HOT = 2
+COMP_STANDBY_STATE_COLD = 3
+COMP_STANDBY_STATE_PROVIDING_SERVICE = 4
+SENSOR_VALUE_TYPE_UNDEFINED = 0
+SENSOR_VALUE_TYPE_OTHER = 1
+SENSOR_VALUE_TYPE_UNKNOWN = 2
+SENSOR_VALUE_TYPE_VOLTS_AC = 3
+SENSOR_VALUE_TYPE_VOLTS_DC = 4
+SENSOR_VALUE_TYPE_AMPERES = 5
+SENSOR_VALUE_TYPE_WATTS = 6
+SENSOR_VALUE_TYPE_HERTZ = 7
+SENSOR_VALUE_TYPE_CELSIUS = 8
+SENSOR_VALUE_TYPE_PERCENT_RH = 9
+SENSOR_VALUE_TYPE_RPM = 10
+SENSOR_VALUE_TYPE_CMM = 11
+SENSOR_VALUE_TYPE_TRUTH_VALUE = 12
+SENSOR_VALUE_SCALE_UNDEFINED = 0
+SENSOR_VALUE_SCALE_YOCTO = 1
+SENSOR_VALUE_SCALE_ZEPTO = 2
+SENSOR_VALUE_SCALE_ATTO = 3
+SENSOR_VALUE_SCALE_FEMTO = 4
+SENSOR_VALUE_SCALE_PICO = 5
+SENSOR_VALUE_SCALE_NANO = 6
+SENSOR_VALUE_SCALE_MICRO = 7
+SENSOR_VALUE_SCALE_MILLI = 8
+SENSOR_VALUE_SCALE_UNITS = 9
+SENSOR_VALUE_SCALE_KILO = 10
+SENSOR_VALUE_SCALE_MEGA = 11
+SENSOR_VALUE_SCALE_GIGA = 12
+SENSOR_VALUE_SCALE_TERA = 13
+SENSOR_VALUE_SCALE_PETA = 14
+SENSOR_VALUE_SCALE_EXA = 15
+SENSOR_VALUE_SCALE_ZETTA = 16
+SENSOR_VALUE_SCALE_YOTTA = 17
+SENSOR_STATUS_UNDEFINED = 0
+SENSOR_STATUS_OK = 1
+SENSOR_STATUS_UNAVAILABLE = 2
+SENSOR_STATUS_NONOPERATIONAL = 3
+
+
+
+_UUID = _descriptor.Descriptor(
+  name='Uuid',
+  full_name='dmi.Uuid',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=54,
+  serialized_end=74,
+)
+
+
+_HARDWAREID = _descriptor.Descriptor(
+  name='HardwareID',
+  full_name='dmi.HardwareID',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='uuid', full_name='dmi.HardwareID.uuid', index=0,
+      number=1, 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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=76,
+  serialized_end=113,
+)
+
+
+_URI = _descriptor.Descriptor(
+  name='Uri',
+  full_name='dmi.Uri',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=115,
+  serialized_end=133,
+)
+
+
+_COMPONENTSTATE = _descriptor.Descriptor(
+  name='ComponentState',
+  full_name='dmi.ComponentState',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='state_last_changed', full_name='dmi.ComponentState.state_last_changed', index=0,
+      number=1, 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),
+    _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),
+    _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),
+    _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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=136,
+  serialized_end=445,
+)
+
+
+_COMPONENTSENSORDATA = _descriptor.Descriptor(
+  name='ComponentSensorData',
+  full_name='dmi.ComponentSensorData',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='value', full_name='dmi.ComponentSensorData.value', index=0,
+      number=1, 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),
+    _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),
+    _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),
+    _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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=448,
+  serialized_end=728,
+)
+
+
+_COMPONENT = _descriptor.Descriptor(
+  name='Component',
+  full_name='dmi.Component',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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),
+    _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),
+    _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),
+    _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),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=731,
+  serialized_end=1236,
+)
+
+
+_HARDWARE = _descriptor.Descriptor(
+  name='Hardware',
+  full_name='dmi.Hardware',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='last_change', full_name='dmi.Hardware.last_change', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1238,
+  serialized_end=1327,
+)
+
+
+_MODIFIABLECOMPONENT = _descriptor.Descriptor(
+  name='ModifiableComponent',
+  full_name='dmi.ModifiableComponent',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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),
+    _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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1330,
+  serialized_end=1559,
+)
+
+_HARDWAREID.fields_by_name['uuid'].message_type = _UUID
+_COMPONENTSTATE.fields_by_name['state_last_changed'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_COMPONENTSTATE.fields_by_name['admin_state'].enum_type = _COMPONENTADMINSTATE
+_COMPONENTSTATE.fields_by_name['oper_state'].enum_type = _COMPONENTOPERSTATE
+_COMPONENTSTATE.fields_by_name['usage_state'].enum_type = _COMPONENTUSAGESTATE
+_COMPONENTSTATE.fields_by_name['alarm_state'].enum_type = _COMPONENTALARMSTATE
+_COMPONENTSTATE.fields_by_name['standby_state'].enum_type = _COMPONENTSTANDBYSTATE
+_COMPONENTSENSORDATA.fields_by_name['type'].enum_type = _SENSORVALUETYPE
+_COMPONENTSENSORDATA.fields_by_name['scale'].enum_type = _SENSORVALUESCALE
+_COMPONENTSENSORDATA.fields_by_name['status'].enum_type = _SENSORSTATUS
+_COMPONENTSENSORDATA.fields_by_name['timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_COMPONENT.fields_by_name['class'].enum_type = _COMPONENTTYPE
+_COMPONENT.fields_by_name['children'].message_type = _COMPONENT
+_COMPONENT.fields_by_name['mfg_date'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_COMPONENT.fields_by_name['uri'].message_type = _URI
+_COMPONENT.fields_by_name['uuid'].message_type = _UUID
+_COMPONENT.fields_by_name['state'].message_type = _COMPONENTSTATE
+_COMPONENT.fields_by_name['sensor_data'].message_type = _COMPONENTSENSORDATA
+_HARDWARE.fields_by_name['last_change'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP
+_HARDWARE.fields_by_name['root'].message_type = _COMPONENT
+_MODIFIABLECOMPONENT.fields_by_name['class'].enum_type = _COMPONENTTYPE
+_MODIFIABLECOMPONENT.fields_by_name['parent'].message_type = _COMPONENT
+_MODIFIABLECOMPONENT.fields_by_name['uri'].message_type = _URI
+_MODIFIABLECOMPONENT.fields_by_name['admin_state'].enum_type = _COMPONENTADMINSTATE
+DESCRIPTOR.message_types_by_name['Uuid'] = _UUID
+DESCRIPTOR.message_types_by_name['HardwareID'] = _HARDWAREID
+DESCRIPTOR.message_types_by_name['Uri'] = _URI
+DESCRIPTOR.message_types_by_name['ComponentState'] = _COMPONENTSTATE
+DESCRIPTOR.message_types_by_name['ComponentSensorData'] = _COMPONENTSENSORDATA
+DESCRIPTOR.message_types_by_name['Component'] = _COMPONENT
+DESCRIPTOR.message_types_by_name['Hardware'] = _HARDWARE
+DESCRIPTOR.message_types_by_name['ModifiableComponent'] = _MODIFIABLECOMPONENT
+DESCRIPTOR.enum_types_by_name['ComponentType'] = _COMPONENTTYPE
+DESCRIPTOR.enum_types_by_name['ComponentAdminState'] = _COMPONENTADMINSTATE
+DESCRIPTOR.enum_types_by_name['ComponentOperState'] = _COMPONENTOPERSTATE
+DESCRIPTOR.enum_types_by_name['ComponentUsageState'] = _COMPONENTUSAGESTATE
+DESCRIPTOR.enum_types_by_name['ComponentAlarmState'] = _COMPONENTALARMSTATE
+DESCRIPTOR.enum_types_by_name['ComponentStandbyState'] = _COMPONENTSTANDBYSTATE
+DESCRIPTOR.enum_types_by_name['SensorValueType'] = _SENSORVALUETYPE
+DESCRIPTOR.enum_types_by_name['SensorValueScale'] = _SENSORVALUESCALE
+DESCRIPTOR.enum_types_by_name['SensorStatus'] = _SENSORSTATUS
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), dict(
+  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'
+  # @@protoc_insertion_point(class_scope:dmi.HardwareID)
+  ))
+_sym_db.RegisterMessage(HardwareID)
+
+Uri = _reflection.GeneratedProtocolMessageType('Uri', (_message.Message,), dict(
+  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'
+  # @@protoc_insertion_point(class_scope:dmi.ComponentState)
+  ))
+_sym_db.RegisterMessage(ComponentState)
+
+ComponentSensorData = _reflection.GeneratedProtocolMessageType('ComponentSensorData', (_message.Message,), dict(
+  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'
+  # @@protoc_insertion_point(class_scope:dmi.Component)
+  ))
+_sym_db.RegisterMessage(Component)
+
+Hardware = _reflection.GeneratedProtocolMessageType('Hardware', (_message.Message,), dict(
+  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'
+  # @@protoc_insertion_point(class_scope:dmi.ModifiableComponent)
+  ))
+_sym_db.RegisterMessage(ModifiableComponent)
+
+
+DESCRIPTOR._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/python/dmi/sw_image_pb2.py b/python/dmi/sw_image_pb2.py
new file mode 100644
index 0000000..8a4497e
--- /dev/null
+++ b/python/dmi/sw_image_pb2.py
@@ -0,0 +1,296 @@
+# -*- coding: utf-8 -*-
+# 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
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from dmi import commons_pb2 as dmi_dot_commons__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  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')
+  ,
+  dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,])
+
+
+
+_IMAGESTATUS_IMAGESTATE = _descriptor.EnumDescriptor(
+  name='ImageState',
+  full_name='dmi.ImageStatus.ImageState',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='UNDEFINED_STATE', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COPYING_IMAGE', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='INSTALLING_IMAGE', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='COMMITING_IMAGE', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='REBOOTING_DEVICE', index=4, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='UPGRADE_COMPLETE', index=5, number=5,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='UPGRADE_FAILED', index=6, number=6,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='ACTIVATION_COMPLETE', index=7, number=7,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='ACTIVATION_FAILED', index=8, number=8,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=373,
+  serialized_end=580,
+)
+_sym_db.RegisterEnumDescriptor(_IMAGESTATUS_IMAGESTATE)
+
+_IMAGESTATUS_REASON = _descriptor.EnumDescriptor(
+  name='Reason',
+  full_name='dmi.ImageStatus.Reason',
+  filename=None,
+  file=DESCRIPTOR,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='UNDEFINED_REASON', index=0, number=0,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='ERROR_IN_REQUEST', index=1, number=1,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='INTERNAL_ERROR', index=2, number=2,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='DEVICE_IN_WRONG_STATE', index=3, number=3,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='INVALID_IMAGE', index=4, number=4,
+      serialized_options=None,
+      type=None),
+    _descriptor.EnumValueDescriptor(
+      name='WRONG_IMAGE_CHECKSUM', index=5, number=5,
+      serialized_options=None,
+      type=None),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=583,
+  serialized_end=727,
+)
+_sym_db.RegisterEnumDescriptor(_IMAGESTATUS_REASON)
+
+
+_IMAGEVERSION = _descriptor.Descriptor(
+  name='ImageVersion',
+  full_name='dmi.ImageVersion',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=46,
+  serialized_end=97,
+)
+
+
+_IMAGEINFORMATION = _descriptor.Descriptor(
+  name='ImageInformation',
+  full_name='dmi.ImageInformation',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='image', full_name='dmi.ImageInformation.image', index=0,
+      number=1, 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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=99,
+  serialized_end=219,
+)
+
+
+_IMAGESTATUS = _descriptor.Descriptor(
+  name='ImageStatus',
+  full_name='dmi.ImageStatus',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.ImageStatus.status', index=0,
+      number=1, 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),
+    _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),
+    _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),
+    _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'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+    _IMAGESTATUS_IMAGESTATE,
+    _IMAGESTATUS_REASON,
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=222,
+  serialized_end=727,
+)
+
+_IMAGEINFORMATION.fields_by_name['image'].message_type = _IMAGEVERSION
+_IMAGESTATUS.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_IMAGESTATUS.fields_by_name['reason'].enum_type = _IMAGESTATUS_REASON
+_IMAGESTATUS.fields_by_name['state'].enum_type = _IMAGESTATUS_IMAGESTATE
+_IMAGESTATUS_IMAGESTATE.containing_type = _IMAGESTATUS
+_IMAGESTATUS_REASON.containing_type = _IMAGESTATUS
+DESCRIPTOR.message_types_by_name['ImageVersion'] = _IMAGEVERSION
+DESCRIPTOR.message_types_by_name['ImageInformation'] = _IMAGEINFORMATION
+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'
+  # @@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'
+  # @@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'
+  # @@protoc_insertion_point(class_scope:dmi.ImageStatus)
+  ))
+_sym_db.RegisterMessage(ImageStatus)
+
+
+DESCRIPTOR._options = None
+# @@protoc_insertion_point(module_scope)
diff --git a/python/dmi/sw_management_service_pb2.py b/python/dmi/sw_management_service_pb2.py
new file mode 100644
index 0000000..d9637b6
--- /dev/null
+++ b/python/dmi/sw_management_service_pb2.py
@@ -0,0 +1,182 @@
+# -*- coding: utf-8 -*-
+# 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
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from dmi import hw_pb2 as dmi_dot_hw__pb2
+from dmi import sw_image_pb2 as dmi_dot_sw__image__pb2
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+  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')
+  ,
+  dependencies=[dmi_dot_hw__pb2.DESCRIPTOR,dmi_dot_sw__image__pb2.DESCRIPTOR,])
+
+
+
+
+_SOFTWAREVERSIONINFORMATION = _descriptor.Descriptor(
+  name='SoftwareVersionInformation',
+  full_name='dmi.SoftwareVersionInformation',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='active_versions', full_name='dmi.SoftwareVersionInformation.active_versions', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=74,
+  serialized_end=191,
+)
+
+
+_DOWNLOADIMAGEREQUEST = _descriptor.Descriptor(
+  name='DownloadImageRequest',
+  full_name='dmi.DownloadImageRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.DownloadImageRequest.device_uuid', index=0,
+      number=1, 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),
+    _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),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=193,
+  serialized_end=290,
+)
+
+_SOFTWAREVERSIONINFORMATION.fields_by_name['active_versions'].message_type = dmi_dot_sw__image__pb2._IMAGEVERSION
+_SOFTWAREVERSIONINFORMATION.fields_by_name['standby_versions'].message_type = dmi_dot_sw__image__pb2._IMAGEVERSION
+_DOWNLOADIMAGEREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_DOWNLOADIMAGEREQUEST.fields_by_name['image_info'].message_type = dmi_dot_sw__image__pb2._IMAGEINFORMATION
+DESCRIPTOR.message_types_by_name['SoftwareVersionInformation'] = _SOFTWAREVERSIONINFORMATION
+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'
+  # @@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'
+  # @@protoc_insertion_point(class_scope:dmi.DownloadImageRequest)
+  ))
+_sym_db.RegisterMessage(DownloadImageRequest)
+
+
+DESCRIPTOR._options = None
+
+_NATIVESOFTWAREMANAGEMENTSERVICE = _descriptor.ServiceDescriptor(
+  name='NativeSoftwareManagementService',
+  full_name='dmi.NativeSoftwareManagementService',
+  file=DESCRIPTOR,
+  index=0,
+  serialized_options=None,
+  serialized_start=293,
+  serialized_end=577,
+  methods=[
+  _descriptor.MethodDescriptor(
+    name='GetSoftwareVersion',
+    full_name='dmi.NativeSoftwareManagementService.GetSoftwareVersion',
+    index=0,
+    containing_service=None,
+    input_type=dmi_dot_hw__pb2._HARDWAREID,
+    output_type=_SOFTWAREVERSIONINFORMATION,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='DownloadImage',
+    full_name='dmi.NativeSoftwareManagementService.DownloadImage',
+    index=1,
+    containing_service=None,
+    input_type=_DOWNLOADIMAGEREQUEST,
+    output_type=dmi_dot_sw__image__pb2._IMAGESTATUS,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='ActivateImage',
+    full_name='dmi.NativeSoftwareManagementService.ActivateImage',
+    index=2,
+    containing_service=None,
+    input_type=dmi_dot_hw__pb2._HARDWAREID,
+    output_type=dmi_dot_sw__image__pb2._IMAGESTATUS,
+    serialized_options=None,
+  ),
+  _descriptor.MethodDescriptor(
+    name='RevertToStandbyImage',
+    full_name='dmi.NativeSoftwareManagementService.RevertToStandbyImage',
+    index=3,
+    containing_service=None,
+    input_type=dmi_dot_hw__pb2._HARDWAREID,
+    output_type=dmi_dot_sw__image__pb2._IMAGESTATUS,
+    serialized_options=None,
+  ),
+])
+_sym_db.RegisterServiceDescriptor(_NATIVESOFTWAREMANAGEMENTSERVICE)
+
+DESCRIPTOR.services_by_name['NativeSoftwareManagementService'] = _NATIVESOFTWAREMANAGEMENTSERVICE
+
+# @@protoc_insertion_point(module_scope)
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..de91cad
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,44 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from setuptools import setup, find_packages
+
+
+def version():
+    with open('VERSION') as f:
+        return f.read()
+
+
+setup(
+    name='device-management-interface',
+    version=version(),
+    description='Protobuf interface definitions',
+    author='VOLTHA project',
+    author_email='voltha-dev@opencord.org',
+    url='https://otti@gerrit.opencord.org/a/device-management-interface',
+    license='Apache Software License',
+    classifiers=[
+        'Development Status :: 5 - Production/Stable',
+        'Intended Audience :: Developers',
+        'License :: OSI Approved :: Apache Software License',
+        'Programming Language :: Python :: 3.6',
+    ],
+    keywords='protobuf voltha',
+    packages = find_packages(where="python"),
+    package_dir = {"": "python"},
+    install_requires = [
+        "googleapis-common-protos~=1.5.6"
+    ],
+    include_package_data=True,
+)
diff --git a/test/test-python-proto-consistency.sh b/test/test-python-proto-consistency.sh
new file mode 100755
index 0000000..b938b01
--- /dev/null
+++ b/test/test-python-proto-consistency.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+
+# Copyright 2020-present Open Networking Foundation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# test-python-proto-consistency.sh
+#
+# This test validates that go proto outputs are committed to git.  It does this
+# by regenerating them and validating whether git thinks they are the same. If
+# they become out of sync, there can be problems for consumers of the protos.
+
+set -eu -o pipefail
+
+git status > /dev/null
+STAGED="$(git diff-index --quiet HEAD -- || echo 'staged')"
+UNTRACKED="$(git ls-files --exclude-standard --others)"
+
+if [ "$STAGED" == "staged" ] || [ "$UNTRACKED" != "" ]; then
+    echo "Please commit or ignore local changes before executing this test"
+    git status
+    exit 1
+fi
+
+# delete and regenerate python protos
+rm -rf python/dmi.pb2 python/*/*.pb2.py python_temp
+make python-protos
+
+# Running git status ensures correct git diff-index picks up changes
+git status > /dev/null
+STAGED_POST="$(git diff-index --quiet HEAD -- || echo "staged")"
+UNTRACKED_POST="$(git ls-files --exclude-standard --others)"
+
+if [ "$STAGED_POST" == "staged" ] || [ "$UNTRACKED_POST" != "" ] ; then
+    echo "You have python proto build outputs that are not committed."
+    echo "Check git status and commit updated files."
+    git status
+    exit 1
+else
+    echo "Test successful. All python proto build outputs are committed"
+    exit 0
+fi
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000..a91211e
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,31 @@
+
+
+; Copyright 2019-present Open Networking Foundation
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+
+[tox]
+envlist = py34,py35,py36,py37
+skip_missing_interpreters = true
+
+[testenv]
+deps =
+  coverage
+
+commands =
+  coverage report python/dmi/commons_pb2.py python/dmi/hw_management_service_pb2.py python/dmi/hw_pb2.py python/dmi/sw_management_service_pb2.py python/dmi/hw_events_mgmt_service_pb2.py python/dmi/hw_metrics_mgmt_service_pb2.py python/dmi/sw_image_pb2.py
+
+[flake8]
+max-line-length = 119
+
+