diff --git a/VERSION b/VERSION
index f374f66..2003b63 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.9.1
+0.9.2
diff --git a/dmi.pb b/dmi.pb
index a1e95f9..03f02cd 100644
--- a/dmi.pb
+++ b/dmi.pb
Binary files differ
diff --git a/go/dmi/commons.pb.go b/go/dmi/commons.pb.go
index 2f90bd5..99a0eeb 100644
--- a/go/dmi/commons.pb.go
+++ b/go/dmi/commons.pb.go
@@ -24,20 +24,20 @@
 
 const (
 	Status_UNDEFINED_STATUS Status = 0
-	Status_OK               Status = 1
-	Status_ERROR            Status = 2
+	Status_OK_STATUS        Status = 1
+	Status_ERROR_STATUS     Status = 2
 )
 
 var Status_name = map[int32]string{
 	0: "UNDEFINED_STATUS",
-	1: "OK",
-	2: "ERROR",
+	1: "OK_STATUS",
+	2: "ERROR_STATUS",
 }
 
 var Status_value = map[string]int32{
 	"UNDEFINED_STATUS": 0,
-	"OK":               1,
-	"ERROR":            2,
+	"OK_STATUS":        1,
+	"ERROR_STATUS":     2,
 }
 
 func (x Status) String() string {
@@ -92,31 +92,70 @@
 	return fileDescriptor_74aedf0dda1205d8, []int{1}
 }
 
+//Log Level
+type LogLevel int32
+
+const (
+	LogLevel_TRACE LogLevel = 0
+	LogLevel_DEBUG LogLevel = 1
+	LogLevel_INFO  LogLevel = 2
+	LogLevel_WARN  LogLevel = 3
+	LogLevel_ERROR LogLevel = 4
+)
+
+var LogLevel_name = map[int32]string{
+	0: "TRACE",
+	1: "DEBUG",
+	2: "INFO",
+	3: "WARN",
+	4: "ERROR",
+}
+
+var LogLevel_value = map[string]int32{
+	"TRACE": 0,
+	"DEBUG": 1,
+	"INFO":  2,
+	"WARN":  3,
+	"ERROR": 4,
+}
+
+func (x LogLevel) String() string {
+	return proto.EnumName(LogLevel_name, int32(x))
+}
+
+func (LogLevel) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_74aedf0dda1205d8, []int{2}
+}
+
 func init() {
 	proto.RegisterEnum("dmi.Status", Status_name, Status_value)
 	proto.RegisterEnum("dmi.Reason", Reason_name, Reason_value)
+	proto.RegisterEnum("dmi.LogLevel", LogLevel_name, LogLevel_value)
 }
 
 func init() { proto.RegisterFile("dmi/commons.proto", fileDescriptor_74aedf0dda1205d8) }
 
 var fileDescriptor_74aedf0dda1205d8 = []byte{
-	// 285 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xcd, 0x4e, 0xf2, 0x40,
-	0x18, 0x85, 0xf9, 0xf9, 0xe8, 0x17, 0x5f, 0x8d, 0x8e, 0x13, 0x62, 0x8c, 0x1b, 0x17, 0xee, 0x48,
-	0xa0, 0x31, 0xac, 0x8c, 0xab, 0x4a, 0x07, 0xd2, 0x14, 0xdf, 0x21, 0xd3, 0x01, 0x12, 0x37, 0x4d,
-	0x69, 0x47, 0x9c, 0xc5, 0xcc, 0x10, 0x3a, 0x70, 0x85, 0x5e, 0x98, 0x41, 0x71, 0xa1, 0x6e, 0x9f,
-	0x93, 0xe7, 0x9c, 0xe4, 0xc0, 0x65, 0x65, 0x74, 0x58, 0x3a, 0x63, 0x9c, 0xad, 0x07, 0x9b, 0xad,
-	0xf3, 0x8e, 0xb6, 0x2b, 0xa3, 0x7b, 0xf7, 0x10, 0x64, 0xbe, 0xf0, 0xbb, 0x9a, 0x76, 0x81, 0xcc,
-	0x31, 0x66, 0xe3, 0x04, 0x59, 0x9c, 0x67, 0x32, 0x92, 0xf3, 0x8c, 0x34, 0x68, 0x00, 0x2d, 0x9e,
-	0x92, 0x26, 0x3d, 0x81, 0x0e, 0x13, 0x82, 0x0b, 0xd2, 0xea, 0xbd, 0x37, 0x21, 0x10, 0xaa, 0xa8,
-	0x9d, 0xfd, 0xe9, 0x08, 0x16, 0x65, 0x1c, 0x49, 0x83, 0x52, 0x38, 0x9f, 0x63, 0x8a, 0x7c, 0x89,
-	0x79, 0xcc, 0x16, 0xc9, 0x88, 0x91, 0xe6, 0x81, 0x25, 0x28, 0x99, 0xc0, 0x68, 0x9a, 0x1f, 0x8b,
-	0x28, 0x81, 0xb3, 0xa5, 0xe0, 0x38, 0xc9, 0x9f, 0x99, 0x14, 0xc9, 0x88, 0xb4, 0xe9, 0x05, 0x9c,
-	0x7e, 0x11, 0xb6, 0x60, 0x28, 0xc9, 0x3f, 0x7a, 0x03, 0x57, 0x53, 0x3e, 0x99, 0x24, 0x07, 0x84,
-	0xf1, 0x8c, 0x27, 0x28, 0x8f, 0x7a, 0x87, 0xde, 0xc1, 0xed, 0x9f, 0x6c, 0x26, 0xb8, 0xe4, 0x23,
-	0xfe, 0xbd, 0x11, 0xd0, 0x6b, 0xe8, 0xa6, 0xd1, 0x38, 0x8d, 0x7e, 0xeb, 0xff, 0x9f, 0x1e, 0x5f,
-	0x1e, 0xd6, 0xda, 0xbf, 0xed, 0x56, 0x83, 0xd2, 0x99, 0xd0, 0x6d, 0x94, 0x2d, 0xdd, 0xb6, 0x0a,
-	0x2b, 0xb5, 0xd7, 0xa5, 0xea, 0x9b, 0xc2, 0x16, 0x6b, 0x65, 0x94, 0xf5, 0x7d, 0x6d, 0xbd, 0xda,
-	0xbe, 0x16, 0xa5, 0x0a, 0xf7, 0xc3, 0x70, 0xed, 0xc2, 0xca, 0xe8, 0x55, 0xf0, 0x79, 0xe1, 0xf0,
-	0x23, 0x00, 0x00, 0xff, 0xff, 0x0a, 0x8a, 0xc7, 0x97, 0x57, 0x01, 0x00, 0x00,
+	// 332 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0xbd, 0x6e, 0xf2, 0x30,
+	0x18, 0x85, 0x09, 0x3f, 0xf9, 0xc0, 0xdf, 0x9f, 0x6b, 0xa1, 0xaa, 0xea, 0xd2, 0xa1, 0x1b, 0x12,
+	0x64, 0x60, 0xaa, 0x3a, 0xa0, 0x90, 0x98, 0x28, 0x4a, 0xfa, 0x1a, 0x39, 0x0e, 0x48, 0x5d, 0xa2,
+	0x90, 0xb8, 0x69, 0xa4, 0x3a, 0x46, 0x10, 0xb8, 0xc2, 0x5e, 0x58, 0x15, 0x28, 0x43, 0xdb, 0xed,
+	0xf8, 0x39, 0x3a, 0x8f, 0x87, 0x17, 0x5d, 0xe5, 0xaa, 0xb4, 0x32, 0xad, 0x94, 0xae, 0xf6, 0x93,
+	0xed, 0x4e, 0xd7, 0x9a, 0x74, 0x72, 0x55, 0x8e, 0x66, 0xc8, 0x8c, 0xea, 0xb4, 0x3e, 0xec, 0xc9,
+	0x10, 0xe1, 0x18, 0x5c, 0xba, 0xf0, 0x81, 0xba, 0x49, 0x24, 0x6c, 0x11, 0x47, 0xb8, 0x45, 0xfe,
+	0xa2, 0x01, 0x0b, 0x2e, 0x4f, 0x83, 0x60, 0xf4, 0x87, 0x72, 0xce, 0xf8, 0x85, 0xb4, 0x47, 0xef,
+	0x06, 0x32, 0xb9, 0x4c, 0xf7, 0xba, 0xfa, 0x6a, 0xe0, 0xd4, 0x8e, 0x18, 0xe0, 0x16, 0x21, 0xe8,
+	0x5f, 0x0c, 0x01, 0xb0, 0x35, 0x24, 0x2e, 0x5d, 0xf9, 0x0e, 0xc5, 0x46, 0xc3, 0x7c, 0x10, 0x94,
+	0x83, 0x1d, 0x26, 0x27, 0x1f, 0x6e, 0x37, 0xea, 0x35, 0x67, 0xe0, 0x25, 0x4f, 0x54, 0x70, 0xdf,
+	0xc1, 0x1d, 0xf2, 0x1f, 0xfd, 0x3e, 0x13, 0xba, 0xa2, 0x20, 0x70, 0x97, 0xdc, 0xa2, 0xeb, 0x90,
+	0x79, 0x9e, 0xdf, 0x20, 0x70, 0x97, 0xcc, 0x07, 0xf1, 0x39, 0xef, 0x91, 0x7b, 0x74, 0xf7, 0xa3,
+	0x5b, 0x72, 0x26, 0x98, 0xc3, 0x2e, 0x7f, 0x98, 0xe4, 0x06, 0x0d, 0x03, 0x7b, 0x11, 0xd8, 0xdf,
+	0xe7, 0xbf, 0x46, 0x33, 0xd4, 0x0f, 0x75, 0x11, 0xca, 0xa3, 0x7c, 0x23, 0x03, 0xd4, 0x13, 0xdc,
+	0x76, 0x28, 0x6e, 0x35, 0xd1, 0xa5, 0xf3, 0xd8, 0xc3, 0x06, 0xe9, 0xa3, 0xae, 0x0f, 0x0b, 0x86,
+	0xdb, 0x4d, 0x5a, 0xdb, 0x1c, 0x70, 0xa7, 0xa9, 0xcf, 0x82, 0xee, 0xfc, 0xf1, 0xf9, 0xa1, 0x28,
+	0xeb, 0xd7, 0xc3, 0x66, 0x92, 0x69, 0x65, 0xe9, 0xad, 0xac, 0x32, 0xbd, 0xcb, 0xad, 0x5c, 0x1e,
+	0xcb, 0x4c, 0x8e, 0x55, 0x5a, 0xa5, 0x85, 0x54, 0xb2, 0xaa, 0xc7, 0x65, 0x55, 0xcb, 0xdd, 0x4b,
+	0x9a, 0x49, 0xeb, 0x38, 0xb5, 0x0a, 0x6d, 0xe5, 0xaa, 0xdc, 0x98, 0xa7, 0x8b, 0x4c, 0x3f, 0x02,
+	0x00, 0x00, 0xff, 0xff, 0xab, 0xaf, 0x4b, 0x69, 0xa6, 0x01, 0x00, 0x00,
 }
diff --git a/go/dmi/hw_management_service.pb.go b/go/dmi/hw_management_service.pb.go
index b50ff9b..edf3b37 100644
--- a/go/dmi/hw_management_service.pb.go
+++ b/go/dmi/hw_management_service.pb.go
@@ -776,6 +776,343 @@
 	return ""
 }
 
+type EntitiesLogLevel struct {
+	LogLevel             LogLevel `protobuf:"varint,1,opt,name=logLevel,proto3,enum=dmi.LogLevel" json:"logLevel,omitempty"`
+	Entities             []string `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *EntitiesLogLevel) Reset()         { *m = EntitiesLogLevel{} }
+func (m *EntitiesLogLevel) String() string { return proto.CompactTextString(m) }
+func (*EntitiesLogLevel) ProtoMessage()    {}
+func (*EntitiesLogLevel) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{15}
+}
+
+func (m *EntitiesLogLevel) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_EntitiesLogLevel.Unmarshal(m, b)
+}
+func (m *EntitiesLogLevel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_EntitiesLogLevel.Marshal(b, m, deterministic)
+}
+func (m *EntitiesLogLevel) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_EntitiesLogLevel.Merge(m, src)
+}
+func (m *EntitiesLogLevel) XXX_Size() int {
+	return xxx_messageInfo_EntitiesLogLevel.Size(m)
+}
+func (m *EntitiesLogLevel) XXX_DiscardUnknown() {
+	xxx_messageInfo_EntitiesLogLevel.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_EntitiesLogLevel proto.InternalMessageInfo
+
+func (m *EntitiesLogLevel) GetLogLevel() LogLevel {
+	if m != nil {
+		return m.LogLevel
+	}
+	return LogLevel_TRACE
+}
+
+func (m *EntitiesLogLevel) GetEntities() []string {
+	if m != nil {
+		return m.Entities
+	}
+	return nil
+}
+
+type SetLogLevelRequest struct {
+	DeviceUuid           *Uuid               `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	Loglevels            []*EntitiesLogLevel `protobuf:"bytes,2,rep,name=loglevels,proto3" json:"loglevels,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *SetLogLevelRequest) Reset()         { *m = SetLogLevelRequest{} }
+func (m *SetLogLevelRequest) String() string { return proto.CompactTextString(m) }
+func (*SetLogLevelRequest) ProtoMessage()    {}
+func (*SetLogLevelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{16}
+}
+
+func (m *SetLogLevelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetLogLevelRequest.Unmarshal(m, b)
+}
+func (m *SetLogLevelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetLogLevelRequest.Marshal(b, m, deterministic)
+}
+func (m *SetLogLevelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetLogLevelRequest.Merge(m, src)
+}
+func (m *SetLogLevelRequest) XXX_Size() int {
+	return xxx_messageInfo_SetLogLevelRequest.Size(m)
+}
+func (m *SetLogLevelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetLogLevelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetLogLevelRequest proto.InternalMessageInfo
+
+func (m *SetLogLevelRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *SetLogLevelRequest) GetLoglevels() []*EntitiesLogLevel {
+	if m != nil {
+		return m.Loglevels
+	}
+	return nil
+}
+
+type SetLogLevelResponse struct {
+	Responses            []*DeviceLogResponse `protobuf:"bytes,1,rep,name=responses,proto3" json:"responses,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}             `json:"-"`
+	XXX_unrecognized     []byte               `json:"-"`
+	XXX_sizecache        int32                `json:"-"`
+}
+
+func (m *SetLogLevelResponse) Reset()         { *m = SetLogLevelResponse{} }
+func (m *SetLogLevelResponse) String() string { return proto.CompactTextString(m) }
+func (*SetLogLevelResponse) ProtoMessage()    {}
+func (*SetLogLevelResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{17}
+}
+
+func (m *SetLogLevelResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_SetLogLevelResponse.Unmarshal(m, b)
+}
+func (m *SetLogLevelResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_SetLogLevelResponse.Marshal(b, m, deterministic)
+}
+func (m *SetLogLevelResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_SetLogLevelResponse.Merge(m, src)
+}
+func (m *SetLogLevelResponse) XXX_Size() int {
+	return xxx_messageInfo_SetLogLevelResponse.Size(m)
+}
+func (m *SetLogLevelResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_SetLogLevelResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_SetLogLevelResponse proto.InternalMessageInfo
+
+func (m *SetLogLevelResponse) GetResponses() []*DeviceLogResponse {
+	if m != nil {
+		return m.Responses
+	}
+	return nil
+}
+
+type DeviceLogResponse struct {
+	DeviceUuid           *Uuid    `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	Status               Status   `protobuf:"varint,2,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	Reason               Reason   `protobuf:"varint,3,opt,name=reason,proto3,enum=dmi.Reason" json:"reason,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *DeviceLogResponse) Reset()         { *m = DeviceLogResponse{} }
+func (m *DeviceLogResponse) String() string { return proto.CompactTextString(m) }
+func (*DeviceLogResponse) ProtoMessage()    {}
+func (*DeviceLogResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{18}
+}
+
+func (m *DeviceLogResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DeviceLogResponse.Unmarshal(m, b)
+}
+func (m *DeviceLogResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DeviceLogResponse.Marshal(b, m, deterministic)
+}
+func (m *DeviceLogResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DeviceLogResponse.Merge(m, src)
+}
+func (m *DeviceLogResponse) XXX_Size() int {
+	return xxx_messageInfo_DeviceLogResponse.Size(m)
+}
+func (m *DeviceLogResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DeviceLogResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DeviceLogResponse proto.InternalMessageInfo
+
+func (m *DeviceLogResponse) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *DeviceLogResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *DeviceLogResponse) GetReason() Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return Reason_UNDEFINED_REASON
+}
+
+type GetLogLevelRequest struct {
+	DeviceUuid           *Uuid    `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	Entities             []string `protobuf:"bytes,2,rep,name=entities,proto3" json:"entities,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetLogLevelRequest) Reset()         { *m = GetLogLevelRequest{} }
+func (m *GetLogLevelRequest) String() string { return proto.CompactTextString(m) }
+func (*GetLogLevelRequest) ProtoMessage()    {}
+func (*GetLogLevelRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{19}
+}
+
+func (m *GetLogLevelRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLogLevelRequest.Unmarshal(m, b)
+}
+func (m *GetLogLevelRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLogLevelRequest.Marshal(b, m, deterministic)
+}
+func (m *GetLogLevelRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLogLevelRequest.Merge(m, src)
+}
+func (m *GetLogLevelRequest) XXX_Size() int {
+	return xxx_messageInfo_GetLogLevelRequest.Size(m)
+}
+func (m *GetLogLevelRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLogLevelRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLogLevelRequest proto.InternalMessageInfo
+
+func (m *GetLogLevelRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *GetLogLevelRequest) GetEntities() []string {
+	if m != nil {
+		return m.Entities
+	}
+	return nil
+}
+
+type GetLogLevelResponse struct {
+	DeviceUuid           *Uuid               `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	LogLevels            []*EntitiesLogLevel `protobuf:"bytes,2,rep,name=logLevels,proto3" json:"logLevels,omitempty"`
+	Status               Status              `protobuf:"varint,3,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	Reason               Reason              `protobuf:"varint,4,opt,name=reason,proto3,enum=dmi.Reason" json:"reason,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}            `json:"-"`
+	XXX_unrecognized     []byte              `json:"-"`
+	XXX_sizecache        int32               `json:"-"`
+}
+
+func (m *GetLogLevelResponse) Reset()         { *m = GetLogLevelResponse{} }
+func (m *GetLogLevelResponse) String() string { return proto.CompactTextString(m) }
+func (*GetLogLevelResponse) ProtoMessage()    {}
+func (*GetLogLevelResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{20}
+}
+
+func (m *GetLogLevelResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLogLevelResponse.Unmarshal(m, b)
+}
+func (m *GetLogLevelResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLogLevelResponse.Marshal(b, m, deterministic)
+}
+func (m *GetLogLevelResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLogLevelResponse.Merge(m, src)
+}
+func (m *GetLogLevelResponse) XXX_Size() int {
+	return xxx_messageInfo_GetLogLevelResponse.Size(m)
+}
+func (m *GetLogLevelResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLogLevelResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLogLevelResponse proto.InternalMessageInfo
+
+func (m *GetLogLevelResponse) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *GetLogLevelResponse) GetLogLevels() []*EntitiesLogLevel {
+	if m != nil {
+		return m.LogLevels
+	}
+	return nil
+}
+
+func (m *GetLogLevelResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *GetLogLevelResponse) GetReason() Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return Reason_UNDEFINED_REASON
+}
+
+type GetLoggableEntitiesRequest struct {
+	DeviceUuid           *Uuid    `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *GetLoggableEntitiesRequest) Reset()         { *m = GetLoggableEntitiesRequest{} }
+func (m *GetLoggableEntitiesRequest) String() string { return proto.CompactTextString(m) }
+func (*GetLoggableEntitiesRequest) ProtoMessage()    {}
+func (*GetLoggableEntitiesRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{21}
+}
+
+func (m *GetLoggableEntitiesRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_GetLoggableEntitiesRequest.Unmarshal(m, b)
+}
+func (m *GetLoggableEntitiesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_GetLoggableEntitiesRequest.Marshal(b, m, deterministic)
+}
+func (m *GetLoggableEntitiesRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_GetLoggableEntitiesRequest.Merge(m, src)
+}
+func (m *GetLoggableEntitiesRequest) XXX_Size() int {
+	return xxx_messageInfo_GetLoggableEntitiesRequest.Size(m)
+}
+func (m *GetLoggableEntitiesRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_GetLoggableEntitiesRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_GetLoggableEntitiesRequest proto.InternalMessageInfo
+
+func (m *GetLoggableEntitiesRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterType((*PhysicalInventoryRequest)(nil), "dmi.PhysicalInventoryRequest")
 	proto.RegisterType((*PhysicalInventoryResponse)(nil), "dmi.PhysicalInventoryResponse")
@@ -792,62 +1129,83 @@
 	proto.RegisterType((*GetLoggingEndpointResponse)(nil), "dmi.GetLoggingEndpointResponse")
 	proto.RegisterType((*SetMsgBusEndpointRequest)(nil), "dmi.SetMsgBusEndpointRequest")
 	proto.RegisterType((*GetMsgBusEndpointResponse)(nil), "dmi.GetMsgBusEndpointResponse")
+	proto.RegisterType((*EntitiesLogLevel)(nil), "dmi.EntitiesLogLevel")
+	proto.RegisterType((*SetLogLevelRequest)(nil), "dmi.SetLogLevelRequest")
+	proto.RegisterType((*SetLogLevelResponse)(nil), "dmi.SetLogLevelResponse")
+	proto.RegisterType((*DeviceLogResponse)(nil), "dmi.DeviceLogResponse")
+	proto.RegisterType((*GetLogLevelRequest)(nil), "dmi.GetLogLevelRequest")
+	proto.RegisterType((*GetLogLevelResponse)(nil), "dmi.GetLogLevelResponse")
+	proto.RegisterType((*GetLoggableEntitiesRequest)(nil), "dmi.GetLoggableEntitiesRequest")
 }
 
 func init() { proto.RegisterFile("dmi/hw_management_service.proto", fileDescriptor_eae902e73066286d) }
 
 var fileDescriptor_eae902e73066286d = []byte{
-	// 797 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x56, 0xcf, 0x4e, 0xdb, 0x4e,
-	0x10, 0x96, 0x09, 0x02, 0x65, 0xf8, 0x11, 0x7e, 0xb8, 0x15, 0x4a, 0x8c, 0x0a, 0xc8, 0x55, 0xd5,
-	0xbf, 0xc4, 0x28, 0x9c, 0xaa, 0x5e, 0x2a, 0x28, 0x4d, 0x50, 0x09, 0x42, 0x76, 0x51, 0xa4, 0x5e,
-	0x22, 0xc7, 0x9e, 0x38, 0x2b, 0xc5, 0xbb, 0xa9, 0xbd, 0x0e, 0xe2, 0x25, 0x7a, 0x68, 0x7b, 0xad,
-	0xd4, 0x07, 0xe9, 0x5b, 0xb4, 0x0f, 0x54, 0x79, 0xd7, 0x4e, 0x42, 0x62, 0x03, 0x42, 0x41, 0xea,
-	0xcd, 0xde, 0xf9, 0xf6, 0x9b, 0x99, 0x6f, 0x77, 0x66, 0x07, 0xb6, 0x5d, 0x9f, 0x18, 0xbd, 0x8b,
-	0xb6, 0x6f, 0x53, 0xdb, 0x43, 0x1f, 0x29, 0x6f, 0x87, 0x18, 0x0c, 0x89, 0x83, 0xd5, 0x41, 0xc0,
-	0x38, 0x53, 0x0b, 0xae, 0x4f, 0xb4, 0xf5, 0x18, 0xe5, 0x30, 0xdf, 0x67, 0x34, 0x94, 0xeb, 0xda,
-	0x7f, 0x72, 0x63, 0xf2, 0xb7, 0xe9, 0x31, 0xe6, 0xf5, 0xd1, 0x10, 0x7f, 0x9d, 0xa8, 0x6b, 0xa0,
-	0x3f, 0xe0, 0x97, 0xd2, 0xa8, 0xbf, 0x87, 0xf2, 0x59, 0xef, 0x32, 0x24, 0x8e, 0xdd, 0x3f, 0xa6,
-	0x43, 0xa4, 0x9c, 0x05, 0x97, 0x26, 0x7e, 0x8e, 0x30, 0xe4, 0xea, 0x0b, 0x58, 0x71, 0x31, 0x76,
-	0xd7, 0x8e, 0x22, 0xe2, 0x96, 0x95, 0x1d, 0xe5, 0xd9, 0x4a, 0xad, 0x58, 0x75, 0x7d, 0x52, 0x3d,
-	0x8f, 0x88, 0x6b, 0x82, 0xb4, 0xc6, 0xdf, 0xfa, 0x57, 0x05, 0x2a, 0x19, 0x44, 0xe1, 0x80, 0xd1,
-	0x10, 0xd5, 0xc7, 0xb0, 0x14, 0x72, 0x9b, 0x47, 0xa1, 0x20, 0x29, 0xd5, 0x56, 0x04, 0x89, 0x25,
-	0x96, 0xcc, 0xc4, 0x14, 0x83, 0x02, 0xb4, 0x43, 0x46, 0xcb, 0x0b, 0x13, 0x20, 0x53, 0x2c, 0x99,
-	0x89, 0x49, 0x7d, 0x09, 0x45, 0x92, 0xd2, 0x97, 0x0b, 0x22, 0xa2, 0x55, 0x81, 0x6b, 0xd8, 0x81,
-	0x7b, 0x61, 0x07, 0x68, 0x8e, 0xed, 0xfa, 0x4f, 0x05, 0x2a, 0x8d, 0xd6, 0x21, 0xf3, 0x07, 0x8c,
-	0x22, 0xe5, 0xc7, 0xb4, 0xcb, 0xea, 0xc8, 0xef, 0x90, 0x9e, 0xba, 0x07, 0x25, 0x27, 0xa5, 0x91,
-	0xf0, 0x85, 0x69, 0xf8, 0xea, 0x08, 0x20, 0x76, 0x3c, 0x99, 0xdc, 0x41, 0x6d, 0x1f, 0x45, 0xb4,
-	0xc5, 0x09, 0xd8, 0xa9, 0xed, 0xa3, 0xfe, 0x5d, 0x01, 0x2d, 0x2b, 0xc4, 0xb9, 0x0b, 0xf7, 0x0a,
-	0x8a, 0x23, 0xcf, 0x89, 0x70, 0x25, 0x81, 0x1b, 0xf9, 0x36, 0xc7, 0x00, 0xfd, 0xcf, 0xac, 0x72,
-	0xd6, 0xbf, 0xa5, 0x9c, 0x5a, 0x83, 0x65, 0xa7, 0x67, 0x53, 0x0f, 0xc3, 0xf2, 0xa2, 0x60, 0x2c,
-	0x0b, 0xc6, 0x26, 0x73, 0x49, 0x97, 0xd8, 0x9d, 0x3e, 0x8e, 0x13, 0x4b, 0x81, 0x7a, 0x77, 0x46,
-	0x6c, 0xeb, 0x3e, 0xc4, 0xd6, 0xbf, 0x29, 0xb0, 0x69, 0x71, 0x3b, 0xe0, 0xcd, 0xb8, 0x74, 0x09,
-	0xf5, 0xde, 0x09, 0x41, 0xee, 0xe1, 0x58, 0xa7, 0x8e, 0xa2, 0x70, 0x5d, 0x8d, 0x1a, 0x50, 0xb1,
-	0x38, 0x1b, 0x4c, 0xc7, 0x24, 0xcf, 0x54, 0x85, 0x45, 0xa1, 0xb5, 0x22, 0xb4, 0x16, 0xdf, 0xb1,
-	0x5c, 0x59, 0x1b, 0xe6, 0x2e, 0xd7, 0x09, 0x6c, 0x08, 0x1f, 0xe8, 0x4a, 0x17, 0xe1, 0xc8, 0x47,
-	0x0d, 0x96, 0x65, 0x02, 0xb1, 0x93, 0xc2, 0xf5, 0x87, 0x9c, 0x00, 0xf5, 0x1f, 0x0a, 0x54, 0x2c,
-	0xe4, 0x27, 0xcc, 0x8b, 0x83, 0x3e, 0xa2, 0xee, 0x80, 0x11, 0x7a, 0xa7, 0xbb, 0xfb, 0x1c, 0xfe,
-	0xef, 0x4b, 0x96, 0x36, 0x26, 0x34, 0x22, 0x8d, 0xa2, 0xb9, 0xd6, 0xbf, 0xca, 0x3e, 0x09, 0x15,
-	0x8d, 0xd5, 0x61, 0xfd, 0xe4, 0xda, 0xa6, 0xd0, 0xb3, 0x64, 0x59, 0x47, 0x11, 0x9e, 0x89, 0x3e,
-	0xe3, 0x38, 0x8e, 0x6e, 0xee, 0xa2, 0xfe, 0x52, 0x40, 0xab, 0x67, 0xc8, 0x30, 0xf7, 0x2b, 0x98,
-	0xa5, 0x52, 0xe1, 0xf6, 0x2a, 0x2d, 0x66, 0xab, 0x74, 0x08, 0x65, 0x0b, 0x79, 0x33, 0xf4, 0x0e,
-	0xa2, 0x70, 0xfa, 0x0c, 0x9f, 0xc2, 0x9a, 0x1f, 0x7a, 0x9d, 0x28, 0x1c, 0x3b, 0x94, 0xd7, 0xb6,
-	0x24, 0x97, 0x53, 0xbc, 0xfe, 0x45, 0x81, 0x4a, 0x7d, 0x96, 0x65, 0xee, 0x12, 0x64, 0x04, 0x54,
-	0xc8, 0x0a, 0xa8, 0xf6, 0x7b, 0x09, 0x2a, 0xa7, 0x36, 0x27, 0x43, 0x6c, 0xb4, 0x9a, 0xa3, 0x67,
-	0xdd, 0x92, 0xaf, 0xba, 0x6a, 0xc1, 0x83, 0x8c, 0xae, 0xa1, 0xe6, 0xde, 0x79, 0x6d, 0x27, 0x8d,
-	0x38, 0xaf, 0xd3, 0xec, 0x29, 0xea, 0x39, 0xa8, 0xb3, 0x45, 0xac, 0x6e, 0x25, 0x3b, 0x73, 0xda,
-	0x81, 0xb6, 0x9d, 0x6b, 0x4f, 0xc4, 0x6b, 0xc0, 0x7a, 0xac, 0xec, 0x95, 0xb2, 0x55, 0x37, 0xaa,
-	0x72, 0xd6, 0xa8, 0xa6, 0xb3, 0x46, 0xf5, 0x28, 0x9e, 0x35, 0xb4, 0x4d, 0x99, 0x41, 0x76, 0x8d,
-	0xb7, 0xe0, 0x61, 0x1d, 0xf9, 0xcc, 0xf0, 0xa0, 0x3e, 0x12, 0x9b, 0xf2, 0xa6, 0x13, 0x6d, 0x2b,
-	0xcf, 0x3c, 0xca, 0xbc, 0x05, 0x6a, 0x1d, 0xf9, 0x54, 0xc3, 0x4f, 0x32, 0xcf, 0x1d, 0x0b, 0x92,
-	0xcc, 0xf3, 0xdf, 0xe4, 0x44, 0xd2, 0x5b, 0x12, 0x5b, 0x37, 0x10, 0x4f, 0xbe, 0x3f, 0x1f, 0x05,
-	0xed, 0x54, 0xc1, 0xa6, 0x27, 0x95, 0xd7, 0xd0, 0xb4, 0x91, 0x3d, 0xa7, 0xa3, 0xbc, 0x15, 0x2a,
-	0x4c, 0xb3, 0x8e, 0x3b, 0x5e, 0x12, 0xd7, 0x35, 0xad, 0xc2, 0x84, 0xf5, 0x99, 0x52, 0x4c, 0x4e,
-	0x27, 0xaf, 0x44, 0x6f, 0x8c, 0xea, 0x83, 0xbc, 0x3e, 0x57, 0x39, 0xf3, 0xae, 0xcf, 0x56, 0x1a,
-	0x61, 0x76, 0x21, 0x1f, 0xbc, 0xf9, 0xf4, 0xda, 0x23, 0xbc, 0x17, 0x75, 0xaa, 0x0e, 0xf3, 0x0d,
-	0x36, 0x40, 0xea, 0xb0, 0xc0, 0x35, 0x64, 0x27, 0xdf, 0x1d, 0x8f, 0xcf, 0xbb, 0x84, 0x72, 0x0c,
-	0xba, 0xb6, 0x83, 0xc6, 0x70, 0xdf, 0xf0, 0x98, 0xe1, 0xfa, 0xa4, 0xb3, 0x24, 0x9c, 0xed, 0xff,
-	0x0d, 0x00, 0x00, 0xff, 0xff, 0xb0, 0x43, 0x0d, 0x3e, 0x6e, 0x0b, 0x00, 0x00,
+	// 1009 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0xcd, 0x6e, 0xdb, 0x46,
+	0x10, 0x06, 0x2d, 0x23, 0xb1, 0x46, 0x8d, 0x13, 0xaf, 0x5b, 0x57, 0xa2, 0x51, 0xc7, 0x60, 0x51,
+	0x34, 0x69, 0x1b, 0x29, 0x90, 0x7b, 0x29, 0x7a, 0x09, 0x92, 0xba, 0x52, 0x10, 0x39, 0x30, 0xc8,
+	0x06, 0x46, 0x8b, 0x02, 0x06, 0x25, 0x8e, 0x68, 0x02, 0xe4, 0xae, 0x4a, 0x2e, 0x15, 0xf8, 0x11,
+	0x7a, 0xe9, 0xa1, 0xed, 0xb5, 0x40, 0xaf, 0x7d, 0x87, 0x1e, 0xfa, 0x10, 0x7d, 0xa0, 0x82, 0xbb,
+	0xcb, 0x3f, 0x89, 0x74, 0x14, 0x57, 0x06, 0x72, 0xa3, 0x76, 0xbf, 0xfd, 0x76, 0xe6, 0x9b, 0xd9,
+	0x99, 0x11, 0xdc, 0x77, 0x02, 0xaf, 0x77, 0xf1, 0xfa, 0x3c, 0xb0, 0xa9, 0xed, 0x62, 0x80, 0x94,
+	0x9f, 0x47, 0x18, 0xce, 0xbd, 0x09, 0x76, 0x67, 0x21, 0xe3, 0x8c, 0x34, 0x9c, 0xc0, 0xd3, 0x77,
+	0x12, 0xd4, 0x84, 0x05, 0x01, 0xa3, 0x91, 0x5c, 0xd7, 0xdf, 0x93, 0x07, 0xd5, 0xaf, 0x7d, 0x97,
+	0x31, 0xd7, 0xc7, 0x9e, 0xf8, 0x35, 0x8e, 0xa7, 0x3d, 0x0c, 0x66, 0xfc, 0x52, 0x6e, 0x1a, 0xdf,
+	0x42, 0xfb, 0xf4, 0xe2, 0x32, 0xf2, 0x26, 0xb6, 0xff, 0x9c, 0xce, 0x91, 0x72, 0x16, 0x5e, 0x9a,
+	0xf8, 0x53, 0x8c, 0x11, 0x27, 0x9f, 0x41, 0xcb, 0xc1, 0xe4, 0xba, 0xf3, 0x38, 0xf6, 0x9c, 0xb6,
+	0x76, 0xa8, 0x3d, 0x68, 0xf5, 0x9b, 0x5d, 0x27, 0xf0, 0xba, 0xaf, 0x62, 0xcf, 0x31, 0x41, 0xee,
+	0x26, 0xdf, 0xc6, 0xaf, 0x1a, 0x74, 0x2a, 0x88, 0xa2, 0x19, 0xa3, 0x11, 0x92, 0x8f, 0xe1, 0x56,
+	0xc4, 0x6d, 0x1e, 0x47, 0x82, 0x64, 0xbb, 0xdf, 0x12, 0x24, 0x96, 0x58, 0x32, 0xd5, 0x56, 0x02,
+	0x0a, 0xd1, 0x8e, 0x18, 0x6d, 0x6f, 0x14, 0x40, 0xa6, 0x58, 0x32, 0xd5, 0x16, 0xf9, 0x1c, 0x9a,
+	0x5e, 0x4a, 0xdf, 0x6e, 0x08, 0x8b, 0xee, 0x08, 0xdc, 0xd0, 0x0e, 0x9d, 0xd7, 0x76, 0x88, 0x66,
+	0xbe, 0x6f, 0xfc, 0xa9, 0x41, 0x67, 0x78, 0xf6, 0x8c, 0x05, 0x33, 0x46, 0x91, 0xf2, 0xe7, 0x74,
+	0xca, 0x06, 0xc8, 0xaf, 0xe1, 0x1e, 0x79, 0x0c, 0xdb, 0x93, 0x94, 0x46, 0xc2, 0x37, 0x16, 0xe1,
+	0x77, 0x32, 0x80, 0x38, 0xf1, 0x49, 0xf1, 0x04, 0xb5, 0x03, 0x14, 0xd6, 0x36, 0x0b, 0xb0, 0x97,
+	0x76, 0x80, 0xc6, 0xef, 0x1a, 0xe8, 0x55, 0x26, 0xae, 0x5d, 0xb8, 0x2f, 0xa0, 0x99, 0xdd, 0xac,
+	0x84, 0xdb, 0x16, 0xb8, 0xec, 0x6e, 0x33, 0x07, 0x18, 0xff, 0x2e, 0x2b, 0x67, 0xbd, 0x5b, 0xca,
+	0x91, 0x3e, 0xdc, 0x9e, 0x5c, 0xd8, 0xd4, 0xc5, 0xa8, 0xbd, 0x29, 0x18, 0xdb, 0x82, 0xf1, 0x84,
+	0x39, 0xde, 0xd4, 0xb3, 0xc7, 0x3e, 0xe6, 0x8e, 0xa5, 0x40, 0x63, 0xba, 0x24, 0xb6, 0x75, 0x13,
+	0x62, 0x1b, 0xbf, 0x69, 0xb0, 0x6f, 0x71, 0x3b, 0xe4, 0x27, 0xc9, 0xd3, 0xf5, 0xa8, 0xfb, 0x8d,
+	0x10, 0xe4, 0x06, 0xc2, 0xba, 0x10, 0x8a, 0xc6, 0x55, 0x6f, 0xb4, 0x07, 0x1d, 0x8b, 0xb3, 0xd9,
+	0xa2, 0x4d, 0x32, 0xa6, 0x04, 0x36, 0x85, 0xd6, 0x9a, 0xd0, 0x5a, 0x7c, 0x27, 0x72, 0x55, 0x1d,
+	0x58, 0xbb, 0x5c, 0x23, 0xd8, 0x13, 0x77, 0xa0, 0x23, 0xaf, 0x88, 0xb2, 0x3b, 0xfa, 0x70, 0x5b,
+	0x3a, 0x90, 0x5c, 0xd2, 0xb8, 0x3a, 0xc8, 0x0a, 0x68, 0xfc, 0xa1, 0x41, 0xc7, 0x42, 0x3e, 0x62,
+	0x6e, 0x62, 0xf4, 0x31, 0x75, 0x66, 0xcc, 0xa3, 0xd7, 0xca, 0xdd, 0x87, 0x70, 0xcf, 0x97, 0x2c,
+	0xe7, 0xa8, 0x68, 0x84, 0x1b, 0x4d, 0xf3, 0xae, 0x5f, 0x66, 0x2f, 0x42, 0x45, 0x61, 0x9d, 0x30,
+	0x5f, 0xa5, 0x6d, 0x0a, 0x3d, 0x55, 0xcb, 0x06, 0x0a, 0xf3, 0x4c, 0x0c, 0x18, 0xc7, 0xdc, 0xba,
+	0xb5, 0x8b, 0xfa, 0xb7, 0x06, 0xfa, 0xa0, 0x42, 0x86, 0xb5, 0xa7, 0x60, 0x95, 0x4a, 0x8d, 0xd5,
+	0x55, 0xda, 0xac, 0x56, 0xe9, 0x19, 0xb4, 0x2d, 0xe4, 0x27, 0x91, 0xfb, 0x34, 0x8e, 0x16, 0x63,
+	0xf8, 0x29, 0xdc, 0x0d, 0x22, 0x77, 0x1c, 0x47, 0xf9, 0x85, 0x32, 0x6d, 0xb7, 0xe5, 0x72, 0x8a,
+	0x37, 0x7e, 0xd1, 0xa0, 0x33, 0x58, 0x66, 0x59, 0xbb, 0x04, 0x15, 0x06, 0x35, 0x2a, 0x0d, 0xfa,
+	0x1e, 0xee, 0x1d, 0x53, 0xee, 0x71, 0x0f, 0xa3, 0x11, 0x73, 0x47, 0x38, 0x47, 0x9f, 0x3c, 0x84,
+	0x2d, 0x5f, 0x7d, 0x2b, 0x43, 0x64, 0x47, 0x4b, 0x01, 0x66, 0xb6, 0x4d, 0x74, 0xd8, 0x42, 0x75,
+	0xbc, 0xbd, 0x71, 0xd8, 0x78, 0xd0, 0x34, 0xb3, 0xdf, 0x46, 0x0c, 0x44, 0x66, 0xbd, 0x3c, 0x74,
+	0x8d, 0x74, 0x3f, 0x82, 0xa6, 0x9f, 0x4c, 0x0a, 0x73, 0xf4, 0x25, 0x7d, 0xab, 0xff, 0x81, 0x40,
+	0x2e, 0x9a, 0x6c, 0xe6, 0x38, 0xe3, 0x05, 0xec, 0x96, 0xae, 0x55, 0xda, 0x7e, 0x09, 0xcd, 0x50,
+	0x7d, 0xa7, 0x4f, 0x77, 0x4f, 0x70, 0xc9, 0x17, 0x3e, 0x62, 0x6e, 0x0a, 0x35, 0x73, 0xa0, 0xf1,
+	0xb3, 0x06, 0x3b, 0x4b, 0x80, 0xb7, 0xf2, 0x21, 0x8f, 0xe9, 0xc6, 0x2a, 0x31, 0x6d, 0xd4, 0xbf,
+	0x9f, 0x1f, 0x81, 0x0c, 0xfe, 0x9f, 0x9e, 0x57, 0x45, 0xeb, 0x1f, 0x0d, 0x76, 0x07, 0x15, 0xba,
+	0xbd, 0x7d, 0xbc, 0x46, 0x2b, 0xc6, 0x4b, 0xe2, 0x0a, 0x02, 0x35, 0x56, 0x11, 0x68, 0xb3, 0x5e,
+	0xa0, 0x61, 0x56, 0x5f, 0x92, 0x42, 0x9c, 0xde, 0x79, 0x0d, 0xa1, 0xfa, 0x7f, 0x6d, 0x41, 0xe7,
+	0xa5, 0xcd, 0xbd, 0x39, 0x0e, 0xcf, 0x4e, 0xb2, 0x61, 0xd7, 0x92, 0xb3, 0x2e, 0xb1, 0x60, 0xb7,
+	0xa2, 0x97, 0x92, 0xda, 0x4e, 0xa0, 0x1f, 0xa6, 0x2e, 0xd5, 0xf5, 0xdf, 0xc7, 0x1a, 0x79, 0x05,
+	0x64, 0xb9, 0xb5, 0x91, 0x03, 0x75, 0xb2, 0xa6, 0x49, 0xea, 0xf7, 0x6b, 0xf7, 0x55, 0xf8, 0x86,
+	0xb0, 0x93, 0xd4, 0x9b, 0x52, 0x33, 0x23, 0x7b, 0x5d, 0x39, 0x81, 0x77, 0xd3, 0x09, 0xbc, 0x7b,
+	0x9c, 0x4c, 0xe0, 0xfa, 0xbe, 0xf4, 0xa0, 0xba, 0xf3, 0x9d, 0xc1, 0xfb, 0x03, 0xe4, 0x4b, 0x23,
+	0x35, 0xf9, 0x48, 0x1c, 0xaa, 0x9b, 0xd9, 0xf5, 0x83, 0xba, 0xed, 0xcc, 0xf3, 0x33, 0x91, 0xd7,
+	0x0b, 0x63, 0x90, 0xf2, 0xbc, 0x76, 0x58, 0x56, 0x9e, 0xd7, 0x4f, 0xaa, 0x4a, 0xd2, 0x15, 0x89,
+	0xad, 0x37, 0x10, 0x17, 0xa7, 0xb2, 0xef, 0xd2, 0xba, 0x56, 0xea, 0x24, 0x2a, 0x52, 0x75, 0x6d,
+	0x5e, 0xcf, 0xf6, 0x6b, 0xfa, 0xec, 0x93, 0xf4, 0x75, 0x97, 0x58, 0xf3, 0xfc, 0x54, 0x76, 0x5d,
+	0xd1, 0x40, 0x4d, 0xd8, 0x59, 0x6a, 0x50, 0x2a, 0x3a, 0x75, 0x8d, 0xeb, 0x8d, 0x56, 0xbd, 0x90,
+	0xe9, 0x53, 0xe6, 0xac, 0x4b, 0x9f, 0x83, 0xd4, 0xc2, 0x9a, 0xf6, 0x76, 0x9a, 0x56, 0x98, 0xd2,
+	0xfb, 0x24, 0x25, 0xc7, 0x2a, 0x5e, 0xae, 0xde, 0x2e, 0x00, 0xca, 0xc5, 0xe9, 0x09, 0xb4, 0x0a,
+	0xb5, 0x9e, 0x7c, 0x58, 0x88, 0x41, 0xb1, 0x48, 0x2a, 0x06, 0xab, 0x9a, 0x61, 0xb0, 0xc4, 0x30,
+	0xa8, 0x63, 0xa8, 0xb0, 0xe1, 0xe9, 0xd7, 0x3f, 0x7c, 0xe5, 0x7a, 0xfc, 0x22, 0x1e, 0x77, 0x27,
+	0x2c, 0xe8, 0xb1, 0x19, 0xd2, 0x09, 0x0b, 0x9d, 0x9e, 0xac, 0x26, 0x8f, 0xf2, 0xbf, 0xca, 0x8f,
+	0x3c, 0xca, 0x31, 0x9c, 0xda, 0x13, 0xec, 0xcd, 0x8f, 0x7a, 0x2e, 0xeb, 0x39, 0x81, 0x37, 0xbe,
+	0x25, 0x24, 0x3c, 0xfa, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf2, 0x86, 0xe7, 0xb8, 0x5a, 0x0f, 0x00,
+	0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -890,6 +1248,17 @@
 	SetMsgBusEndpoint(ctx context.Context, in *SetMsgBusEndpointRequest, opts ...grpc.CallOption) (*SetRemoteEndpointResponse, error)
 	// Gets the configured location to which the events and metrics are being shipped
 	GetMsgBusEndpoint(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*GetMsgBusEndpointResponse, error)
+	// Gets the entities of a device on which log can be configured. A few are expected, like OS, PON Management etc.
+	// In general an entity is any item within an hardware system that can emit logs, e.g. service, process, subsystem,
+	// interface, package etc.
+	GetLoggableEntities(ctx context.Context, in *GetLoggableEntitiesRequest, opts ...grpc.CallOption) (*GetLogLevelResponse, error)
+	// Sets the log level for one or more devices for each given entity to a certain level.
+	// If only one EntitiesLogLevel is provided for the device and that request contains only a log level with
+	// no entity in the list it's assumed that the caller wants to set that level for all the entities.
+	SetLogLevel(ctx context.Context, in *SetLogLevelRequest, opts ...grpc.CallOption) (*SetLogLevelResponse, error)
+	// Gets the configured log level for a certain entity on a certain device.
+	// If no entity is specified in the request all the entities with their log level should be returned.
+	GetLogLevel(ctx context.Context, in *GetLogLevelRequest, opts ...grpc.CallOption) (*GetLogLevelResponse, error)
 }
 
 type nativeHWManagementServiceClient struct {
@@ -1059,6 +1428,33 @@
 	return out, nil
 }
 
+func (c *nativeHWManagementServiceClient) GetLoggableEntities(ctx context.Context, in *GetLoggableEntitiesRequest, opts ...grpc.CallOption) (*GetLogLevelResponse, error) {
+	out := new(GetLogLevelResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/GetLoggableEntities", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *nativeHWManagementServiceClient) SetLogLevel(ctx context.Context, in *SetLogLevelRequest, opts ...grpc.CallOption) (*SetLogLevelResponse, error) {
+	out := new(SetLogLevelResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/SetLogLevel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *nativeHWManagementServiceClient) GetLogLevel(ctx context.Context, in *GetLogLevelRequest, opts ...grpc.CallOption) (*GetLogLevelResponse, error) {
+	out := new(GetLogLevelResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/GetLogLevel", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // NativeHWManagementServiceServer is the server API for NativeHWManagementService service.
 type NativeHWManagementServiceServer interface {
 	// Initializes context for a device and sets up required states
@@ -1089,6 +1485,17 @@
 	SetMsgBusEndpoint(context.Context, *SetMsgBusEndpointRequest) (*SetRemoteEndpointResponse, error)
 	// Gets the configured location to which the events and metrics are being shipped
 	GetMsgBusEndpoint(context.Context, *empty.Empty) (*GetMsgBusEndpointResponse, error)
+	// Gets the entities of a device on which log can be configured. A few are expected, like OS, PON Management etc.
+	// In general an entity is any item within an hardware system that can emit logs, e.g. service, process, subsystem,
+	// interface, package etc.
+	GetLoggableEntities(context.Context, *GetLoggableEntitiesRequest) (*GetLogLevelResponse, error)
+	// Sets the log level for one or more devices for each given entity to a certain level.
+	// If only one EntitiesLogLevel is provided for the device and that request contains only a log level with
+	// no entity in the list it's assumed that the caller wants to set that level for all the entities.
+	SetLogLevel(context.Context, *SetLogLevelRequest) (*SetLogLevelResponse, error)
+	// Gets the configured log level for a certain entity on a certain device.
+	// If no entity is specified in the request all the entities with their log level should be returned.
+	GetLogLevel(context.Context, *GetLogLevelRequest) (*GetLogLevelResponse, error)
 }
 
 func RegisterNativeHWManagementServiceServer(s *grpc.Server, srv NativeHWManagementServiceServer) {
@@ -1284,6 +1691,60 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _NativeHWManagementService_GetLoggableEntities_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLoggableEntitiesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).GetLoggableEntities(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/GetLoggableEntities",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).GetLoggableEntities(ctx, req.(*GetLoggableEntitiesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NativeHWManagementService_SetLogLevel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetLogLevelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).SetLogLevel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/SetLogLevel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).SetLogLevel(ctx, req.(*SetLogLevelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _NativeHWManagementService_GetLogLevel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetLogLevelRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).GetLogLevel(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/GetLogLevel",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).GetLogLevel(ctx, req.(*GetLogLevelRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _NativeHWManagementService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "dmi.NativeHWManagementService",
 	HandlerType: (*NativeHWManagementServiceServer)(nil),
@@ -1316,6 +1777,18 @@
 			MethodName: "GetMsgBusEndpoint",
 			Handler:    _NativeHWManagementService_GetMsgBusEndpoint_Handler,
 		},
+		{
+			MethodName: "GetLoggableEntities",
+			Handler:    _NativeHWManagementService_GetLoggableEntities_Handler,
+		},
+		{
+			MethodName: "SetLogLevel",
+			Handler:    _NativeHWManagementService_SetLogLevel_Handler,
+		},
+		{
+			MethodName: "GetLogLevel",
+			Handler:    _NativeHWManagementService_GetLogLevel_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/protos/dmi/commons.proto b/protos/dmi/commons.proto
index e6f7d1b..60fdbfd 100644
--- a/protos/dmi/commons.proto
+++ b/protos/dmi/commons.proto
@@ -7,8 +7,8 @@
 
 enum Status {
     UNDEFINED_STATUS = 0;
-    OK = 1;
-    ERROR = 2;
+    OK_STATUS = 1;
+    ERROR_STATUS = 2;
 }
 
 // Reason for the failure of request
@@ -22,3 +22,12 @@
     LOGGING_ENDPOINT_PROTOCOL_ERROR = 6;
     KAFKA_ENDPOINT_ERROR = 7;
 }
+
+//Log Level
+enum LogLevel {
+    TRACE = 0;
+    DEBUG = 1;
+    INFO  = 2;
+    WARN  = 3;
+    ERROR = 4;
+}
\ No newline at end of file
diff --git a/protos/dmi/hw_management_service.proto b/protos/dmi/hw_management_service.proto
index dd50bb8..a805b03 100644
--- a/protos/dmi/hw_management_service.proto
+++ b/protos/dmi/hw_management_service.proto
@@ -90,6 +90,44 @@
     string msgbus_endpoint = 3;
 }
 
+message EntitiesLogLevel {
+    LogLevel logLevel = 1;
+    repeated string entities = 2;
+}
+
+message SetLogLevelRequest {
+    Uuid device_uuid = 1;
+    repeated EntitiesLogLevel loglevels = 2;
+}
+
+message SetLogLevelResponse {
+    repeated DeviceLogResponse responses = 1;
+}
+
+message DeviceLogResponse{
+    Uuid device_uuid = 1;
+    Status status = 2;
+    Reason reason = 3;
+}
+
+message GetLogLevelRequest {
+    Uuid device_uuid = 1;
+    repeated string entities = 2;
+}
+
+message GetLogLevelResponse {
+    Uuid device_uuid = 1;
+    repeated EntitiesLogLevel logLevels = 2;
+    Status status = 3;
+    Reason reason = 4;
+}
+
+message GetLoggableEntitiesRequest {
+    Uuid device_uuid = 1;
+}
+
+
+
 service NativeHWManagementService {
     // Initializes context for a device and sets up required states
     // In the call to StartManagingDevice, the fields of ModifiableComponent which are relevant
@@ -128,4 +166,18 @@
 
     // Gets the configured location to which the events and metrics are being shipped
     rpc GetMsgBusEndpoint(google.protobuf.Empty) returns(GetMsgBusEndpointResponse);
+
+    // Gets the entities of a device on which log can be configured. A few are expected, like OS, PON Management etc.
+    // In general an entity is any item within an hardware system that can emit logs, e.g. service, process, subsystem,
+    // interface, package etc.
+    rpc GetLoggableEntities(GetLoggableEntitiesRequest) returns(GetLogLevelResponse);
+
+    // Sets the log level for one or more devices for each given entity to a certain level.
+    // If only one EntitiesLogLevel is provided for the device and that request contains only a log level with
+    // no entity in the list it's assumed that the caller wants to set that level for all the entities.
+    rpc SetLogLevel(SetLogLevelRequest) returns(SetLogLevelResponse);
+
+    // Gets the configured log level for a certain entity on a certain device.
+    // If no entity is specified in the request all the entities with their log level should be returned.
+    rpc GetLogLevel(GetLogLevelRequest) returns(GetLogLevelResponse);
 }
diff --git a/python/dmi/commons_pb2.py b/python/dmi/commons_pb2.py
index 8decd2b..fb2f027 100644
--- a/python/dmi/commons_pb2.py
+++ b/python/dmi/commons_pb2.py
@@ -20,7 +20,7 @@
   syntax='proto3',
   serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x11\x64mi/commons.proto\x12\x03\x64mi*1\n\x06Status\x12\x14\n\x10UNDEFINED_STATUS\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02*\xc4\x01\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\x12\x1a\n\x16LOGGING_ENDPOINT_ERROR\x10\x05\x12#\n\x1fLOGGING_ENDPOINT_PROTOCOL_ERROR\x10\x06\x12\x18\n\x14KAFKA_ENDPOINT_ERROR\x10\x07\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
+  serialized_pb=b'\n\x11\x64mi/commons.proto\x12\x03\x64mi*?\n\x06Status\x12\x14\n\x10UNDEFINED_STATUS\x10\x00\x12\r\n\tOK_STATUS\x10\x01\x12\x10\n\x0c\x45RROR_STATUS\x10\x02*\xc4\x01\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\x12\x1a\n\x16LOGGING_ENDPOINT_ERROR\x10\x05\x12#\n\x1fLOGGING_ENDPOINT_PROTOCOL_ERROR\x10\x06\x12\x18\n\x14KAFKA_ENDPOINT_ERROR\x10\x07*?\n\x08LogLevel\x12\t\n\x05TRACE\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x08\n\x04INFO\x10\x02\x12\x08\n\x04WARN\x10\x03\x12\t\n\x05\x45RROR\x10\x04\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
 )
 
 _STATUS = _descriptor.EnumDescriptor(
@@ -36,12 +36,12 @@
       type=None,
       create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
-      name='OK', index=1, number=1,
+      name='OK_STATUS', index=1, number=1,
       serialized_options=None,
       type=None,
       create_key=_descriptor._internal_create_key),
     _descriptor.EnumValueDescriptor(
-      name='ERROR', index=2, number=2,
+      name='ERROR_STATUS', index=2, number=2,
       serialized_options=None,
       type=None,
       create_key=_descriptor._internal_create_key),
@@ -49,7 +49,7 @@
   containing_type=None,
   serialized_options=None,
   serialized_start=26,
-  serialized_end=75,
+  serialized_end=89,
 )
 _sym_db.RegisterEnumDescriptor(_STATUS)
 
@@ -104,15 +104,56 @@
   ],
   containing_type=None,
   serialized_options=None,
-  serialized_start=78,
-  serialized_end=274,
+  serialized_start=92,
+  serialized_end=288,
 )
 _sym_db.RegisterEnumDescriptor(_REASON)
 
 Reason = enum_type_wrapper.EnumTypeWrapper(_REASON)
+_LOGLEVEL = _descriptor.EnumDescriptor(
+  name='LogLevel',
+  full_name='dmi.LogLevel',
+  filename=None,
+  file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='TRACE', index=0, number=0,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='DEBUG', index=1, number=1,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='INFO', index=2, number=2,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='WARN', index=3, number=3,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='ERROR', index=4, number=4,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=290,
+  serialized_end=353,
+)
+_sym_db.RegisterEnumDescriptor(_LOGLEVEL)
+
+LogLevel = enum_type_wrapper.EnumTypeWrapper(_LOGLEVEL)
 UNDEFINED_STATUS = 0
-OK = 1
-ERROR = 2
+OK_STATUS = 1
+ERROR_STATUS = 2
 UNDEFINED_REASON = 0
 UNKNOWN_DEVICE = 1
 INTERNAL_ERROR = 2
@@ -121,10 +162,16 @@
 LOGGING_ENDPOINT_ERROR = 5
 LOGGING_ENDPOINT_PROTOCOL_ERROR = 6
 KAFKA_ENDPOINT_ERROR = 7
+TRACE = 0
+DEBUG = 1
+INFO = 2
+WARN = 3
+ERROR = 4
 
 
 DESCRIPTOR.enum_types_by_name['Status'] = _STATUS
 DESCRIPTOR.enum_types_by_name['Reason'] = _REASON
+DESCRIPTOR.enum_types_by_name['LogLevel'] = _LOGLEVEL
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
 
diff --git a/python/dmi/hw_management_service_pb2.py b/python/dmi/hw_management_service_pb2.py
index b34a867..58de7dc 100644
--- a/python/dmi/hw_management_service_pb2.py
+++ b/python/dmi/hw_management_service_pb2.py
@@ -22,7 +22,7 @@
   syntax='proto3',
   serialized_options=b'Z9github.com/opencord/device-management-interface/v3/go/dmi',
   create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x1f\x64mi/hw_management_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\x1a\x1bgoogle/protobuf/empty.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\"y\n\x1aHWComponentInfoGetResponse\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\tcomponent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\"\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.Reason\"C\n\x16ManagedDevicesResponse\x12)\n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x18.dmi.ModifiableComponent\"o\n\x19SetLoggingEndpointRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12\x18\n\x10logging_endpoint\x18\x02 \x01(\t\x12\x18\n\x10logging_protocol\x18\x03 \x01(\t\"U\n\x19SetRemoteEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"\x8a\x01\n\x1aGetLoggingEndpointResponse\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\x18\n\x10logging_endpoint\x18\x03 \x01(\t\x12\x18\n\x10logging_protocol\x18\x04 \x01(\t\"3\n\x18SetMsgBusEndpointRequest\x12\x17\n\x0fmsgbus_endpoint\x18\x01 \x01(\t\"n\n\x19GetMsgBusEndpointResponse\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\x17\n\x0fmsgbus_endpoint\x18\x03 \x01(\t2\xd3\x06\n\x19NativeHWManagementService\x12S\n\x13StartManagingDevice\x12\x18.dmi.ModifiableComponent\x1a .dmi.StartManagingDeviceResponse0\x01\x12U\n\x12StopManagingDevice\x12\x1e.dmi.StopManagingDeviceRequest\x1a\x1f.dmi.StopManagingDeviceResponse\x12H\n\x11GetManagedDevices\x12\x16.google.protobuf.Empty\x1a\x1b.dmi.ManagedDevicesResponse\x12W\n\x14GetPhysicalInventory\x12\x1d.dmi.PhysicalInventoryRequest\x1a\x1e.dmi.PhysicalInventoryResponse0\x01\x12W\n\x12GetHWComponentInfo\x12\x1e.dmi.HWComponentInfoGetRequest\x1a\x1f.dmi.HWComponentInfoGetResponse0\x01\x12U\n\x12SetHWComponentInfo\x12\x1e.dmi.HWComponentInfoSetRequest\x1a\x1f.dmi.HWComponentInfoSetResponse\x12T\n\x12SetLoggingEndpoint\x12\x1e.dmi.SetLoggingEndpointRequest\x1a\x1e.dmi.SetRemoteEndpointResponse\x12@\n\x12GetLoggingEndpoint\x12\t.dmi.Uuid\x1a\x1f.dmi.GetLoggingEndpointResponse\x12R\n\x11SetMsgBusEndpoint\x12\x1d.dmi.SetMsgBusEndpointRequest\x1a\x1e.dmi.SetRemoteEndpointResponse\x12K\n\x11GetMsgBusEndpoint\x12\x16.google.protobuf.Empty\x1a\x1e.dmi.GetMsgBusEndpointResponseB;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
+  serialized_pb=b'\n\x1f\x64mi/hw_management_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\x1a\x1bgoogle/protobuf/empty.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\"y\n\x1aHWComponentInfoGetResponse\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\tcomponent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\"\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.Reason\"C\n\x16ManagedDevicesResponse\x12)\n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x18.dmi.ModifiableComponent\"o\n\x19SetLoggingEndpointRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12\x18\n\x10logging_endpoint\x18\x02 \x01(\t\x12\x18\n\x10logging_protocol\x18\x03 \x01(\t\"U\n\x19SetRemoteEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x02 \x01(\x0e\x32\x0b.dmi.Reason\"\x8a\x01\n\x1aGetLoggingEndpointResponse\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\x18\n\x10logging_endpoint\x18\x03 \x01(\t\x12\x18\n\x10logging_protocol\x18\x04 \x01(\t\"3\n\x18SetMsgBusEndpointRequest\x12\x17\n\x0fmsgbus_endpoint\x18\x01 \x01(\t\"n\n\x19GetMsgBusEndpointResponse\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\x17\n\x0fmsgbus_endpoint\x18\x03 \x01(\t\"E\n\x10\x45ntitiesLogLevel\x12\x1f\n\x08logLevel\x18\x01 \x01(\x0e\x32\r.dmi.LogLevel\x12\x10\n\x08\x65ntities\x18\x02 \x03(\t\"^\n\x12SetLogLevelRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12(\n\tloglevels\x18\x02 \x03(\x0b\x32\x15.dmi.EntitiesLogLevel\"@\n\x13SetLogLevelResponse\x12)\n\tresponses\x18\x01 \x03(\x0b\x32\x16.dmi.DeviceLogResponse\"m\n\x11\x44\x65viceLogResponse\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12\x1b\n\x06status\x18\x02 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x03 \x01(\x0e\x32\x0b.dmi.Reason\"F\n\x12GetLogLevelRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12\x10\n\x08\x65ntities\x18\x02 \x03(\t\"\x99\x01\n\x13GetLogLevelResponse\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12(\n\tlogLevels\x18\x02 \x03(\x0b\x32\x15.dmi.EntitiesLogLevel\x12\x1b\n\x06status\x18\x03 \x01(\x0e\x32\x0b.dmi.Status\x12\x1b\n\x06reason\x18\x04 \x01(\x0e\x32\x0b.dmi.Reason\"<\n\x1aGetLoggableEntitiesRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid2\xa9\x08\n\x19NativeHWManagementService\x12S\n\x13StartManagingDevice\x12\x18.dmi.ModifiableComponent\x1a .dmi.StartManagingDeviceResponse0\x01\x12U\n\x12StopManagingDevice\x12\x1e.dmi.StopManagingDeviceRequest\x1a\x1f.dmi.StopManagingDeviceResponse\x12H\n\x11GetManagedDevices\x12\x16.google.protobuf.Empty\x1a\x1b.dmi.ManagedDevicesResponse\x12W\n\x14GetPhysicalInventory\x12\x1d.dmi.PhysicalInventoryRequest\x1a\x1e.dmi.PhysicalInventoryResponse0\x01\x12W\n\x12GetHWComponentInfo\x12\x1e.dmi.HWComponentInfoGetRequest\x1a\x1f.dmi.HWComponentInfoGetResponse0\x01\x12U\n\x12SetHWComponentInfo\x12\x1e.dmi.HWComponentInfoSetRequest\x1a\x1f.dmi.HWComponentInfoSetResponse\x12T\n\x12SetLoggingEndpoint\x12\x1e.dmi.SetLoggingEndpointRequest\x1a\x1e.dmi.SetRemoteEndpointResponse\x12@\n\x12GetLoggingEndpoint\x12\t.dmi.Uuid\x1a\x1f.dmi.GetLoggingEndpointResponse\x12R\n\x11SetMsgBusEndpoint\x12\x1d.dmi.SetMsgBusEndpointRequest\x1a\x1e.dmi.SetRemoteEndpointResponse\x12K\n\x11GetMsgBusEndpoint\x12\x16.google.protobuf.Empty\x1a\x1e.dmi.GetMsgBusEndpointResponse\x12P\n\x13GetLoggableEntities\x12\x1f.dmi.GetLoggableEntitiesRequest\x1a\x18.dmi.GetLogLevelResponse\x12@\n\x0bSetLogLevel\x12\x17.dmi.SetLogLevelRequest\x1a\x18.dmi.SetLogLevelResponse\x12@\n\x0bGetLogLevel\x12\x17.dmi.GetLogLevelRequest\x1a\x18.dmi.GetLogLevelResponseB;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_empty__pb2.DESCRIPTOR,])
 
@@ -655,6 +655,286 @@
   serialized_end=1603,
 )
 
+
+_ENTITIESLOGLEVEL = _descriptor.Descriptor(
+  name='EntitiesLogLevel',
+  full_name='dmi.EntitiesLogLevel',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='logLevel', full_name='dmi.EntitiesLogLevel.logLevel', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='entities', full_name='dmi.EntitiesLogLevel.entities', index=1,
+      number=2, type=9, cpp_type=9, 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1605,
+  serialized_end=1674,
+)
+
+
+_SETLOGLEVELREQUEST = _descriptor.Descriptor(
+  name='SetLogLevelRequest',
+  full_name='dmi.SetLogLevelRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.SetLogLevelRequest.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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='loglevels', full_name='dmi.SetLogLevelRequest.loglevels', 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1676,
+  serialized_end=1770,
+)
+
+
+_SETLOGLEVELRESPONSE = _descriptor.Descriptor(
+  name='SetLogLevelResponse',
+  full_name='dmi.SetLogLevelResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='responses', full_name='dmi.SetLogLevelResponse.responses', 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1772,
+  serialized_end=1836,
+)
+
+
+_DEVICELOGRESPONSE = _descriptor.Descriptor(
+  name='DeviceLogResponse',
+  full_name='dmi.DeviceLogResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.DeviceLogResponse.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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.DeviceLogResponse.status', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='reason', full_name='dmi.DeviceLogResponse.reason', 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1838,
+  serialized_end=1947,
+)
+
+
+_GETLOGLEVELREQUEST = _descriptor.Descriptor(
+  name='GetLogLevelRequest',
+  full_name='dmi.GetLogLevelRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.GetLogLevelRequest.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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='entities', full_name='dmi.GetLogLevelRequest.entities', index=1,
+      number=2, type=9, cpp_type=9, 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=1949,
+  serialized_end=2019,
+)
+
+
+_GETLOGLEVELRESPONSE = _descriptor.Descriptor(
+  name='GetLogLevelResponse',
+  full_name='dmi.GetLogLevelResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.GetLogLevelResponse.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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='logLevels', full_name='dmi.GetLogLevelResponse.logLevels', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.GetLogLevelResponse.status', 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,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='reason', full_name='dmi.GetLogLevelResponse.reason', 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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=2022,
+  serialized_end=2175,
+)
+
+
+_GETLOGGABLEENTITIESREQUEST = _descriptor.Descriptor(
+  name='GetLoggableEntitiesRequest',
+  full_name='dmi.GetLoggableEntitiesRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.GetLoggableEntitiesRequest.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,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=2177,
+  serialized_end=2237,
+)
+
 _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
@@ -682,6 +962,19 @@
 _GETLOGGINGENDPOINTRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
 _GETMSGBUSENDPOINTRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
 _GETMSGBUSENDPOINTRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_ENTITIESLOGLEVEL.fields_by_name['logLevel'].enum_type = dmi_dot_commons__pb2._LOGLEVEL
+_SETLOGLEVELREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_SETLOGLEVELREQUEST.fields_by_name['loglevels'].message_type = _ENTITIESLOGLEVEL
+_SETLOGLEVELRESPONSE.fields_by_name['responses'].message_type = _DEVICELOGRESPONSE
+_DEVICELOGRESPONSE.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_DEVICELOGRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_DEVICELOGRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_GETLOGLEVELREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_GETLOGLEVELRESPONSE.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_GETLOGLEVELRESPONSE.fields_by_name['logLevels'].message_type = _ENTITIESLOGLEVEL
+_GETLOGLEVELRESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_GETLOGLEVELRESPONSE.fields_by_name['reason'].enum_type = dmi_dot_commons__pb2._REASON
+_GETLOGGABLEENTITIESREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
 DESCRIPTOR.message_types_by_name['PhysicalInventoryRequest'] = _PHYSICALINVENTORYREQUEST
 DESCRIPTOR.message_types_by_name['PhysicalInventoryResponse'] = _PHYSICALINVENTORYRESPONSE
 DESCRIPTOR.message_types_by_name['HWComponentInfoGetRequest'] = _HWCOMPONENTINFOGETREQUEST
@@ -697,6 +990,13 @@
 DESCRIPTOR.message_types_by_name['GetLoggingEndpointResponse'] = _GETLOGGINGENDPOINTRESPONSE
 DESCRIPTOR.message_types_by_name['SetMsgBusEndpointRequest'] = _SETMSGBUSENDPOINTREQUEST
 DESCRIPTOR.message_types_by_name['GetMsgBusEndpointResponse'] = _GETMSGBUSENDPOINTRESPONSE
+DESCRIPTOR.message_types_by_name['EntitiesLogLevel'] = _ENTITIESLOGLEVEL
+DESCRIPTOR.message_types_by_name['SetLogLevelRequest'] = _SETLOGLEVELREQUEST
+DESCRIPTOR.message_types_by_name['SetLogLevelResponse'] = _SETLOGLEVELRESPONSE
+DESCRIPTOR.message_types_by_name['DeviceLogResponse'] = _DEVICELOGRESPONSE
+DESCRIPTOR.message_types_by_name['GetLogLevelRequest'] = _GETLOGLEVELREQUEST
+DESCRIPTOR.message_types_by_name['GetLogLevelResponse'] = _GETLOGLEVELRESPONSE
+DESCRIPTOR.message_types_by_name['GetLoggableEntitiesRequest'] = _GETLOGGABLEENTITIESREQUEST
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
 PhysicalInventoryRequest = _reflection.GeneratedProtocolMessageType('PhysicalInventoryRequest', (_message.Message,), {
@@ -804,6 +1104,55 @@
   })
 _sym_db.RegisterMessage(GetMsgBusEndpointResponse)
 
+EntitiesLogLevel = _reflection.GeneratedProtocolMessageType('EntitiesLogLevel', (_message.Message,), {
+  'DESCRIPTOR' : _ENTITIESLOGLEVEL,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.EntitiesLogLevel)
+  })
+_sym_db.RegisterMessage(EntitiesLogLevel)
+
+SetLogLevelRequest = _reflection.GeneratedProtocolMessageType('SetLogLevelRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SETLOGLEVELREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.SetLogLevelRequest)
+  })
+_sym_db.RegisterMessage(SetLogLevelRequest)
+
+SetLogLevelResponse = _reflection.GeneratedProtocolMessageType('SetLogLevelResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SETLOGLEVELRESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.SetLogLevelResponse)
+  })
+_sym_db.RegisterMessage(SetLogLevelResponse)
+
+DeviceLogResponse = _reflection.GeneratedProtocolMessageType('DeviceLogResponse', (_message.Message,), {
+  'DESCRIPTOR' : _DEVICELOGRESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.DeviceLogResponse)
+  })
+_sym_db.RegisterMessage(DeviceLogResponse)
+
+GetLogLevelRequest = _reflection.GeneratedProtocolMessageType('GetLogLevelRequest', (_message.Message,), {
+  'DESCRIPTOR' : _GETLOGLEVELREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.GetLogLevelRequest)
+  })
+_sym_db.RegisterMessage(GetLogLevelRequest)
+
+GetLogLevelResponse = _reflection.GeneratedProtocolMessageType('GetLogLevelResponse', (_message.Message,), {
+  'DESCRIPTOR' : _GETLOGLEVELRESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.GetLogLevelResponse)
+  })
+_sym_db.RegisterMessage(GetLogLevelResponse)
+
+GetLoggableEntitiesRequest = _reflection.GeneratedProtocolMessageType('GetLoggableEntitiesRequest', (_message.Message,), {
+  'DESCRIPTOR' : _GETLOGGABLEENTITIESREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.GetLoggableEntitiesRequest)
+  })
+_sym_db.RegisterMessage(GetLoggableEntitiesRequest)
+
 
 DESCRIPTOR._options = None
 
@@ -814,8 +1163,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=1606,
-  serialized_end=2457,
+  serialized_start=2240,
+  serialized_end=3305,
   methods=[
   _descriptor.MethodDescriptor(
     name='StartManagingDevice',
@@ -917,6 +1266,36 @@
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
+  _descriptor.MethodDescriptor(
+    name='GetLoggableEntities',
+    full_name='dmi.NativeHWManagementService.GetLoggableEntities',
+    index=10,
+    containing_service=None,
+    input_type=_GETLOGGABLEENTITIESREQUEST,
+    output_type=_GETLOGLEVELRESPONSE,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='SetLogLevel',
+    full_name='dmi.NativeHWManagementService.SetLogLevel',
+    index=11,
+    containing_service=None,
+    input_type=_SETLOGLEVELREQUEST,
+    output_type=_SETLOGLEVELRESPONSE,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
+  _descriptor.MethodDescriptor(
+    name='GetLogLevel',
+    full_name='dmi.NativeHWManagementService.GetLogLevel',
+    index=12,
+    containing_service=None,
+    input_type=_GETLOGLEVELREQUEST,
+    output_type=_GETLOGLEVELRESPONSE,
+    serialized_options=None,
+    create_key=_descriptor._internal_create_key,
+  ),
 ])
 _sym_db.RegisterServiceDescriptor(_NATIVEHWMANAGEMENTSERVICE)
 
diff --git a/python/dmi/hw_management_service_pb2_grpc.py b/python/dmi/hw_management_service_pb2_grpc.py
index 7c60aab..06c4f87 100644
--- a/python/dmi/hw_management_service_pb2_grpc.py
+++ b/python/dmi/hw_management_service_pb2_grpc.py
@@ -66,6 +66,21 @@
                 request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
                 response_deserializer=dmi_dot_hw__management__service__pb2.GetMsgBusEndpointResponse.FromString,
                 )
+        self.GetLoggableEntities = channel.unary_unary(
+                '/dmi.NativeHWManagementService/GetLoggableEntities',
+                request_serializer=dmi_dot_hw__management__service__pb2.GetLoggableEntitiesRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.GetLogLevelResponse.FromString,
+                )
+        self.SetLogLevel = channel.unary_unary(
+                '/dmi.NativeHWManagementService/SetLogLevel',
+                request_serializer=dmi_dot_hw__management__service__pb2.SetLogLevelRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.SetLogLevelResponse.FromString,
+                )
+        self.GetLogLevel = channel.unary_unary(
+                '/dmi.NativeHWManagementService/GetLogLevel',
+                request_serializer=dmi_dot_hw__management__service__pb2.GetLogLevelRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.GetLogLevelResponse.FromString,
+                )
 
 
 class NativeHWManagementServiceServicer(object):
@@ -149,6 +164,32 @@
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def GetLoggableEntities(self, request, context):
+        """Gets the entities of a device on which log can be configured. A few are expected, like OS, PON Management etc.
+        In general an entity is any item within an hardware system that can emit logs, e.g. service, process, subsystem,
+        interface, package etc.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def SetLogLevel(self, request, context):
+        """Sets the log level for one or more devices for each given entity to a certain level.
+        If only one EntitiesLogLevel is provided for the device and that request contains only a log level with
+        no entity in the list it's assumed that the caller wants to set that level for all the entities.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetLogLevel(self, request, context):
+        """Gets the configured log level for a certain entity on a certain device.
+        If no entity is specified in the request all the entities with their log level should be returned.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
 
 def add_NativeHWManagementServiceServicer_to_server(servicer, server):
     rpc_method_handlers = {
@@ -202,6 +243,21 @@
                     request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
                     response_serializer=dmi_dot_hw__management__service__pb2.GetMsgBusEndpointResponse.SerializeToString,
             ),
+            'GetLoggableEntities': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetLoggableEntities,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.GetLoggableEntitiesRequest.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.GetLogLevelResponse.SerializeToString,
+            ),
+            'SetLogLevel': grpc.unary_unary_rpc_method_handler(
+                    servicer.SetLogLevel,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.SetLogLevelRequest.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.SetLogLevelResponse.SerializeToString,
+            ),
+            'GetLogLevel': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetLogLevel,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.GetLogLevelRequest.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.GetLogLevelResponse.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'dmi.NativeHWManagementService', rpc_method_handlers)
@@ -381,3 +437,54 @@
             dmi_dot_hw__management__service__pb2.GetMsgBusEndpointResponse.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetLoggableEntities(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeHWManagementService/GetLoggableEntities',
+            dmi_dot_hw__management__service__pb2.GetLoggableEntitiesRequest.SerializeToString,
+            dmi_dot_hw__management__service__pb2.GetLogLevelResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def SetLogLevel(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeHWManagementService/SetLogLevel',
+            dmi_dot_hw__management__service__pb2.SetLogLevelRequest.SerializeToString,
+            dmi_dot_hw__management__service__pb2.SetLogLevelResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def GetLogLevel(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/dmi.NativeHWManagementService/GetLogLevel',
+            dmi_dot_hw__management__service__pb2.GetLogLevelRequest.SerializeToString,
+            dmi_dot_hw__management__service__pb2.GetLogLevelResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
