diff --git a/VERSION b/VERSION
index 31e3287..ee6211d 100644
--- a/VERSION
+++ b/VERSION
@@ -1,2 +1,2 @@
-0.15.2
+0.15.3
 
diff --git a/cpp/dmi/hw_management_service.grpc.pb.cc b/cpp/dmi/hw_management_service.grpc.pb.cc
index 94ca677..a43edad 100644
--- a/cpp/dmi/hw_management_service.grpc.pb.cc
+++ b/cpp/dmi/hw_management_service.grpc.pb.cc
@@ -35,6 +35,7 @@
   "/dmi.NativeHWManagementService/GetLoggableEntities",
   "/dmi.NativeHWManagementService/SetLogLevel",
   "/dmi.NativeHWManagementService/GetLogLevel",
+  "/dmi.NativeHWManagementService/HeartbeatCheck",
 };
 
 std::unique_ptr< NativeHWManagementService::Stub> NativeHWManagementService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) {
@@ -57,6 +58,7 @@
   , rpcmethod_GetLoggableEntities_(NativeHWManagementService_method_names[10], ::grpc::internal::RpcMethod::NORMAL_RPC, channel)
   , rpcmethod_SetLogLevel_(NativeHWManagementService_method_names[11], ::grpc::internal::RpcMethod::NORMAL_RPC, channel)
   , rpcmethod_GetLogLevel_(NativeHWManagementService_method_names[12], ::grpc::internal::RpcMethod::NORMAL_RPC, channel)
+  , rpcmethod_HeartbeatCheck_(NativeHWManagementService_method_names[13], ::grpc::internal::RpcMethod::NORMAL_RPC, channel)
   {}
 
 ::grpc::ClientReader< ::dmi::StartManagingDeviceResponse>* NativeHWManagementService::Stub::StartManagingDeviceRaw(::grpc::ClientContext* context, const ::dmi::ModifiableComponent& request) {
@@ -387,6 +389,34 @@
   return ::grpc_impl::internal::ClientAsyncResponseReaderFactory< ::dmi::GetLogLevelResponse>::Create(channel_.get(), cq, rpcmethod_GetLogLevel_, context, request, false);
 }
 
+::grpc::Status NativeHWManagementService::Stub::HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::dmi::Heartbeat* response) {
+  return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_HeartbeatCheck_, context, request, response);
+}
+
+void NativeHWManagementService::Stub::experimental_async::HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, std::function<void(::grpc::Status)> f) {
+  ::grpc_impl::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_HeartbeatCheck_, context, request, response, std::move(f));
+}
+
+void NativeHWManagementService::Stub::experimental_async::HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, std::function<void(::grpc::Status)> f) {
+  ::grpc_impl::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_HeartbeatCheck_, context, request, response, std::move(f));
+}
+
+void NativeHWManagementService::Stub::experimental_async::HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+  ::grpc_impl::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_HeartbeatCheck_, context, request, response, reactor);
+}
+
+void NativeHWManagementService::Stub::experimental_async::HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+  ::grpc_impl::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_HeartbeatCheck_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>* NativeHWManagementService::Stub::AsyncHeartbeatCheckRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
+  return ::grpc_impl::internal::ClientAsyncResponseReaderFactory< ::dmi::Heartbeat>::Create(channel_.get(), cq, rpcmethod_HeartbeatCheck_, context, request, true);
+}
+
+::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>* NativeHWManagementService::Stub::PrepareAsyncHeartbeatCheckRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
+  return ::grpc_impl::internal::ClientAsyncResponseReaderFactory< ::dmi::Heartbeat>::Create(channel_.get(), cq, rpcmethod_HeartbeatCheck_, context, request, false);
+}
+
 NativeHWManagementService::Service::Service() {
   AddMethod(new ::grpc::internal::RpcServiceMethod(
       NativeHWManagementService_method_names[0],
@@ -518,6 +548,16 @@
              ::dmi::GetLogLevelResponse* resp) {
                return service->GetLogLevel(ctx, req, resp);
              }, this)));
+  AddMethod(new ::grpc::internal::RpcServiceMethod(
+      NativeHWManagementService_method_names[13],
+      ::grpc::internal::RpcMethod::NORMAL_RPC,
+      new ::grpc::internal::RpcMethodHandler< NativeHWManagementService::Service, ::google::protobuf::Empty, ::dmi::Heartbeat>(
+          [](NativeHWManagementService::Service* service,
+             ::grpc_impl::ServerContext* ctx,
+             const ::google::protobuf::Empty* req,
+             ::dmi::Heartbeat* resp) {
+               return service->HeartbeatCheck(ctx, req, resp);
+             }, this)));
 }
 
 NativeHWManagementService::Service::~Service() {
@@ -614,6 +654,13 @@
   return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
 }
 
+::grpc::Status NativeHWManagementService::Service::HeartbeatCheck(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response) {
+  (void) context;
+  (void) request;
+  (void) response;
+  return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+}
+
 
 }  // namespace dmi
 
diff --git a/cpp/dmi/hw_management_service.grpc.pb.h b/cpp/dmi/hw_management_service.grpc.pb.h
index db23956..a468ab2 100644
--- a/cpp/dmi/hw_management_service.grpc.pb.h
+++ b/cpp/dmi/hw_management_service.grpc.pb.h
@@ -161,6 +161,14 @@
     std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::GetLogLevelResponse>> PrepareAsyncGetLogLevel(::grpc::ClientContext* context, const ::dmi::GetLogLevelRequest& request, ::grpc::CompletionQueue* cq) {
       return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::GetLogLevelResponse>>(PrepareAsyncGetLogLevelRaw(context, request, cq));
     }
+    // Performs the heartbeat check
+    virtual ::grpc::Status HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::dmi::Heartbeat* response) = 0;
+    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::Heartbeat>> AsyncHeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::Heartbeat>>(AsyncHeartbeatCheckRaw(context, request, cq));
+    }
+    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::Heartbeat>> PrepareAsyncHeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::Heartbeat>>(PrepareAsyncHeartbeatCheckRaw(context, request, cq));
+    }
     class experimental_async_interface {
      public:
       virtual ~experimental_async_interface() {}
@@ -327,6 +335,19 @@
       #else
       virtual void GetLogLevel(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::GetLogLevelResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
       #endif
+      // Performs the heartbeat check
+      virtual void HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, std::function<void(::grpc::Status)>) = 0;
+      virtual void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, std::function<void(::grpc::Status)>) = 0;
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      virtual void HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+      #else
+      virtual void HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+      #endif
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      virtual void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+      #else
+      virtual void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+      #endif
     };
     #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
     typedef class experimental_async_interface async_interface;
@@ -365,6 +386,8 @@
     virtual ::grpc::ClientAsyncResponseReaderInterface< ::dmi::SetLogLevelResponse>* PrepareAsyncSetLogLevelRaw(::grpc::ClientContext* context, const ::dmi::SetLogLevelRequest& request, ::grpc::CompletionQueue* cq) = 0;
     virtual ::grpc::ClientAsyncResponseReaderInterface< ::dmi::GetLogLevelResponse>* AsyncGetLogLevelRaw(::grpc::ClientContext* context, const ::dmi::GetLogLevelRequest& request, ::grpc::CompletionQueue* cq) = 0;
     virtual ::grpc::ClientAsyncResponseReaderInterface< ::dmi::GetLogLevelResponse>* PrepareAsyncGetLogLevelRaw(::grpc::ClientContext* context, const ::dmi::GetLogLevelRequest& request, ::grpc::CompletionQueue* cq) = 0;
+    virtual ::grpc::ClientAsyncResponseReaderInterface< ::dmi::Heartbeat>* AsyncHeartbeatCheckRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
+    virtual ::grpc::ClientAsyncResponseReaderInterface< ::dmi::Heartbeat>* PrepareAsyncHeartbeatCheckRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) = 0;
   };
   class Stub final : public StubInterface {
    public:
@@ -466,6 +489,13 @@
     std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::GetLogLevelResponse>> PrepareAsyncGetLogLevel(::grpc::ClientContext* context, const ::dmi::GetLogLevelRequest& request, ::grpc::CompletionQueue* cq) {
       return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::GetLogLevelResponse>>(PrepareAsyncGetLogLevelRaw(context, request, cq));
     }
+    ::grpc::Status HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::dmi::Heartbeat* response) override;
+    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>> AsyncHeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>>(AsyncHeartbeatCheckRaw(context, request, cq));
+    }
+    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>> PrepareAsyncHeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>>(PrepareAsyncHeartbeatCheckRaw(context, request, cq));
+    }
     class experimental_async final :
       public StubInterface::experimental_async_interface {
      public:
@@ -604,6 +634,18 @@
       #else
       void GetLogLevel(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::GetLogLevelResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
       #endif
+      void HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, std::function<void(::grpc::Status)>) override;
+      void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, std::function<void(::grpc::Status)>) override;
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      void HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, ::grpc::ClientUnaryReactor* reactor) override;
+      #else
+      void HeartbeatCheck(::grpc::ClientContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+      #endif
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, ::grpc::ClientUnaryReactor* reactor) override;
+      #else
+      void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+      #endif
      private:
       friend class Stub;
       explicit experimental_async(Stub* stub): stub_(stub) { }
@@ -644,6 +686,8 @@
     ::grpc::ClientAsyncResponseReader< ::dmi::SetLogLevelResponse>* PrepareAsyncSetLogLevelRaw(::grpc::ClientContext* context, const ::dmi::SetLogLevelRequest& request, ::grpc::CompletionQueue* cq) override;
     ::grpc::ClientAsyncResponseReader< ::dmi::GetLogLevelResponse>* AsyncGetLogLevelRaw(::grpc::ClientContext* context, const ::dmi::GetLogLevelRequest& request, ::grpc::CompletionQueue* cq) override;
     ::grpc::ClientAsyncResponseReader< ::dmi::GetLogLevelResponse>* PrepareAsyncGetLogLevelRaw(::grpc::ClientContext* context, const ::dmi::GetLogLevelRequest& request, ::grpc::CompletionQueue* cq) override;
+    ::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>* AsyncHeartbeatCheckRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
+    ::grpc::ClientAsyncResponseReader< ::dmi::Heartbeat>* PrepareAsyncHeartbeatCheckRaw(::grpc::ClientContext* context, const ::google::protobuf::Empty& request, ::grpc::CompletionQueue* cq) override;
     const ::grpc::internal::RpcMethod rpcmethod_StartManagingDevice_;
     const ::grpc::internal::RpcMethod rpcmethod_StopManagingDevice_;
     const ::grpc::internal::RpcMethod rpcmethod_GetManagedDevices_;
@@ -657,6 +701,7 @@
     const ::grpc::internal::RpcMethod rpcmethod_GetLoggableEntities_;
     const ::grpc::internal::RpcMethod rpcmethod_SetLogLevel_;
     const ::grpc::internal::RpcMethod rpcmethod_GetLogLevel_;
+    const ::grpc::internal::RpcMethod rpcmethod_HeartbeatCheck_;
   };
   static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
 
@@ -705,6 +750,8 @@
     // 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.
     virtual ::grpc::Status GetLogLevel(::grpc::ServerContext* context, const ::dmi::GetLogLevelRequest* request, ::dmi::GetLogLevelResponse* response);
+    // Performs the heartbeat check
+    virtual ::grpc::Status HeartbeatCheck(::grpc::ServerContext* context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response);
   };
   template <class BaseClass>
   class WithAsyncMethod_StartManagingDevice : public BaseClass {
@@ -966,7 +1013,27 @@
       ::grpc::Service::RequestAsyncUnary(12, context, request, response, new_call_cq, notification_cq, tag);
     }
   };
-  typedef WithAsyncMethod_StartManagingDevice<WithAsyncMethod_StopManagingDevice<WithAsyncMethod_GetManagedDevices<WithAsyncMethod_GetPhysicalInventory<WithAsyncMethod_GetHWComponentInfo<WithAsyncMethod_SetHWComponentInfo<WithAsyncMethod_SetLoggingEndpoint<WithAsyncMethod_GetLoggingEndpoint<WithAsyncMethod_SetMsgBusEndpoint<WithAsyncMethod_GetMsgBusEndpoint<WithAsyncMethod_GetLoggableEntities<WithAsyncMethod_SetLogLevel<WithAsyncMethod_GetLogLevel<Service > > > > > > > > > > > > > AsyncService;
+  template <class BaseClass>
+  class WithAsyncMethod_HeartbeatCheck : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithAsyncMethod_HeartbeatCheck() {
+      ::grpc::Service::MarkMethodAsync(13);
+    }
+    ~WithAsyncMethod_HeartbeatCheck() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status HeartbeatCheck(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    void RequestHeartbeatCheck(::grpc::ServerContext* context, ::google::protobuf::Empty* request, ::grpc::ServerAsyncResponseWriter< ::dmi::Heartbeat>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+      ::grpc::Service::RequestAsyncUnary(13, context, request, response, new_call_cq, notification_cq, tag);
+    }
+  };
+  typedef WithAsyncMethod_StartManagingDevice<WithAsyncMethod_StopManagingDevice<WithAsyncMethod_GetManagedDevices<WithAsyncMethod_GetPhysicalInventory<WithAsyncMethod_GetHWComponentInfo<WithAsyncMethod_SetHWComponentInfo<WithAsyncMethod_SetLoggingEndpoint<WithAsyncMethod_GetLoggingEndpoint<WithAsyncMethod_SetMsgBusEndpoint<WithAsyncMethod_GetMsgBusEndpoint<WithAsyncMethod_GetLoggableEntities<WithAsyncMethod_SetLogLevel<WithAsyncMethod_GetLogLevel<WithAsyncMethod_HeartbeatCheck<Service > > > > > > > > > > > > > > AsyncService;
   template <class BaseClass>
   class ExperimentalWithCallbackMethod_StartManagingDevice : public BaseClass {
    private:
@@ -1551,11 +1618,58 @@
     #endif
       { return nullptr; }
   };
+  template <class BaseClass>
+  class ExperimentalWithCallbackMethod_HeartbeatCheck : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    ExperimentalWithCallbackMethod_HeartbeatCheck() {
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      ::grpc::Service::
+    #else
+      ::grpc::Service::experimental().
+    #endif
+        MarkMethodCallback(13,
+          new ::grpc_impl::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::dmi::Heartbeat>(
+            [this](
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+                   ::grpc::CallbackServerContext*
+    #else
+                   ::grpc::experimental::CallbackServerContext*
+    #endif
+                     context, const ::google::protobuf::Empty* request, ::dmi::Heartbeat* response) { return this->HeartbeatCheck(context, request, response); }));}
+    void SetMessageAllocatorFor_HeartbeatCheck(
+        ::grpc::experimental::MessageAllocator< ::google::protobuf::Empty, ::dmi::Heartbeat>* allocator) {
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(13);
+    #else
+      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(13);
+    #endif
+      static_cast<::grpc_impl::internal::CallbackUnaryHandler< ::google::protobuf::Empty, ::dmi::Heartbeat>*>(handler)
+              ->SetMessageAllocator(allocator);
+    }
+    ~ExperimentalWithCallbackMethod_HeartbeatCheck() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status HeartbeatCheck(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+    virtual ::grpc::ServerUnaryReactor* HeartbeatCheck(
+      ::grpc::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/)
+    #else
+    virtual ::grpc::experimental::ServerUnaryReactor* HeartbeatCheck(
+      ::grpc::experimental::CallbackServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/)
+    #endif
+      { return nullptr; }
+  };
   #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
-  typedef ExperimentalWithCallbackMethod_StartManagingDevice<ExperimentalWithCallbackMethod_StopManagingDevice<ExperimentalWithCallbackMethod_GetManagedDevices<ExperimentalWithCallbackMethod_GetPhysicalInventory<ExperimentalWithCallbackMethod_GetHWComponentInfo<ExperimentalWithCallbackMethod_SetHWComponentInfo<ExperimentalWithCallbackMethod_SetLoggingEndpoint<ExperimentalWithCallbackMethod_GetLoggingEndpoint<ExperimentalWithCallbackMethod_SetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetLoggableEntities<ExperimentalWithCallbackMethod_SetLogLevel<ExperimentalWithCallbackMethod_GetLogLevel<Service > > > > > > > > > > > > > CallbackService;
+  typedef ExperimentalWithCallbackMethod_StartManagingDevice<ExperimentalWithCallbackMethod_StopManagingDevice<ExperimentalWithCallbackMethod_GetManagedDevices<ExperimentalWithCallbackMethod_GetPhysicalInventory<ExperimentalWithCallbackMethod_GetHWComponentInfo<ExperimentalWithCallbackMethod_SetHWComponentInfo<ExperimentalWithCallbackMethod_SetLoggingEndpoint<ExperimentalWithCallbackMethod_GetLoggingEndpoint<ExperimentalWithCallbackMethod_SetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetLoggableEntities<ExperimentalWithCallbackMethod_SetLogLevel<ExperimentalWithCallbackMethod_GetLogLevel<ExperimentalWithCallbackMethod_HeartbeatCheck<Service > > > > > > > > > > > > > > CallbackService;
   #endif
 
-  typedef ExperimentalWithCallbackMethod_StartManagingDevice<ExperimentalWithCallbackMethod_StopManagingDevice<ExperimentalWithCallbackMethod_GetManagedDevices<ExperimentalWithCallbackMethod_GetPhysicalInventory<ExperimentalWithCallbackMethod_GetHWComponentInfo<ExperimentalWithCallbackMethod_SetHWComponentInfo<ExperimentalWithCallbackMethod_SetLoggingEndpoint<ExperimentalWithCallbackMethod_GetLoggingEndpoint<ExperimentalWithCallbackMethod_SetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetLoggableEntities<ExperimentalWithCallbackMethod_SetLogLevel<ExperimentalWithCallbackMethod_GetLogLevel<Service > > > > > > > > > > > > > ExperimentalCallbackService;
+  typedef ExperimentalWithCallbackMethod_StartManagingDevice<ExperimentalWithCallbackMethod_StopManagingDevice<ExperimentalWithCallbackMethod_GetManagedDevices<ExperimentalWithCallbackMethod_GetPhysicalInventory<ExperimentalWithCallbackMethod_GetHWComponentInfo<ExperimentalWithCallbackMethod_SetHWComponentInfo<ExperimentalWithCallbackMethod_SetLoggingEndpoint<ExperimentalWithCallbackMethod_GetLoggingEndpoint<ExperimentalWithCallbackMethod_SetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetMsgBusEndpoint<ExperimentalWithCallbackMethod_GetLoggableEntities<ExperimentalWithCallbackMethod_SetLogLevel<ExperimentalWithCallbackMethod_GetLogLevel<ExperimentalWithCallbackMethod_HeartbeatCheck<Service > > > > > > > > > > > > > > ExperimentalCallbackService;
   template <class BaseClass>
   class WithGenericMethod_StartManagingDevice : public BaseClass {
    private:
@@ -1778,6 +1892,23 @@
     }
   };
   template <class BaseClass>
+  class WithGenericMethod_HeartbeatCheck : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithGenericMethod_HeartbeatCheck() {
+      ::grpc::Service::MarkMethodGeneric(13);
+    }
+    ~WithGenericMethod_HeartbeatCheck() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status HeartbeatCheck(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+  };
+  template <class BaseClass>
   class WithRawMethod_StartManagingDevice : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -2038,6 +2169,26 @@
     }
   };
   template <class BaseClass>
+  class WithRawMethod_HeartbeatCheck : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithRawMethod_HeartbeatCheck() {
+      ::grpc::Service::MarkMethodRaw(13);
+    }
+    ~WithRawMethod_HeartbeatCheck() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status HeartbeatCheck(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    void RequestHeartbeatCheck(::grpc::ServerContext* context, ::grpc::ByteBuffer* request, ::grpc::ServerAsyncResponseWriter< ::grpc::ByteBuffer>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+      ::grpc::Service::RequestAsyncUnary(13, context, request, response, new_call_cq, notification_cq, tag);
+    }
+  };
+  template <class BaseClass>
   class ExperimentalWithRawCallbackMethod_StartManagingDevice : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -2532,6 +2683,44 @@
       { return nullptr; }
   };
   template <class BaseClass>
+  class ExperimentalWithRawCallbackMethod_HeartbeatCheck : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    ExperimentalWithRawCallbackMethod_HeartbeatCheck() {
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      ::grpc::Service::
+    #else
+      ::grpc::Service::experimental().
+    #endif
+        MarkMethodRawCallback(13,
+          new ::grpc_impl::internal::CallbackUnaryHandler< ::grpc::ByteBuffer, ::grpc::ByteBuffer>(
+            [this](
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+                   ::grpc::CallbackServerContext*
+    #else
+                   ::grpc::experimental::CallbackServerContext*
+    #endif
+                     context, const ::grpc::ByteBuffer* request, ::grpc::ByteBuffer* response) { return this->HeartbeatCheck(context, request, response); }));
+    }
+    ~ExperimentalWithRawCallbackMethod_HeartbeatCheck() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status HeartbeatCheck(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+    virtual ::grpc::ServerUnaryReactor* HeartbeatCheck(
+      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+    #else
+    virtual ::grpc::experimental::ServerUnaryReactor* HeartbeatCheck(
+      ::grpc::experimental::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+    #endif
+      { return nullptr; }
+  };
+  template <class BaseClass>
   class WithStreamedUnaryMethod_StopManagingDevice : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -2801,7 +2990,34 @@
     // replace default version of method with streamed unary
     virtual ::grpc::Status StreamedGetLogLevel(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::dmi::GetLogLevelRequest,::dmi::GetLogLevelResponse>* server_unary_streamer) = 0;
   };
-  typedef WithStreamedUnaryMethod_StopManagingDevice<WithStreamedUnaryMethod_GetManagedDevices<WithStreamedUnaryMethod_SetHWComponentInfo<WithStreamedUnaryMethod_SetLoggingEndpoint<WithStreamedUnaryMethod_GetLoggingEndpoint<WithStreamedUnaryMethod_SetMsgBusEndpoint<WithStreamedUnaryMethod_GetMsgBusEndpoint<WithStreamedUnaryMethod_GetLoggableEntities<WithStreamedUnaryMethod_SetLogLevel<WithStreamedUnaryMethod_GetLogLevel<Service > > > > > > > > > > StreamedUnaryService;
+  template <class BaseClass>
+  class WithStreamedUnaryMethod_HeartbeatCheck : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithStreamedUnaryMethod_HeartbeatCheck() {
+      ::grpc::Service::MarkMethodStreamed(13,
+        new ::grpc::internal::StreamedUnaryHandler<
+          ::google::protobuf::Empty, ::dmi::Heartbeat>(
+            [this](::grpc_impl::ServerContext* context,
+                   ::grpc_impl::ServerUnaryStreamer<
+                     ::google::protobuf::Empty, ::dmi::Heartbeat>* streamer) {
+                       return this->StreamedHeartbeatCheck(context,
+                         streamer);
+                  }));
+    }
+    ~WithStreamedUnaryMethod_HeartbeatCheck() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable regular version of this method
+    ::grpc::Status HeartbeatCheck(::grpc::ServerContext* /*context*/, const ::google::protobuf::Empty* /*request*/, ::dmi::Heartbeat* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    // replace default version of method with streamed unary
+    virtual ::grpc::Status StreamedHeartbeatCheck(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::google::protobuf::Empty,::dmi::Heartbeat>* server_unary_streamer) = 0;
+  };
+  typedef WithStreamedUnaryMethod_StopManagingDevice<WithStreamedUnaryMethod_GetManagedDevices<WithStreamedUnaryMethod_SetHWComponentInfo<WithStreamedUnaryMethod_SetLoggingEndpoint<WithStreamedUnaryMethod_GetLoggingEndpoint<WithStreamedUnaryMethod_SetMsgBusEndpoint<WithStreamedUnaryMethod_GetMsgBusEndpoint<WithStreamedUnaryMethod_GetLoggableEntities<WithStreamedUnaryMethod_SetLogLevel<WithStreamedUnaryMethod_GetLogLevel<WithStreamedUnaryMethod_HeartbeatCheck<Service > > > > > > > > > > > StreamedUnaryService;
   template <class BaseClass>
   class WithSplitStreamingMethod_StartManagingDevice : public BaseClass {
    private:
@@ -2884,7 +3100,7 @@
     virtual ::grpc::Status StreamedGetHWComponentInfo(::grpc::ServerContext* context, ::grpc::ServerSplitStreamer< ::dmi::HWComponentInfoGetRequest,::dmi::HWComponentInfoGetResponse>* server_split_streamer) = 0;
   };
   typedef WithSplitStreamingMethod_StartManagingDevice<WithSplitStreamingMethod_GetPhysicalInventory<WithSplitStreamingMethod_GetHWComponentInfo<Service > > > SplitStreamedService;
-  typedef WithSplitStreamingMethod_StartManagingDevice<WithStreamedUnaryMethod_StopManagingDevice<WithStreamedUnaryMethod_GetManagedDevices<WithSplitStreamingMethod_GetPhysicalInventory<WithSplitStreamingMethod_GetHWComponentInfo<WithStreamedUnaryMethod_SetHWComponentInfo<WithStreamedUnaryMethod_SetLoggingEndpoint<WithStreamedUnaryMethod_GetLoggingEndpoint<WithStreamedUnaryMethod_SetMsgBusEndpoint<WithStreamedUnaryMethod_GetMsgBusEndpoint<WithStreamedUnaryMethod_GetLoggableEntities<WithStreamedUnaryMethod_SetLogLevel<WithStreamedUnaryMethod_GetLogLevel<Service > > > > > > > > > > > > > StreamedService;
+  typedef WithSplitStreamingMethod_StartManagingDevice<WithStreamedUnaryMethod_StopManagingDevice<WithStreamedUnaryMethod_GetManagedDevices<WithSplitStreamingMethod_GetPhysicalInventory<WithSplitStreamingMethod_GetHWComponentInfo<WithStreamedUnaryMethod_SetHWComponentInfo<WithStreamedUnaryMethod_SetLoggingEndpoint<WithStreamedUnaryMethod_GetLoggingEndpoint<WithStreamedUnaryMethod_SetMsgBusEndpoint<WithStreamedUnaryMethod_GetMsgBusEndpoint<WithStreamedUnaryMethod_GetLoggableEntities<WithStreamedUnaryMethod_SetLogLevel<WithStreamedUnaryMethod_GetLogLevel<WithStreamedUnaryMethod_HeartbeatCheck<Service > > > > > > > > > > > > > > StreamedService;
 };
 
 }  // namespace dmi
diff --git a/cpp/dmi/hw_management_service.pb.cc b/cpp/dmi/hw_management_service.pb.cc
index 573645e..c6496a0 100644
--- a/cpp/dmi/hw_management_service.pb.cc
+++ b/cpp/dmi/hw_management_service.pb.cc
@@ -111,6 +111,10 @@
  public:
   ::google::protobuf::internal::ExplicitlyConstructed<GetLoggableEntitiesRequest> _instance;
 } _GetLoggableEntitiesRequest_default_instance_;
+class HeartbeatDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<Heartbeat> _instance;
+} _Heartbeat_default_instance_;
 }  // namespace dmi
 static void InitDefaultsPhysicalInventoryRequest_dmi_2fhw_5fmanagement_5fservice_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
@@ -438,6 +442,20 @@
     {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsGetLoggableEntitiesRequest_dmi_2fhw_5fmanagement_5fservice_2eproto}, {
       &scc_info_Uuid_dmi_2fhw_2eproto.base,}};
 
+static void InitDefaultsHeartbeat_dmi_2fhw_5fmanagement_5fservice_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::dmi::_Heartbeat_default_instance_;
+    new (ptr) ::dmi::Heartbeat();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::dmi::Heartbeat::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_Heartbeat_dmi_2fhw_5fmanagement_5fservice_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsHeartbeat_dmi_2fhw_5fmanagement_5fservice_2eproto}, {}};
+
 void InitDefaults_dmi_2fhw_5fmanagement_5fservice_2eproto() {
   ::google::protobuf::internal::InitSCC(&scc_info_PhysicalInventoryRequest_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_PhysicalInventoryResponse_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
@@ -461,9 +479,10 @@
   ::google::protobuf::internal::InitSCC(&scc_info_GetLogLevelRequest_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_GetLogLevelResponse_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
   ::google::protobuf::internal::InitSCC(&scc_info_GetLoggableEntitiesRequest_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_Heartbeat_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
 }
 
-::google::protobuf::Metadata file_level_metadata_dmi_2fhw_5fmanagement_5fservice_2eproto[22];
+::google::protobuf::Metadata file_level_metadata_dmi_2fhw_5fmanagement_5fservice_2eproto[23];
 const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto[11];
 constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto = nullptr;
 
@@ -642,6 +661,12 @@
   ~0u,  // no _oneof_case_
   ~0u,  // no _weak_field_map_
   PROTOBUF_FIELD_OFFSET(::dmi::GetLoggableEntitiesRequest, device_uuid_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::dmi::Heartbeat, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::dmi::Heartbeat, heartbeat_signature_),
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::dmi::PhysicalInventoryRequest)},
@@ -666,6 +691,7 @@
   { 151, -1, sizeof(::dmi::GetLogLevelRequest)},
   { 158, -1, sizeof(::dmi::GetLogLevelResponse)},
   { 168, -1, sizeof(::dmi::GetLoggableEntitiesRequest)},
+  { 174, -1, sizeof(::dmi::Heartbeat)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -691,12 +717,13 @@
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_GetLogLevelRequest_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_GetLogLevelResponse_default_instance_),
   reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_GetLoggableEntitiesRequest_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_Heartbeat_default_instance_),
 };
 
 ::google::protobuf::internal::AssignDescriptorsTable assign_descriptors_table_dmi_2fhw_5fmanagement_5fservice_2eproto = {
   {}, AddDescriptors_dmi_2fhw_5fmanagement_5fservice_2eproto, "dmi/hw_management_service.proto", schemas,
   file_default_instances, TableStruct_dmi_2fhw_5fmanagement_5fservice_2eproto::offsets,
-  file_level_metadata_dmi_2fhw_5fmanagement_5fservice_2eproto, 22, file_level_enum_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto, file_level_service_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto,
+  file_level_metadata_dmi_2fhw_5fmanagement_5fservice_2eproto, 23, file_level_enum_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto, file_level_service_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto,
 };
 
 const char descriptor_table_protodef_dmi_2fhw_5fmanagement_5fservice_2eproto[] =
@@ -800,41 +827,43 @@
   "ON\020\000\022\022\n\016UNKNOWN_DEVICE\020\001\022\022\n\016INTERNAL_ERR"
   "OR\020\002\022\026\n\022UNKNOWN_LOG_ENTITY\020\003\022\026\n\022DEVICE_U"
   "NREACHABLE\020\004\"<\n\032GetLoggableEntitiesReque"
-  "st\022\036\n\013device_uuid\030\001 \001(\0132\t.dmi.Uuid2\257\010\n\031N"
-  "ativeHWManagementService\022S\n\023StartManagin"
-  "gDevice\022\030.dmi.ModifiableComponent\032 .dmi."
-  "StartManagingDeviceResponse0\001\022U\n\022StopMan"
-  "agingDevice\022\036.dmi.StopManagingDeviceRequ"
-  "est\032\037.dmi.StopManagingDeviceResponse\022H\n\021"
-  "GetManagedDevices\022\026.google.protobuf.Empt"
-  "y\032\033.dmi.ManagedDevicesResponse\022W\n\024GetPhy"
-  "sicalInventory\022\035.dmi.PhysicalInventoryRe"
-  "quest\032\036.dmi.PhysicalInventoryResponse0\001\022"
-  "W\n\022GetHWComponentInfo\022\036.dmi.HWComponentI"
-  "nfoGetRequest\032\037.dmi.HWComponentInfoGetRe"
-  "sponse0\001\022U\n\022SetHWComponentInfo\022\036.dmi.HWC"
-  "omponentInfoSetRequest\032\037.dmi.HWComponent"
-  "InfoSetResponse\022T\n\022SetLoggingEndpoint\022\036."
-  "dmi.SetLoggingEndpointRequest\032\036.dmi.SetR"
-  "emoteEndpointResponse\022F\n\022GetLoggingEndpo"
-  "int\022\017.dmi.HardwareID\032\037.dmi.GetLoggingEnd"
-  "pointResponse\022R\n\021SetMsgBusEndpoint\022\035.dmi"
-  ".SetMsgBusEndpointRequest\032\036.dmi.SetRemot"
-  "eEndpointResponse\022K\n\021GetMsgBusEndpoint\022\026"
-  ".google.protobuf.Empty\032\036.dmi.GetMsgBusEn"
-  "dpointResponse\022P\n\023GetLoggableEntities\022\037."
-  "dmi.GetLoggableEntitiesRequest\032\030.dmi.Get"
-  "LogLevelResponse\022@\n\013SetLogLevel\022\027.dmi.Se"
-  "tLogLevelRequest\032\030.dmi.SetLogLevelRespon"
-  "se\022@\n\013GetLogLevel\022\027.dmi.GetLogLevelReque"
-  "st\032\030.dmi.GetLogLevelResponseB;Z9github.c"
-  "om/opencord/device-management-interface/"
-  "v3/go/dmib\006proto3"
+  "st\022\036\n\013device_uuid\030\001 \001(\0132\t.dmi.Uuid\"(\n\tHe"
+  "artbeat\022\033\n\023heartbeat_signature\030\001 \001(\0072\351\010\n"
+  "\031NativeHWManagementService\022S\n\023StartManag"
+  "ingDevice\022\030.dmi.ModifiableComponent\032 .dm"
+  "i.StartManagingDeviceResponse0\001\022U\n\022StopM"
+  "anagingDevice\022\036.dmi.StopManagingDeviceRe"
+  "quest\032\037.dmi.StopManagingDeviceResponse\022H"
+  "\n\021GetManagedDevices\022\026.google.protobuf.Em"
+  "pty\032\033.dmi.ManagedDevicesResponse\022W\n\024GetP"
+  "hysicalInventory\022\035.dmi.PhysicalInventory"
+  "Request\032\036.dmi.PhysicalInventoryResponse0"
+  "\001\022W\n\022GetHWComponentInfo\022\036.dmi.HWComponen"
+  "tInfoGetRequest\032\037.dmi.HWComponentInfoGet"
+  "Response0\001\022U\n\022SetHWComponentInfo\022\036.dmi.H"
+  "WComponentInfoSetRequest\032\037.dmi.HWCompone"
+  "ntInfoSetResponse\022T\n\022SetLoggingEndpoint\022"
+  "\036.dmi.SetLoggingEndpointRequest\032\036.dmi.Se"
+  "tRemoteEndpointResponse\022F\n\022GetLoggingEnd"
+  "point\022\017.dmi.HardwareID\032\037.dmi.GetLoggingE"
+  "ndpointResponse\022R\n\021SetMsgBusEndpoint\022\035.d"
+  "mi.SetMsgBusEndpointRequest\032\036.dmi.SetRem"
+  "oteEndpointResponse\022K\n\021GetMsgBusEndpoint"
+  "\022\026.google.protobuf.Empty\032\036.dmi.GetMsgBus"
+  "EndpointResponse\022P\n\023GetLoggableEntities\022"
+  "\037.dmi.GetLoggableEntitiesRequest\032\030.dmi.G"
+  "etLogLevelResponse\022@\n\013SetLogLevel\022\027.dmi."
+  "SetLogLevelRequest\032\030.dmi.SetLogLevelResp"
+  "onse\022@\n\013GetLogLevel\022\027.dmi.GetLogLevelReq"
+  "uest\032\030.dmi.GetLogLevelResponse\0228\n\016Heartb"
+  "eatCheck\022\026.google.protobuf.Empty\032\016.dmi.H"
+  "eartbeatB;Z9github.com/opencord/device-m"
+  "anagement-interface/v3/go/dmib\006proto3"
   ;
 ::google::protobuf::internal::DescriptorTable descriptor_table_dmi_2fhw_5fmanagement_5fservice_2eproto = {
   false, InitDefaults_dmi_2fhw_5fmanagement_5fservice_2eproto, 
   descriptor_table_protodef_dmi_2fhw_5fmanagement_5fservice_2eproto,
-  "dmi/hw_management_service.proto", &assign_descriptors_table_dmi_2fhw_5fmanagement_5fservice_2eproto, 5177,
+  "dmi/hw_management_service.proto", &assign_descriptors_table_dmi_2fhw_5fmanagement_5fservice_2eproto, 5277,
 };
 
 void AddDescriptors_dmi_2fhw_5fmanagement_5fservice_2eproto() {
@@ -10120,6 +10149,264 @@
 }
 
 
+// ===================================================================
+
+void Heartbeat::InitAsDefaultInstance() {
+}
+class Heartbeat::HasBitSetters {
+ public:
+};
+
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int Heartbeat::kHeartbeatSignatureFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+Heartbeat::Heartbeat()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:dmi.Heartbeat)
+}
+Heartbeat::Heartbeat(const Heartbeat& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  heartbeat_signature_ = from.heartbeat_signature_;
+  // @@protoc_insertion_point(copy_constructor:dmi.Heartbeat)
+}
+
+void Heartbeat::SharedCtor() {
+  heartbeat_signature_ = 0u;
+}
+
+Heartbeat::~Heartbeat() {
+  // @@protoc_insertion_point(destructor:dmi.Heartbeat)
+  SharedDtor();
+}
+
+void Heartbeat::SharedDtor() {
+}
+
+void Heartbeat::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const Heartbeat& Heartbeat::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_Heartbeat_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void Heartbeat::Clear() {
+// @@protoc_insertion_point(message_clear_start:dmi.Heartbeat)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  heartbeat_signature_ = 0u;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* Heartbeat::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast<Heartbeat*>(object);
+  ::google::protobuf::int32 size; (void)size;
+  int depth; (void)depth;
+  ::google::protobuf::uint32 tag;
+  ::google::protobuf::internal::ParseFunc parser_till_end; (void)parser_till_end;
+  auto ptr = begin;
+  while (ptr < end) {
+    ptr = ::google::protobuf::io::Parse32(ptr, &tag);
+    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+    switch (tag >> 3) {
+      // fixed32 heartbeat_signature = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 13) goto handle_unusual;
+        msg->set_heartbeat_signature(::google::protobuf::io::UnalignedLoad<::google::protobuf::uint32>(ptr));
+        ptr += sizeof(::google::protobuf::uint32);
+        break;
+      }
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->EndGroup(tag);
+          return ptr;
+        }
+        auto res = UnknownFieldParse(tag, {_InternalParse, msg},
+          ptr, end, msg->_internal_metadata_.mutable_unknown_fields(), ctx);
+        ptr = res.first;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr != nullptr);
+        if (res.second) return ptr;
+      }
+    }  // switch
+  }  // while
+  return ptr;
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool Heartbeat::MergePartialFromCodedStream(
+    ::google::protobuf::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::google::protobuf::uint32 tag;
+  // @@protoc_insertion_point(parse_start:dmi.Heartbeat)
+  for (;;) {
+    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // fixed32 heartbeat_signature = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (13 & 0xFF)) {
+
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
+                 input, &heartbeat_signature_)));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::google::protobuf::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:dmi.Heartbeat)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:dmi.Heartbeat)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void Heartbeat::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:dmi.Heartbeat)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // fixed32 heartbeat_signature = 1;
+  if (this->heartbeat_signature() != 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteFixed32(1, this->heartbeat_signature(), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:dmi.Heartbeat)
+}
+
+::google::protobuf::uint8* Heartbeat::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:dmi.Heartbeat)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // fixed32 heartbeat_signature = 1;
+  if (this->heartbeat_signature() != 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteFixed32ToArray(1, this->heartbeat_signature(), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:dmi.Heartbeat)
+  return target;
+}
+
+size_t Heartbeat::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:dmi.Heartbeat)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // fixed32 heartbeat_signature = 1;
+  if (this->heartbeat_signature() != 0) {
+    total_size += 1 + 4;
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void Heartbeat::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:dmi.Heartbeat)
+  GOOGLE_DCHECK_NE(&from, this);
+  const Heartbeat* source =
+      ::google::protobuf::DynamicCastToGenerated<Heartbeat>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:dmi.Heartbeat)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:dmi.Heartbeat)
+    MergeFrom(*source);
+  }
+}
+
+void Heartbeat::MergeFrom(const Heartbeat& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:dmi.Heartbeat)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.heartbeat_signature() != 0) {
+    set_heartbeat_signature(from.heartbeat_signature());
+  }
+}
+
+void Heartbeat::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:dmi.Heartbeat)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void Heartbeat::CopyFrom(const Heartbeat& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:dmi.Heartbeat)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool Heartbeat::IsInitialized() const {
+  return true;
+}
+
+void Heartbeat::Swap(Heartbeat* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void Heartbeat::InternalSwap(Heartbeat* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  swap(heartbeat_signature_, other->heartbeat_signature_);
+}
+
+::google::protobuf::Metadata Heartbeat::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_dmi_2fhw_5fmanagement_5fservice_2eproto);
+  return ::file_level_metadata_dmi_2fhw_5fmanagement_5fservice_2eproto[kIndexInFileMessages];
+}
+
+
 // @@protoc_insertion_point(namespace_scope)
 }  // namespace dmi
 namespace google {
@@ -10190,6 +10477,9 @@
 template<> PROTOBUF_NOINLINE ::dmi::GetLoggableEntitiesRequest* Arena::CreateMaybeMessage< ::dmi::GetLoggableEntitiesRequest >(Arena* arena) {
   return Arena::CreateInternal< ::dmi::GetLoggableEntitiesRequest >(arena);
 }
+template<> PROTOBUF_NOINLINE ::dmi::Heartbeat* Arena::CreateMaybeMessage< ::dmi::Heartbeat >(Arena* arena) {
+  return Arena::CreateInternal< ::dmi::Heartbeat >(arena);
+}
 }  // namespace protobuf
 }  // namespace google
 
diff --git a/cpp/dmi/hw_management_service.pb.h b/cpp/dmi/hw_management_service.pb.h
index a304aa1..50398d2 100644
--- a/cpp/dmi/hw_management_service.pb.h
+++ b/cpp/dmi/hw_management_service.pb.h
@@ -45,7 +45,7 @@
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::AuxillaryParseTableField aux[]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
-  static const ::google::protobuf::internal::ParseTable schema[22]
+  static const ::google::protobuf::internal::ParseTable schema[23]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::FieldMetadata field_metadata[];
   static const ::google::protobuf::internal::SerializationTable serialization_table[];
@@ -83,6 +83,9 @@
 class HWComponentInfoSetResponse;
 class HWComponentInfoSetResponseDefaultTypeInternal;
 extern HWComponentInfoSetResponseDefaultTypeInternal _HWComponentInfoSetResponse_default_instance_;
+class Heartbeat;
+class HeartbeatDefaultTypeInternal;
+extern HeartbeatDefaultTypeInternal _Heartbeat_default_instance_;
 class ManagedDeviceInfo;
 class ManagedDeviceInfoDefaultTypeInternal;
 extern ManagedDeviceInfoDefaultTypeInternal _ManagedDeviceInfo_default_instance_;
@@ -132,6 +135,7 @@
 template<> ::dmi::HWComponentInfoGetResponse* Arena::CreateMaybeMessage<::dmi::HWComponentInfoGetResponse>(Arena*);
 template<> ::dmi::HWComponentInfoSetRequest* Arena::CreateMaybeMessage<::dmi::HWComponentInfoSetRequest>(Arena*);
 template<> ::dmi::HWComponentInfoSetResponse* Arena::CreateMaybeMessage<::dmi::HWComponentInfoSetResponse>(Arena*);
+template<> ::dmi::Heartbeat* Arena::CreateMaybeMessage<::dmi::Heartbeat>(Arena*);
 template<> ::dmi::ManagedDeviceInfo* Arena::CreateMaybeMessage<::dmi::ManagedDeviceInfo>(Arena*);
 template<> ::dmi::ManagedDevicesResponse* Arena::CreateMaybeMessage<::dmi::ManagedDevicesResponse>(Arena*);
 template<> ::dmi::PhysicalInventoryRequest* Arena::CreateMaybeMessage<::dmi::PhysicalInventoryRequest>(Arena*);
@@ -3754,6 +3758,118 @@
   mutable ::google::protobuf::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_dmi_2fhw_5fmanagement_5fservice_2eproto;
 };
+// -------------------------------------------------------------------
+
+class Heartbeat final :
+    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:dmi.Heartbeat) */ {
+ public:
+  Heartbeat();
+  virtual ~Heartbeat();
+
+  Heartbeat(const Heartbeat& from);
+
+  inline Heartbeat& operator=(const Heartbeat& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  Heartbeat(Heartbeat&& from) noexcept
+    : Heartbeat() {
+    *this = ::std::move(from);
+  }
+
+  inline Heartbeat& operator=(Heartbeat&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+  #endif
+  static const ::google::protobuf::Descriptor* descriptor() {
+    return default_instance().GetDescriptor();
+  }
+  static const Heartbeat& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const Heartbeat* internal_default_instance() {
+    return reinterpret_cast<const Heartbeat*>(
+               &_Heartbeat_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    22;
+
+  void Swap(Heartbeat* other);
+  friend void swap(Heartbeat& a, Heartbeat& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline Heartbeat* New() const final {
+    return CreateMaybeMessage<Heartbeat>(nullptr);
+  }
+
+  Heartbeat* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<Heartbeat>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const Heartbeat& from);
+  void MergeFrom(const Heartbeat& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  static const char* _InternalParse(const char* begin, const char* end, void* object, ::google::protobuf::internal::ParseContext* ctx);
+  ::google::protobuf::internal::ParseFunc _ParseFunc() const final { return _InternalParse; }
+  #else
+  bool MergePartialFromCodedStream(
+      ::google::protobuf::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::google::protobuf::io::CodedOutputStream* output) const final;
+  ::google::protobuf::uint8* InternalSerializeWithCachedSizesToArray(
+      ::google::protobuf::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  void SharedCtor();
+  void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(Heartbeat* other);
+  private:
+  inline ::google::protobuf::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::google::protobuf::Metadata GetMetadata() const final;
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  // fixed32 heartbeat_signature = 1;
+  void clear_heartbeat_signature();
+  static const int kHeartbeatSignatureFieldNumber = 1;
+  ::google::protobuf::uint32 heartbeat_signature() const;
+  void set_heartbeat_signature(::google::protobuf::uint32 value);
+
+  // @@protoc_insertion_point(class_scope:dmi.Heartbeat)
+ private:
+  class HasBitSetters;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::uint32 heartbeat_signature_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_dmi_2fhw_5fmanagement_5fservice_2eproto;
+};
 // ===================================================================
 
 
@@ -6171,6 +6287,24 @@
   // @@protoc_insertion_point(field_set_allocated:dmi.GetLoggableEntitiesRequest.device_uuid)
 }
 
+// -------------------------------------------------------------------
+
+// Heartbeat
+
+// fixed32 heartbeat_signature = 1;
+inline void Heartbeat::clear_heartbeat_signature() {
+  heartbeat_signature_ = 0u;
+}
+inline ::google::protobuf::uint32 Heartbeat::heartbeat_signature() const {
+  // @@protoc_insertion_point(field_get:dmi.Heartbeat.heartbeat_signature)
+  return heartbeat_signature_;
+}
+inline void Heartbeat::set_heartbeat_signature(::google::protobuf::uint32 value) {
+  
+  heartbeat_signature_ = value;
+  // @@protoc_insertion_point(field_set:dmi.Heartbeat.heartbeat_signature)
+}
+
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__
@@ -6216,6 +6350,8 @@
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 
diff --git a/dmi.pb b/dmi.pb
index 147fe01..6a96852 100644
--- a/dmi.pb
+++ b/dmi.pb
Binary files differ
diff --git a/go/dmi/hw_management_service.pb.go b/go/dmi/hw_management_service.pb.go
index 861755f..f7ee729 100644
--- a/go/dmi/hw_management_service.pb.go
+++ b/go/dmi/hw_management_service.pb.go
@@ -1581,6 +1581,45 @@
 	return nil
 }
 
+type Heartbeat struct {
+	HeartbeatSignature   uint32   `protobuf:"fixed32,1,opt,name=heartbeat_signature,json=heartbeatSignature,proto3" json:"heartbeat_signature,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *Heartbeat) Reset()         { *m = Heartbeat{} }
+func (m *Heartbeat) String() string { return proto.CompactTextString(m) }
+func (*Heartbeat) ProtoMessage()    {}
+func (*Heartbeat) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{22}
+}
+
+func (m *Heartbeat) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_Heartbeat.Unmarshal(m, b)
+}
+func (m *Heartbeat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_Heartbeat.Marshal(b, m, deterministic)
+}
+func (m *Heartbeat) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_Heartbeat.Merge(m, src)
+}
+func (m *Heartbeat) XXX_Size() int {
+	return xxx_messageInfo_Heartbeat.Size(m)
+}
+func (m *Heartbeat) XXX_DiscardUnknown() {
+	xxx_messageInfo_Heartbeat.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_Heartbeat proto.InternalMessageInfo
+
+func (m *Heartbeat) GetHeartbeatSignature() uint32 {
+	if m != nil {
+		return m.HeartbeatSignature
+	}
+	return 0
+}
+
 func init() {
 	proto.RegisterEnum("dmi.PhysicalInventoryResponse_Reason", PhysicalInventoryResponse_Reason_name, PhysicalInventoryResponse_Reason_value)
 	proto.RegisterEnum("dmi.HWComponentInfoGetResponse_Reason", HWComponentInfoGetResponse_Reason_name, HWComponentInfoGetResponse_Reason_value)
@@ -1615,102 +1654,106 @@
 	proto.RegisterType((*GetLogLevelRequest)(nil), "dmi.GetLogLevelRequest")
 	proto.RegisterType((*GetLogLevelResponse)(nil), "dmi.GetLogLevelResponse")
 	proto.RegisterType((*GetLoggableEntitiesRequest)(nil), "dmi.GetLoggableEntitiesRequest")
+	proto.RegisterType((*Heartbeat)(nil), "dmi.Heartbeat")
 }
 
 func init() { proto.RegisterFile("dmi/hw_management_service.proto", fileDescriptor_eae902e73066286d) }
 
 var fileDescriptor_eae902e73066286d = []byte{
-	// 1432 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0xc6,
-	0x16, 0xbe, 0x24, 0x65, 0x27, 0x3a, 0x4a, 0x1c, 0x79, 0x92, 0xf8, 0x4a, 0x0c, 0x62, 0xfb, 0x32,
-	0xc8, 0x8d, 0x73, 0x6f, 0x22, 0x19, 0xca, 0xa2, 0x68, 0x8b, 0xfe, 0xc8, 0x16, 0x43, 0xab, 0x91,
-	0x48, 0x61, 0x28, 0xc7, 0x48, 0x51, 0x54, 0xa0, 0xa5, 0xb1, 0x4c, 0x40, 0x24, 0x55, 0x91, 0x52,
-	0xe0, 0x07, 0xe8, 0xa2, 0x8f, 0xd0, 0x45, 0x81, 0xbe, 0x41, 0xd1, 0x2e, 0x8b, 0xbe, 0x41, 0xb7,
-	0x5d, 0x15, 0x05, 0x8a, 0x3e, 0x42, 0xdf, 0xa0, 0xd0, 0x0c, 0xa9, 0x1f, 0x8a, 0x94, 0x64, 0x39,
-	0x45, 0xb3, 0x93, 0x66, 0xce, 0x7c, 0x73, 0xe6, 0x7c, 0xdf, 0x1c, 0x9e, 0x39, 0xb0, 0xd3, 0xb2,
-	0xcc, 0xfc, 0xf9, 0xeb, 0x86, 0x65, 0xd8, 0x46, 0x9b, 0x58, 0xc4, 0xf6, 0x1a, 0x2e, 0xe9, 0x0d,
-	0xcc, 0x26, 0xc9, 0x75, 0x7b, 0x8e, 0xe7, 0x20, 0xa1, 0x65, 0x99, 0xe2, 0xe6, 0xd0, 0xaa, 0xe9,
-	0x58, 0x96, 0x63, 0xbb, 0x6c, 0x5c, 0xbc, 0xc1, 0x16, 0xfa, 0xff, 0xee, 0xb5, 0x1d, 0xa7, 0xdd,
-	0x21, 0x79, 0xfa, 0xef, 0xb4, 0x7f, 0x96, 0x27, 0x56, 0xd7, 0xbb, 0x60, 0x93, 0xd2, 0x73, 0xc8,
-	0xd4, 0xce, 0x2f, 0x5c, 0xb3, 0x69, 0x74, 0xca, 0xf6, 0x80, 0xd8, 0x9e, 0xd3, 0xbb, 0xc0, 0xe4,
-	0x8b, 0x3e, 0x71, 0x3d, 0xf4, 0x3f, 0x48, 0xb5, 0xc8, 0x70, 0xbb, 0x46, 0xbf, 0x6f, 0xb6, 0x32,
-	0xdc, 0x2e, 0xb7, 0x97, 0x2a, 0x24, 0x73, 0x2d, 0xcb, 0xcc, 0x1d, 0xf7, 0xcd, 0x16, 0x06, 0x36,
-	0x3b, 0xfc, 0x2d, 0x7d, 0xcf, 0x43, 0x36, 0x02, 0xc8, 0xed, 0x3a, 0xb6, 0x4b, 0xd0, 0x03, 0x58,
-	0x77, 0x3d, 0xc3, 0xeb, 0xbb, 0x14, 0x64, 0xa3, 0x90, 0xa2, 0x20, 0x3a, 0x1d, 0xc2, 0xfe, 0x14,
-	0xfa, 0x00, 0xd6, 0x7b, 0xc4, 0x70, 0x1d, 0x3b, 0xc3, 0x53, 0xa3, 0x87, 0xd4, 0x28, 0x16, 0x34,
-	0x87, 0xa9, 0x31, 0xf6, 0x17, 0xa1, 0xff, 0x43, 0xd2, 0x0c, 0x6c, 0x32, 0x02, 0xf5, 0xf5, 0x26,
-	0x45, 0x38, 0x32, 0x7a, 0xad, 0xd7, 0x46, 0x8f, 0xe0, 0xf1, 0x3c, 0x7a, 0x00, 0x37, 0xd9, 0xb2,
-	0x46, 0x8b, 0x78, 0x86, 0xd9, 0xc9, 0x24, 0x76, 0xb9, 0xbd, 0x24, 0xbe, 0xc1, 0x06, 0x4b, 0x74,
-	0x4c, 0xfa, 0x1c, 0xd6, 0xd9, 0x1e, 0xe8, 0x0e, 0xa4, 0x8f, 0xd5, 0x92, 0xfc, 0xbc, 0xac, 0xca,
-	0xa5, 0x06, 0x96, 0x8b, 0xba, 0xa6, 0xa6, 0xff, 0x85, 0x10, 0x6c, 0x1c, 0xab, 0x2f, 0x54, 0xed,
-	0x44, 0x6d, 0x94, 0xe4, 0x97, 0xe5, 0x43, 0x39, 0xcd, 0x0d, 0xc7, 0xca, 0x6a, 0x5d, 0xc6, 0x6a,
-	0xb1, 0xd2, 0x90, 0x31, 0xd6, 0x70, 0x9a, 0x47, 0x5b, 0x80, 0xd8, 0x7c, 0xe3, 0x58, 0xc5, 0x72,
-	0xf1, 0xf0, 0xa8, 0x78, 0x50, 0x91, 0xd3, 0x82, 0xf4, 0x2d, 0x07, 0xd9, 0xa3, 0x93, 0x43, 0xc7,
-	0xea, 0x3a, 0x36, 0xb1, 0xbd, 0xb2, 0x7d, 0xe6, 0x28, 0xc4, 0x5b, 0x21, 0xfa, 0x68, 0x1f, 0x36,
-	0x9a, 0x01, 0x0c, 0x33, 0xe7, 0xc3, 0xe6, 0x37, 0x47, 0x06, 0x74, 0xc5, 0xc3, 0xc9, 0x15, 0xb6,
-	0x61, 0x11, 0x1a, 0xb2, 0xe4, 0x84, 0x99, 0x6a, 0x58, 0x44, 0xfa, 0x99, 0x07, 0x31, 0xca, 0xc5,
-	0xcb, 0xf0, 0xfa, 0x61, 0x88, 0xd7, 0xff, 0x32, 0x56, 0x62, 0x51, 0xc3, 0xc4, 0x3e, 0x81, 0xe4,
-	0xc8, 0x29, 0x9f, 0xd8, 0x0d, 0x0a, 0x31, 0x02, 0xc0, 0x63, 0x83, 0xe5, 0x98, 0xed, 0xaf, 0xc0,
-	0xec, 0x5d, 0xd8, 0x0c, 0xc6, 0x0e, 0xb5, 0x6a, 0x4d, 0x53, 0x65, 0xb5, 0x9e, 0xe6, 0x23, 0x08,
-	0x17, 0x62, 0x08, 0x4f, 0x48, 0xbf, 0xcc, 0x12, 0xae, 0xbf, 0x5d, 0x84, 0xa3, 0x02, 0x5c, 0x6b,
-	0x9e, 0x1b, 0x76, 0x9b, 0xb8, 0x34, 0x70, 0xa9, 0x42, 0x86, 0x22, 0x56, 0x9d, 0x96, 0x79, 0x66,
-	0x1a, 0xa7, 0x1d, 0x32, 0x0e, 0x7a, 0x60, 0x28, 0xfd, 0x30, 0x2b, 0x12, 0xfd, 0x6f, 0x11, 0x89,
-	0x1e, 0x2f, 0x92, 0x19, 0xda, 0x85, 0x08, 0xda, 0xbf, 0xe2, 0xde, 0x30, 0xef, 0x2f, 0x8b, 0x95,
-	0x72, 0xa9, 0x51, 0x2b, 0xe2, 0x62, 0x55, 0x4f, 0x0b, 0x11, 0x5a, 0x48, 0xc4, 0x68, 0x61, 0x4d,
-	0xfa, 0x8d, 0x87, 0x7b, 0xba, 0x67, 0xf4, 0xbc, 0xea, 0x30, 0xbb, 0x9b, 0x76, 0xbb, 0x44, 0xd9,
-	0xbd, 0x5c, 0xd4, 0x3e, 0x0a, 0x45, 0xed, 0x51, 0x60, 0x14, 0x07, 0x1b, 0x0e, 0x5b, 0x48, 0x73,
-	0xc2, 0x3c, 0xcd, 0x2d, 0x75, 0xb3, 0xbe, 0x5c, 0x14, 0x62, 0x11, 0xb6, 0xfc, 0x78, 0x14, 0x2b,
-	0x58, 0x2e, 0x96, 0x5e, 0x35, 0xaa, 0x45, 0xb5, 0xa8, 0xc8, 0xa5, 0x34, 0x87, 0xfe, 0x03, 0xf7,
-	0xb5, 0x9a, 0x8c, 0x8b, 0xf5, 0xb2, 0xa6, 0x8e, 0xa6, 0xcb, 0x6a, 0xa3, 0x86, 0x35, 0x05, 0xcb,
-	0xba, 0xbe, 0x7c, 0xd8, 0xa5, 0x3c, 0x64, 0x75, 0xcf, 0xe9, 0x86, 0xa3, 0xc0, 0x6e, 0x1a, 0x82,
-	0x04, 0xbd, 0x01, 0x1c, 0x3d, 0x00, 0xfd, 0x2d, 0xfd, 0xca, 0x81, 0x18, 0xb5, 0xe2, 0xea, 0x22,
-	0x8e, 0x47, 0x5d, 0x49, 0xc4, 0x85, 0xcb, 0x6b, 0x58, 0xb2, 0x60, 0x93, 0x7a, 0x40, 0x5a, 0xcc,
-	0x81, 0xe1, 0x65, 0x42, 0x4f, 0x20, 0x61, 0xda, 0x67, 0x8e, 0x9f, 0x68, 0xe2, 0xef, 0x39, 0xb5,
-	0x0a, 0x2b, 0x85, 0x9f, 0x57, 0x0c, 0xfc, 0xce, 0xc1, 0xd6, 0xd4, 0x7e, 0xee, 0xe5, 0xe2, 0xf8,
-	0x5e, 0x28, 0x8e, 0x12, 0xf3, 0x2d, 0x12, 0x31, 0x1c, 0xc3, 0x7d, 0xb8, 0xc6, 0x3c, 0x71, 0x33,
-	0xc2, 0xae, 0xb0, 0x97, 0x2a, 0x6c, 0xcd, 0x2e, 0x1e, 0x1e, 0x1f, 0x07, 0x66, 0xcb, 0x04, 0x34,
-	0x24, 0x2f, 0x4e, 0xfa, 0x86, 0x83, 0xac, 0x4e, 0xbc, 0x8a, 0xd3, 0x1e, 0xb2, 0x2a, 0xdb, 0xad,
-	0xae, 0x63, 0xda, 0x2b, 0x65, 0xf2, 0xc7, 0x90, 0xee, 0x30, 0x94, 0x06, 0xf1, 0x61, 0xe8, 0xa9,
-	0x93, 0xf8, 0x56, 0x67, 0x1a, 0x7d, 0xd2, 0x94, 0x16, 0x6f, 0x4d, 0x27, 0x50, 0x48, 0x60, 0x5a,
-	0xf3, 0x87, 0xa5, 0x3f, 0x78, 0xea, 0x1f, 0x26, 0x96, 0xe3, 0x91, 0xb1, 0x7b, 0x57, 0x2f, 0xc7,
-	0x62, 0x41, 0x57, 0xd2, 0xf2, 0x8f, 0xdc, 0x1b, 0x2a, 0xb1, 0x44, 0xd8, 0xaa, 0x68, 0x8a, 0x52,
-	0x56, 0x95, 0x86, 0xac, 0x96, 0x6a, 0x5a, 0x59, 0xad, 0x8f, 0xbe, 0xc6, 0x0f, 0x60, 0x67, 0x66,
-	0xae, 0x86, 0xb5, 0xba, 0x76, 0xa8, 0x8d, 0xd3, 0x74, 0x16, 0xee, 0x56, 0x75, 0xe5, 0xe0, 0x58,
-	0x0f, 0xaf, 0x5f, 0x8b, 0xc9, 0xe0, 0xeb, 0xc3, 0x0c, 0x2e, 0x2a, 0x11, 0x1a, 0xb8, 0x7a, 0xc6,
-	0x88, 0x47, 0x0d, 0x47, 0x39, 0x4a, 0x3d, 0xc2, 0xf2, 0xea, 0x49, 0x44, 0xaa, 0x67, 0x96, 0xbb,
-	0xb5, 0x7f, 0xa0, 0x3a, 0x3e, 0x84, 0x8c, 0x4e, 0xbc, 0xaa, 0xdb, 0x3e, 0xe8, 0xbb, 0xe1, 0x0b,
-	0xf6, 0x08, 0x6e, 0x59, 0x6e, 0xfb, 0xb4, 0xef, 0x8e, 0x4f, 0xcd, 0x72, 0xf9, 0x06, 0x1b, 0x0e,
-	0xec, 0xa5, 0xaf, 0x79, 0xc8, 0x2a, 0xb3, 0x28, 0x57, 0xbf, 0x07, 0xb1, 0xa0, 0x61, 0x86, 0x22,
-	0x5c, 0x15, 0xa2, 0x5c, 0x5d, 0xee, 0xf3, 0xfa, 0xc9, 0xe5, 0x73, 0x55, 0x4c, 0x80, 0x79, 0xe9,
-	0x15, 0xa4, 0x65, 0xdb, 0x33, 0x3d, 0x93, 0xb8, 0x15, 0xa7, 0x5d, 0x21, 0x03, 0xd2, 0x41, 0x8f,
-	0xe1, 0x7a, 0xc7, 0xff, 0xed, 0xc7, 0x84, 0xbd, 0xa1, 0x02, 0x03, 0x3c, 0x9a, 0x46, 0x22, 0x5c,
-	0x27, 0xfe, 0xf2, 0x0c, 0xbf, 0x2b, 0xec, 0x25, 0xf1, 0xe8, 0xbf, 0xd4, 0x07, 0xc4, 0xb2, 0x23,
-	0x5b, 0xb4, 0x42, 0x5a, 0x7c, 0x06, 0xc9, 0xce, 0xf0, 0xd5, 0x3a, 0x20, 0x1d, 0x06, 0x9f, 0x2a,
-	0xdc, 0xa5, 0x96, 0x61, 0x97, 0xf1, 0xd8, 0x4e, 0xfa, 0x89, 0x87, 0xdb, 0x53, 0xfb, 0xfa, 0x3c,
-	0x5f, 0x66, 0xe3, 0xb1, 0x26, 0xf8, 0x78, 0x4d, 0xbc, 0x33, 0xd2, 0x84, 0x40, 0x8d, 0x76, 0x82,
-	0xdc, 0x18, 0xde, 0x7a, 0x61, 0x56, 0x8c, 0x22, 0x79, 0xf0, 0xe6, 0x6e, 0x56, 0x60, 0x57, 0xd1,
-	0x86, 0xc9, 0xaf, 0x5e, 0xae, 0xbf, 0x9a, 0xf3, 0x3c, 0xf9, 0x0c, 0x90, 0x72, 0x35, 0xd6, 0xe6,
-	0x69, 0xe2, 0x4f, 0x1e, 0x6e, 0x2b, 0x57, 0x24, 0x87, 0xa9, 0xa2, 0xb2, 0xa4, 0x2a, 0x98, 0xdd,
-	0x04, 0xa3, 0xc2, 0x32, 0x8c, 0x26, 0x26, 0x18, 0x55, 0x56, 0x60, 0x74, 0xed, 0x2d, 0x62, 0xf4,
-	0x68, 0xf4, 0x85, 0x1a, 0x96, 0x74, 0x41, 0x90, 0x56, 0x60, 0xb6, 0xf0, 0xdd, 0x75, 0xc8, 0xaa,
-	0x86, 0x67, 0x0e, 0xc8, 0xd1, 0x49, 0x75, 0xd4, 0x8f, 0xd2, 0x59, 0x3b, 0x0a, 0xe9, 0x70, 0x3b,
-	0xe2, 0xd1, 0x81, 0x62, 0x6b, 0x4a, 0x71, 0x77, 0xd1, 0x43, 0x65, 0x9f, 0x43, 0xc7, 0x80, 0x66,
-	0x4b, 0x67, 0xb4, 0x1d, 0x5b, 0x53, 0xd3, 0x43, 0x89, 0x3b, 0x0b, 0x6a, 0x6e, 0x74, 0x04, 0x9b,
-	0xc3, 0xe4, 0x3d, 0x55, 0x4c, 0xa2, 0xad, 0x1c, 0x6b, 0x92, 0xe5, 0x82, 0x26, 0x59, 0x4e, 0xb6,
-	0xba, 0xde, 0x85, 0x78, 0x6f, 0x4e, 0xe5, 0x89, 0x4e, 0xe0, 0x8e, 0x42, 0xbc, 0x99, 0x06, 0x15,
-	0xba, 0x1f, 0xd7, 0xb8, 0x62, 0x1e, 0x6e, 0xcf, 0xef, 0x6b, 0xed, 0x73, 0xe8, 0x84, 0x5e, 0xc4,
-	0xd0, 0xe3, 0xd7, 0x3f, 0x79, 0x6c, 0xc3, 0xc8, 0x3f, 0x79, 0x7c, 0x5f, 0xc5, 0x0f, 0xe9, 0x92,
-	0xc0, 0xfa, 0x02, 0xe0, 0xc9, 0x17, 0x7e, 0x3d, 0x48, 0xf7, 0x53, 0x05, 0xc7, 0xf6, 0x44, 0x52,
-	0x8c, 0xa8, 0x92, 0xc5, 0xed, 0xf9, 0x05, 0x25, 0x7a, 0x1e, 0xa4, 0xa3, 0x29, 0xd4, 0x5b, 0x53,
-	0x3d, 0xbd, 0x72, 0x49, 0xdc, 0x59, 0x50, 0x32, 0x21, 0x0c, 0x9b, 0x33, 0x85, 0x84, 0xcf, 0x51,
-	0x5c, 0x81, 0xb1, 0xd0, 0xb7, 0x17, 0x4c, 0x44, 0xd3, 0x98, 0x71, 0x22, 0xda, 0x9e, 0x5f, 0x31,
-	0xa0, 0x5a, 0x90, 0x18, 0xa7, 0x6e, 0x29, 0x9a, 0x3a, 0x58, 0xc4, 0xfd, 0x15, 0x33, 0x71, 0x39,
-	0x0a, 0x7d, 0x0c, 0xa9, 0x89, 0x8f, 0x11, 0xfa, 0xf7, 0xec, 0xe7, 0x69, 0x12, 0x41, 0x8f, 0x46,
-	0x50, 0x66, 0x10, 0x94, 0x38, 0x84, 0x08, 0x1f, 0x0e, 0xde, 0xff, 0xf4, 0xdd, 0xb6, 0xe9, 0x9d,
-	0xf7, 0x4f, 0x73, 0x4d, 0xc7, 0xca, 0x3b, 0x5d, 0x62, 0x37, 0x9d, 0x5e, 0x2b, 0xcf, 0x72, 0xca,
-	0xd3, 0x71, 0x4f, 0xfb, 0xa9, 0x69, 0x7b, 0xa4, 0x77, 0x66, 0x34, 0x49, 0x7e, 0xf0, 0x2c, 0xdf,
-	0x76, 0xf2, 0x2d, 0xcb, 0x3c, 0x5d, 0xa7, 0x21, 0x7c, 0xf6, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff,
-	0x54, 0xa0, 0x5f, 0x10, 0x03, 0x17, 0x00, 0x00,
+	// 1477 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcd, 0x6e, 0xdb, 0x46,
+	0x10, 0x2e, 0x49, 0xdb, 0x89, 0xc6, 0x89, 0x23, 0xaf, 0x13, 0x57, 0x66, 0x10, 0xdb, 0x65, 0x90,
+	0xc6, 0x69, 0x13, 0xc9, 0x50, 0x0e, 0xfd, 0xff, 0x91, 0x2d, 0x86, 0x56, 0x23, 0x91, 0xc2, 0x52,
+	0x8e, 0x91, 0xa2, 0x28, 0x41, 0x4b, 0x6b, 0x99, 0xa8, 0x48, 0xaa, 0x22, 0xe5, 0xc0, 0x0f, 0xd0,
+	0x43, 0x1f, 0xa1, 0x87, 0x02, 0x7d, 0x85, 0xf6, 0x58, 0xf4, 0x0d, 0x7a, 0xed, 0xa9, 0x28, 0x50,
+	0xf4, 0xd8, 0x63, 0xdf, 0xa0, 0xd0, 0x2e, 0xa9, 0x1f, 0x8a, 0x94, 0x64, 0x39, 0x45, 0x73, 0x23,
+	0x77, 0x67, 0x3f, 0xce, 0xce, 0xf7, 0xed, 0x70, 0x76, 0x60, 0xab, 0x61, 0x5b, 0xb9, 0xd3, 0x17,
+	0x86, 0x6d, 0x3a, 0x66, 0x93, 0xd8, 0xc4, 0xf1, 0x0d, 0x8f, 0x74, 0xce, 0xac, 0x3a, 0xc9, 0xb6,
+	0x3b, 0xae, 0xef, 0x22, 0xa1, 0x61, 0x5b, 0xe2, 0x6a, 0xcf, 0xaa, 0xee, 0xda, 0xb6, 0xeb, 0x78,
+	0x6c, 0x5c, 0xbc, 0xc6, 0x16, 0x06, 0x6f, 0xb7, 0x9b, 0xae, 0xdb, 0x6c, 0x91, 0x1c, 0x7d, 0x3b,
+	0xee, 0x9e, 0xe4, 0x88, 0xdd, 0xf6, 0xcf, 0xd9, 0xa4, 0xf4, 0x04, 0x32, 0xd5, 0xd3, 0x73, 0xcf,
+	0xaa, 0x9b, 0xad, 0x92, 0x73, 0x46, 0x1c, 0xdf, 0xed, 0x9c, 0x63, 0xf2, 0x75, 0x97, 0x78, 0x3e,
+	0x7a, 0x0b, 0x96, 0x1b, 0xa4, 0xf7, 0x39, 0xa3, 0xdb, 0xb5, 0x1a, 0x19, 0x6e, 0x9b, 0xdb, 0x59,
+	0xce, 0xa7, 0xb2, 0x0d, 0xdb, 0xca, 0x1e, 0x76, 0xad, 0x06, 0x06, 0x36, 0xdb, 0x7b, 0x96, 0x7e,
+	0xe4, 0x61, 0x23, 0x06, 0xc8, 0x6b, 0xbb, 0x8e, 0x47, 0xd0, 0x5d, 0x58, 0xf2, 0x7c, 0xd3, 0xef,
+	0x7a, 0x14, 0x64, 0x25, 0xbf, 0x4c, 0x41, 0x74, 0x3a, 0x84, 0x83, 0x29, 0xf4, 0x11, 0x2c, 0x75,
+	0x88, 0xe9, 0xb9, 0x4e, 0x86, 0xa7, 0x46, 0xf7, 0xa8, 0x51, 0x22, 0x68, 0x16, 0x53, 0x63, 0x1c,
+	0x2c, 0x42, 0x6f, 0x43, 0xca, 0x0a, 0x6d, 0x32, 0x02, 0xf5, 0xf5, 0x3a, 0x45, 0x38, 0x30, 0x3b,
+	0x8d, 0x17, 0x66, 0x87, 0xe0, 0xc1, 0x3c, 0xba, 0x0b, 0xd7, 0xd9, 0x32, 0xa3, 0x41, 0x7c, 0xd3,
+	0x6a, 0x65, 0x16, 0xb6, 0xb9, 0x9d, 0x14, 0xbe, 0xc6, 0x06, 0x8b, 0x74, 0x4c, 0xfa, 0x12, 0x96,
+	0xd8, 0x37, 0xd0, 0x4d, 0x48, 0x1f, 0xaa, 0x45, 0xf9, 0x49, 0x49, 0x95, 0x8b, 0x06, 0x96, 0x0b,
+	0xba, 0xa6, 0xa6, 0x5f, 0x43, 0x08, 0x56, 0x0e, 0xd5, 0xa7, 0xaa, 0x76, 0xa4, 0x1a, 0x45, 0xf9,
+	0x59, 0x69, 0x5f, 0x4e, 0x73, 0xbd, 0xb1, 0x92, 0x5a, 0x93, 0xb1, 0x5a, 0x28, 0x1b, 0x32, 0xc6,
+	0x1a, 0x4e, 0xf3, 0x68, 0x1d, 0x10, 0x9b, 0x37, 0x0e, 0x55, 0x2c, 0x17, 0xf6, 0x0f, 0x0a, 0x7b,
+	0x65, 0x39, 0x2d, 0x48, 0x3f, 0x70, 0xb0, 0x71, 0x70, 0xb4, 0xef, 0xda, 0x6d, 0xd7, 0x21, 0x8e,
+	0x5f, 0x72, 0x4e, 0x5c, 0x85, 0xf8, 0x73, 0x44, 0x1f, 0xed, 0xc2, 0x4a, 0x3d, 0x84, 0x61, 0xe6,
+	0x7c, 0xd4, 0xfc, 0x7a, 0xdf, 0x80, 0xae, 0xb8, 0x37, 0xbc, 0xc2, 0x31, 0x6d, 0x42, 0x43, 0x96,
+	0x1a, 0x32, 0x53, 0x4d, 0x9b, 0x48, 0xbf, 0xf2, 0x20, 0xc6, 0xb9, 0x78, 0x11, 0x5e, 0x3f, 0x8e,
+	0xf0, 0xfa, 0x26, 0x63, 0x25, 0x11, 0x35, 0x4a, 0xec, 0x43, 0x48, 0xf5, 0x9d, 0x0a, 0x88, 0x5d,
+	0xa1, 0x10, 0x7d, 0x00, 0x3c, 0x30, 0x98, 0x8d, 0xd9, 0xee, 0x1c, 0xcc, 0xde, 0x82, 0xd5, 0x70,
+	0x6c, 0x5f, 0xab, 0x54, 0x35, 0x55, 0x56, 0x6b, 0x69, 0x3e, 0x86, 0x70, 0x21, 0x81, 0xf0, 0x05,
+	0xe9, 0xb7, 0x71, 0xc2, 0xf5, 0x57, 0x8b, 0x70, 0x94, 0x87, 0x2b, 0xf5, 0x53, 0xd3, 0x69, 0x12,
+	0x8f, 0x06, 0x6e, 0x39, 0x9f, 0xa1, 0x88, 0x15, 0xb7, 0x61, 0x9d, 0x58, 0xe6, 0x71, 0x8b, 0x0c,
+	0x82, 0x1e, 0x1a, 0x4a, 0x3f, 0x8d, 0x8b, 0x44, 0xff, 0x4f, 0x44, 0xa2, 0x27, 0x8b, 0x64, 0x8c,
+	0x76, 0x21, 0x86, 0xf6, 0x6f, 0xb9, 0x97, 0xcc, 0xfb, 0xb3, 0x42, 0xb9, 0x54, 0x34, 0xaa, 0x05,
+	0x5c, 0xa8, 0xe8, 0x69, 0x21, 0x46, 0x0b, 0x0b, 0x09, 0x5a, 0x58, 0x94, 0xfe, 0xe0, 0xe1, 0xb6,
+	0xee, 0x9b, 0x1d, 0xbf, 0xd2, 0xcb, 0xee, 0x96, 0xd3, 0x2c, 0x52, 0x76, 0x2f, 0x16, 0xb5, 0x4f,
+	0x22, 0x51, 0xbb, 0x1f, 0x1a, 0x25, 0xc1, 0x46, 0xc3, 0x16, 0xd1, 0x9c, 0x30, 0x49, 0x73, 0x33,
+	0x9d, 0xac, 0x6f, 0xa6, 0x85, 0x58, 0x84, 0xf5, 0x20, 0x1e, 0x85, 0x32, 0x96, 0x0b, 0xc5, 0xe7,
+	0x46, 0xa5, 0xa0, 0x16, 0x14, 0xb9, 0x98, 0xe6, 0xd0, 0x1b, 0x70, 0x47, 0xab, 0xca, 0xb8, 0x50,
+	0x2b, 0x69, 0x6a, 0x7f, 0xba, 0xa4, 0x1a, 0x55, 0xac, 0x29, 0x58, 0xd6, 0xf5, 0xd9, 0xc3, 0x2e,
+	0xe5, 0x60, 0x43, 0xf7, 0xdd, 0x76, 0x34, 0x0a, 0xec, 0xa4, 0x21, 0x58, 0xa0, 0x27, 0x80, 0xa3,
+	0x1b, 0xa0, 0xcf, 0xd2, 0xef, 0x1c, 0x88, 0x71, 0x2b, 0x2e, 0x2f, 0xe2, 0x64, 0xd4, 0xb9, 0x44,
+	0x9c, 0xbf, 0xb8, 0x86, 0x25, 0x1b, 0x56, 0xa9, 0x07, 0xa4, 0xc1, 0x1c, 0xe8, 0x1d, 0x26, 0xf4,
+	0x10, 0x16, 0x2c, 0xe7, 0xc4, 0x0d, 0x12, 0x4d, 0xf2, 0x39, 0xa7, 0x56, 0x51, 0xa5, 0xf0, 0x93,
+	0x8a, 0x81, 0x3f, 0x39, 0x58, 0x1f, 0xf9, 0x9e, 0x77, 0xb1, 0x38, 0xbe, 0x1f, 0x89, 0xa3, 0xc4,
+	0x7c, 0x8b, 0x45, 0x8c, 0xc6, 0x70, 0x17, 0xae, 0x30, 0x4f, 0xbc, 0x8c, 0xb0, 0x2d, 0xec, 0x2c,
+	0xe7, 0xd7, 0xc7, 0x17, 0xf7, 0xb6, 0x8f, 0x43, 0xb3, 0x59, 0x02, 0x1a, 0x91, 0x17, 0x27, 0x7d,
+	0xcf, 0xc1, 0x86, 0x4e, 0xfc, 0xb2, 0xdb, 0xec, 0xb1, 0x2a, 0x3b, 0x8d, 0xb6, 0x6b, 0x39, 0x73,
+	0x65, 0xf2, 0x07, 0x90, 0x6e, 0x31, 0x14, 0x83, 0x04, 0x30, 0x74, 0xd7, 0x29, 0x7c, 0xa3, 0x35,
+	0x8a, 0x3e, 0x6c, 0x4a, 0x8b, 0xb7, 0xba, 0x1b, 0x2a, 0x24, 0x34, 0xad, 0x06, 0xc3, 0xd2, 0x5f,
+	0x3c, 0xf5, 0x0f, 0x13, 0xdb, 0xf5, 0xc9, 0xc0, 0xbd, 0xcb, 0x97, 0x63, 0x89, 0xa0, 0x73, 0x69,
+	0xf9, 0x67, 0xee, 0x25, 0x95, 0x58, 0x22, 0xac, 0x97, 0x35, 0x45, 0x29, 0xa9, 0x8a, 0x21, 0xab,
+	0xc5, 0xaa, 0x56, 0x52, 0x6b, 0xfd, 0xbf, 0xf1, 0x5d, 0xd8, 0x1a, 0x9b, 0xab, 0x62, 0xad, 0xa6,
+	0xed, 0x6b, 0x83, 0x34, 0xbd, 0x01, 0xb7, 0x2a, 0xba, 0xb2, 0x77, 0xa8, 0x47, 0xd7, 0x2f, 0x26,
+	0x64, 0xf0, 0xa5, 0x5e, 0x06, 0x17, 0x95, 0x18, 0x0d, 0x5c, 0x3e, 0x63, 0x24, 0xa3, 0x46, 0xa3,
+	0x1c, 0xa7, 0x1e, 0x61, 0x76, 0xf5, 0x2c, 0xc4, 0xaa, 0x67, 0x9c, 0xbb, 0xc5, 0xff, 0xa1, 0x3a,
+	0xde, 0x87, 0x8c, 0x4e, 0xfc, 0x8a, 0xd7, 0xdc, 0xeb, 0x7a, 0xd1, 0x03, 0x76, 0x1f, 0x6e, 0xd8,
+	0x5e, 0xf3, 0xb8, 0xeb, 0x0d, 0x76, 0xcd, 0x72, 0xf9, 0x0a, 0x1b, 0x0e, 0xed, 0xa5, 0xef, 0x78,
+	0xd8, 0x50, 0xc6, 0x51, 0x2e, 0x7f, 0x0e, 0x12, 0x41, 0xa3, 0x0c, 0xc5, 0xb8, 0x2a, 0xc4, 0xb9,
+	0x3a, 0xdb, 0xef, 0xf5, 0xb3, 0x8b, 0xe7, 0xaa, 0x84, 0x00, 0xf3, 0xd2, 0x73, 0x48, 0xcb, 0x8e,
+	0x6f, 0xf9, 0x16, 0xf1, 0xca, 0x6e, 0xb3, 0x4c, 0xce, 0x48, 0x0b, 0x3d, 0x80, 0xab, 0xad, 0xe0,
+	0x39, 0x88, 0x09, 0xbb, 0x43, 0x85, 0x06, 0xb8, 0x3f, 0x8d, 0x44, 0xb8, 0x4a, 0x82, 0xe5, 0x19,
+	0x7e, 0x5b, 0xd8, 0x49, 0xe1, 0xfe, 0xbb, 0xd4, 0x05, 0xc4, 0xb2, 0x23, 0x5b, 0x34, 0x47, 0x5a,
+	0x7c, 0x0c, 0xa9, 0x56, 0xef, 0xd6, 0x7a, 0x46, 0x5a, 0x0c, 0x7e, 0x39, 0x7f, 0x8b, 0x5a, 0x46,
+	0x5d, 0xc6, 0x03, 0x3b, 0xe9, 0x17, 0x1e, 0xd6, 0x46, 0xbe, 0x1b, 0xf0, 0x7c, 0x91, 0x0f, 0x0f,
+	0x34, 0xc1, 0x27, 0x6b, 0xe2, 0x9d, 0xbe, 0x26, 0x04, 0x6a, 0xb4, 0x15, 0xe6, 0xc6, 0xe8, 0xa7,
+	0xa7, 0x66, 0xc5, 0x38, 0x92, 0xcf, 0x5e, 0xde, 0xc9, 0x0a, 0xed, 0xca, 0x5a, 0x2f, 0xf9, 0xd5,
+	0x4a, 0xb5, 0xe7, 0x13, 0xae, 0x27, 0x5f, 0x00, 0x52, 0x2e, 0xc7, 0xda, 0x24, 0x4d, 0xfc, 0xc3,
+	0xc3, 0x9a, 0x72, 0x49, 0x72, 0x98, 0x2a, 0xca, 0x33, 0xaa, 0x82, 0xd9, 0x0d, 0x31, 0x2a, 0xcc,
+	0xc2, 0xe8, 0xc2, 0x10, 0xa3, 0xca, 0x1c, 0x8c, 0x2e, 0xbe, 0x42, 0x8c, 0x1e, 0xf4, 0xff, 0x50,
+	0xbd, 0x92, 0x2e, 0x0c, 0xd2, 0x3c, 0xfd, 0x9d, 0x0f, 0x21, 0x75, 0x40, 0xcc, 0x8e, 0x7f, 0x4c,
+	0x4c, 0x1f, 0xe5, 0x60, 0xed, 0x34, 0x7c, 0x31, 0x3c, 0xab, 0xe9, 0x98, 0x7e, 0xb7, 0xc3, 0xca,
+	0xe9, 0x2b, 0x18, 0xf5, 0xa7, 0xf4, 0x70, 0x26, 0xff, 0xf7, 0x55, 0xd8, 0x50, 0x4d, 0xdf, 0x3a,
+	0x23, 0x07, 0x47, 0x95, 0x7e, 0x37, 0x4b, 0x67, 0xcd, 0x2c, 0xa4, 0xc3, 0x5a, 0xcc, 0x95, 0x05,
+	0x25, 0x56, 0xa4, 0xe2, 0xf6, 0xb4, 0x6b, 0xce, 0x2e, 0x87, 0x0e, 0x01, 0x8d, 0x17, 0xde, 0x68,
+	0x33, 0xb1, 0x22, 0xa7, 0x21, 0x11, 0xb7, 0xa6, 0x54, 0xec, 0xe8, 0x00, 0x56, 0x7b, 0xa9, 0x7f,
+	0xa4, 0x14, 0x45, 0xeb, 0x59, 0xd6, 0x62, 0xcb, 0x86, 0x2d, 0xb6, 0xac, 0x6c, 0xb7, 0xfd, 0x73,
+	0xf1, 0xf6, 0x84, 0xba, 0x15, 0x1d, 0xc1, 0x4d, 0x85, 0xf8, 0x63, 0xed, 0x2d, 0x74, 0x27, 0xa9,
+	0xed, 0xc5, 0x3c, 0xdc, 0x9c, 0xdc, 0x15, 0xdb, 0xe5, 0xd0, 0x11, 0x3d, 0xc6, 0x91, 0xab, 0x73,
+	0xb0, 0xf3, 0xc4, 0x76, 0x53, 0xb0, 0xf3, 0xe4, 0xae, 0x4c, 0x10, 0xd2, 0x19, 0x81, 0xf5, 0x29,
+	0xc0, 0xc3, 0xfd, 0x81, 0x5a, 0xf8, 0xb3, 0x18, 0x29, 0x57, 0x36, 0x87, 0x52, 0x6a, 0x4c, 0x8d,
+	0x2d, 0x6e, 0x4e, 0x2e, 0x47, 0xd1, 0x93, 0x30, 0x99, 0x8d, 0xa0, 0xde, 0x18, 0xe9, 0x08, 0x96,
+	0x8a, 0xe2, 0xd6, 0x94, 0x82, 0x0b, 0x61, 0x58, 0x1d, 0x2b, 0x43, 0x02, 0x8e, 0x92, 0xca, 0x93,
+	0xa9, 0xbe, 0x3d, 0x65, 0x22, 0x1a, 0xc5, 0x4c, 0x12, 0xd1, 0xe6, 0xe4, 0x7a, 0x03, 0x55, 0xc3,
+	0xb4, 0x3a, 0x72, 0xc6, 0xd1, 0xc8, 0xc6, 0x62, 0x4e, 0xbf, 0x98, 0x49, 0xca, 0x70, 0xe8, 0x53,
+	0x58, 0x1e, 0xfa, 0x95, 0xa1, 0xd7, 0xc7, 0x7f, 0x6e, 0xc3, 0x08, 0x7a, 0x3c, 0x82, 0x32, 0x86,
+	0xa0, 0x24, 0x21, 0xc4, 0xf9, 0xf0, 0x2e, 0xac, 0xf4, 0xf3, 0xcd, 0xfe, 0x29, 0xa9, 0x7f, 0x95,
+	0x18, 0x1f, 0xd6, 0x0b, 0xec, 0x1b, 0xef, 0x7d, 0xf0, 0xf9, 0x7b, 0x4d, 0xcb, 0x3f, 0xed, 0x1e,
+	0x67, 0xeb, 0xae, 0x9d, 0x73, 0xdb, 0xc4, 0xa9, 0xbb, 0x9d, 0x46, 0x8e, 0xe5, 0xb2, 0x47, 0x83,
+	0x5e, 0xfa, 0x23, 0xcb, 0xf1, 0x49, 0xe7, 0xc4, 0xac, 0x93, 0xdc, 0xd9, 0xe3, 0x5c, 0xd3, 0xcd,
+	0x35, 0x6c, 0xeb, 0x78, 0x89, 0x82, 0x3f, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0x9f, 0xef, 0x9c,
+	0xa9, 0x7b, 0x17, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1766,6 +1809,8 @@
 	// 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)
+	// Performs the heartbeat check
+	HeartbeatCheck(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Heartbeat, error)
 }
 
 type nativeHWManagementServiceClient struct {
@@ -1962,6 +2007,15 @@
 	return out, nil
 }
 
+func (c *nativeHWManagementServiceClient) HeartbeatCheck(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*Heartbeat, error) {
+	out := new(Heartbeat)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/HeartbeatCheck", 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
@@ -2005,6 +2059,8 @@
 	// 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)
+	// Performs the heartbeat check
+	HeartbeatCheck(context.Context, *empty.Empty) (*Heartbeat, error)
 }
 
 // UnimplementedNativeHWManagementServiceServer can be embedded to have forward compatible implementations.
@@ -2050,6 +2106,9 @@
 func (*UnimplementedNativeHWManagementServiceServer) GetLogLevel(ctx context.Context, req *GetLogLevelRequest) (*GetLogLevelResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetLogLevel not implemented")
 }
+func (*UnimplementedNativeHWManagementServiceServer) HeartbeatCheck(ctx context.Context, req *empty.Empty) (*Heartbeat, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method HeartbeatCheck not implemented")
+}
 
 func RegisterNativeHWManagementServiceServer(s *grpc.Server, srv NativeHWManagementServiceServer) {
 	s.RegisterService(&_NativeHWManagementService_serviceDesc, srv)
@@ -2298,6 +2357,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _NativeHWManagementService_HeartbeatCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(empty.Empty)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).HeartbeatCheck(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/HeartbeatCheck",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).HeartbeatCheck(ctx, req.(*empty.Empty))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _NativeHWManagementService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "dmi.NativeHWManagementService",
 	HandlerType: (*NativeHWManagementServiceServer)(nil),
@@ -2342,6 +2419,10 @@
 			MethodName: "GetLogLevel",
 			Handler:    _NativeHWManagementService_GetLogLevel_Handler,
 		},
+		{
+			MethodName: "HeartbeatCheck",
+			Handler:    _NativeHWManagementService_HeartbeatCheck_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/protos/dmi/hw_management_service.proto b/protos/dmi/hw_management_service.proto
index fb2a454..bc6ce8e 100644
--- a/protos/dmi/hw_management_service.proto
+++ b/protos/dmi/hw_management_service.proto
@@ -218,6 +218,10 @@
     Uuid device_uuid = 1;
 }
 
+message Heartbeat {
+    fixed32 heartbeat_signature = 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
@@ -272,4 +276,7 @@
     // 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);
+
+    // Performs the heartbeat check
+    rpc HeartbeatCheck(google.protobuf.Empty) returns (Heartbeat);
 }
diff --git a/python/dmi/hw_management_service_pb2.py b/python/dmi/hw_management_service_pb2.py
index 29e260e..bdf8fcd 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\"\x88\x02\n\x19PhysicalInventoryResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x35\n\x06reason\x18\x02 \x01(\x0e\x32%.dmi.PhysicalInventoryResponse.Reason\x12 \n\tinventory\x18\x03 \x01(\x0b\x32\r.dmi.Hardware\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"^\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x03\"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\"\xa2\x02\n\x1aHWComponentInfoGetResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.HWComponentInfoGetResponse.Reason\x12!\n\tcomponent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"u\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x15\n\x11UNKNOWN_COMPONENT\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"\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\"\x94\x02\n\x1aHWComponentInfoSetResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.HWComponentInfoSetResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"\x89\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x15\n\x11UNKNOWN_COMPONENT\x10\x02\x12\x12\n\x0eINVALID_PARAMS\x10\x03\x12\x12\n\x0eINTERNAL_ERROR\x10\x04\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x05\"\xb2\x02\n\x1bStartManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x37\n\x06reason\x18\x02 \x01(\x0e\x32\'.dmi.StartManagingDeviceResponse.Reason\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x03 \x01(\x0b\x32\t.dmi.Uuid\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"\x85\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x1a\n\x16\x44\x45VICE_ALREADY_MANAGED\x10\x01\x12!\n\x1dOPERATION_ALREADY_IN_PROGRESS\x10\x02\x12\x12\n\x0eINVALID_PARAMS\x10\x03\x12\x12\n\x0eINTERNAL_ERROR\x10\x04\")\n\x19StopManagingDeviceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\xbc\x01\n\x1aStopManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.StopManagingDeviceResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"2\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\"[\n\x11ManagedDeviceInfo\x12&\n\x04info\x18\x01 \x01(\x0b\x32\x18.dmi.ModifiableComponent\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\"\xc6\x01\n\x16ManagedDevicesResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x32\n\x06reason\x18\x02 \x01(\x0e\x32\".dmi.ManagedDevicesResponse.Reason\x12\'\n\x07\x64\x65vices\x18\x03 \x03(\x0b\x32\x16.dmi.ManagedDeviceInfo\"2\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eINTERNAL_ERROR\x10\x01\"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\"\xc3\x02\n\x19SetRemoteEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x35\n\x06reason\x18\x02 \x01(\x0e\x32%.dmi.SetRemoteEndpointResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"\xba\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\x1a\n\x16LOGGING_ENDPOINT_ERROR\x10\x03\x12#\n\x1fLOGGING_ENDPOINT_PROTOCOL_ERROR\x10\x04\x12\x19\n\x15MSGBUS_ENDPOINT_ERROR\x10\x05\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x06\"\x9c\x02\n\x1aGetLoggingEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.GetLoggingEndpointResponse.Reason\x12\x18\n\x10logging_endpoint\x18\x03 \x01(\t\x12\x18\n\x10logging_protocol\x18\x04 \x01(\t\x12\x15\n\rreason_detail\x18\x05 \x01(\t\"^\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x03\"3\n\x18SetMsgBusEndpointRequest\x12\x17\n\x0fmsgbus_endpoint\x18\x01 \x01(\t\"\xeb\x01\n\x19GetMsgBusEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x35\n\x06reason\x18\x02 \x01(\x0e\x32%.dmi.GetMsgBusEndpointResponse.Reason\x12\x17\n\x0fmsgbus_endpoint\x18\x03 \x01(\t\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"J\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eINTERNAL_ERROR\x10\x01\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x02\"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\"\x92\x02\n\x13SetLogLevelResponse\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/\n\x06reason\x18\x03 \x01(\x0e\x32\x1f.dmi.SetLogLevelResponse.Reason\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"v\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12UNKNOWN_LOG_ENTITY\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"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\"\xbc\x02\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/\n\x06reason\x18\x04 \x01(\x0e\x32\x1f.dmi.GetLogLevelResponse.Reason\x12\x15\n\rreason_detail\x18\x05 \x01(\t\"v\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12UNKNOWN_LOG_ENTITY\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"<\n\x1aGetLoggableEntitiesRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid2\xaf\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\x46\n\x12GetLoggingEndpoint\x12\x0f.dmi.HardwareID\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'
+  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\"\x88\x02\n\x19PhysicalInventoryResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x35\n\x06reason\x18\x02 \x01(\x0e\x32%.dmi.PhysicalInventoryResponse.Reason\x12 \n\tinventory\x18\x03 \x01(\x0b\x32\r.dmi.Hardware\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"^\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x03\"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\"\xa2\x02\n\x1aHWComponentInfoGetResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.HWComponentInfoGetResponse.Reason\x12!\n\tcomponent\x18\x03 \x01(\x0b\x32\x0e.dmi.Component\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"u\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x15\n\x11UNKNOWN_COMPONENT\x10\x02\x12\x12\n\x0eINTERNAL_ERROR\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"\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\"\x94\x02\n\x1aHWComponentInfoSetResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.HWComponentInfoSetResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"\x89\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x15\n\x11UNKNOWN_COMPONENT\x10\x02\x12\x12\n\x0eINVALID_PARAMS\x10\x03\x12\x12\n\x0eINTERNAL_ERROR\x10\x04\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x05\"\xb2\x02\n\x1bStartManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x37\n\x06reason\x18\x02 \x01(\x0e\x32\'.dmi.StartManagingDeviceResponse.Reason\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x03 \x01(\x0b\x32\t.dmi.Uuid\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"\x85\x01\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x1a\n\x16\x44\x45VICE_ALREADY_MANAGED\x10\x01\x12!\n\x1dOPERATION_ALREADY_IN_PROGRESS\x10\x02\x12\x12\n\x0eINVALID_PARAMS\x10\x03\x12\x12\n\x0eINTERNAL_ERROR\x10\x04\")\n\x19StopManagingDeviceRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"\xbc\x01\n\x1aStopManagingDeviceResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.StopManagingDeviceResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"2\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\"[\n\x11ManagedDeviceInfo\x12&\n\x04info\x18\x01 \x01(\x0b\x32\x18.dmi.ModifiableComponent\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\"\xc6\x01\n\x16ManagedDevicesResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x32\n\x06reason\x18\x02 \x01(\x0e\x32\".dmi.ManagedDevicesResponse.Reason\x12\'\n\x07\x64\x65vices\x18\x03 \x03(\x0b\x32\x16.dmi.ManagedDeviceInfo\"2\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eINTERNAL_ERROR\x10\x01\"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\"\xc3\x02\n\x19SetRemoteEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x35\n\x06reason\x18\x02 \x01(\x0e\x32%.dmi.SetRemoteEndpointResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"\xba\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\x1a\n\x16LOGGING_ENDPOINT_ERROR\x10\x03\x12#\n\x1fLOGGING_ENDPOINT_PROTOCOL_ERROR\x10\x04\x12\x19\n\x15MSGBUS_ENDPOINT_ERROR\x10\x05\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x06\"\x9c\x02\n\x1aGetLoggingEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x36\n\x06reason\x18\x02 \x01(\x0e\x32&.dmi.GetLoggingEndpointResponse.Reason\x12\x18\n\x10logging_endpoint\x18\x03 \x01(\t\x12\x18\n\x10logging_protocol\x18\x04 \x01(\t\x12\x15\n\rreason_detail\x18\x05 \x01(\t\"^\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x03\"3\n\x18SetMsgBusEndpointRequest\x12\x17\n\x0fmsgbus_endpoint\x18\x01 \x01(\t\"\xeb\x01\n\x19GetMsgBusEndpointResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x35\n\x06reason\x18\x02 \x01(\x0e\x32%.dmi.GetMsgBusEndpointResponse.Reason\x12\x17\n\x0fmsgbus_endpoint\x18\x03 \x01(\t\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"J\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eINTERNAL_ERROR\x10\x01\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x02\"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\"\x92\x02\n\x13SetLogLevelResponse\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/\n\x06reason\x18\x03 \x01(\x0e\x32\x1f.dmi.SetLogLevelResponse.Reason\x12\x15\n\rreason_detail\x18\x04 \x01(\t\"v\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12UNKNOWN_LOG_ENTITY\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"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\"\xbc\x02\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/\n\x06reason\x18\x04 \x01(\x0e\x32\x1f.dmi.GetLogLevelResponse.Reason\x12\x15\n\rreason_detail\x18\x05 \x01(\t\"v\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x16\n\x12UNKNOWN_LOG_ENTITY\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"<\n\x1aGetLoggableEntitiesRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"(\n\tHeartbeat\x12\x1b\n\x13heartbeat_signature\x18\x01 \x01(\x07\x32\xe9\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\x46\n\x12GetLoggingEndpoint\x12\x0f.dmi.HardwareID\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.GetLogLevelResponse\x12\x38\n\x0eHeartbeatCheck\x12\x16.google.protobuf.Empty\x1a\x0e.dmi.HeartbeatB;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,])
 
@@ -1442,6 +1442,38 @@
   serialized_end=4034,
 )
 
+
+_HEARTBEAT = _descriptor.Descriptor(
+  name='Heartbeat',
+  full_name='dmi.Heartbeat',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='heartbeat_signature', full_name='dmi.Heartbeat.heartbeat_signature', index=0,
+      number=1, type=7, cpp_type=3, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=4036,
+  serialized_end=4076,
+)
+
 _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 = _PHYSICALINVENTORYRESPONSE_REASON
@@ -1518,6 +1550,7 @@
 DESCRIPTOR.message_types_by_name['GetLogLevelRequest'] = _GETLOGLEVELREQUEST
 DESCRIPTOR.message_types_by_name['GetLogLevelResponse'] = _GETLOGLEVELRESPONSE
 DESCRIPTOR.message_types_by_name['GetLoggableEntitiesRequest'] = _GETLOGGABLEENTITIESREQUEST
+DESCRIPTOR.message_types_by_name['Heartbeat'] = _HEARTBEAT
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
 PhysicalInventoryRequest = _reflection.GeneratedProtocolMessageType('PhysicalInventoryRequest', (_message.Message,), {
@@ -1674,6 +1707,13 @@
   })
 _sym_db.RegisterMessage(GetLoggableEntitiesRequest)
 
+Heartbeat = _reflection.GeneratedProtocolMessageType('Heartbeat', (_message.Message,), {
+  'DESCRIPTOR' : _HEARTBEAT,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.Heartbeat)
+  })
+_sym_db.RegisterMessage(Heartbeat)
+
 
 DESCRIPTOR._options = None
 
@@ -1684,8 +1724,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=4037,
-  serialized_end=5108,
+  serialized_start=4079,
+  serialized_end=5208,
   methods=[
   _descriptor.MethodDescriptor(
     name='StartManagingDevice',
@@ -1817,6 +1857,16 @@
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
+  _descriptor.MethodDescriptor(
+    name='HeartbeatCheck',
+    full_name='dmi.NativeHWManagementService.HeartbeatCheck',
+    index=13,
+    containing_service=None,
+    input_type=google_dot_protobuf_dot_empty__pb2._EMPTY,
+    output_type=_HEARTBEAT,
+    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 9c25fe3..89a08ad 100644
--- a/python/dmi/hw_management_service_pb2_grpc.py
+++ b/python/dmi/hw_management_service_pb2_grpc.py
@@ -81,6 +81,11 @@
                 request_serializer=dmi_dot_hw__management__service__pb2.GetLogLevelRequest.SerializeToString,
                 response_deserializer=dmi_dot_hw__management__service__pb2.GetLogLevelResponse.FromString,
                 )
+        self.HeartbeatCheck = channel.unary_unary(
+                '/dmi.NativeHWManagementService/HeartbeatCheck',
+                request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.Heartbeat.FromString,
+                )
 
 
 class NativeHWManagementServiceServicer(object):
@@ -192,6 +197,13 @@
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def HeartbeatCheck(self, request, context):
+        """Performs the heartbeat check
+        """
+        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 = {
@@ -260,6 +272,11 @@
                     request_deserializer=dmi_dot_hw__management__service__pb2.GetLogLevelRequest.FromString,
                     response_serializer=dmi_dot_hw__management__service__pb2.GetLogLevelResponse.SerializeToString,
             ),
+            'HeartbeatCheck': grpc.unary_unary_rpc_method_handler(
+                    servicer.HeartbeatCheck,
+                    request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.Heartbeat.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'dmi.NativeHWManagementService', rpc_method_handlers)
@@ -490,3 +507,20 @@
             dmi_dot_hw__management__service__pb2.GetLogLevelResponse.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def HeartbeatCheck(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/HeartbeatCheck',
+            google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
+            dmi_dot_hw__management__service__pb2.Heartbeat.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
