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{
 		{
