diff --git a/cpp/dmi/hw_events_mgmt_service.pb.cc b/cpp/dmi/hw_events_mgmt_service.pb.cc
index 28a38bc..92c4c8e 100644
--- a/cpp/dmi/hw_events_mgmt_service.pb.cc
+++ b/cpp/dmi/hw_events_mgmt_service.pb.cc
@@ -428,7 +428,7 @@
   "\022\037\n\010event_id\030\002 \001(\0162\r.dmi.EventIds\022-\n\trai"
   "sed_ts\030\003 \001(\0132\032.google.protobuf.Timestamp"
   "\0221\n\016threshold_info\030\004 \001(\0132\031.dmi.Threshold"
-  "Information\022\020\n\010add_info\030\005 \001(\t*\321\016\n\010EventI"
+  "Information\022\020\n\010add_info\030\005 \001(\t*\356\016\n\010EventI"
   "ds\022\030\n\024EVENT_NAME_UNDEFINED\020\000\022\036\n\032EVENT_TR"
   "ANSCEIVER_PLUG_OUT\020d\022\035\n\031EVENT_TRANSCEIVE"
   "R_PLUG_IN\020e\022-\n)EVENT_TRANSCEIVER_VOLTAGE"
@@ -475,20 +475,21 @@
   "ICE_TEMPERATURE_ABOVE_FATAL\020\366\003\0229\n4EVENT_"
   "HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_REC"
   "OVERED\020\367\003\0226\n1EVENT_HW_DEVICE_TEMPERATURE"
-  "_ABOVE_FATAL_RECOVERED\020\370\0032\355\001\n\035NativeEven"
-  "tsManagementService\0226\n\nListEvents\022\017.dmi."
-  "HardwareID\032\027.dmi.ListEventsResponse\022^\n\031U"
-  "pdateEventsConfiguration\022\037.dmi.EventsCon"
-  "figurationRequest\032 .dmi.EventsConfigurat"
-  "ionResponse\0224\n\014StreamEvents\022\026.google.pro"
-  "tobuf.Empty\032\n.dmi.Event0\001B;Z9github.com/"
-  "opencord/device-management-interface/v3/"
-  "go/dmib\006proto3"
+  "_ABOVE_FATAL_RECOVERED\020\370\003\022\033\n\026EVENT_HW_DE"
+  "VICE_REBOOT\020\371\0032\355\001\n\035NativeEventsManagemen"
+  "tService\0226\n\nListEvents\022\017.dmi.HardwareID\032"
+  "\027.dmi.ListEventsResponse\022^\n\031UpdateEvents"
+  "Configuration\022\037.dmi.EventsConfigurationR"
+  "equest\032 .dmi.EventsConfigurationResponse"
+  "\0224\n\014StreamEvents\022\026.google.protobuf.Empty"
+  "\032\n.dmi.Event0\001B;Z9github.com/opencord/de"
+  "vice-management-interface/v3/go/dmib\006pro"
+  "to3"
   ;
 ::google::protobuf::internal::DescriptorTable descriptor_table_dmi_2fhw_5fevents_5fmgmt_5fservice_2eproto = {
   false, InitDefaults_dmi_2fhw_5fevents_5fmgmt_5fservice_2eproto, 
   descriptor_table_protodef_dmi_2fhw_5fevents_5fmgmt_5fservice_2eproto,
-  "dmi/hw_events_mgmt_service.proto", &assign_descriptors_table_dmi_2fhw_5fevents_5fmgmt_5fservice_2eproto, 3774,
+  "dmi/hw_events_mgmt_service.proto", &assign_descriptors_table_dmi_2fhw_5fevents_5fmgmt_5fservice_2eproto, 3803,
 };
 
 void AddDescriptors_dmi_2fhw_5fevents_5fmgmt_5fservice_2eproto() {
@@ -605,6 +606,7 @@
     case 502:
     case 503:
     case 504:
+    case 505:
       return true;
     default:
       return false;
diff --git a/cpp/dmi/hw_events_mgmt_service.pb.h b/cpp/dmi/hw_events_mgmt_service.pb.h
index 4f6cf5a..a67c770 100644
--- a/cpp/dmi/hw_events_mgmt_service.pb.h
+++ b/cpp/dmi/hw_events_mgmt_service.pb.h
@@ -195,12 +195,13 @@
   EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL = 502,
   EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED = 503,
   EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED = 504,
+  EVENT_HW_DEVICE_REBOOT = 505,
   EventIds_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(),
   EventIds_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max()
 };
 bool EventIds_IsValid(int value);
 const EventIds EventIds_MIN = EVENT_NAME_UNDEFINED;
-const EventIds EventIds_MAX = EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED;
+const EventIds EventIds_MAX = EVENT_HW_DEVICE_REBOOT;
 const int EventIds_ARRAYSIZE = EventIds_MAX + 1;
 
 const ::google::protobuf::EnumDescriptor* EventIds_descriptor();
diff --git a/cpp/dmi/hw_management_service.grpc.pb.cc b/cpp/dmi/hw_management_service.grpc.pb.cc
index a43edad..c1e9d91 100644
--- a/cpp/dmi/hw_management_service.grpc.pb.cc
+++ b/cpp/dmi/hw_management_service.grpc.pb.cc
@@ -36,6 +36,7 @@
   "/dmi.NativeHWManagementService/SetLogLevel",
   "/dmi.NativeHWManagementService/GetLogLevel",
   "/dmi.NativeHWManagementService/HeartbeatCheck",
+  "/dmi.NativeHWManagementService/RebootDevice",
 };
 
 std::unique_ptr< NativeHWManagementService::Stub> NativeHWManagementService::NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options) {
@@ -59,6 +60,7 @@
   , 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)
+  , rpcmethod_RebootDevice_(NativeHWManagementService_method_names[14], ::grpc::internal::RpcMethod::NORMAL_RPC, channel)
   {}
 
 ::grpc::ClientReader< ::dmi::StartManagingDeviceResponse>* NativeHWManagementService::Stub::StartManagingDeviceRaw(::grpc::ClientContext* context, const ::dmi::ModifiableComponent& request) {
@@ -417,6 +419,34 @@
   return ::grpc_impl::internal::ClientAsyncResponseReaderFactory< ::dmi::Heartbeat>::Create(channel_.get(), cq, rpcmethod_HeartbeatCheck_, context, request, false);
 }
 
+::grpc::Status NativeHWManagementService::Stub::RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::dmi::RebootDeviceResponse* response) {
+  return ::grpc::internal::BlockingUnaryCall(channel_.get(), rpcmethod_RebootDevice_, context, request, response);
+}
+
+void NativeHWManagementService::Stub::experimental_async::RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, std::function<void(::grpc::Status)> f) {
+  ::grpc_impl::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_RebootDevice_, context, request, response, std::move(f));
+}
+
+void NativeHWManagementService::Stub::experimental_async::RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, std::function<void(::grpc::Status)> f) {
+  ::grpc_impl::internal::CallbackUnaryCall(stub_->channel_.get(), stub_->rpcmethod_RebootDevice_, context, request, response, std::move(f));
+}
+
+void NativeHWManagementService::Stub::experimental_async::RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+  ::grpc_impl::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_RebootDevice_, context, request, response, reactor);
+}
+
+void NativeHWManagementService::Stub::experimental_async::RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) {
+  ::grpc_impl::internal::ClientCallbackUnaryFactory::Create(stub_->channel_.get(), stub_->rpcmethod_RebootDevice_, context, request, response, reactor);
+}
+
+::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>* NativeHWManagementService::Stub::AsyncRebootDeviceRaw(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) {
+  return ::grpc_impl::internal::ClientAsyncResponseReaderFactory< ::dmi::RebootDeviceResponse>::Create(channel_.get(), cq, rpcmethod_RebootDevice_, context, request, true);
+}
+
+::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>* NativeHWManagementService::Stub::PrepareAsyncRebootDeviceRaw(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) {
+  return ::grpc_impl::internal::ClientAsyncResponseReaderFactory< ::dmi::RebootDeviceResponse>::Create(channel_.get(), cq, rpcmethod_RebootDevice_, context, request, false);
+}
+
 NativeHWManagementService::Service::Service() {
   AddMethod(new ::grpc::internal::RpcServiceMethod(
       NativeHWManagementService_method_names[0],
@@ -558,6 +588,16 @@
              ::dmi::Heartbeat* resp) {
                return service->HeartbeatCheck(ctx, req, resp);
              }, this)));
+  AddMethod(new ::grpc::internal::RpcServiceMethod(
+      NativeHWManagementService_method_names[14],
+      ::grpc::internal::RpcMethod::NORMAL_RPC,
+      new ::grpc::internal::RpcMethodHandler< NativeHWManagementService::Service, ::dmi::RebootDeviceRequest, ::dmi::RebootDeviceResponse>(
+          [](NativeHWManagementService::Service* service,
+             ::grpc_impl::ServerContext* ctx,
+             const ::dmi::RebootDeviceRequest* req,
+             ::dmi::RebootDeviceResponse* resp) {
+               return service->RebootDevice(ctx, req, resp);
+             }, this)));
 }
 
 NativeHWManagementService::Service::~Service() {
@@ -661,6 +701,13 @@
   return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
 }
 
+::grpc::Status NativeHWManagementService::Service::RebootDevice(::grpc::ServerContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* 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 a468ab2..f9f34a4 100644
--- a/cpp/dmi/hw_management_service.grpc.pb.h
+++ b/cpp/dmi/hw_management_service.grpc.pb.h
@@ -169,6 +169,14 @@
     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));
     }
+    // Performs the reboot of the device
+    virtual ::grpc::Status RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::dmi::RebootDeviceResponse* response) = 0;
+    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::RebootDeviceResponse>> AsyncRebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::RebootDeviceResponse>>(AsyncRebootDeviceRaw(context, request, cq));
+    }
+    std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::RebootDeviceResponse>> PrepareAsyncRebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReaderInterface< ::dmi::RebootDeviceResponse>>(PrepareAsyncRebootDeviceRaw(context, request, cq));
+    }
     class experimental_async_interface {
      public:
       virtual ~experimental_async_interface() {}
@@ -348,6 +356,19 @@
       #else
       virtual void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
       #endif
+      // Performs the reboot of the device
+      virtual void RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, std::function<void(::grpc::Status)>) = 0;
+      virtual void RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, std::function<void(::grpc::Status)>) = 0;
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      virtual void RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+      #else
+      virtual void RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+      #endif
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      virtual void RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) = 0;
+      #else
+      virtual void RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) = 0;
+      #endif
     };
     #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
     typedef class experimental_async_interface async_interface;
@@ -388,6 +409,8 @@
     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;
+    virtual ::grpc::ClientAsyncResponseReaderInterface< ::dmi::RebootDeviceResponse>* AsyncRebootDeviceRaw(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
+    virtual ::grpc::ClientAsyncResponseReaderInterface< ::dmi::RebootDeviceResponse>* PrepareAsyncRebootDeviceRaw(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) = 0;
   };
   class Stub final : public StubInterface {
    public:
@@ -496,6 +519,13 @@
     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));
     }
+    ::grpc::Status RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::dmi::RebootDeviceResponse* response) override;
+    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>> AsyncRebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>>(AsyncRebootDeviceRaw(context, request, cq));
+    }
+    std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>> PrepareAsyncRebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) {
+      return std::unique_ptr< ::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>>(PrepareAsyncRebootDeviceRaw(context, request, cq));
+    }
     class experimental_async final :
       public StubInterface::experimental_async_interface {
      public:
@@ -646,6 +676,18 @@
       #else
       void HeartbeatCheck(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::Heartbeat* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
       #endif
+      void RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, std::function<void(::grpc::Status)>) override;
+      void RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, std::function<void(::grpc::Status)>) override;
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      void RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
+      #else
+      void RebootDevice(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+      #endif
+      #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      void RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, ::grpc::ClientUnaryReactor* reactor) override;
+      #else
+      void RebootDevice(::grpc::ClientContext* context, const ::grpc::ByteBuffer* request, ::dmi::RebootDeviceResponse* response, ::grpc::experimental::ClientUnaryReactor* reactor) override;
+      #endif
      private:
       friend class Stub;
       explicit experimental_async(Stub* stub): stub_(stub) { }
@@ -688,6 +730,8 @@
     ::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;
+    ::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>* AsyncRebootDeviceRaw(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
+    ::grpc::ClientAsyncResponseReader< ::dmi::RebootDeviceResponse>* PrepareAsyncRebootDeviceRaw(::grpc::ClientContext* context, const ::dmi::RebootDeviceRequest& request, ::grpc::CompletionQueue* cq) override;
     const ::grpc::internal::RpcMethod rpcmethod_StartManagingDevice_;
     const ::grpc::internal::RpcMethod rpcmethod_StopManagingDevice_;
     const ::grpc::internal::RpcMethod rpcmethod_GetManagedDevices_;
@@ -702,6 +746,7 @@
     const ::grpc::internal::RpcMethod rpcmethod_SetLogLevel_;
     const ::grpc::internal::RpcMethod rpcmethod_GetLogLevel_;
     const ::grpc::internal::RpcMethod rpcmethod_HeartbeatCheck_;
+    const ::grpc::internal::RpcMethod rpcmethod_RebootDevice_;
   };
   static std::unique_ptr<Stub> NewStub(const std::shared_ptr< ::grpc::ChannelInterface>& channel, const ::grpc::StubOptions& options = ::grpc::StubOptions());
 
@@ -752,6 +797,8 @@
     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);
+    // Performs the reboot of the device
+    virtual ::grpc::Status RebootDevice(::grpc::ServerContext* context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response);
   };
   template <class BaseClass>
   class WithAsyncMethod_StartManagingDevice : public BaseClass {
@@ -1033,7 +1080,27 @@
       ::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 WithAsyncMethod_RebootDevice : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithAsyncMethod_RebootDevice() {
+      ::grpc::Service::MarkMethodAsync(14);
+    }
+    ~WithAsyncMethod_RebootDevice() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status RebootDevice(::grpc::ServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    void RequestRebootDevice(::grpc::ServerContext* context, ::dmi::RebootDeviceRequest* request, ::grpc::ServerAsyncResponseWriter< ::dmi::RebootDeviceResponse>* response, ::grpc::CompletionQueue* new_call_cq, ::grpc::ServerCompletionQueue* notification_cq, void *tag) {
+      ::grpc::Service::RequestAsyncUnary(14, 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<WithAsyncMethod_RebootDevice<Service > > > > > > > > > > > > > > > AsyncService;
   template <class BaseClass>
   class ExperimentalWithCallbackMethod_StartManagingDevice : public BaseClass {
    private:
@@ -1665,11 +1732,58 @@
     #endif
       { return nullptr; }
   };
+  template <class BaseClass>
+  class ExperimentalWithCallbackMethod_RebootDevice : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    ExperimentalWithCallbackMethod_RebootDevice() {
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      ::grpc::Service::
+    #else
+      ::grpc::Service::experimental().
+    #endif
+        MarkMethodCallback(14,
+          new ::grpc_impl::internal::CallbackUnaryHandler< ::dmi::RebootDeviceRequest, ::dmi::RebootDeviceResponse>(
+            [this](
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+                   ::grpc::CallbackServerContext*
+    #else
+                   ::grpc::experimental::CallbackServerContext*
+    #endif
+                     context, const ::dmi::RebootDeviceRequest* request, ::dmi::RebootDeviceResponse* response) { return this->RebootDevice(context, request, response); }));}
+    void SetMessageAllocatorFor_RebootDevice(
+        ::grpc::experimental::MessageAllocator< ::dmi::RebootDeviceRequest, ::dmi::RebootDeviceResponse>* allocator) {
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::GetHandler(14);
+    #else
+      ::grpc::internal::MethodHandler* const handler = ::grpc::Service::experimental().GetHandler(14);
+    #endif
+      static_cast<::grpc_impl::internal::CallbackUnaryHandler< ::dmi::RebootDeviceRequest, ::dmi::RebootDeviceResponse>*>(handler)
+              ->SetMessageAllocator(allocator);
+    }
+    ~ExperimentalWithCallbackMethod_RebootDevice() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status RebootDevice(::grpc::ServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+    virtual ::grpc::ServerUnaryReactor* RebootDevice(
+      ::grpc::CallbackServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*response*/)
+    #else
+    virtual ::grpc::experimental::ServerUnaryReactor* RebootDevice(
+      ::grpc::experimental::CallbackServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*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<ExperimentalWithCallbackMethod_HeartbeatCheck<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<ExperimentalWithCallbackMethod_RebootDevice<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<ExperimentalWithCallbackMethod_HeartbeatCheck<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<ExperimentalWithCallbackMethod_RebootDevice<Service > > > > > > > > > > > > > > > ExperimentalCallbackService;
   template <class BaseClass>
   class WithGenericMethod_StartManagingDevice : public BaseClass {
    private:
@@ -1909,6 +2023,23 @@
     }
   };
   template <class BaseClass>
+  class WithGenericMethod_RebootDevice : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithGenericMethod_RebootDevice() {
+      ::grpc::Service::MarkMethodGeneric(14);
+    }
+    ~WithGenericMethod_RebootDevice() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status RebootDevice(::grpc::ServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+  };
+  template <class BaseClass>
   class WithRawMethod_StartManagingDevice : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -2189,6 +2320,26 @@
     }
   };
   template <class BaseClass>
+  class WithRawMethod_RebootDevice : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithRawMethod_RebootDevice() {
+      ::grpc::Service::MarkMethodRaw(14);
+    }
+    ~WithRawMethod_RebootDevice() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status RebootDevice(::grpc::ServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    void RequestRebootDevice(::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(14, context, request, response, new_call_cq, notification_cq, tag);
+    }
+  };
+  template <class BaseClass>
   class ExperimentalWithRawCallbackMethod_StartManagingDevice : public BaseClass {
    private:
     void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
@@ -2721,6 +2872,44 @@
       { return nullptr; }
   };
   template <class BaseClass>
+  class ExperimentalWithRawCallbackMethod_RebootDevice : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    ExperimentalWithRawCallbackMethod_RebootDevice() {
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+      ::grpc::Service::
+    #else
+      ::grpc::Service::experimental().
+    #endif
+        MarkMethodRawCallback(14,
+          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->RebootDevice(context, request, response); }));
+    }
+    ~ExperimentalWithRawCallbackMethod_RebootDevice() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable synchronous version of this method
+    ::grpc::Status RebootDevice(::grpc::ServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    #ifdef GRPC_CALLBACK_API_NONEXPERIMENTAL
+    virtual ::grpc::ServerUnaryReactor* RebootDevice(
+      ::grpc::CallbackServerContext* /*context*/, const ::grpc::ByteBuffer* /*request*/, ::grpc::ByteBuffer* /*response*/)
+    #else
+    virtual ::grpc::experimental::ServerUnaryReactor* RebootDevice(
+      ::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*/) {}
@@ -3017,7 +3206,34 @@
     // 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 WithStreamedUnaryMethod_RebootDevice : public BaseClass {
+   private:
+    void BaseClassMustBeDerivedFromService(const Service* /*service*/) {}
+   public:
+    WithStreamedUnaryMethod_RebootDevice() {
+      ::grpc::Service::MarkMethodStreamed(14,
+        new ::grpc::internal::StreamedUnaryHandler<
+          ::dmi::RebootDeviceRequest, ::dmi::RebootDeviceResponse>(
+            [this](::grpc_impl::ServerContext* context,
+                   ::grpc_impl::ServerUnaryStreamer<
+                     ::dmi::RebootDeviceRequest, ::dmi::RebootDeviceResponse>* streamer) {
+                       return this->StreamedRebootDevice(context,
+                         streamer);
+                  }));
+    }
+    ~WithStreamedUnaryMethod_RebootDevice() override {
+      BaseClassMustBeDerivedFromService(this);
+    }
+    // disable regular version of this method
+    ::grpc::Status RebootDevice(::grpc::ServerContext* /*context*/, const ::dmi::RebootDeviceRequest* /*request*/, ::dmi::RebootDeviceResponse* /*response*/) override {
+      abort();
+      return ::grpc::Status(::grpc::StatusCode::UNIMPLEMENTED, "");
+    }
+    // replace default version of method with streamed unary
+    virtual ::grpc::Status StreamedRebootDevice(::grpc::ServerContext* context, ::grpc::ServerUnaryStreamer< ::dmi::RebootDeviceRequest,::dmi::RebootDeviceResponse>* 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<WithStreamedUnaryMethod_RebootDevice<Service > > > > > > > > > > > > StreamedUnaryService;
   template <class BaseClass>
   class WithSplitStreamingMethod_StartManagingDevice : public BaseClass {
    private:
@@ -3100,7 +3316,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<WithStreamedUnaryMethod_HeartbeatCheck<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<WithStreamedUnaryMethod_RebootDevice<Service > > > > > > > > > > > > > > > StreamedService;
 };
 
 }  // namespace dmi
diff --git a/cpp/dmi/hw_management_service.pb.cc b/cpp/dmi/hw_management_service.pb.cc
index c6496a0..7b03bb0 100644
--- a/cpp/dmi/hw_management_service.pb.cc
+++ b/cpp/dmi/hw_management_service.pb.cc
@@ -115,6 +115,14 @@
  public:
   ::google::protobuf::internal::ExplicitlyConstructed<Heartbeat> _instance;
 } _Heartbeat_default_instance_;
+class RebootDeviceRequestDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<RebootDeviceRequest> _instance;
+} _RebootDeviceRequest_default_instance_;
+class RebootDeviceResponseDefaultTypeInternal {
+ public:
+  ::google::protobuf::internal::ExplicitlyConstructed<RebootDeviceResponse> _instance;
+} _RebootDeviceResponse_default_instance_;
 }  // namespace dmi
 static void InitDefaultsPhysicalInventoryRequest_dmi_2fhw_5fmanagement_5fservice_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
@@ -456,6 +464,35 @@
 ::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}, {}};
 
+static void InitDefaultsRebootDeviceRequest_dmi_2fhw_5fmanagement_5fservice_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::dmi::_RebootDeviceRequest_default_instance_;
+    new (ptr) ::dmi::RebootDeviceRequest();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::dmi::RebootDeviceRequest::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<1> scc_info_RebootDeviceRequest_dmi_2fhw_5fmanagement_5fservice_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsRebootDeviceRequest_dmi_2fhw_5fmanagement_5fservice_2eproto}, {
+      &scc_info_Uuid_dmi_2fhw_2eproto.base,}};
+
+static void InitDefaultsRebootDeviceResponse_dmi_2fhw_5fmanagement_5fservice_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::dmi::_RebootDeviceResponse_default_instance_;
+    new (ptr) ::dmi::RebootDeviceResponse();
+    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::dmi::RebootDeviceResponse::InitAsDefaultInstance();
+}
+
+::google::protobuf::internal::SCCInfo<0> scc_info_RebootDeviceResponse_dmi_2fhw_5fmanagement_5fservice_2eproto =
+    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsRebootDeviceResponse_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);
@@ -480,10 +517,12 @@
   ::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::internal::InitSCC(&scc_info_RebootDeviceRequest_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
+  ::google::protobuf::internal::InitSCC(&scc_info_RebootDeviceResponse_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
 }
 
-::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];
+::google::protobuf::Metadata file_level_metadata_dmi_2fhw_5fmanagement_5fservice_2eproto[25];
+const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto[12];
 constexpr ::google::protobuf::ServiceDescriptor const** file_level_service_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto = nullptr;
 
 const ::google::protobuf::uint32 TableStruct_dmi_2fhw_5fmanagement_5fservice_2eproto::offsets[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
@@ -667,6 +706,20 @@
   ~0u,  // no _oneof_case_
   ~0u,  // no _weak_field_map_
   PROTOBUF_FIELD_OFFSET(::dmi::Heartbeat, heartbeat_signature_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::dmi::RebootDeviceRequest, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::dmi::RebootDeviceRequest, device_uuid_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::dmi::RebootDeviceResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::dmi::RebootDeviceResponse, status_),
+  PROTOBUF_FIELD_OFFSET(::dmi::RebootDeviceResponse, reason_),
+  PROTOBUF_FIELD_OFFSET(::dmi::RebootDeviceResponse, reason_detail_),
 };
 static const ::google::protobuf::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::dmi::PhysicalInventoryRequest)},
@@ -692,6 +745,8 @@
   { 158, -1, sizeof(::dmi::GetLogLevelResponse)},
   { 168, -1, sizeof(::dmi::GetLoggableEntitiesRequest)},
   { 174, -1, sizeof(::dmi::Heartbeat)},
+  { 180, -1, sizeof(::dmi::RebootDeviceRequest)},
+  { 186, -1, sizeof(::dmi::RebootDeviceResponse)},
 };
 
 static ::google::protobuf::Message const * const file_default_instances[] = {
@@ -718,12 +773,14 @@
   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_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_RebootDeviceRequest_default_instance_),
+  reinterpret_cast<const ::google::protobuf::Message*>(&::dmi::_RebootDeviceResponse_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, 23, 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, 25, 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[] =
@@ -828,42 +885,51 @@
   "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.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"
+  "artbeat\022\033\n\023heartbeat_signature\030\001 \001(\007\"5\n\023"
+  "RebootDeviceRequest\022\036\n\013device_uuid\030\001 \001(\013"
+  "2\t.dmi.Uuid\"\334\001\n\024RebootDeviceResponse\022\033\n\006"
+  "status\030\003 \001(\0162\013.dmi.Status\0220\n\006reason\030\004 \001("
+  "\0162 .dmi.RebootDeviceResponse.Reason\022\025\n\rr"
+  "eason_detail\030\005 \001(\t\"^\n\006Reason\022\024\n\020UNDEFINE"
+  "D_REASON\020\000\022\022\n\016UNKNOWN_DEVICE\020\001\022\022\n\016INTERN"
+  "AL_ERROR\020\002\022\026\n\022DEVICE_UNREACHABLE\020\0032\256\t\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.GetLogLevelResponse\0228\n\016Heartbea"
+  "tCheck\022\026.google.protobuf.Empty\032\016.dmi.Hea"
+  "rtbeat\022C\n\014RebootDevice\022\030.dmi.RebootDevic"
+  "eRequest\032\031.dmi.RebootDeviceResponseB;Z9g"
+  "ithub.com/opencord/device-management-int"
+  "erface/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, 5277,
+  "dmi/hw_management_service.proto", &assign_descriptors_table_dmi_2fhw_5fmanagement_5fservice_2eproto, 5624,
 };
 
 void AddDescriptors_dmi_2fhw_5fmanagement_5fservice_2eproto() {
@@ -1162,6 +1228,31 @@
 const GetLogLevelResponse_Reason GetLogLevelResponse::Reason_MAX;
 const int GetLogLevelResponse::Reason_ARRAYSIZE;
 #endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+const ::google::protobuf::EnumDescriptor* RebootDeviceResponse_Reason_descriptor() {
+  ::google::protobuf::internal::AssignDescriptors(&assign_descriptors_table_dmi_2fhw_5fmanagement_5fservice_2eproto);
+  return file_level_enum_descriptors_dmi_2fhw_5fmanagement_5fservice_2eproto[11];
+}
+bool RebootDeviceResponse_Reason_IsValid(int value) {
+  switch (value) {
+    case 0:
+    case 1:
+    case 2:
+    case 3:
+      return true;
+    default:
+      return false;
+  }
+}
+
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const RebootDeviceResponse_Reason RebootDeviceResponse::UNDEFINED_REASON;
+const RebootDeviceResponse_Reason RebootDeviceResponse::UNKNOWN_DEVICE;
+const RebootDeviceResponse_Reason RebootDeviceResponse::INTERNAL_ERROR;
+const RebootDeviceResponse_Reason RebootDeviceResponse::DEVICE_UNREACHABLE;
+const RebootDeviceResponse_Reason RebootDeviceResponse::Reason_MIN;
+const RebootDeviceResponse_Reason RebootDeviceResponse::Reason_MAX;
+const int RebootDeviceResponse::Reason_ARRAYSIZE;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
 
 // ===================================================================
 
@@ -10407,6 +10498,695 @@
 }
 
 
+// ===================================================================
+
+void RebootDeviceRequest::InitAsDefaultInstance() {
+  ::dmi::_RebootDeviceRequest_default_instance_._instance.get_mutable()->device_uuid_ = const_cast< ::dmi::Uuid*>(
+      ::dmi::Uuid::internal_default_instance());
+}
+class RebootDeviceRequest::HasBitSetters {
+ public:
+  static const ::dmi::Uuid& device_uuid(const RebootDeviceRequest* msg);
+};
+
+const ::dmi::Uuid&
+RebootDeviceRequest::HasBitSetters::device_uuid(const RebootDeviceRequest* msg) {
+  return *msg->device_uuid_;
+}
+void RebootDeviceRequest::clear_device_uuid() {
+  if (GetArenaNoVirtual() == nullptr && device_uuid_ != nullptr) {
+    delete device_uuid_;
+  }
+  device_uuid_ = nullptr;
+}
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int RebootDeviceRequest::kDeviceUuidFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+RebootDeviceRequest::RebootDeviceRequest()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:dmi.RebootDeviceRequest)
+}
+RebootDeviceRequest::RebootDeviceRequest(const RebootDeviceRequest& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  if (from.has_device_uuid()) {
+    device_uuid_ = new ::dmi::Uuid(*from.device_uuid_);
+  } else {
+    device_uuid_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:dmi.RebootDeviceRequest)
+}
+
+void RebootDeviceRequest::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_RebootDeviceRequest_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
+  device_uuid_ = nullptr;
+}
+
+RebootDeviceRequest::~RebootDeviceRequest() {
+  // @@protoc_insertion_point(destructor:dmi.RebootDeviceRequest)
+  SharedDtor();
+}
+
+void RebootDeviceRequest::SharedDtor() {
+  if (this != internal_default_instance()) delete device_uuid_;
+}
+
+void RebootDeviceRequest::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const RebootDeviceRequest& RebootDeviceRequest::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_RebootDeviceRequest_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void RebootDeviceRequest::Clear() {
+// @@protoc_insertion_point(message_clear_start:dmi.RebootDeviceRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  if (GetArenaNoVirtual() == nullptr && device_uuid_ != nullptr) {
+    delete device_uuid_;
+  }
+  device_uuid_ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* RebootDeviceRequest::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast<RebootDeviceRequest*>(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) {
+      // .dmi.Uuid device_uuid = 1;
+      case 1: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 10) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        parser_till_end = ::dmi::Uuid::_InternalParse;
+        object = msg->mutable_device_uuid();
+        if (size > end - ptr) goto len_delim_till_end;
+        ptr += size;
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ctx->ParseExactRange(
+            {parser_till_end, object}, ptr - size, ptr));
+        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;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool RebootDeviceRequest::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.RebootDeviceRequest)
+  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)) {
+      // .dmi.Uuid device_uuid = 1;
+      case 1: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
+               input, mutable_device_uuid()));
+        } 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.RebootDeviceRequest)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:dmi.RebootDeviceRequest)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void RebootDeviceRequest::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:dmi.RebootDeviceRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .dmi.Uuid device_uuid = 1;
+  if (this->has_device_uuid()) {
+    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, HasBitSetters::device_uuid(this), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:dmi.RebootDeviceRequest)
+}
+
+::google::protobuf::uint8* RebootDeviceRequest::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:dmi.RebootDeviceRequest)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .dmi.Uuid device_uuid = 1;
+  if (this->has_device_uuid()) {
+    target = ::google::protobuf::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, HasBitSetters::device_uuid(this), 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.RebootDeviceRequest)
+  return target;
+}
+
+size_t RebootDeviceRequest::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:dmi.RebootDeviceRequest)
+  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;
+
+  // .dmi.Uuid device_uuid = 1;
+  if (this->has_device_uuid()) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::MessageSize(
+        *device_uuid_);
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void RebootDeviceRequest::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:dmi.RebootDeviceRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  const RebootDeviceRequest* source =
+      ::google::protobuf::DynamicCastToGenerated<RebootDeviceRequest>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:dmi.RebootDeviceRequest)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:dmi.RebootDeviceRequest)
+    MergeFrom(*source);
+  }
+}
+
+void RebootDeviceRequest::MergeFrom(const RebootDeviceRequest& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:dmi.RebootDeviceRequest)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.has_device_uuid()) {
+    mutable_device_uuid()->::dmi::Uuid::MergeFrom(from.device_uuid());
+  }
+}
+
+void RebootDeviceRequest::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:dmi.RebootDeviceRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void RebootDeviceRequest::CopyFrom(const RebootDeviceRequest& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:dmi.RebootDeviceRequest)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool RebootDeviceRequest::IsInitialized() const {
+  return true;
+}
+
+void RebootDeviceRequest::Swap(RebootDeviceRequest* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void RebootDeviceRequest::InternalSwap(RebootDeviceRequest* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  swap(device_uuid_, other->device_uuid_);
+}
+
+::google::protobuf::Metadata RebootDeviceRequest::GetMetadata() const {
+  ::google::protobuf::internal::AssignDescriptors(&::assign_descriptors_table_dmi_2fhw_5fmanagement_5fservice_2eproto);
+  return ::file_level_metadata_dmi_2fhw_5fmanagement_5fservice_2eproto[kIndexInFileMessages];
+}
+
+
+// ===================================================================
+
+void RebootDeviceResponse::InitAsDefaultInstance() {
+}
+class RebootDeviceResponse::HasBitSetters {
+ public:
+};
+
+#if !defined(_MSC_VER) || _MSC_VER >= 1900
+const int RebootDeviceResponse::kStatusFieldNumber;
+const int RebootDeviceResponse::kReasonFieldNumber;
+const int RebootDeviceResponse::kReasonDetailFieldNumber;
+#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
+
+RebootDeviceResponse::RebootDeviceResponse()
+  : ::google::protobuf::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:dmi.RebootDeviceResponse)
+}
+RebootDeviceResponse::RebootDeviceResponse(const RebootDeviceResponse& from)
+  : ::google::protobuf::Message(),
+      _internal_metadata_(nullptr) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  reason_detail_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  if (from.reason_detail().size() > 0) {
+    reason_detail_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reason_detail_);
+  }
+  ::memcpy(&status_, &from.status_,
+    static_cast<size_t>(reinterpret_cast<char*>(&reason_) -
+    reinterpret_cast<char*>(&status_)) + sizeof(reason_));
+  // @@protoc_insertion_point(copy_constructor:dmi.RebootDeviceResponse)
+}
+
+void RebootDeviceResponse::SharedCtor() {
+  ::google::protobuf::internal::InitSCC(
+      &scc_info_RebootDeviceResponse_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
+  reason_detail_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  ::memset(&status_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&reason_) -
+      reinterpret_cast<char*>(&status_)) + sizeof(reason_));
+}
+
+RebootDeviceResponse::~RebootDeviceResponse() {
+  // @@protoc_insertion_point(destructor:dmi.RebootDeviceResponse)
+  SharedDtor();
+}
+
+void RebootDeviceResponse::SharedDtor() {
+  reason_detail_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+
+void RebootDeviceResponse::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const RebootDeviceResponse& RebootDeviceResponse::default_instance() {
+  ::google::protobuf::internal::InitSCC(&::scc_info_RebootDeviceResponse_dmi_2fhw_5fmanagement_5fservice_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void RebootDeviceResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:dmi.RebootDeviceResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  reason_detail_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+  ::memset(&status_, 0, static_cast<size_t>(
+      reinterpret_cast<char*>(&reason_) -
+      reinterpret_cast<char*>(&status_)) + sizeof(reason_));
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* RebootDeviceResponse::_InternalParse(const char* begin, const char* end, void* object,
+                  ::google::protobuf::internal::ParseContext* ctx) {
+  auto msg = static_cast<RebootDeviceResponse*>(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) {
+      // .dmi.Status status = 3;
+      case 3: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 24) goto handle_unusual;
+        ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr);
+        msg->set_status(static_cast<::dmi::Status>(val));
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        break;
+      }
+      // .dmi.RebootDeviceResponse.Reason reason = 4;
+      case 4: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 32) goto handle_unusual;
+        ::google::protobuf::uint64 val = ::google::protobuf::internal::ReadVarint(&ptr);
+        msg->set_reason(static_cast<::dmi::RebootDeviceResponse_Reason>(val));
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        break;
+      }
+      // string reason_detail = 5;
+      case 5: {
+        if (static_cast<::google::protobuf::uint8>(tag) != 42) goto handle_unusual;
+        ptr = ::google::protobuf::io::ReadSize(ptr, &size);
+        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
+        ctx->extra_parse_data().SetFieldName("dmi.RebootDeviceResponse.reason_detail");
+        object = msg->mutable_reason_detail();
+        if (size > end - ptr + ::google::protobuf::internal::ParseContext::kSlopBytes) {
+          parser_till_end = ::google::protobuf::internal::GreedyStringParserUTF8;
+          goto string_till_end;
+        }
+        GOOGLE_PROTOBUF_PARSER_ASSERT(::google::protobuf::internal::StringCheckUTF8(ptr, size, ctx));
+        ::google::protobuf::internal::InlineGreedyStringParser(object, ptr, size, ctx);
+        ptr += size;
+        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;
+string_till_end:
+  static_cast<::std::string*>(object)->clear();
+  static_cast<::std::string*>(object)->reserve(size);
+  goto len_delim_till_end;
+len_delim_till_end:
+  return ctx->StoreAndTailCall(ptr, end, {_InternalParse, msg},
+                               {parser_till_end, object}, size);
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool RebootDeviceResponse::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.RebootDeviceResponse)
+  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)) {
+      // .dmi.Status status = 3;
+      case 3: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (24 & 0xFF)) {
+          int value = 0;
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
+                 input, &value)));
+          set_status(static_cast< ::dmi::Status >(value));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // .dmi.RebootDeviceResponse.Reason reason = 4;
+      case 4: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (32 & 0xFF)) {
+          int value = 0;
+          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
+                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
+                 input, &value)));
+          set_reason(static_cast< ::dmi::RebootDeviceResponse_Reason >(value));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string reason_detail = 5;
+      case 5: {
+        if (static_cast< ::google::protobuf::uint8>(tag) == (42 & 0xFF)) {
+          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
+                input, this->mutable_reason_detail()));
+          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+            this->reason_detail().data(), static_cast<int>(this->reason_detail().length()),
+            ::google::protobuf::internal::WireFormatLite::PARSE,
+            "dmi.RebootDeviceResponse.reason_detail"));
+        } 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.RebootDeviceResponse)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:dmi.RebootDeviceResponse)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void RebootDeviceResponse::SerializeWithCachedSizes(
+    ::google::protobuf::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:dmi.RebootDeviceResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .dmi.Status status = 3;
+  if (this->status() != 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteEnum(
+      3, this->status(), output);
+  }
+
+  // .dmi.RebootDeviceResponse.Reason reason = 4;
+  if (this->reason() != 0) {
+    ::google::protobuf::internal::WireFormatLite::WriteEnum(
+      4, this->reason(), output);
+  }
+
+  // string reason_detail = 5;
+  if (this->reason_detail().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reason_detail().data(), static_cast<int>(this->reason_detail().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "dmi.RebootDeviceResponse.reason_detail");
+    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
+      5, this->reason_detail(), output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:dmi.RebootDeviceResponse)
+}
+
+::google::protobuf::uint8* RebootDeviceResponse::InternalSerializeWithCachedSizesToArray(
+    ::google::protobuf::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:dmi.RebootDeviceResponse)
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .dmi.Status status = 3;
+  if (this->status() != 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
+      3, this->status(), target);
+  }
+
+  // .dmi.RebootDeviceResponse.Reason reason = 4;
+  if (this->reason() != 0) {
+    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
+      4, this->reason(), target);
+  }
+
+  // string reason_detail = 5;
+  if (this->reason_detail().size() > 0) {
+    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
+      this->reason_detail().data(), static_cast<int>(this->reason_detail().length()),
+      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
+      "dmi.RebootDeviceResponse.reason_detail");
+    target =
+      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
+        5, this->reason_detail(), 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.RebootDeviceResponse)
+  return target;
+}
+
+size_t RebootDeviceResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:dmi.RebootDeviceResponse)
+  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;
+
+  // string reason_detail = 5;
+  if (this->reason_detail().size() > 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::StringSize(
+        this->reason_detail());
+  }
+
+  // .dmi.Status status = 3;
+  if (this->status() != 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::EnumSize(this->status());
+  }
+
+  // .dmi.RebootDeviceResponse.Reason reason = 4;
+  if (this->reason() != 0) {
+    total_size += 1 +
+      ::google::protobuf::internal::WireFormatLite::EnumSize(this->reason());
+  }
+
+  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void RebootDeviceResponse::MergeFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:dmi.RebootDeviceResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  const RebootDeviceResponse* source =
+      ::google::protobuf::DynamicCastToGenerated<RebootDeviceResponse>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:dmi.RebootDeviceResponse)
+    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:dmi.RebootDeviceResponse)
+    MergeFrom(*source);
+  }
+}
+
+void RebootDeviceResponse::MergeFrom(const RebootDeviceResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:dmi.RebootDeviceResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::google::protobuf::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  if (from.reason_detail().size() > 0) {
+
+    reason_detail_.AssignWithDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.reason_detail_);
+  }
+  if (from.status() != 0) {
+    set_status(from.status());
+  }
+  if (from.reason() != 0) {
+    set_reason(from.reason());
+  }
+}
+
+void RebootDeviceResponse::CopyFrom(const ::google::protobuf::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:dmi.RebootDeviceResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void RebootDeviceResponse::CopyFrom(const RebootDeviceResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:dmi.RebootDeviceResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool RebootDeviceResponse::IsInitialized() const {
+  return true;
+}
+
+void RebootDeviceResponse::Swap(RebootDeviceResponse* other) {
+  if (other == this) return;
+  InternalSwap(other);
+}
+void RebootDeviceResponse::InternalSwap(RebootDeviceResponse* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  reason_detail_.Swap(&other->reason_detail_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  swap(status_, other->status_);
+  swap(reason_, other->reason_);
+}
+
+::google::protobuf::Metadata RebootDeviceResponse::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 {
@@ -10480,6 +11260,12 @@
 template<> PROTOBUF_NOINLINE ::dmi::Heartbeat* Arena::CreateMaybeMessage< ::dmi::Heartbeat >(Arena* arena) {
   return Arena::CreateInternal< ::dmi::Heartbeat >(arena);
 }
+template<> PROTOBUF_NOINLINE ::dmi::RebootDeviceRequest* Arena::CreateMaybeMessage< ::dmi::RebootDeviceRequest >(Arena* arena) {
+  return Arena::CreateInternal< ::dmi::RebootDeviceRequest >(arena);
+}
+template<> PROTOBUF_NOINLINE ::dmi::RebootDeviceResponse* Arena::CreateMaybeMessage< ::dmi::RebootDeviceResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::dmi::RebootDeviceResponse >(arena);
+}
 }  // namespace protobuf
 }  // namespace google
 
diff --git a/cpp/dmi/hw_management_service.pb.h b/cpp/dmi/hw_management_service.pb.h
index 50398d2..62b1f6b 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[23]
+  static const ::google::protobuf::internal::ParseTable schema[25]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::google::protobuf::internal::FieldMetadata field_metadata[];
   static const ::google::protobuf::internal::SerializationTable serialization_table[];
@@ -98,6 +98,12 @@
 class PhysicalInventoryResponse;
 class PhysicalInventoryResponseDefaultTypeInternal;
 extern PhysicalInventoryResponseDefaultTypeInternal _PhysicalInventoryResponse_default_instance_;
+class RebootDeviceRequest;
+class RebootDeviceRequestDefaultTypeInternal;
+extern RebootDeviceRequestDefaultTypeInternal _RebootDeviceRequest_default_instance_;
+class RebootDeviceResponse;
+class RebootDeviceResponseDefaultTypeInternal;
+extern RebootDeviceResponseDefaultTypeInternal _RebootDeviceResponse_default_instance_;
 class SetLogLevelRequest;
 class SetLogLevelRequestDefaultTypeInternal;
 extern SetLogLevelRequestDefaultTypeInternal _SetLogLevelRequest_default_instance_;
@@ -140,6 +146,8 @@
 template<> ::dmi::ManagedDevicesResponse* Arena::CreateMaybeMessage<::dmi::ManagedDevicesResponse>(Arena*);
 template<> ::dmi::PhysicalInventoryRequest* Arena::CreateMaybeMessage<::dmi::PhysicalInventoryRequest>(Arena*);
 template<> ::dmi::PhysicalInventoryResponse* Arena::CreateMaybeMessage<::dmi::PhysicalInventoryResponse>(Arena*);
+template<> ::dmi::RebootDeviceRequest* Arena::CreateMaybeMessage<::dmi::RebootDeviceRequest>(Arena*);
+template<> ::dmi::RebootDeviceResponse* Arena::CreateMaybeMessage<::dmi::RebootDeviceResponse>(Arena*);
 template<> ::dmi::SetLogLevelRequest* Arena::CreateMaybeMessage<::dmi::SetLogLevelRequest>(Arena*);
 template<> ::dmi::SetLogLevelResponse* Arena::CreateMaybeMessage<::dmi::SetLogLevelResponse>(Arena*);
 template<> ::dmi::SetLoggingEndpointRequest* Arena::CreateMaybeMessage<::dmi::SetLoggingEndpointRequest>(Arena*);
@@ -409,6 +417,29 @@
   return ::google::protobuf::internal::ParseNamedEnum<GetLogLevelResponse_Reason>(
     GetLogLevelResponse_Reason_descriptor(), name, value);
 }
+enum RebootDeviceResponse_Reason {
+  RebootDeviceResponse_Reason_UNDEFINED_REASON = 0,
+  RebootDeviceResponse_Reason_UNKNOWN_DEVICE = 1,
+  RebootDeviceResponse_Reason_INTERNAL_ERROR = 2,
+  RebootDeviceResponse_Reason_DEVICE_UNREACHABLE = 3,
+  RebootDeviceResponse_Reason_RebootDeviceResponse_Reason_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::min(),
+  RebootDeviceResponse_Reason_RebootDeviceResponse_Reason_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::google::protobuf::int32>::max()
+};
+bool RebootDeviceResponse_Reason_IsValid(int value);
+const RebootDeviceResponse_Reason RebootDeviceResponse_Reason_Reason_MIN = RebootDeviceResponse_Reason_UNDEFINED_REASON;
+const RebootDeviceResponse_Reason RebootDeviceResponse_Reason_Reason_MAX = RebootDeviceResponse_Reason_DEVICE_UNREACHABLE;
+const int RebootDeviceResponse_Reason_Reason_ARRAYSIZE = RebootDeviceResponse_Reason_Reason_MAX + 1;
+
+const ::google::protobuf::EnumDescriptor* RebootDeviceResponse_Reason_descriptor();
+inline const ::std::string& RebootDeviceResponse_Reason_Name(RebootDeviceResponse_Reason value) {
+  return ::google::protobuf::internal::NameOfEnum(
+    RebootDeviceResponse_Reason_descriptor(), value);
+}
+inline bool RebootDeviceResponse_Reason_Parse(
+    const ::std::string& name, RebootDeviceResponse_Reason* value) {
+  return ::google::protobuf::internal::ParseNamedEnum<RebootDeviceResponse_Reason>(
+    RebootDeviceResponse_Reason_descriptor(), name, value);
+}
 // ===================================================================
 
 class PhysicalInventoryRequest final :
@@ -3870,6 +3901,285 @@
   mutable ::google::protobuf::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_dmi_2fhw_5fmanagement_5fservice_2eproto;
 };
+// -------------------------------------------------------------------
+
+class RebootDeviceRequest final :
+    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:dmi.RebootDeviceRequest) */ {
+ public:
+  RebootDeviceRequest();
+  virtual ~RebootDeviceRequest();
+
+  RebootDeviceRequest(const RebootDeviceRequest& from);
+
+  inline RebootDeviceRequest& operator=(const RebootDeviceRequest& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  RebootDeviceRequest(RebootDeviceRequest&& from) noexcept
+    : RebootDeviceRequest() {
+    *this = ::std::move(from);
+  }
+
+  inline RebootDeviceRequest& operator=(RebootDeviceRequest&& 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 RebootDeviceRequest& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const RebootDeviceRequest* internal_default_instance() {
+    return reinterpret_cast<const RebootDeviceRequest*>(
+               &_RebootDeviceRequest_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    23;
+
+  void Swap(RebootDeviceRequest* other);
+  friend void swap(RebootDeviceRequest& a, RebootDeviceRequest& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline RebootDeviceRequest* New() const final {
+    return CreateMaybeMessage<RebootDeviceRequest>(nullptr);
+  }
+
+  RebootDeviceRequest* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<RebootDeviceRequest>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const RebootDeviceRequest& from);
+  void MergeFrom(const RebootDeviceRequest& 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(RebootDeviceRequest* 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 -------------------------------------------------------
+
+  // .dmi.Uuid device_uuid = 1;
+  bool has_device_uuid() const;
+  void clear_device_uuid();
+  static const int kDeviceUuidFieldNumber = 1;
+  const ::dmi::Uuid& device_uuid() const;
+  ::dmi::Uuid* release_device_uuid();
+  ::dmi::Uuid* mutable_device_uuid();
+  void set_allocated_device_uuid(::dmi::Uuid* device_uuid);
+
+  // @@protoc_insertion_point(class_scope:dmi.RebootDeviceRequest)
+ private:
+  class HasBitSetters;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::dmi::Uuid* device_uuid_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_dmi_2fhw_5fmanagement_5fservice_2eproto;
+};
+// -------------------------------------------------------------------
+
+class RebootDeviceResponse final :
+    public ::google::protobuf::Message /* @@protoc_insertion_point(class_definition:dmi.RebootDeviceResponse) */ {
+ public:
+  RebootDeviceResponse();
+  virtual ~RebootDeviceResponse();
+
+  RebootDeviceResponse(const RebootDeviceResponse& from);
+
+  inline RebootDeviceResponse& operator=(const RebootDeviceResponse& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  #if LANG_CXX11
+  RebootDeviceResponse(RebootDeviceResponse&& from) noexcept
+    : RebootDeviceResponse() {
+    *this = ::std::move(from);
+  }
+
+  inline RebootDeviceResponse& operator=(RebootDeviceResponse&& 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 RebootDeviceResponse& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const RebootDeviceResponse* internal_default_instance() {
+    return reinterpret_cast<const RebootDeviceResponse*>(
+               &_RebootDeviceResponse_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    24;
+
+  void Swap(RebootDeviceResponse* other);
+  friend void swap(RebootDeviceResponse& a, RebootDeviceResponse& b) {
+    a.Swap(&b);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline RebootDeviceResponse* New() const final {
+    return CreateMaybeMessage<RebootDeviceResponse>(nullptr);
+  }
+
+  RebootDeviceResponse* New(::google::protobuf::Arena* arena) const final {
+    return CreateMaybeMessage<RebootDeviceResponse>(arena);
+  }
+  void CopyFrom(const ::google::protobuf::Message& from) final;
+  void MergeFrom(const ::google::protobuf::Message& from) final;
+  void CopyFrom(const RebootDeviceResponse& from);
+  void MergeFrom(const RebootDeviceResponse& 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(RebootDeviceResponse* 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 ----------------------------------------------------
+
+  typedef RebootDeviceResponse_Reason Reason;
+  static const Reason UNDEFINED_REASON =
+    RebootDeviceResponse_Reason_UNDEFINED_REASON;
+  static const Reason UNKNOWN_DEVICE =
+    RebootDeviceResponse_Reason_UNKNOWN_DEVICE;
+  static const Reason INTERNAL_ERROR =
+    RebootDeviceResponse_Reason_INTERNAL_ERROR;
+  static const Reason DEVICE_UNREACHABLE =
+    RebootDeviceResponse_Reason_DEVICE_UNREACHABLE;
+  static inline bool Reason_IsValid(int value) {
+    return RebootDeviceResponse_Reason_IsValid(value);
+  }
+  static const Reason Reason_MIN =
+    RebootDeviceResponse_Reason_Reason_MIN;
+  static const Reason Reason_MAX =
+    RebootDeviceResponse_Reason_Reason_MAX;
+  static const int Reason_ARRAYSIZE =
+    RebootDeviceResponse_Reason_Reason_ARRAYSIZE;
+  static inline const ::google::protobuf::EnumDescriptor*
+  Reason_descriptor() {
+    return RebootDeviceResponse_Reason_descriptor();
+  }
+  static inline const ::std::string& Reason_Name(Reason value) {
+    return RebootDeviceResponse_Reason_Name(value);
+  }
+  static inline bool Reason_Parse(const ::std::string& name,
+      Reason* value) {
+    return RebootDeviceResponse_Reason_Parse(name, value);
+  }
+
+  // accessors -------------------------------------------------------
+
+  // string reason_detail = 5;
+  void clear_reason_detail();
+  static const int kReasonDetailFieldNumber = 5;
+  const ::std::string& reason_detail() const;
+  void set_reason_detail(const ::std::string& value);
+  #if LANG_CXX11
+  void set_reason_detail(::std::string&& value);
+  #endif
+  void set_reason_detail(const char* value);
+  void set_reason_detail(const char* value, size_t size);
+  ::std::string* mutable_reason_detail();
+  ::std::string* release_reason_detail();
+  void set_allocated_reason_detail(::std::string* reason_detail);
+
+  // .dmi.Status status = 3;
+  void clear_status();
+  static const int kStatusFieldNumber = 3;
+  ::dmi::Status status() const;
+  void set_status(::dmi::Status value);
+
+  // .dmi.RebootDeviceResponse.Reason reason = 4;
+  void clear_reason();
+  static const int kReasonFieldNumber = 4;
+  ::dmi::RebootDeviceResponse_Reason reason() const;
+  void set_reason(::dmi::RebootDeviceResponse_Reason value);
+
+  // @@protoc_insertion_point(class_scope:dmi.RebootDeviceResponse)
+ private:
+  class HasBitSetters;
+
+  ::google::protobuf::internal::InternalMetadataWithArena _internal_metadata_;
+  ::google::protobuf::internal::ArenaStringPtr reason_detail_;
+  int status_;
+  int reason_;
+  mutable ::google::protobuf::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_dmi_2fhw_5fmanagement_5fservice_2eproto;
+};
 // ===================================================================
 
 
@@ -6305,6 +6615,140 @@
   // @@protoc_insertion_point(field_set:dmi.Heartbeat.heartbeat_signature)
 }
 
+// -------------------------------------------------------------------
+
+// RebootDeviceRequest
+
+// .dmi.Uuid device_uuid = 1;
+inline bool RebootDeviceRequest::has_device_uuid() const {
+  return this != internal_default_instance() && device_uuid_ != nullptr;
+}
+inline const ::dmi::Uuid& RebootDeviceRequest::device_uuid() const {
+  const ::dmi::Uuid* p = device_uuid_;
+  // @@protoc_insertion_point(field_get:dmi.RebootDeviceRequest.device_uuid)
+  return p != nullptr ? *p : *reinterpret_cast<const ::dmi::Uuid*>(
+      &::dmi::_Uuid_default_instance_);
+}
+inline ::dmi::Uuid* RebootDeviceRequest::release_device_uuid() {
+  // @@protoc_insertion_point(field_release:dmi.RebootDeviceRequest.device_uuid)
+  
+  ::dmi::Uuid* temp = device_uuid_;
+  device_uuid_ = nullptr;
+  return temp;
+}
+inline ::dmi::Uuid* RebootDeviceRequest::mutable_device_uuid() {
+  
+  if (device_uuid_ == nullptr) {
+    auto* p = CreateMaybeMessage<::dmi::Uuid>(GetArenaNoVirtual());
+    device_uuid_ = p;
+  }
+  // @@protoc_insertion_point(field_mutable:dmi.RebootDeviceRequest.device_uuid)
+  return device_uuid_;
+}
+inline void RebootDeviceRequest::set_allocated_device_uuid(::dmi::Uuid* device_uuid) {
+  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::google::protobuf::MessageLite*>(device_uuid_);
+  }
+  if (device_uuid) {
+    ::google::protobuf::Arena* submessage_arena = nullptr;
+    if (message_arena != submessage_arena) {
+      device_uuid = ::google::protobuf::internal::GetOwnedMessage(
+          message_arena, device_uuid, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  device_uuid_ = device_uuid;
+  // @@protoc_insertion_point(field_set_allocated:dmi.RebootDeviceRequest.device_uuid)
+}
+
+// -------------------------------------------------------------------
+
+// RebootDeviceResponse
+
+// .dmi.Status status = 3;
+inline void RebootDeviceResponse::clear_status() {
+  status_ = 0;
+}
+inline ::dmi::Status RebootDeviceResponse::status() const {
+  // @@protoc_insertion_point(field_get:dmi.RebootDeviceResponse.status)
+  return static_cast< ::dmi::Status >(status_);
+}
+inline void RebootDeviceResponse::set_status(::dmi::Status value) {
+  
+  status_ = value;
+  // @@protoc_insertion_point(field_set:dmi.RebootDeviceResponse.status)
+}
+
+// .dmi.RebootDeviceResponse.Reason reason = 4;
+inline void RebootDeviceResponse::clear_reason() {
+  reason_ = 0;
+}
+inline ::dmi::RebootDeviceResponse_Reason RebootDeviceResponse::reason() const {
+  // @@protoc_insertion_point(field_get:dmi.RebootDeviceResponse.reason)
+  return static_cast< ::dmi::RebootDeviceResponse_Reason >(reason_);
+}
+inline void RebootDeviceResponse::set_reason(::dmi::RebootDeviceResponse_Reason value) {
+  
+  reason_ = value;
+  // @@protoc_insertion_point(field_set:dmi.RebootDeviceResponse.reason)
+}
+
+// string reason_detail = 5;
+inline void RebootDeviceResponse::clear_reason_detail() {
+  reason_detail_.ClearToEmptyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline const ::std::string& RebootDeviceResponse::reason_detail() const {
+  // @@protoc_insertion_point(field_get:dmi.RebootDeviceResponse.reason_detail)
+  return reason_detail_.GetNoArena();
+}
+inline void RebootDeviceResponse::set_reason_detail(const ::std::string& value) {
+  
+  reason_detail_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:dmi.RebootDeviceResponse.reason_detail)
+}
+#if LANG_CXX11
+inline void RebootDeviceResponse::set_reason_detail(::std::string&& value) {
+  
+  reason_detail_.SetNoArena(
+    &::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:dmi.RebootDeviceResponse.reason_detail)
+}
+#endif
+inline void RebootDeviceResponse::set_reason_detail(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  reason_detail_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:dmi.RebootDeviceResponse.reason_detail)
+}
+inline void RebootDeviceResponse::set_reason_detail(const char* value, size_t size) {
+  
+  reason_detail_.SetNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:dmi.RebootDeviceResponse.reason_detail)
+}
+inline ::std::string* RebootDeviceResponse::mutable_reason_detail() {
+  
+  // @@protoc_insertion_point(field_mutable:dmi.RebootDeviceResponse.reason_detail)
+  return reason_detail_.MutableNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline ::std::string* RebootDeviceResponse::release_reason_detail() {
+  // @@protoc_insertion_point(field_release:dmi.RebootDeviceResponse.reason_detail)
+  
+  return reason_detail_.ReleaseNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
+}
+inline void RebootDeviceResponse::set_allocated_reason_detail(::std::string* reason_detail) {
+  if (reason_detail != nullptr) {
+    
+  } else {
+    
+  }
+  reason_detail_.SetAllocatedNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), reason_detail);
+  // @@protoc_insertion_point(field_set_allocated:dmi.RebootDeviceResponse.reason_detail)
+}
+
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__
@@ -6352,6 +6796,10 @@
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 
@@ -6415,6 +6863,11 @@
 inline const EnumDescriptor* GetEnumDescriptor< ::dmi::GetLogLevelResponse_Reason>() {
   return ::dmi::GetLogLevelResponse_Reason_descriptor();
 }
+template <> struct is_proto_enum< ::dmi::RebootDeviceResponse_Reason> : ::std::true_type {};
+template <>
+inline const EnumDescriptor* GetEnumDescriptor< ::dmi::RebootDeviceResponse_Reason>() {
+  return ::dmi::RebootDeviceResponse_Reason_descriptor();
+}
 
 }  // namespace protobuf
 }  // namespace google
diff --git a/dmi.pb b/dmi.pb
index 6a96852..4a30746 100644
--- a/dmi.pb
+++ b/dmi.pb
Binary files differ
diff --git a/docs/ManagingDevice.md b/docs/ManagingDevice.md
index ef66776..f80ee5b 100644
--- a/docs/ManagingDevice.md
+++ b/docs/ManagingDevice.md
@@ -66,4 +66,11 @@
 ```
 This RPC is used to perform the hearbeat check for the connectivity. When the gRPC server streaming is used for conveying the Events and Metrics to external systems, on the connectivity break and reestablishment, the server streaming RPCs need to be established again.
 
+## RebootDevice
+``` protobuf
+// Performs the reboot of the device
+rpc RebootDevice(RebootDeviceRequest) returns (RebootDeviceResponse);
+```
+This RPC is used to administratively reboot the device. The server side implementations should reboot the device only after successfully returning this RPC.
+
 
diff --git a/go/dmi/hw_events_mgmt_service.pb.go b/go/dmi/hw_events_mgmt_service.pb.go
index 6110b97..210bfa9 100644
--- a/go/dmi/hw_events_mgmt_service.pb.go
+++ b/go/dmi/hw_events_mgmt_service.pb.go
@@ -76,6 +76,7 @@
 	EventIds_EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL              EventIds = 502
 	EventIds_EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED EventIds = 503
 	EventIds_EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED    EventIds = 504
+	EventIds_EVENT_HW_DEVICE_REBOOT                               EventIds = 505
 )
 
 var EventIds_name = map[int32]string{
@@ -121,6 +122,7 @@
 	502: "EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL",
 	503: "EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED",
 	504: "EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED",
+	505: "EVENT_HW_DEVICE_REBOOT",
 }
 
 var EventIds_value = map[string]int32{
@@ -166,6 +168,7 @@
 	"EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL":                 502,
 	"EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED":    503,
 	"EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED":       504,
+	"EVENT_HW_DEVICE_REBOOT":                                  505,
 }
 
 func (x EventIds) String() string {
@@ -960,100 +963,101 @@
 func init() { proto.RegisterFile("dmi/hw_events_mgmt_service.proto", fileDescriptor_8962d785556e9979) }
 
 var fileDescriptor_8962d785556e9979 = []byte{
-	// 1480 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0xcb, 0x72, 0xdb, 0x46,
-	0x16, 0x15, 0x09, 0x3d, 0xa8, 0x2b, 0x89, 0x03, 0x77, 0x79, 0x6c, 0x89, 0x2a, 0xdb, 0x1c, 0x6a,
-	0xc6, 0x92, 0x35, 0x23, 0x52, 0x96, 0x3c, 0x76, 0x5c, 0x5e, 0x24, 0x14, 0x09, 0x99, 0xa8, 0x50,
-	0xa0, 0xaa, 0x09, 0x52, 0xa9, 0x2c, 0x8c, 0x6a, 0x11, 0x4d, 0x12, 0x31, 0x01, 0xd0, 0x40, 0x43,
-	0x8a, 0x93, 0xaa, 0x2c, 0xb2, 0xcc, 0x2a, 0xaf, 0x65, 0x2a, 0x5f, 0x10, 0x27, 0xbf, 0x91, 0xc7,
-	0x2a, 0x1f, 0x92, 0x5d, 0x5e, 0xcb, 0x14, 0x1a, 0x20, 0x09, 0xf1, 0x21, 0xca, 0x55, 0xd9, 0x91,
-	0xf7, 0x9c, 0x73, 0xef, 0x69, 0xdc, 0xdb, 0x8d, 0x06, 0xa4, 0x75, 0xd3, 0xc8, 0xb5, 0xcf, 0x35,
-	0x7a, 0x46, 0x2d, 0xe6, 0x6a, 0x66, 0xcb, 0x64, 0x9a, 0x4b, 0x9d, 0x33, 0xa3, 0x41, 0xb3, 0x5d,
-	0xc7, 0x66, 0x36, 0x12, 0x74, 0xd3, 0x48, 0x5d, 0xf3, 0x69, 0x0d, 0xdb, 0x34, 0x6d, 0xcb, 0x0d,
-	0xe2, 0xa9, 0xe5, 0x40, 0x19, 0xfe, 0xbb, 0xd3, 0xb2, 0xed, 0x56, 0x87, 0xe6, 0xf8, 0xbf, 0x53,
-	0xaf, 0x99, 0x63, 0x86, 0x49, 0x5d, 0x46, 0xcc, 0x6e, 0x48, 0x58, 0x1f, 0x26, 0x50, 0xb3, 0xcb,
-	0x5e, 0x06, 0x60, 0xc6, 0x80, 0xc5, 0x3a, 0xe9, 0x78, 0x54, 0x7d, 0xd9, 0xa5, 0x68, 0x0d, 0x16,
-	0x0c, 0x8b, 0x69, 0x67, 0xa4, 0xb3, 0x1a, 0x4b, 0xc7, 0xb6, 0x84, 0xd2, 0x0c, 0x9e, 0x37, 0x2c,
-	0x56, 0x27, 0x1d, 0xb4, 0x0e, 0x09, 0xaf, 0x87, 0xc5, 0xd3, 0xb1, 0xad, 0xd9, 0xd2, 0x0c, 0x5e,
-	0xf0, 0x42, 0xf0, 0x16, 0x2c, 0x36, 0x3b, 0x36, 0x09, 0x50, 0x21, 0x1d, 0xdb, 0x8a, 0x97, 0x66,
-	0x70, 0x82, 0x87, 0xea, 0xa4, 0x73, 0x30, 0x07, 0xc2, 0x19, 0xe9, 0x64, 0x30, 0xc0, 0x09, 0x61,
-	0xd4, 0x39, 0x22, 0xce, 0x73, 0x17, 0x65, 0x60, 0xb6, 0x6d, 0xb4, 0xda, 0xbc, 0xd0, 0xd2, 0x5e,
-	0x32, 0xab, 0x9b, 0x46, 0xb6, 0xef, 0x04, 0x73, 0x0c, 0xa5, 0x41, 0xe8, 0xd8, 0xe7, 0xbc, 0xde,
-	0x28, 0xc5, 0x87, 0x32, 0xcf, 0x01, 0xd4, 0xb6, 0x43, 0xdd, 0xb6, 0xdd, 0xd1, 0x5d, 0xb4, 0x09,
-	0x73, 0x5e, 0xb7, 0x4b, 0x9d, 0x30, 0xe9, 0x3f, 0xb8, 0x62, 0x50, 0xb3, 0x34, 0x83, 0x03, 0xdc,
-	0x27, 0x76, 0xec, 0x73, 0xea, 0x84, 0xa9, 0xc7, 0x11, 0x39, 0x7e, 0xb0, 0x04, 0x8b, 0xac, 0x97,
-	0x3f, 0xf3, 0x11, 0x5c, 0xef, 0x17, 0x93, 0xad, 0xa6, 0xed, 0x98, 0x84, 0x19, 0xb6, 0x85, 0xfe,
-	0x0f, 0x49, 0xfb, 0xd4, 0x6f, 0x1d, 0xd5, 0xfd, 0x27, 0xe0, 0xd1, 0x09, 0x8b, 0x5a, 0xe9, 0xb1,
-	0x78, 0x08, 0xe5, 0x00, 0xfa, 0xb9, 0xdd, 0x0b, 0x4e, 0x06, 0x4b, 0xc2, 0x11, 0x4a, 0xe6, 0x93,
-	0x18, 0x24, 0x24, 0x7f, 0x5a, 0x0a, 0xcd, 0x16, 0xda, 0x82, 0x04, 0x9f, 0x1c, 0xcd, 0xd0, 0x79,
-	0xb9, 0xe4, 0xde, 0x0a, 0xd7, 0x72, 0x82, 0xac, 0xbb, 0x78, 0x81, 0x06, 0xbf, 0xd0, 0x06, 0xac,
-	0x18, 0xae, 0xd6, 0xb0, 0xad, 0xa6, 0xd1, 0xf2, 0x1c, 0xaa, 0xf3, 0x52, 0x09, 0xbc, 0x6c, 0xb8,
-	0x85, 0x7e, 0x6c, 0xc8, 0x8c, 0x30, 0xdd, 0xcc, 0x2e, 0x2c, 0xf2, 0x52, 0xae, 0x6f, 0x66, 0x03,
-	0xe6, 0x0c, 0x46, 0x4d, 0x77, 0x35, 0x96, 0x16, 0xb6, 0x96, 0xa2, 0x4e, 0x0a, 0xcd, 0x16, 0x0e,
-	0xb0, 0xcc, 0xd7, 0x71, 0x40, 0x65, 0xc3, 0x65, 0x81, 0x0c, 0x53, 0xb7, 0x6b, 0x5b, 0x2e, 0x45,
-	0x1b, 0x30, 0xef, 0x32, 0xc2, 0x3c, 0x37, 0x5c, 0xc6, 0x12, 0x17, 0x57, 0x79, 0x08, 0x87, 0x10,
-	0x7a, 0x08, 0xf3, 0x0e, 0x25, 0xae, 0x6d, 0x71, 0xf3, 0xc9, 0xbd, 0xdb, 0x9c, 0x34, 0x9a, 0x2d,
-	0x8b, 0x39, 0x0b, 0x87, 0x6c, 0x74, 0x17, 0xe6, 0x83, 0xfd, 0x15, 0x2e, 0x29, 0x39, 0x70, 0xe6,
-	0x1b, 0xc7, 0x21, 0xea, 0x3f, 0xa3, 0x40, 0xa1, 0xe9, 0x94, 0x11, 0xa3, 0xb3, 0x3a, 0x9b, 0x8e,
-	0x6d, 0x2d, 0xe2, 0xe5, 0x20, 0x58, 0xe4, 0xb1, 0xcc, 0x33, 0x98, 0x0f, 0xd2, 0xa3, 0xeb, 0x20,
-	0xd6, 0x94, 0xa2, 0x74, 0x28, 0x2b, 0x52, 0x51, 0xc3, 0x52, 0xbe, 0x5a, 0x51, 0xc4, 0x19, 0x84,
-	0x20, 0x59, 0x53, 0xde, 0x56, 0x2a, 0x27, 0x8a, 0x56, 0x94, 0xea, 0x72, 0x41, 0x12, 0x63, 0x7e,
-	0x4c, 0x56, 0x54, 0x09, 0x2b, 0xf9, 0xb2, 0x26, 0x61, 0x5c, 0xc1, 0x62, 0x1c, 0xdd, 0x00, 0x14,
-	0xe0, 0x5a, 0x4d, 0xc1, 0x52, 0xbe, 0x50, 0xca, 0x1f, 0x94, 0x25, 0x51, 0xc8, 0xbc, 0x8a, 0x41,
-	0x2a, 0xb4, 0x16, 0x36, 0x86, 0xcf, 0x17, 0xa6, 0x2f, 0x3c, 0xea, 0x32, 0xb4, 0x0d, 0x4b, 0x3a,
-	0xf5, 0x8f, 0x07, 0xcd, 0xf3, 0xc2, 0xa6, 0x2f, 0xed, 0x2d, 0xf2, 0x05, 0xd5, 0x3c, 0x43, 0xc7,
-	0x10, 0xa0, 0xfe, 0x6f, 0xb4, 0x0d, 0x0b, 0x8d, 0x36, 0xb1, 0x5a, 0xd4, 0xbd, 0xb0, 0x7b, 0xfa,
-	0x0b, 0xf7, 0x77, 0x6f, 0x48, 0x40, 0xdb, 0x20, 0x3a, 0xd4, 0xa5, 0x4c, 0x63, 0xb6, 0xa6, 0xd3,
-	0x26, 0xf1, 0x3a, 0x8c, 0x3f, 0xad, 0x44, 0x69, 0x06, 0x27, 0x39, 0xa2, 0xda, 0xc5, 0x20, 0xee,
-	0xef, 0x07, 0xbb, 0x4b, 0x03, 0x5f, 0x99, 0xaf, 0xe2, 0xb0, 0x3e, 0xd6, 0xef, 0xeb, 0x74, 0xf6,
-	0xcd, 0xa1, 0xce, 0x6e, 0x46, 0x8d, 0x8e, 0x4b, 0x3b, 0xdc, 0xe2, 0x91, 0xd6, 0x09, 0x63, 0x5a,
-	0xe7, 0xfc, 0x4d, 0xad, 0xe3, 0xb1, 0x7a, 0xbe, 0x2c, 0x17, 0xb5, 0x42, 0x45, 0x39, 0x94, 0x9f,
-	0x8a, 0xc2, 0x84, 0x76, 0xce, 0x66, 0xbe, 0x8c, 0xc1, 0x0a, 0x5f, 0xc7, 0x11, 0x65, 0xa4, 0x48,
-	0x18, 0x79, 0xad, 0x0e, 0xee, 0x42, 0xb2, 0x61, 0x9b, 0x5d, 0xdb, 0xf2, 0xf7, 0x38, 0xa7, 0xc7,
-	0x87, 0xe9, 0x2b, 0x7d, 0x02, 0x57, 0xfc, 0x27, 0xaa, 0xb0, 0x88, 0x49, 0xc3, 0x27, 0x31, 0xa0,
-	0x29, 0xc4, 0xa4, 0x99, 0x8f, 0xe3, 0x30, 0xc7, 0x6d, 0xa1, 0xc7, 0x90, 0x0c, 0x8e, 0x10, 0x93,
-	0x32, 0xa2, 0x13, 0x46, 0x42, 0x47, 0x68, 0xd0, 0x82, 0x9e, 0x75, 0xbc, 0x42, 0x7b, 0x7f, 0x7d,
-	0xe2, 0x85, 0xd3, 0x27, 0x7e, 0xe9, 0xe9, 0xf3, 0x08, 0x16, 0x1d, 0x62, 0xb8, 0x54, 0xd7, 0xfa,
-	0x9b, 0x30, 0x95, 0x0d, 0xde, 0x48, 0xd9, 0xde, 0x1b, 0x29, 0xab, 0xf6, 0x5e, 0x59, 0x38, 0x11,
-	0x90, 0x55, 0x17, 0xbd, 0x05, 0xc9, 0xfe, 0x71, 0xa3, 0x19, 0x56, 0xd3, 0xe6, 0x7b, 0x72, 0x69,
-	0x6f, 0xed, 0xe2, 0xa9, 0x14, 0x39, 0x88, 0xf1, 0x0a, 0x8b, 0x46, 0xd1, 0x1a, 0x24, 0x88, 0x1e,
-	0x6a, 0xe7, 0xf8, 0xa3, 0x58, 0x20, 0x3a, 0x87, 0xb6, 0x7f, 0x4e, 0x86, 0x47, 0xa9, 0xac, 0xbb,
-	0x68, 0x15, 0xae, 0x4b, 0x75, 0x49, 0x51, 0x35, 0x25, 0x7f, 0xe4, 0x37, 0x31, 0x9c, 0x0e, 0x71,
-	0x06, 0xdd, 0x86, 0x54, 0x80, 0xa8, 0x38, 0xaf, 0x54, 0x0b, 0x92, 0x5c, 0x97, 0xb0, 0x76, 0x5c,
-	0xae, 0x3d, 0xd5, 0x2a, 0x35, 0x55, 0xd4, 0xd1, 0x2d, 0x58, 0x9b, 0x80, 0xcb, 0x8a, 0x48, 0xd1,
-	0x0e, 0xdc, 0x1b, 0x85, 0xeb, 0x95, 0xb2, 0x9a, 0x7f, 0x2a, 0x69, 0xf9, 0x83, 0x4a, 0x5d, 0xd2,
-	0xd4, 0x12, 0x96, 0xaa, 0xa5, 0x4a, 0xb9, 0x28, 0x36, 0x2f, 0xa7, 0x1f, 0x48, 0xe5, 0xca, 0x49,
-	0x84, 0xde, 0x42, 0xf7, 0x61, 0x67, 0x94, 0xae, 0x4a, 0x47, 0xc7, 0x12, 0xce, 0xab, 0x35, 0x3c,
-	0x5a, 0xa1, 0x3d, 0x5d, 0x32, 0x5c, 0xc5, 0x18, 0x6f, 0xaa, 0x50, 0xc3, 0xd8, 0x8f, 0x0d, 0x57,
-	0x78, 0xef, 0x72, 0xfa, 0x70, 0xf6, 0xe7, 0x28, 0x0b, 0xdb, 0xa3, 0x74, 0xfc, 0x8e, 0x76, 0x5c,
-	0x39, 0x91, 0xf0, 0x48, 0xfa, 0xce, 0x14, 0xfe, 0x70, 0x7e, 0x73, 0x3c, 0x5f, 0x9d, 0x94, 0xdf,
-	0x9a, 0xc2, 0x1f, 0xce, 0x6f, 0x8f, 0x1f, 0x80, 0xc3, 0xbc, 0x5c, 0xae, 0x61, 0x49, 0xec, 0xa2,
-	0x47, 0xb0, 0x7f, 0xe5, 0x01, 0xd0, 0xb0, 0x54, 0xa8, 0xd4, 0x25, 0x2c, 0x15, 0xc5, 0x17, 0x97,
-	0x0b, 0x87, 0x6c, 0x44, 0x84, 0x0e, 0x7a, 0x02, 0x8f, 0x5e, 0x6b, 0x28, 0x22, 0x62, 0x77, 0xba,
-	0x78, 0x72, 0x65, 0x36, 0xde, 0xf2, 0x84, 0x41, 0x89, 0x08, 0xbd, 0xcb, 0x85, 0x93, 0x2b, 0x9e,
-	0xa1, 0x37, 0xe0, 0xc1, 0xd5, 0x87, 0x27, 0xa2, 0x3c, 0x9f, 0xa2, 0x9c, 0x5c, 0xf3, 0xfd, 0xf1,
-	0x4a, 0x75, 0x7a, 0xcd, 0x97, 0x53, 0x94, 0x93, 0x6b, 0x7e, 0x80, 0x36, 0x61, 0x63, 0xe2, 0x90,
-	0x45, 0x88, 0x1f, 0xa2, 0x9b, 0x80, 0x02, 0xe2, 0x71, 0xb5, 0x36, 0x38, 0xa6, 0xbe, 0x8f, 0xa1,
-	0x1b, 0x70, 0x6d, 0x08, 0x90, 0x15, 0xf1, 0x87, 0xa1, 0x78, 0x6f, 0x6c, 0x7f, 0x8c, 0xa1, 0x34,
-	0xac, 0x8f, 0xc4, 0x23, 0x95, 0x7e, 0x8a, 0x28, 0x0f, 0xf3, 0x4a, 0x5f, 0xf9, 0x4d, 0x7c, 0x60,
-	0xc1, 0x8f, 0xf7, 0x2d, 0xbc, 0x8a, 0x5f, 0x14, 0xf4, 0x2c, 0x7c, 0x1b, 0x1f, 0x94, 0x8a, 0x24,
-	0x8a, 0x94, 0xfa, 0x2e, 0x8e, 0xee, 0xc1, 0xbf, 0x03, 0x46, 0xe1, 0xb8, 0x36, 0x66, 0x94, 0x0b,
-	0x58, 0x56, 0xe5, 0x42, 0xbe, 0x2c, 0x7e, 0x2a, 0xa0, 0xbb, 0xf0, 0xaf, 0xcb, 0xa8, 0x87, 0x79,
-	0x35, 0x5f, 0x16, 0x3f, 0x13, 0xd0, 0x3e, 0x64, 0xaf, 0x92, 0x32, 0xe2, 0xe3, 0x73, 0x01, 0xed,
-	0xc2, 0x7f, 0xa7, 0x26, 0x8f, 0x28, 0xbe, 0x10, 0x50, 0x0a, 0xfe, 0x19, 0x28, 0x4a, 0x27, 0xe1,
-	0xb5, 0x42, 0xc3, 0x52, 0x55, 0x52, 0xc5, 0x5f, 0x05, 0x94, 0xeb, 0x9d, 0x34, 0x03, 0xec, 0x92,
-	0xb5, 0xfd, 0x26, 0xa0, 0xff, 0xc1, 0xe6, 0x74, 0x41, 0xb0, 0xc2, 0xdf, 0x05, 0xf4, 0xb8, 0x37,
-	0x6d, 0x57, 0x49, 0x1f, 0x71, 0xfd, 0x87, 0x80, 0x1e, 0xc2, 0xfd, 0x2b, 0x16, 0x8a, 0xe8, 0xfe,
-	0x14, 0xf6, 0x7e, 0x89, 0xc1, 0x2d, 0x85, 0x30, 0xe3, 0x8c, 0x06, 0xb7, 0xb7, 0x23, 0x62, 0x91,
-	0x16, 0x35, 0xa9, 0xc5, 0xaa, 0xc1, 0x67, 0x2d, 0x7a, 0x08, 0x30, 0xb8, 0xb2, 0xa3, 0xe0, 0xf3,
-	0xa2, 0x44, 0x1c, 0xfd, 0x9c, 0x38, 0x54, 0x2e, 0xa6, 0x6e, 0x4e, 0xb8, 0xd4, 0xa3, 0x67, 0xb0,
-	0x56, 0xeb, 0xea, 0x84, 0xd1, 0x31, 0xd7, 0x42, 0x74, 0x67, 0xf2, 0x85, 0x91, 0xdf, 0x9b, 0x53,
-	0xe9, 0x69, 0x37, 0x4a, 0xf4, 0x00, 0x96, 0xab, 0xcc, 0xa1, 0xc4, 0x0c, 0x9d, 0xdd, 0x18, 0xb9,
-	0xa0, 0x48, 0xfe, 0x27, 0x73, 0x0a, 0x06, 0x99, 0x76, 0x63, 0x07, 0x4f, 0xde, 0x7d, 0xdc, 0x32,
-	0x58, 0xdb, 0x3b, 0xcd, 0x36, 0x6c, 0x33, 0x67, 0x77, 0xa9, 0xd5, 0xb0, 0x1d, 0x3d, 0x17, 0xdc,
-	0xe1, 0x76, 0xcc, 0xfe, 0xea, 0x77, 0x0c, 0x8b, 0x51, 0xa7, 0x49, 0x1a, 0x34, 0x77, 0xb6, 0x9f,
-	0x6b, 0xd9, 0x39, 0xdd, 0x34, 0x4e, 0xe7, 0x79, 0xea, 0xfd, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff,
-	0x6c, 0x0c, 0x39, 0xe6, 0x06, 0x10, 0x00, 0x00,
+	// 1492 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x57, 0x4b, 0x73, 0xdb, 0x46,
+	0x12, 0x16, 0x09, 0x3d, 0xa8, 0x96, 0xc4, 0x85, 0xa7, 0xbc, 0xb2, 0x44, 0x95, 0x6d, 0x2e, 0xb5,
+	0x6b, 0xc9, 0xda, 0x15, 0x29, 0x4b, 0x5e, 0x7b, 0x5d, 0x3e, 0xec, 0x52, 0x24, 0x64, 0xa2, 0x96,
+	0x02, 0x55, 0x43, 0x90, 0xda, 0xda, 0x83, 0x51, 0x23, 0x62, 0x48, 0x22, 0x26, 0x00, 0x1a, 0x18,
+	0x48, 0x71, 0x52, 0x95, 0x43, 0x8e, 0x39, 0xe5, 0x75, 0x4c, 0xe5, 0x17, 0xc4, 0xc9, 0xdf, 0xc8,
+	0xe3, 0xb7, 0x24, 0xa7, 0x3c, 0x6f, 0x29, 0x0c, 0x40, 0x12, 0xe2, 0x43, 0x94, 0xab, 0x72, 0x23,
+	0xbb, 0xbf, 0xaf, 0xfb, 0x6b, 0x74, 0xcf, 0xa0, 0x01, 0x69, 0xdd, 0x34, 0x72, 0xed, 0x0b, 0x8d,
+	0x9e, 0x53, 0x8b, 0xb9, 0x9a, 0xd9, 0x32, 0x99, 0xe6, 0x52, 0xe7, 0xdc, 0x68, 0xd0, 0x6c, 0xd7,
+	0xb1, 0x99, 0x8d, 0x04, 0xdd, 0x34, 0x52, 0x37, 0x7c, 0x58, 0xc3, 0x36, 0x4d, 0xdb, 0x72, 0x03,
+	0x7b, 0x6a, 0x39, 0x60, 0x86, 0xff, 0xee, 0xb6, 0x6c, 0xbb, 0xd5, 0xa1, 0x39, 0xfe, 0xef, 0xcc,
+	0x6b, 0xe6, 0x98, 0x61, 0x52, 0x97, 0x11, 0xb3, 0x1b, 0x02, 0x36, 0x86, 0x01, 0xd4, 0xec, 0xb2,
+	0x57, 0x81, 0x33, 0x63, 0xc0, 0x62, 0x9d, 0x74, 0x3c, 0xaa, 0xbe, 0xea, 0x52, 0xb4, 0x0e, 0x0b,
+	0x86, 0xc5, 0xb4, 0x73, 0xd2, 0x59, 0x8b, 0xa5, 0x63, 0xdb, 0x42, 0x69, 0x06, 0xcf, 0x1b, 0x16,
+	0xab, 0x93, 0x0e, 0xda, 0x80, 0x84, 0xd7, 0xf3, 0xc5, 0xd3, 0xb1, 0xed, 0xd9, 0xd2, 0x0c, 0x5e,
+	0xf0, 0x42, 0xe7, 0x6d, 0x58, 0x6c, 0x76, 0x6c, 0x12, 0x78, 0x85, 0x74, 0x6c, 0x3b, 0x5e, 0x9a,
+	0xc1, 0x09, 0x6e, 0xaa, 0x93, 0xce, 0xe1, 0x1c, 0x08, 0xe7, 0xa4, 0x93, 0xc1, 0x00, 0xa7, 0x84,
+	0x51, 0xe7, 0x98, 0x38, 0x2f, 0x5c, 0x94, 0x81, 0xd9, 0xb6, 0xd1, 0x6a, 0xf3, 0x44, 0x4b, 0xfb,
+	0xc9, 0xac, 0x6e, 0x1a, 0xd9, 0xbe, 0x12, 0xcc, 0x7d, 0x28, 0x0d, 0x42, 0xc7, 0xbe, 0xe0, 0xf9,
+	0x46, 0x21, 0xbe, 0x2b, 0xf3, 0x02, 0x40, 0x6d, 0x3b, 0xd4, 0x6d, 0xdb, 0x1d, 0xdd, 0x45, 0x5b,
+	0x30, 0xe7, 0x75, 0xbb, 0xd4, 0x09, 0x83, 0xfe, 0x89, 0x33, 0x06, 0x39, 0x4b, 0x33, 0x38, 0xf0,
+	0xfb, 0xc0, 0x8e, 0x7d, 0x41, 0x9d, 0x30, 0xf4, 0x38, 0x20, 0xf7, 0x1f, 0x2e, 0xc1, 0x22, 0xeb,
+	0xc5, 0xcf, 0xbc, 0x07, 0x37, 0xfb, 0xc9, 0x64, 0xab, 0x69, 0x3b, 0x26, 0x61, 0x86, 0x6d, 0xa1,
+	0x7f, 0x42, 0xd2, 0x3e, 0xf3, 0x5b, 0x47, 0x75, 0xff, 0x09, 0x78, 0x74, 0x42, 0x51, 0x2b, 0x3d,
+	0x14, 0x37, 0xa1, 0x1c, 0x40, 0x3f, 0xb6, 0x7b, 0x49, 0xc9, 0xa0, 0x24, 0x1c, 0x81, 0x64, 0x3e,
+	0x88, 0x41, 0x42, 0xf2, 0xa7, 0xa5, 0xd0, 0x6c, 0xa1, 0x6d, 0x48, 0xf0, 0xc9, 0xd1, 0x0c, 0x9d,
+	0xa7, 0x4b, 0xee, 0xaf, 0x70, 0x2e, 0x07, 0xc8, 0xba, 0x8b, 0x17, 0x68, 0xf0, 0x0b, 0x6d, 0xc2,
+	0x8a, 0xe1, 0x6a, 0x0d, 0xdb, 0x6a, 0x1a, 0x2d, 0xcf, 0xa1, 0x3a, 0x4f, 0x95, 0xc0, 0xcb, 0x86,
+	0x5b, 0xe8, 0xdb, 0x86, 0xc4, 0x08, 0xd3, 0xc5, 0xec, 0xc1, 0x22, 0x4f, 0xe5, 0xfa, 0x62, 0x36,
+	0x61, 0xce, 0x60, 0xd4, 0x74, 0xd7, 0x62, 0x69, 0x61, 0x7b, 0x29, 0xaa, 0xa4, 0xd0, 0x6c, 0xe1,
+	0xc0, 0x97, 0xf9, 0x3c, 0x0e, 0xa8, 0x6c, 0xb8, 0x2c, 0xa0, 0x61, 0xea, 0x76, 0x6d, 0xcb, 0xa5,
+	0x68, 0x13, 0xe6, 0x5d, 0x46, 0x98, 0xe7, 0x86, 0x65, 0x2c, 0x71, 0x72, 0x95, 0x9b, 0x70, 0xe8,
+	0x42, 0x8f, 0x60, 0xde, 0xa1, 0xc4, 0xb5, 0x2d, 0x2e, 0x3e, 0xb9, 0x7f, 0x87, 0x83, 0x46, 0xa3,
+	0x65, 0x31, 0x47, 0xe1, 0x10, 0x8d, 0xee, 0xc1, 0x7c, 0x70, 0xbe, 0xc2, 0x92, 0x92, 0x03, 0x65,
+	0xbe, 0x70, 0x1c, 0x7a, 0xfd, 0x67, 0x14, 0x30, 0x34, 0x9d, 0x32, 0x62, 0x74, 0xd6, 0x66, 0xd3,
+	0xb1, 0xed, 0x45, 0xbc, 0x1c, 0x18, 0x8b, 0xdc, 0x96, 0x79, 0x0e, 0xf3, 0x41, 0x78, 0x74, 0x13,
+	0xc4, 0x9a, 0x52, 0x94, 0x8e, 0x64, 0x45, 0x2a, 0x6a, 0x58, 0xca, 0x57, 0x2b, 0x8a, 0x38, 0x83,
+	0x10, 0x24, 0x6b, 0xca, 0x7f, 0x95, 0xca, 0xa9, 0xa2, 0x15, 0xa5, 0xba, 0x5c, 0x90, 0xc4, 0x98,
+	0x6f, 0x93, 0x15, 0x55, 0xc2, 0x4a, 0xbe, 0xac, 0x49, 0x18, 0x57, 0xb0, 0x18, 0x47, 0xab, 0x80,
+	0x02, 0xbf, 0x56, 0x53, 0xb0, 0x94, 0x2f, 0x94, 0xf2, 0x87, 0x65, 0x49, 0x14, 0x32, 0xaf, 0x63,
+	0x90, 0x0a, 0xa5, 0x85, 0x8d, 0xe1, 0xf3, 0x85, 0xe9, 0x4b, 0x8f, 0xba, 0x0c, 0xed, 0xc0, 0x92,
+	0x4e, 0xfd, 0xeb, 0x41, 0xf3, 0xbc, 0xb0, 0xe9, 0x4b, 0xfb, 0x8b, 0xbc, 0xa0, 0x9a, 0x67, 0xe8,
+	0x18, 0x02, 0xaf, 0xff, 0x1b, 0xed, 0xc0, 0x42, 0xa3, 0x4d, 0xac, 0x16, 0x75, 0x2f, 0x9d, 0x9e,
+	0x7e, 0xe1, 0xfe, 0xe9, 0x0d, 0x01, 0x68, 0x07, 0x44, 0x87, 0xba, 0x94, 0x69, 0xcc, 0xd6, 0x74,
+	0xda, 0x24, 0x5e, 0x87, 0xf1, 0xa7, 0x95, 0x28, 0xcd, 0xe0, 0x24, 0xf7, 0xa8, 0x76, 0x31, 0xb0,
+	0xfb, 0xe7, 0xc1, 0xee, 0xd2, 0x40, 0x57, 0xe6, 0xb3, 0x38, 0x6c, 0x8c, 0xd5, 0xfb, 0x26, 0x9d,
+	0xfd, 0xf7, 0x50, 0x67, 0xb7, 0xa2, 0x42, 0xc7, 0x85, 0x1d, 0x6e, 0xf1, 0x48, 0xeb, 0x84, 0x31,
+	0xad, 0x73, 0xfe, 0xa0, 0xd6, 0x71, 0x5b, 0x3d, 0x5f, 0x96, 0x8b, 0x5a, 0xa1, 0xa2, 0x1c, 0xc9,
+	0xcf, 0x44, 0x61, 0x42, 0x3b, 0x67, 0x33, 0x9f, 0xc6, 0x60, 0x85, 0xd7, 0x71, 0x4c, 0x19, 0x29,
+	0x12, 0x46, 0xde, 0xa8, 0x83, 0x7b, 0x90, 0x6c, 0xd8, 0x66, 0xd7, 0xb6, 0xfc, 0x33, 0xce, 0xe1,
+	0xf1, 0x61, 0xf8, 0x4a, 0x1f, 0xc0, 0x19, 0x7f, 0x8b, 0x32, 0x2c, 0x62, 0xd2, 0xf0, 0x49, 0x0c,
+	0x60, 0x0a, 0x31, 0x69, 0xe6, 0xfd, 0x38, 0xcc, 0x71, 0x59, 0xe8, 0x09, 0x24, 0x83, 0x2b, 0xc4,
+	0xa4, 0x8c, 0xe8, 0x84, 0x91, 0x50, 0x11, 0x1a, 0xb4, 0xa0, 0x27, 0x1d, 0xaf, 0xd0, 0xde, 0x5f,
+	0x1f, 0x78, 0xe9, 0xf6, 0x89, 0x5f, 0x79, 0xfb, 0x3c, 0x86, 0x45, 0x87, 0x18, 0x2e, 0xd5, 0xb5,
+	0xfe, 0x21, 0x4c, 0x65, 0x83, 0x37, 0x52, 0xb6, 0xf7, 0x46, 0xca, 0xaa, 0xbd, 0x57, 0x16, 0x4e,
+	0x04, 0x60, 0xd5, 0x45, 0xff, 0x81, 0x64, 0xff, 0xba, 0xd1, 0x0c, 0xab, 0x69, 0xf3, 0x33, 0xb9,
+	0xb4, 0xbf, 0x7e, 0xf9, 0x56, 0x8a, 0x5c, 0xc4, 0x78, 0x85, 0x45, 0xad, 0x68, 0x1d, 0x12, 0x44,
+	0x0f, 0xb9, 0x73, 0xfc, 0x51, 0x2c, 0x10, 0x9d, 0xbb, 0x76, 0x7e, 0x48, 0x86, 0x57, 0xa9, 0xac,
+	0xbb, 0x68, 0x0d, 0x6e, 0x4a, 0x75, 0x49, 0x51, 0x35, 0x25, 0x7f, 0xec, 0x37, 0x31, 0x9c, 0x0e,
+	0x71, 0x06, 0xdd, 0x81, 0x54, 0xe0, 0x51, 0x71, 0x5e, 0xa9, 0x16, 0x24, 0xb9, 0x2e, 0x61, 0xed,
+	0xa4, 0x5c, 0x7b, 0xa6, 0x55, 0x6a, 0xaa, 0xa8, 0xa3, 0xdb, 0xb0, 0x3e, 0xc1, 0x2f, 0x2b, 0x22,
+	0x45, 0xbb, 0x70, 0x7f, 0xd4, 0x5d, 0xaf, 0x94, 0xd5, 0xfc, 0x33, 0x49, 0xcb, 0x1f, 0x56, 0xea,
+	0x92, 0xa6, 0x96, 0xb0, 0x54, 0x2d, 0x55, 0xca, 0x45, 0xb1, 0x79, 0x35, 0xfc, 0x50, 0x2a, 0x57,
+	0x4e, 0x23, 0xf0, 0x16, 0x7a, 0x00, 0xbb, 0xa3, 0x70, 0x55, 0x3a, 0x3e, 0x91, 0x70, 0x5e, 0xad,
+	0xe1, 0xd1, 0x0c, 0xed, 0xe9, 0x94, 0xe1, 0x2c, 0xc6, 0x78, 0x51, 0x85, 0x1a, 0xc6, 0xbe, 0x6d,
+	0x38, 0xc3, 0x5b, 0x57, 0xc3, 0x87, 0xa3, 0xbf, 0x40, 0x59, 0xd8, 0x19, 0x85, 0xe3, 0xff, 0x69,
+	0x27, 0x95, 0x53, 0x09, 0x8f, 0x84, 0xef, 0x4c, 0xc1, 0x0f, 0xc7, 0x37, 0xc7, 0xe3, 0xd5, 0x49,
+	0xf1, 0xad, 0x29, 0xf8, 0xe1, 0xf8, 0xf6, 0xf8, 0x01, 0x38, 0xca, 0xcb, 0xe5, 0x1a, 0x96, 0xc4,
+	0x2e, 0x7a, 0x0c, 0x07, 0xd7, 0x1e, 0x00, 0x0d, 0x4b, 0x85, 0x4a, 0x5d, 0xc2, 0x52, 0x51, 0x7c,
+	0x79, 0x35, 0x71, 0x48, 0x46, 0x84, 0xe8, 0xa0, 0xa7, 0xf0, 0xf8, 0x8d, 0x86, 0x22, 0x42, 0x76,
+	0xa7, 0x93, 0x27, 0x67, 0x66, 0xe3, 0x25, 0x4f, 0x18, 0x94, 0x08, 0xd1, 0xbb, 0x9a, 0x38, 0x39,
+	0xe3, 0x39, 0xfa, 0x17, 0x3c, 0xbc, 0xfe, 0xf0, 0x44, 0x98, 0x17, 0x53, 0x98, 0x93, 0x73, 0xbe,
+	0x3d, 0x9e, 0xa9, 0x4e, 0xcf, 0xf9, 0x6a, 0x0a, 0x73, 0x72, 0xce, 0x77, 0xd0, 0x16, 0x6c, 0x4e,
+	0x1c, 0xb2, 0x08, 0xf0, 0x5d, 0x74, 0x0b, 0x50, 0x00, 0x3c, 0xa9, 0xd6, 0x06, 0xd7, 0xd4, 0xd7,
+	0x31, 0xb4, 0x0a, 0x37, 0x86, 0x1c, 0xb2, 0x22, 0x7e, 0x33, 0x64, 0xef, 0x8d, 0xed, 0xb7, 0x31,
+	0x94, 0x86, 0x8d, 0x11, 0x7b, 0x24, 0xd3, 0x77, 0x11, 0xe6, 0x51, 0x5e, 0xe9, 0x33, 0xbf, 0x88,
+	0x0f, 0x24, 0xf8, 0xf6, 0xbe, 0x84, 0xd7, 0xf1, 0xcb, 0x84, 0x9e, 0x84, 0x2f, 0xe3, 0x83, 0x54,
+	0x91, 0x40, 0x91, 0x54, 0x5f, 0xc5, 0xd1, 0x7d, 0xf8, 0x6b, 0x80, 0x28, 0x9c, 0xd4, 0xc6, 0x8c,
+	0x72, 0x01, 0xcb, 0xaa, 0x5c, 0xc8, 0x97, 0xc5, 0x0f, 0x05, 0x74, 0x0f, 0xfe, 0x72, 0x15, 0xf4,
+	0x28, 0xaf, 0xe6, 0xcb, 0xe2, 0x47, 0x02, 0x3a, 0x80, 0xec, 0x75, 0x42, 0x46, 0x74, 0x7c, 0x2c,
+	0xa0, 0x3d, 0xf8, 0xfb, 0xd4, 0xe0, 0x11, 0xc6, 0x27, 0x02, 0x4a, 0xc1, 0x9f, 0x03, 0x46, 0xe9,
+	0x34, 0x5c, 0x2b, 0x34, 0x2c, 0x55, 0x25, 0x55, 0xfc, 0x51, 0x40, 0xb9, 0xde, 0x4d, 0x33, 0xf0,
+	0x5d, 0x51, 0xdb, 0x4f, 0x02, 0xfa, 0x07, 0x6c, 0x4d, 0x27, 0x04, 0x15, 0xfe, 0x2c, 0xa0, 0x27,
+	0xbd, 0x69, 0xbb, 0x4e, 0xf8, 0x88, 0xea, 0x5f, 0x04, 0xf4, 0x08, 0x1e, 0x5c, 0x33, 0x51, 0x84,
+	0xf7, 0xab, 0x80, 0x36, 0x60, 0x75, 0xb4, 0xda, 0xc3, 0x4a, 0x45, 0x15, 0x7f, 0x13, 0xf6, 0xbf,
+	0x8f, 0xc1, 0x6d, 0x85, 0x30, 0xe3, 0x9c, 0x06, 0xab, 0xdd, 0x31, 0xb1, 0x48, 0x8b, 0x9a, 0xd4,
+	0x62, 0xd5, 0xe0, 0x9b, 0x17, 0x3d, 0x02, 0x18, 0xec, 0xf3, 0x28, 0xf8, 0xf6, 0x28, 0x11, 0x47,
+	0xbf, 0x20, 0x0e, 0x95, 0x8b, 0xa9, 0x5b, 0x13, 0x36, 0x7e, 0xf4, 0x1c, 0xd6, 0x6b, 0x5d, 0x9d,
+	0x30, 0x3a, 0x66, 0x67, 0x44, 0x77, 0x27, 0x6f, 0x93, 0x7c, 0xa9, 0x4e, 0xa5, 0xa7, 0xad, 0x9b,
+	0xe8, 0x21, 0x2c, 0x57, 0x99, 0x43, 0x89, 0x19, 0x2a, 0x5b, 0x1d, 0xd9, 0x5e, 0x24, 0xff, 0x7b,
+	0x3a, 0x05, 0x83, 0x48, 0x7b, 0xb1, 0xc3, 0xa7, 0xff, 0x7f, 0xd2, 0x32, 0x58, 0xdb, 0x3b, 0xcb,
+	0x36, 0x6c, 0x33, 0x67, 0x77, 0xa9, 0xd5, 0xb0, 0x1d, 0x3d, 0x17, 0x2c, 0x78, 0xbb, 0x66, 0xbf,
+	0xfa, 0x5d, 0xc3, 0x62, 0xd4, 0x69, 0x92, 0x06, 0xcd, 0x9d, 0x1f, 0xe4, 0x5a, 0x76, 0x4e, 0x37,
+	0x8d, 0xb3, 0x79, 0x1e, 0xfa, 0xe0, 0xf7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x22, 0x3b, 0x2f, 0x3c,
+	0x23, 0x10, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/go/dmi/hw_management_service.pb.go b/go/dmi/hw_management_service.pb.go
index f7ee729..645dace 100644
--- a/go/dmi/hw_management_service.pb.go
+++ b/go/dmi/hw_management_service.pb.go
@@ -384,6 +384,37 @@
 	return fileDescriptor_eae902e73066286d, []int{20, 0}
 }
 
+type RebootDeviceResponse_Reason int32
+
+const (
+	RebootDeviceResponse_UNDEFINED_REASON   RebootDeviceResponse_Reason = 0
+	RebootDeviceResponse_UNKNOWN_DEVICE     RebootDeviceResponse_Reason = 1
+	RebootDeviceResponse_INTERNAL_ERROR     RebootDeviceResponse_Reason = 2
+	RebootDeviceResponse_DEVICE_UNREACHABLE RebootDeviceResponse_Reason = 3
+)
+
+var RebootDeviceResponse_Reason_name = map[int32]string{
+	0: "UNDEFINED_REASON",
+	1: "UNKNOWN_DEVICE",
+	2: "INTERNAL_ERROR",
+	3: "DEVICE_UNREACHABLE",
+}
+
+var RebootDeviceResponse_Reason_value = map[string]int32{
+	"UNDEFINED_REASON":   0,
+	"UNKNOWN_DEVICE":     1,
+	"INTERNAL_ERROR":     2,
+	"DEVICE_UNREACHABLE": 3,
+}
+
+func (x RebootDeviceResponse_Reason) String() string {
+	return proto.EnumName(RebootDeviceResponse_Reason_name, int32(x))
+}
+
+func (RebootDeviceResponse_Reason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{24, 0}
+}
+
 type PhysicalInventoryRequest struct {
 	DeviceUuid           *Uuid    `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
@@ -1620,6 +1651,100 @@
 	return 0
 }
 
+type RebootDeviceRequest struct {
+	DeviceUuid           *Uuid    `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *RebootDeviceRequest) Reset()         { *m = RebootDeviceRequest{} }
+func (m *RebootDeviceRequest) String() string { return proto.CompactTextString(m) }
+func (*RebootDeviceRequest) ProtoMessage()    {}
+func (*RebootDeviceRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{23}
+}
+
+func (m *RebootDeviceRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RebootDeviceRequest.Unmarshal(m, b)
+}
+func (m *RebootDeviceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RebootDeviceRequest.Marshal(b, m, deterministic)
+}
+func (m *RebootDeviceRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RebootDeviceRequest.Merge(m, src)
+}
+func (m *RebootDeviceRequest) XXX_Size() int {
+	return xxx_messageInfo_RebootDeviceRequest.Size(m)
+}
+func (m *RebootDeviceRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_RebootDeviceRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RebootDeviceRequest proto.InternalMessageInfo
+
+func (m *RebootDeviceRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+type RebootDeviceResponse struct {
+	Status               Status                      `protobuf:"varint,3,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	Reason               RebootDeviceResponse_Reason `protobuf:"varint,4,opt,name=reason,proto3,enum=dmi.RebootDeviceResponse_Reason" json:"reason,omitempty"`
+	ReasonDetail         string                      `protobuf:"bytes,5,opt,name=reason_detail,json=reasonDetail,proto3" json:"reason_detail,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                    `json:"-"`
+	XXX_unrecognized     []byte                      `json:"-"`
+	XXX_sizecache        int32                       `json:"-"`
+}
+
+func (m *RebootDeviceResponse) Reset()         { *m = RebootDeviceResponse{} }
+func (m *RebootDeviceResponse) String() string { return proto.CompactTextString(m) }
+func (*RebootDeviceResponse) ProtoMessage()    {}
+func (*RebootDeviceResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_eae902e73066286d, []int{24}
+}
+
+func (m *RebootDeviceResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_RebootDeviceResponse.Unmarshal(m, b)
+}
+func (m *RebootDeviceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_RebootDeviceResponse.Marshal(b, m, deterministic)
+}
+func (m *RebootDeviceResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_RebootDeviceResponse.Merge(m, src)
+}
+func (m *RebootDeviceResponse) XXX_Size() int {
+	return xxx_messageInfo_RebootDeviceResponse.Size(m)
+}
+func (m *RebootDeviceResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_RebootDeviceResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_RebootDeviceResponse proto.InternalMessageInfo
+
+func (m *RebootDeviceResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *RebootDeviceResponse) GetReason() RebootDeviceResponse_Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return RebootDeviceResponse_UNDEFINED_REASON
+}
+
+func (m *RebootDeviceResponse) GetReasonDetail() string {
+	if m != nil {
+		return m.ReasonDetail
+	}
+	return ""
+}
+
 func init() {
 	proto.RegisterEnum("dmi.PhysicalInventoryResponse_Reason", PhysicalInventoryResponse_Reason_name, PhysicalInventoryResponse_Reason_value)
 	proto.RegisterEnum("dmi.HWComponentInfoGetResponse_Reason", HWComponentInfoGetResponse_Reason_name, HWComponentInfoGetResponse_Reason_value)
@@ -1632,6 +1757,7 @@
 	proto.RegisterEnum("dmi.GetMsgBusEndpointResponse_Reason", GetMsgBusEndpointResponse_Reason_name, GetMsgBusEndpointResponse_Reason_value)
 	proto.RegisterEnum("dmi.SetLogLevelResponse_Reason", SetLogLevelResponse_Reason_name, SetLogLevelResponse_Reason_value)
 	proto.RegisterEnum("dmi.GetLogLevelResponse_Reason", GetLogLevelResponse_Reason_name, GetLogLevelResponse_Reason_value)
+	proto.RegisterEnum("dmi.RebootDeviceResponse_Reason", RebootDeviceResponse_Reason_name, RebootDeviceResponse_Reason_value)
 	proto.RegisterType((*PhysicalInventoryRequest)(nil), "dmi.PhysicalInventoryRequest")
 	proto.RegisterType((*PhysicalInventoryResponse)(nil), "dmi.PhysicalInventoryResponse")
 	proto.RegisterType((*HWComponentInfoGetRequest)(nil), "dmi.HWComponentInfoGetRequest")
@@ -1655,105 +1781,110 @@
 	proto.RegisterType((*GetLogLevelResponse)(nil), "dmi.GetLogLevelResponse")
 	proto.RegisterType((*GetLoggableEntitiesRequest)(nil), "dmi.GetLoggableEntitiesRequest")
 	proto.RegisterType((*Heartbeat)(nil), "dmi.Heartbeat")
+	proto.RegisterType((*RebootDeviceRequest)(nil), "dmi.RebootDeviceRequest")
+	proto.RegisterType((*RebootDeviceResponse)(nil), "dmi.RebootDeviceResponse")
 }
 
 func init() { proto.RegisterFile("dmi/hw_management_service.proto", fileDescriptor_eae902e73066286d) }
 
 var fileDescriptor_eae902e73066286d = []byte{
-	// 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,
+	// 1536 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x59, 0xcd, 0x6e, 0xdb, 0xc6,
+	0x16, 0xbe, 0xa4, 0x6c, 0x27, 0x3a, 0x4e, 0x1c, 0x79, 0x9c, 0xf8, 0x4a, 0x0c, 0x62, 0xfb, 0x32,
+	0xc8, 0x8d, 0x73, 0x6f, 0x22, 0x19, 0xca, 0xa2, 0xe9, 0x7f, 0x65, 0x89, 0xa1, 0xd5, 0x48, 0xa4,
+	0x30, 0x94, 0x63, 0xa4, 0x28, 0x4a, 0xd0, 0xd2, 0x58, 0x26, 0x2a, 0x92, 0xaa, 0x48, 0x39, 0xf0,
+	0x03, 0x74, 0xd1, 0x47, 0xe8, 0xa2, 0x40, 0x9f, 0xa0, 0x40, 0xbb, 0x2c, 0xfa, 0x06, 0xdd, 0x76,
+	0x55, 0x14, 0x28, 0xfa, 0x08, 0xdd, 0x76, 0x55, 0x68, 0x86, 0xd4, 0x0f, 0x45, 0xca, 0x92, 0x9c,
+	0xa0, 0xd9, 0x89, 0x33, 0x67, 0x3e, 0x1e, 0x9e, 0xef, 0x9b, 0x33, 0x67, 0x8e, 0x60, 0xbb, 0x69,
+	0x99, 0xb9, 0xd3, 0x97, 0xba, 0x65, 0xd8, 0x46, 0x8b, 0x58, 0xc4, 0xf6, 0x74, 0x97, 0x74, 0xcf,
+	0xcc, 0x06, 0xc9, 0x76, 0xba, 0x8e, 0xe7, 0xa0, 0x44, 0xd3, 0x32, 0x85, 0xf5, 0xbe, 0x55, 0xc3,
+	0xb1, 0x2c, 0xc7, 0x76, 0xd9, 0xb8, 0x70, 0x8d, 0x2d, 0xf4, 0x9f, 0x6e, 0xb7, 0x1c, 0xa7, 0xd5,
+	0x26, 0x39, 0xfa, 0x74, 0xdc, 0x3b, 0xc9, 0x11, 0xab, 0xe3, 0x9d, 0xb3, 0x49, 0xf1, 0x29, 0xa4,
+	0x6b, 0xa7, 0xe7, 0xae, 0xd9, 0x30, 0xda, 0x65, 0xfb, 0x8c, 0xd8, 0x9e, 0xd3, 0x3d, 0xc7, 0xe4,
+	0x8b, 0x1e, 0x71, 0x3d, 0xf4, 0x3f, 0x58, 0x6d, 0x92, 0xfe, 0xeb, 0xf4, 0x5e, 0xcf, 0x6c, 0xa6,
+	0xb9, 0x1d, 0x6e, 0x77, 0x35, 0x9f, 0xcc, 0x36, 0x2d, 0x33, 0x7b, 0xd8, 0x33, 0x9b, 0x18, 0xd8,
+	0x6c, 0xff, 0xb7, 0xf8, 0x3d, 0x0f, 0x99, 0x08, 0x20, 0xb7, 0xe3, 0xd8, 0x2e, 0x41, 0x77, 0x61,
+	0xc5, 0xf5, 0x0c, 0xaf, 0xe7, 0x52, 0x90, 0xb5, 0xfc, 0x2a, 0x05, 0xd1, 0xe8, 0x10, 0xf6, 0xa7,
+	0xd0, 0xfb, 0xb0, 0xd2, 0x25, 0x86, 0xeb, 0xd8, 0x69, 0x9e, 0x1a, 0xdd, 0xa3, 0x46, 0xb1, 0xa0,
+	0x59, 0x4c, 0x8d, 0xb1, 0xbf, 0x08, 0xfd, 0x1f, 0x92, 0x66, 0x60, 0x93, 0x4e, 0x50, 0x5f, 0xaf,
+	0x53, 0x84, 0x03, 0xa3, 0xdb, 0x7c, 0x69, 0x74, 0x09, 0x1e, 0xce, 0xa3, 0xbb, 0x70, 0x9d, 0x2d,
+	0xd3, 0x9b, 0xc4, 0x33, 0xcc, 0x76, 0x7a, 0x69, 0x87, 0xdb, 0x4d, 0xe2, 0x6b, 0x6c, 0xb0, 0x44,
+	0xc7, 0xc4, 0xcf, 0x60, 0x85, 0xbd, 0x03, 0xdd, 0x84, 0xd4, 0xa1, 0x52, 0x92, 0x9e, 0x96, 0x15,
+	0xa9, 0xa4, 0x63, 0xa9, 0xa0, 0xa9, 0x4a, 0xea, 0x5f, 0x08, 0xc1, 0xda, 0xa1, 0xf2, 0x4c, 0x51,
+	0x8f, 0x14, 0xbd, 0x24, 0x3d, 0x2f, 0x17, 0xa5, 0x14, 0xd7, 0x1f, 0x2b, 0x2b, 0x75, 0x09, 0x2b,
+	0x85, 0x8a, 0x2e, 0x61, 0xac, 0xe2, 0x14, 0x8f, 0x36, 0x01, 0xb1, 0x79, 0xfd, 0x50, 0xc1, 0x52,
+	0xa1, 0x78, 0x50, 0xd8, 0xaf, 0x48, 0xa9, 0x84, 0xf8, 0x2d, 0x07, 0x99, 0x83, 0xa3, 0xa2, 0x63,
+	0x75, 0x1c, 0x9b, 0xd8, 0x5e, 0xd9, 0x3e, 0x71, 0x64, 0xe2, 0x2d, 0x10, 0x7d, 0xb4, 0x07, 0x6b,
+	0x8d, 0x00, 0x86, 0x99, 0xf3, 0x61, 0xf3, 0xeb, 0x03, 0x03, 0xba, 0xe2, 0xde, 0xe8, 0x0a, 0xdb,
+	0xb0, 0x08, 0x0d, 0x59, 0x72, 0xc4, 0x4c, 0x31, 0x2c, 0x22, 0xfe, 0xcc, 0x83, 0x10, 0xe5, 0xe2,
+	0x3c, 0xbc, 0x7e, 0x10, 0xe2, 0xf5, 0xbf, 0x8c, 0x95, 0x58, 0xd4, 0x30, 0xb1, 0x0f, 0x21, 0x39,
+	0x70, 0xca, 0x27, 0x76, 0x8d, 0x42, 0x0c, 0x00, 0xf0, 0xd0, 0x60, 0x36, 0x66, 0x7b, 0x0b, 0x30,
+	0x7b, 0x0b, 0xd6, 0x83, 0xb1, 0xa2, 0x5a, 0xad, 0xa9, 0x8a, 0xa4, 0xd4, 0x53, 0x7c, 0x04, 0xe1,
+	0x89, 0x18, 0xc2, 0x97, 0xc4, 0x5f, 0x26, 0x09, 0xd7, 0xde, 0x2c, 0xc2, 0x51, 0x1e, 0xae, 0x34,
+	0x4e, 0x0d, 0xbb, 0x45, 0x5c, 0x1a, 0xb8, 0xd5, 0x7c, 0x9a, 0x22, 0x56, 0x9d, 0xa6, 0x79, 0x62,
+	0x1a, 0xc7, 0x6d, 0x32, 0x0c, 0x7a, 0x60, 0x28, 0xfe, 0x30, 0x29, 0x12, 0xed, 0xb5, 0x88, 0x44,
+	0x8b, 0x17, 0xc9, 0x04, 0xed, 0x89, 0x08, 0xda, 0xbf, 0xe2, 0x5e, 0x31, 0xef, 0xcf, 0x0b, 0x95,
+	0x72, 0x49, 0xaf, 0x15, 0x70, 0xa1, 0xaa, 0xa5, 0x12, 0x11, 0x5a, 0x58, 0x8a, 0xd1, 0xc2, 0xb2,
+	0xf8, 0x1b, 0x0f, 0xb7, 0x35, 0xcf, 0xe8, 0x7a, 0xd5, 0x7e, 0x76, 0x37, 0xed, 0x56, 0x89, 0xb2,
+	0x3b, 0x5f, 0xd4, 0x3e, 0x0c, 0x45, 0xed, 0x7e, 0x60, 0x14, 0x07, 0x1b, 0x0e, 0x5b, 0x48, 0x73,
+	0x89, 0x69, 0x9a, 0x9b, 0x69, 0x67, 0x7d, 0x79, 0x51, 0x88, 0x05, 0xd8, 0xf4, 0xe3, 0x51, 0xa8,
+	0x60, 0xa9, 0x50, 0x7a, 0xa1, 0x57, 0x0b, 0x4a, 0x41, 0x96, 0x4a, 0x29, 0x0e, 0xfd, 0x07, 0xee,
+	0xa8, 0x35, 0x09, 0x17, 0xea, 0x65, 0x55, 0x19, 0x4c, 0x97, 0x15, 0xbd, 0x86, 0x55, 0x19, 0x4b,
+	0x9a, 0x36, 0x7b, 0xd8, 0xc5, 0x1c, 0x64, 0x34, 0xcf, 0xe9, 0x84, 0xa3, 0xc0, 0x76, 0x1a, 0x82,
+	0x25, 0xba, 0x03, 0x38, 0xfa, 0x01, 0xf4, 0xb7, 0xf8, 0x2b, 0x07, 0x42, 0xd4, 0x8a, 0xcb, 0x8b,
+	0x38, 0x1e, 0x75, 0x21, 0x11, 0xe7, 0xe7, 0xd7, 0xb0, 0x68, 0xc1, 0x3a, 0xf5, 0x80, 0x34, 0x99,
+	0x03, 0xfd, 0xcd, 0x84, 0x1e, 0xc2, 0x92, 0x69, 0x9f, 0x38, 0x7e, 0xa2, 0x89, 0xdf, 0xe7, 0xd4,
+	0x2a, 0xac, 0x14, 0x7e, 0x5a, 0x31, 0xf0, 0x3b, 0x07, 0x9b, 0x63, 0xef, 0x73, 0xe7, 0x8b, 0xe3,
+	0x3b, 0xa1, 0x38, 0x8a, 0xcc, 0xb7, 0x48, 0xc4, 0x70, 0x0c, 0xf7, 0xe0, 0x0a, 0xf3, 0xc4, 0x4d,
+	0x27, 0x76, 0x12, 0xbb, 0xab, 0xf9, 0xcd, 0xc9, 0xc5, 0xfd, 0xcf, 0xc7, 0x81, 0xd9, 0x2c, 0x01,
+	0x0d, 0xc9, 0x8b, 0x13, 0xbf, 0xe1, 0x20, 0xa3, 0x11, 0xaf, 0xe2, 0xb4, 0xfa, 0xac, 0x4a, 0x76,
+	0xb3, 0xe3, 0x98, 0xf6, 0x42, 0x99, 0xfc, 0x01, 0xa4, 0xda, 0x0c, 0x45, 0x27, 0x3e, 0x0c, 0xfd,
+	0xea, 0x24, 0xbe, 0xd1, 0x1e, 0x47, 0x1f, 0x35, 0xa5, 0xc5, 0x5b, 0xc3, 0x09, 0x14, 0x12, 0x98,
+	0xd6, 0xfc, 0x61, 0xf1, 0x0f, 0x9e, 0xfa, 0x87, 0x89, 0xe5, 0x78, 0x64, 0xe8, 0xde, 0xe5, 0xcb,
+	0xb1, 0x58, 0xd0, 0x85, 0xb4, 0xfc, 0x23, 0xf7, 0x8a, 0x4a, 0x2c, 0x01, 0x36, 0x2b, 0xaa, 0x2c,
+	0x97, 0x15, 0x59, 0x97, 0x94, 0x52, 0x4d, 0x2d, 0x2b, 0xf5, 0xc1, 0x69, 0x7c, 0x17, 0xb6, 0x27,
+	0xe6, 0x6a, 0x58, 0xad, 0xab, 0x45, 0x75, 0x98, 0xa6, 0x33, 0x70, 0xab, 0xaa, 0xc9, 0xfb, 0x87,
+	0x5a, 0x78, 0xfd, 0x72, 0x4c, 0x06, 0x5f, 0xe9, 0x67, 0x70, 0x41, 0x8e, 0xd0, 0xc0, 0xe5, 0x33,
+	0x46, 0x3c, 0x6a, 0x38, 0xca, 0x51, 0xea, 0x49, 0xcc, 0xae, 0x9e, 0xa5, 0x48, 0xf5, 0x4c, 0x72,
+	0xb7, 0xfc, 0x0f, 0x54, 0xc7, 0x45, 0x48, 0x6b, 0xc4, 0xab, 0xba, 0xad, 0xfd, 0x9e, 0x1b, 0xde,
+	0x60, 0xf7, 0xe1, 0x86, 0xe5, 0xb6, 0x8e, 0x7b, 0xee, 0xf0, 0xab, 0x59, 0x2e, 0x5f, 0x63, 0xc3,
+	0x81, 0xbd, 0xf8, 0x35, 0x0f, 0x19, 0x79, 0x12, 0xe5, 0xf2, 0xfb, 0x20, 0x16, 0x34, 0xcc, 0x50,
+	0x84, 0xab, 0x89, 0x28, 0x57, 0x67, 0x3b, 0x5e, 0x3f, 0x9e, 0x3f, 0x57, 0xc5, 0x04, 0x98, 0x17,
+	0x5f, 0x40, 0x4a, 0xb2, 0x3d, 0xd3, 0x33, 0x89, 0x5b, 0x71, 0x5a, 0x15, 0x72, 0x46, 0xda, 0xe8,
+	0x01, 0x5c, 0x6d, 0xfb, 0xbf, 0xfd, 0x98, 0xb0, 0x3b, 0x54, 0x60, 0x80, 0x07, 0xd3, 0x48, 0x80,
+	0xab, 0xc4, 0x5f, 0x9e, 0xe6, 0x77, 0x12, 0xbb, 0x49, 0x3c, 0x78, 0x16, 0x7b, 0x80, 0x58, 0x76,
+	0x64, 0x8b, 0x16, 0x48, 0x8b, 0x8f, 0x21, 0xd9, 0xee, 0xdf, 0x5a, 0xcf, 0x48, 0x9b, 0xc1, 0xaf,
+	0xe6, 0x6f, 0x51, 0xcb, 0xb0, 0xcb, 0x78, 0x68, 0x27, 0xfe, 0xc4, 0xc3, 0xc6, 0xd8, 0x7b, 0x7d,
+	0x9e, 0xe7, 0x79, 0xf1, 0x50, 0x13, 0x7c, 0xbc, 0x26, 0xde, 0x1a, 0x68, 0x22, 0x41, 0x8d, 0xb6,
+	0x83, 0xdc, 0x18, 0x7e, 0xf5, 0x85, 0x59, 0x31, 0x8a, 0xe4, 0xb3, 0x57, 0xb7, 0xb3, 0x02, 0xbb,
+	0x8a, 0xda, 0x4f, 0x7e, 0xf5, 0x72, 0xfd, 0xc5, 0x94, 0xeb, 0xc9, 0xa7, 0x80, 0xe4, 0xcb, 0xb1,
+	0x36, 0x4d, 0x13, 0x7f, 0xf2, 0xb0, 0x21, 0x5f, 0x92, 0x1c, 0xa6, 0x8a, 0xca, 0x8c, 0xaa, 0x60,
+	0x76, 0x23, 0x8c, 0x26, 0x66, 0x61, 0x74, 0x69, 0x84, 0x51, 0x79, 0x01, 0x46, 0x97, 0xdf, 0x20,
+	0x46, 0x0f, 0x06, 0x27, 0x54, 0xbf, 0xa4, 0x0b, 0x82, 0xb4, 0x48, 0x7f, 0xe7, 0x3d, 0x48, 0x1e,
+	0x10, 0xa3, 0xeb, 0x1d, 0x13, 0xc3, 0x43, 0x39, 0xd8, 0x38, 0x0d, 0x1e, 0x74, 0xd7, 0x6c, 0xd9,
+	0x86, 0xd7, 0xeb, 0xb2, 0x72, 0xfa, 0x0a, 0x46, 0x83, 0x29, 0x2d, 0x98, 0x11, 0x0b, 0xb0, 0x81,
+	0xc9, 0xb1, 0xe3, 0x78, 0xe3, 0x75, 0xf8, 0x3c, 0x0e, 0xfc, 0xc5, 0xc1, 0xcd, 0x71, 0x8c, 0x89,
+	0x24, 0x3e, 0x85, 0xde, 0x27, 0x21, 0x7a, 0x77, 0xa8, 0x51, 0x14, 0xde, 0x42, 0xfc, 0xbe, 0xe6,
+	0xb3, 0x30, 0xff, 0x5d, 0x12, 0x32, 0x8a, 0xe1, 0x99, 0x67, 0xe4, 0xe0, 0xa8, 0x3a, 0xe8, 0x06,
+	0x6a, 0xac, 0x19, 0x88, 0x34, 0xd8, 0x88, 0xb8, 0xf2, 0xa1, 0xd8, 0x8a, 0x5e, 0xd8, 0xb9, 0xe8,
+	0x9a, 0xb8, 0xc7, 0xa1, 0x43, 0x40, 0x93, 0x17, 0x17, 0xb4, 0x15, 0x7b, 0xa3, 0xa1, 0x8c, 0x0a,
+	0xdb, 0x17, 0xdc, 0x78, 0xd0, 0x01, 0xac, 0xf7, 0x8f, 0xce, 0xb1, 0x52, 0x1e, 0x6d, 0x66, 0x59,
+	0x8b, 0x32, 0x1b, 0xb4, 0x28, 0xb3, 0x92, 0xd5, 0xf1, 0xce, 0x85, 0xdb, 0x53, 0xea, 0x7e, 0x74,
+	0x04, 0x37, 0x65, 0xe2, 0x4d, 0xb4, 0x07, 0xd1, 0x9d, 0xb8, 0xb6, 0x21, 0xf3, 0x70, 0x6b, 0x7a,
+	0x57, 0x71, 0x8f, 0x43, 0x47, 0x34, 0x0d, 0x86, 0x5a, 0x0f, 0xfe, 0x97, 0xc7, 0xb6, 0xeb, 0xfc,
+	0x2f, 0x8f, 0xef, 0x6a, 0xf9, 0x21, 0x9d, 0x11, 0x58, 0xbb, 0x00, 0x78, 0xb4, 0xbf, 0x52, 0x0f,
+	0x0e, 0xdb, 0xb1, 0x72, 0x6f, 0x6b, 0xe4, 0x48, 0x8a, 0xb8, 0xa3, 0x08, 0x5b, 0xd3, 0xcb, 0x79,
+	0xf4, 0x34, 0x38, 0x0c, 0xc6, 0x50, 0x6f, 0x8c, 0x75, 0x54, 0xcb, 0x25, 0x61, 0xfb, 0x82, 0x82,
+	0x15, 0x61, 0x58, 0x9f, 0x28, 0xe3, 0x7c, 0x8e, 0xe2, 0xca, 0xbb, 0x0b, 0x7d, 0x7b, 0xc6, 0x44,
+	0x34, 0x8e, 0x19, 0x27, 0xa2, 0xad, 0xe9, 0xf5, 0x1a, 0xaa, 0x05, 0xc7, 0xd2, 0x58, 0x8e, 0x44,
+	0x63, 0x1f, 0x16, 0x91, 0x3d, 0x85, 0x74, 0xdc, 0x09, 0x81, 0x3e, 0x82, 0xd5, 0x91, 0x52, 0x00,
+	0xfd, 0x7b, 0xb2, 0x38, 0x18, 0x45, 0xd0, 0xa2, 0x11, 0xe4, 0x09, 0x04, 0x39, 0x0e, 0x21, 0xca,
+	0x87, 0x27, 0xb0, 0x36, 0xc8, 0xd7, 0xc5, 0x53, 0xd2, 0xf8, 0x3c, 0x36, 0x3e, 0xac, 0x97, 0x3a,
+	0x4c, 0xee, 0x45, 0xb8, 0x36, 0x9a, 0x17, 0xfd, 0x34, 0x12, 0x91, 0xbe, 0x85, 0x4c, 0x6c, 0x12,
+	0xdd, 0x7f, 0xf7, 0x93, 0xb7, 0x5b, 0xa6, 0x77, 0xda, 0x3b, 0xce, 0x36, 0x1c, 0x2b, 0xe7, 0x74,
+	0x88, 0xdd, 0x70, 0xba, 0xcd, 0x1c, 0xcb, 0xe7, 0x8f, 0x86, 0x7f, 0x68, 0x3c, 0x32, 0x6d, 0x8f,
+	0x74, 0x4f, 0x8c, 0x06, 0xc9, 0x9d, 0x3d, 0xce, 0xb5, 0x9c, 0x5c, 0xd3, 0x32, 0x8f, 0x57, 0xa8,
+	0x87, 0x8f, 0xff, 0x0e, 0x00, 0x00, 0xff, 0xff, 0x01, 0xc5, 0x3c, 0x86, 0x00, 0x19, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -1811,6 +1942,8 @@
 	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)
+	// Performs the reboot of the device
+	RebootDevice(ctx context.Context, in *RebootDeviceRequest, opts ...grpc.CallOption) (*RebootDeviceResponse, error)
 }
 
 type nativeHWManagementServiceClient struct {
@@ -2016,6 +2149,15 @@
 	return out, nil
 }
 
+func (c *nativeHWManagementServiceClient) RebootDevice(ctx context.Context, in *RebootDeviceRequest, opts ...grpc.CallOption) (*RebootDeviceResponse, error) {
+	out := new(RebootDeviceResponse)
+	err := c.cc.Invoke(ctx, "/dmi.NativeHWManagementService/RebootDevice", 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
@@ -2061,6 +2203,8 @@
 	GetLogLevel(context.Context, *GetLogLevelRequest) (*GetLogLevelResponse, error)
 	// Performs the heartbeat check
 	HeartbeatCheck(context.Context, *empty.Empty) (*Heartbeat, error)
+	// Performs the reboot of the device
+	RebootDevice(context.Context, *RebootDeviceRequest) (*RebootDeviceResponse, error)
 }
 
 // UnimplementedNativeHWManagementServiceServer can be embedded to have forward compatible implementations.
@@ -2109,6 +2253,9 @@
 func (*UnimplementedNativeHWManagementServiceServer) HeartbeatCheck(ctx context.Context, req *empty.Empty) (*Heartbeat, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method HeartbeatCheck not implemented")
 }
+func (*UnimplementedNativeHWManagementServiceServer) RebootDevice(ctx context.Context, req *RebootDeviceRequest) (*RebootDeviceResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method RebootDevice not implemented")
+}
 
 func RegisterNativeHWManagementServiceServer(s *grpc.Server, srv NativeHWManagementServiceServer) {
 	s.RegisterService(&_NativeHWManagementService_serviceDesc, srv)
@@ -2375,6 +2522,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _NativeHWManagementService_RebootDevice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(RebootDeviceRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(NativeHWManagementServiceServer).RebootDevice(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/dmi.NativeHWManagementService/RebootDevice",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(NativeHWManagementServiceServer).RebootDevice(ctx, req.(*RebootDeviceRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _NativeHWManagementService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "dmi.NativeHWManagementService",
 	HandlerType: (*NativeHWManagementServiceServer)(nil),
@@ -2423,6 +2588,10 @@
 			MethodName: "HeartbeatCheck",
 			Handler:    _NativeHWManagementService_HeartbeatCheck_Handler,
 		},
+		{
+			MethodName: "RebootDevice",
+			Handler:    _NativeHWManagementService_RebootDevice_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/protos/dmi/hw_events_mgmt_service.proto b/protos/dmi/hw_events_mgmt_service.proto
index db04006..130c6b3 100644
--- a/protos/dmi/hw_events_mgmt_service.proto
+++ b/protos/dmi/hw_events_mgmt_service.proto
@@ -63,6 +63,7 @@
     EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL = 502;
     EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED = 503;
     EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED = 504;
+    EVENT_HW_DEVICE_REBOOT = 505;
 
     // More to be added
 }
diff --git a/protos/dmi/hw_management_service.proto b/protos/dmi/hw_management_service.proto
index bc6ce8e..a4375c3 100644
--- a/protos/dmi/hw_management_service.proto
+++ b/protos/dmi/hw_management_service.proto
@@ -222,6 +222,22 @@
     fixed32 heartbeat_signature = 1;
 }
 
+message RebootDeviceRequest {
+    Uuid device_uuid = 1;
+}
+
+message RebootDeviceResponse {
+    enum Reason {
+        UNDEFINED_REASON = 0;
+        UNKNOWN_DEVICE = 1;
+        INTERNAL_ERROR = 2;
+        DEVICE_UNREACHABLE = 3;
+    }
+    Status status = 3;
+    Reason reason = 4;
+    string reason_detail = 5;
+}
+
 service NativeHWManagementService {
     // Initializes context for a device and sets up required states
     // In the call to StartManagingDevice, the fields of ModifiableComponent which are relevant
@@ -279,4 +295,7 @@
 
     // Performs the heartbeat check
     rpc HeartbeatCheck(google.protobuf.Empty) returns (Heartbeat);
+
+    // Performs the reboot of the device
+    rpc RebootDevice(RebootDeviceRequest) returns(RebootDeviceResponse);
 }
diff --git a/python/dmi/hw_events_mgmt_service_pb2.py b/python/dmi/hw_events_mgmt_service_pb2.py
index 18e1946..990daa7 100644
--- a/python/dmi/hw_events_mgmt_service_pb2.py
+++ b/python/dmi/hw_events_mgmt_service_pb2.py
@@ -24,7 +24,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 dmi/hw_events_mgmt_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\"N\n\tValueType\x12\x11\n\x07int_val\x18\x01 \x01(\x03H\x00\x12\x12\n\x08uint_val\x18\x02 \x01(\x04H\x00\x12\x13\n\tfloat_val\x18\x03 \x01(\x02H\x00\x42\x05\n\x03val\"G\n\nWaterMarks\x12\x1c\n\x04high\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12\x1b\n\x03low\x18\x02 \x01(\x0b\x32\x0e.dmi.ValueType\"]\n\nThresholds\x12 \n\x05upper\x18\x01 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x12 \n\x05lower\x18\x02 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x42\x0b\n\tthreshold\"c\n\x14ThresholdInformation\x12&\n\x0eobserved_value\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12#\n\nthresholds\x18\x02 \x01(\x0b\x32\x0f.dmi.Thresholds\"g\n\x08\x45ventCfg\x12\x1f\n\x08\x65vent_id\x18\x01 \x01(\x0e\x32\r.dmi.EventIds\x12\x15\n\ris_configured\x18\x02 \x01(\x08\x12#\n\nthresholds\x18\x03 \x01(\x0b\x32\x0f.dmi.Thresholds\")\n\tEventsCfg\x12\x1c\n\x05items\x18\x01 \x03(\x0b\x32\r.dmi.EventCfg\"\xf8\x01\n\x12ListEventsResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12.\n\x06reason\x18\x02 \x01(\x0e\x32\x1e.dmi.ListEventsResponse.Reason\x12\x1e\n\x06\x65vents\x18\x03 \x01(\x0b\x32\x0e.dmi.EventsCfg\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\"\x88\x01\n\x1a\x45ventsConfigurationRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x0e.dmi.EventsCfgH\x00\x12\x1a\n\x10reset_to_default\x18\x03 \x01(\x08H\x00\x42\x0b\n\toperation\"\xfe\x01\n\x1b\x45ventsConfigurationResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x37\n\x06reason\x18\x02 \x01(\x0e\x32\'.dmi.EventsConfigurationResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"r\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x12\n\x0eINVALID_CONFIG\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"j\n\rEventMetaData\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\xc8\x01\n\x05\x45vent\x12*\n\x0e\x65vent_metadata\x18\x01 \x01(\x0b\x32\x12.dmi.EventMetaData\x12\x1f\n\x08\x65vent_id\x18\x02 \x01(\x0e\x32\r.dmi.EventIds\x12-\n\traised_ts\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x31\n\x0ethreshold_info\x18\x04 \x01(\x0b\x32\x19.dmi.ThresholdInformation\x12\x10\n\x08\x61\x64\x64_info\x18\x05 \x01(\t*\xd1\x0e\n\x08\x45ventIds\x12\x18\n\x14\x45VENT_NAME_UNDEFINED\x10\x00\x12\x1e\n\x1a\x45VENT_TRANSCEIVER_PLUG_OUT\x10\x64\x12\x1d\n\x19\x45VENT_TRANSCEIVER_PLUG_IN\x10\x65\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD\x10\x66\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD\x10g\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD\x10h\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD\x10i\x12-\n)EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD\x10j\x12-\n)EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD\x10k\x12.\n*EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD\x10l\x12.\n*EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD\x10m\x12.\n*EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD\x10n\x12.\n*EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD\x10o\x12\x1d\n\x19\x45VENT_TRANSCEIVER_FAILURE\x10p\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED\x10q\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED\x10r\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED\x10s\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED\x10t\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED\x10u\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED\x10v\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED\x10w\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED\x10x\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED\x10y\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED\x10z\x12\'\n#EVENT_TRANSCEIVER_FAILURE_RECOVERED\x10{\x12\x17\n\x12\x45VENT_PSU_PLUG_OUT\x10\xc8\x01\x12\x16\n\x11\x45VENT_PSU_PLUG_IN\x10\xc9\x01\x12\x16\n\x11\x45VENT_PSU_FAILURE\x10\xca\x01\x12 \n\x1b\x45VENT_PSU_FAILURE_RECOVERED\x10\xcb\x01\x12\x16\n\x11\x45VENT_FAN_FAILURE\x10\xac\x02\x12\x17\n\x12\x45VENT_FAN_PLUG_OUT\x10\xad\x02\x12\x16\n\x11\x45VENT_FAN_PLUG_IN\x10\xae\x02\x12 \n\x1b\x45VENT_FAN_FAILURE_RECOVERED\x10\xaf\x02\x12)\n$EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL\x10\x90\x03\x12&\n!EVENT_CPU_TEMPERATURE_ABOVE_FATAL\x10\x91\x03\x12\x33\n.EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\x92\x03\x12\x30\n+EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\x93\x03\x12\x1a\n\x15\x45VENT_HW_DEVICE_RESET\x10\xf4\x03\x12/\n*EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL\x10\xf5\x03\x12,\n\'EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL\x10\xf6\x03\x12\x39\n4EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\xf7\x03\x12\x36\n1EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\xf8\x03\x32\xed\x01\n\x1dNativeEventsManagementService\x12\x36\n\nListEvents\x12\x0f.dmi.HardwareID\x1a\x17.dmi.ListEventsResponse\x12^\n\x19UpdateEventsConfiguration\x12\x1f.dmi.EventsConfigurationRequest\x1a .dmi.EventsConfigurationResponse\x12\x34\n\x0cStreamEvents\x12\x16.google.protobuf.Empty\x1a\n.dmi.Event0\x01\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
+  serialized_pb=b'\n dmi/hw_events_mgmt_service.proto\x12\x03\x64mi\x1a\x11\x64mi/commons.proto\x1a\x0c\x64mi/hw.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1bgoogle/protobuf/empty.proto\"N\n\tValueType\x12\x11\n\x07int_val\x18\x01 \x01(\x03H\x00\x12\x12\n\x08uint_val\x18\x02 \x01(\x04H\x00\x12\x13\n\tfloat_val\x18\x03 \x01(\x02H\x00\x42\x05\n\x03val\"G\n\nWaterMarks\x12\x1c\n\x04high\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12\x1b\n\x03low\x18\x02 \x01(\x0b\x32\x0e.dmi.ValueType\"]\n\nThresholds\x12 \n\x05upper\x18\x01 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x12 \n\x05lower\x18\x02 \x01(\x0b\x32\x0f.dmi.WaterMarksH\x00\x42\x0b\n\tthreshold\"c\n\x14ThresholdInformation\x12&\n\x0eobserved_value\x18\x01 \x01(\x0b\x32\x0e.dmi.ValueType\x12#\n\nthresholds\x18\x02 \x01(\x0b\x32\x0f.dmi.Thresholds\"g\n\x08\x45ventCfg\x12\x1f\n\x08\x65vent_id\x18\x01 \x01(\x0e\x32\r.dmi.EventIds\x12\x15\n\ris_configured\x18\x02 \x01(\x08\x12#\n\nthresholds\x18\x03 \x01(\x0b\x32\x0f.dmi.Thresholds\")\n\tEventsCfg\x12\x1c\n\x05items\x18\x01 \x03(\x0b\x32\r.dmi.EventCfg\"\xf8\x01\n\x12ListEventsResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12.\n\x06reason\x18\x02 \x01(\x0e\x32\x1e.dmi.ListEventsResponse.Reason\x12\x1e\n\x06\x65vents\x18\x03 \x01(\x0b\x32\x0e.dmi.EventsCfg\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\"\x88\x01\n\x1a\x45ventsConfigurationRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x07\x63hanges\x18\x02 \x01(\x0b\x32\x0e.dmi.EventsCfgH\x00\x12\x1a\n\x10reset_to_default\x18\x03 \x01(\x08H\x00\x42\x0b\n\toperation\"\xfe\x01\n\x1b\x45ventsConfigurationResponse\x12\x1b\n\x06status\x18\x01 \x01(\x0e\x32\x0b.dmi.Status\x12\x37\n\x06reason\x18\x02 \x01(\x0e\x32\'.dmi.EventsConfigurationResponse.Reason\x12\x15\n\rreason_detail\x18\x03 \x01(\t\"r\n\x06Reason\x12\x14\n\x10UNDEFINED_REASON\x10\x00\x12\x12\n\x0eUNKNOWN_DEVICE\x10\x01\x12\x12\n\x0eINTERNAL_ERROR\x10\x02\x12\x12\n\x0eINVALID_CONFIG\x10\x03\x12\x16\n\x12\x44\x45VICE_UNREACHABLE\x10\x04\"j\n\rEventMetaData\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\x12!\n\x0e\x63omponent_uuid\x18\x02 \x01(\x0b\x32\t.dmi.Uuid\x12\x16\n\x0e\x63omponent_name\x18\x03 \x01(\t\"\xc8\x01\n\x05\x45vent\x12*\n\x0e\x65vent_metadata\x18\x01 \x01(\x0b\x32\x12.dmi.EventMetaData\x12\x1f\n\x08\x65vent_id\x18\x02 \x01(\x0e\x32\r.dmi.EventIds\x12-\n\traised_ts\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x31\n\x0ethreshold_info\x18\x04 \x01(\x0b\x32\x19.dmi.ThresholdInformation\x12\x10\n\x08\x61\x64\x64_info\x18\x05 \x01(\t*\xee\x0e\n\x08\x45ventIds\x12\x18\n\x14\x45VENT_NAME_UNDEFINED\x10\x00\x12\x1e\n\x1a\x45VENT_TRANSCEIVER_PLUG_OUT\x10\x64\x12\x1d\n\x19\x45VENT_TRANSCEIVER_PLUG_IN\x10\x65\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD\x10\x66\x12-\n)EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD\x10g\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD\x10h\x12\x31\n-EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD\x10i\x12-\n)EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD\x10j\x12-\n)EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD\x10k\x12.\n*EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD\x10l\x12.\n*EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD\x10m\x12.\n*EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD\x10n\x12.\n*EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD\x10o\x12\x1d\n\x19\x45VENT_TRANSCEIVER_FAILURE\x10p\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_ABOVE_THRESHOLD_RECOVERED\x10q\x12\x37\n3EVENT_TRANSCEIVER_VOLTAGE_BELOW_THRESHOLD_RECOVERED\x10r\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_ABOVE_THRESHOLD_RECOVERED\x10s\x12;\n7EVENT_TRANSCEIVER_TEMPERATURE_BELOW_THRESHOLD_RECOVERED\x10t\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_ABOVE_THRESHOLD_RECOVERED\x10u\x12\x37\n3EVENT_TRANSCEIVER_CURRENT_BELOW_THRESHOLD_RECOVERED\x10v\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_ABOVE_THRESHOLD_RECOVERED\x10w\x12\x38\n4EVENT_TRANSCEIVER_RX_POWER_BELOW_THRESHOLD_RECOVERED\x10x\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_ABOVE_THRESHOLD_RECOVERED\x10y\x12\x38\n4EVENT_TRANSCEIVER_TX_POWER_BELOW_THRESHOLD_RECOVERED\x10z\x12\'\n#EVENT_TRANSCEIVER_FAILURE_RECOVERED\x10{\x12\x17\n\x12\x45VENT_PSU_PLUG_OUT\x10\xc8\x01\x12\x16\n\x11\x45VENT_PSU_PLUG_IN\x10\xc9\x01\x12\x16\n\x11\x45VENT_PSU_FAILURE\x10\xca\x01\x12 \n\x1b\x45VENT_PSU_FAILURE_RECOVERED\x10\xcb\x01\x12\x16\n\x11\x45VENT_FAN_FAILURE\x10\xac\x02\x12\x17\n\x12\x45VENT_FAN_PLUG_OUT\x10\xad\x02\x12\x16\n\x11\x45VENT_FAN_PLUG_IN\x10\xae\x02\x12 \n\x1b\x45VENT_FAN_FAILURE_RECOVERED\x10\xaf\x02\x12)\n$EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL\x10\x90\x03\x12&\n!EVENT_CPU_TEMPERATURE_ABOVE_FATAL\x10\x91\x03\x12\x33\n.EVENT_CPU_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\x92\x03\x12\x30\n+EVENT_CPU_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\x93\x03\x12\x1a\n\x15\x45VENT_HW_DEVICE_RESET\x10\xf4\x03\x12/\n*EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL\x10\xf5\x03\x12,\n\'EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL\x10\xf6\x03\x12\x39\n4EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED\x10\xf7\x03\x12\x36\n1EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED\x10\xf8\x03\x12\x1b\n\x16\x45VENT_HW_DEVICE_REBOOT\x10\xf9\x03\x32\xed\x01\n\x1dNativeEventsManagementService\x12\x36\n\nListEvents\x12\x0f.dmi.HardwareID\x1a\x17.dmi.ListEventsResponse\x12^\n\x19UpdateEventsConfiguration\x12\x1f.dmi.EventsConfigurationRequest\x1a .dmi.EventsConfigurationResponse\x12\x34\n\x0cStreamEvents\x12\x16.google.protobuf.Empty\x1a\n.dmi.Event0\x01\x42;Z9github.com/opencord/device-management-interface/v3/go/dmib\x06proto3'
   ,
   dependencies=[dmi_dot_commons__pb2.DESCRIPTOR,dmi_dot_hw__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,])
 
@@ -245,11 +245,16 @@
       serialized_options=None,
       type=None,
       create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='EVENT_HW_DEVICE_REBOOT', index=42, number=505,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
   ],
   containing_type=None,
   serialized_options=None,
   serialized_start=1592,
-  serialized_end=3465,
+  serialized_end=3494,
 )
 _sym_db.RegisterEnumDescriptor(_EVENTIDS)
 
@@ -296,6 +301,7 @@
 EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL = 502
 EVENT_HW_DEVICE_TEMPERATURE_ABOVE_CRITICAL_RECOVERED = 503
 EVENT_HW_DEVICE_TEMPERATURE_ABOVE_FATAL_RECOVERED = 504
+EVENT_HW_DEVICE_REBOOT = 505
 
 
 _LISTEVENTSRESPONSE_REASON = _descriptor.EnumDescriptor(
@@ -1028,8 +1034,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=3468,
-  serialized_end=3705,
+  serialized_start=3497,
+  serialized_end=3734,
   methods=[
   _descriptor.MethodDescriptor(
     name='ListEvents',
diff --git a/python/dmi/hw_management_service_pb2.py b/python/dmi/hw_management_service_pb2.py
index bdf8fcd..9970ac0 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.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'
+  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\"5\n\x13RebootDeviceRequest\x12\x1e\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\t.dmi.Uuid\"\xdc\x01\n\x14RebootDeviceResponse\x12\x1b\n\x06status\x18\x03 \x01(\x0e\x32\x0b.dmi.Status\x12\x30\n\x06reason\x18\x04 \x01(\x0e\x32 .dmi.RebootDeviceResponse.Reason\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\x32\xae\t\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.Heartbeat\x12\x43\n\x0cRebootDevice\x12\x18.dmi.RebootDeviceRequest\x1a\x19.dmi.RebootDeviceResponseB;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,])
 
@@ -433,6 +433,41 @@
 )
 _sym_db.RegisterEnumDescriptor(_GETLOGLEVELRESPONSE_REASON)
 
+_REBOOTDEVICERESPONSE_REASON = _descriptor.EnumDescriptor(
+  name='Reason',
+  full_name='dmi.RebootDeviceResponse.Reason',
+  filename=None,
+  file=DESCRIPTOR,
+  create_key=_descriptor._internal_create_key,
+  values=[
+    _descriptor.EnumValueDescriptor(
+      name='UNDEFINED_REASON', index=0, number=0,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='UNKNOWN_DEVICE', index=1, number=1,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='INTERNAL_ERROR', index=2, number=2,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+    _descriptor.EnumValueDescriptor(
+      name='DEVICE_UNREACHABLE', index=3, number=3,
+      serialized_options=None,
+      type=None,
+      create_key=_descriptor._internal_create_key),
+  ],
+  containing_type=None,
+  serialized_options=None,
+  serialized_start=333,
+  serialized_end=427,
+)
+_sym_db.RegisterEnumDescriptor(_REBOOTDEVICERESPONSE_REASON)
+
 
 _PHYSICALINVENTORYREQUEST = _descriptor.Descriptor(
   name='PhysicalInventoryRequest',
@@ -1474,6 +1509,85 @@
   serialized_end=4076,
 )
 
+
+_REBOOTDEVICEREQUEST = _descriptor.Descriptor(
+  name='RebootDeviceRequest',
+  full_name='dmi.RebootDeviceRequest',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='device_uuid', full_name='dmi.RebootDeviceRequest.device_uuid', index=0,
+      number=1, type=11, cpp_type=10, label=1,
+      has_default_value=False, default_value=None,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=4078,
+  serialized_end=4131,
+)
+
+
+_REBOOTDEVICERESPONSE = _descriptor.Descriptor(
+  name='RebootDeviceResponse',
+  full_name='dmi.RebootDeviceResponse',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  create_key=_descriptor._internal_create_key,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='status', full_name='dmi.RebootDeviceResponse.status', index=0,
+      number=3, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='reason', full_name='dmi.RebootDeviceResponse.reason', index=1,
+      number=4, type=14, cpp_type=8, label=1,
+      has_default_value=False, default_value=0,
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+    _descriptor.FieldDescriptor(
+      name='reason_detail', full_name='dmi.RebootDeviceResponse.reason_detail', index=2,
+      number=5, type=9, cpp_type=9, label=1,
+      has_default_value=False, default_value=b"".decode('utf-8'),
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+    _REBOOTDEVICERESPONSE_REASON,
+  ],
+  serialized_options=None,
+  is_extendable=False,
+  syntax='proto3',
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=4134,
+  serialized_end=4354,
+)
+
 _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
@@ -1528,6 +1642,10 @@
 _GETLOGLEVELRESPONSE.fields_by_name['reason'].enum_type = _GETLOGLEVELRESPONSE_REASON
 _GETLOGLEVELRESPONSE_REASON.containing_type = _GETLOGLEVELRESPONSE
 _GETLOGGABLEENTITIESREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_REBOOTDEVICEREQUEST.fields_by_name['device_uuid'].message_type = dmi_dot_hw__pb2._UUID
+_REBOOTDEVICERESPONSE.fields_by_name['status'].enum_type = dmi_dot_commons__pb2._STATUS
+_REBOOTDEVICERESPONSE.fields_by_name['reason'].enum_type = _REBOOTDEVICERESPONSE_REASON
+_REBOOTDEVICERESPONSE_REASON.containing_type = _REBOOTDEVICERESPONSE
 DESCRIPTOR.message_types_by_name['PhysicalInventoryRequest'] = _PHYSICALINVENTORYREQUEST
 DESCRIPTOR.message_types_by_name['PhysicalInventoryResponse'] = _PHYSICALINVENTORYRESPONSE
 DESCRIPTOR.message_types_by_name['HWComponentInfoGetRequest'] = _HWCOMPONENTINFOGETREQUEST
@@ -1551,6 +1669,8 @@
 DESCRIPTOR.message_types_by_name['GetLogLevelResponse'] = _GETLOGLEVELRESPONSE
 DESCRIPTOR.message_types_by_name['GetLoggableEntitiesRequest'] = _GETLOGGABLEENTITIESREQUEST
 DESCRIPTOR.message_types_by_name['Heartbeat'] = _HEARTBEAT
+DESCRIPTOR.message_types_by_name['RebootDeviceRequest'] = _REBOOTDEVICEREQUEST
+DESCRIPTOR.message_types_by_name['RebootDeviceResponse'] = _REBOOTDEVICERESPONSE
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
 PhysicalInventoryRequest = _reflection.GeneratedProtocolMessageType('PhysicalInventoryRequest', (_message.Message,), {
@@ -1714,6 +1834,20 @@
   })
 _sym_db.RegisterMessage(Heartbeat)
 
+RebootDeviceRequest = _reflection.GeneratedProtocolMessageType('RebootDeviceRequest', (_message.Message,), {
+  'DESCRIPTOR' : _REBOOTDEVICEREQUEST,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.RebootDeviceRequest)
+  })
+_sym_db.RegisterMessage(RebootDeviceRequest)
+
+RebootDeviceResponse = _reflection.GeneratedProtocolMessageType('RebootDeviceResponse', (_message.Message,), {
+  'DESCRIPTOR' : _REBOOTDEVICERESPONSE,
+  '__module__' : 'dmi.hw_management_service_pb2'
+  # @@protoc_insertion_point(class_scope:dmi.RebootDeviceResponse)
+  })
+_sym_db.RegisterMessage(RebootDeviceResponse)
+
 
 DESCRIPTOR._options = None
 
@@ -1724,8 +1858,8 @@
   index=0,
   serialized_options=None,
   create_key=_descriptor._internal_create_key,
-  serialized_start=4079,
-  serialized_end=5208,
+  serialized_start=4357,
+  serialized_end=5555,
   methods=[
   _descriptor.MethodDescriptor(
     name='StartManagingDevice',
@@ -1867,6 +2001,16 @@
     serialized_options=None,
     create_key=_descriptor._internal_create_key,
   ),
+  _descriptor.MethodDescriptor(
+    name='RebootDevice',
+    full_name='dmi.NativeHWManagementService.RebootDevice',
+    index=14,
+    containing_service=None,
+    input_type=_REBOOTDEVICEREQUEST,
+    output_type=_REBOOTDEVICERESPONSE,
+    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 89a08ad..3e78fa1 100644
--- a/python/dmi/hw_management_service_pb2_grpc.py
+++ b/python/dmi/hw_management_service_pb2_grpc.py
@@ -86,6 +86,11 @@
                 request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString,
                 response_deserializer=dmi_dot_hw__management__service__pb2.Heartbeat.FromString,
                 )
+        self.RebootDevice = channel.unary_unary(
+                '/dmi.NativeHWManagementService/RebootDevice',
+                request_serializer=dmi_dot_hw__management__service__pb2.RebootDeviceRequest.SerializeToString,
+                response_deserializer=dmi_dot_hw__management__service__pb2.RebootDeviceResponse.FromString,
+                )
 
 
 class NativeHWManagementServiceServicer(object):
@@ -204,6 +209,13 @@
         context.set_details('Method not implemented!')
         raise NotImplementedError('Method not implemented!')
 
+    def RebootDevice(self, request, context):
+        """Performs the reboot of the device
+        """
+        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 = {
@@ -277,6 +289,11 @@
                     request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString,
                     response_serializer=dmi_dot_hw__management__service__pb2.Heartbeat.SerializeToString,
             ),
+            'RebootDevice': grpc.unary_unary_rpc_method_handler(
+                    servicer.RebootDevice,
+                    request_deserializer=dmi_dot_hw__management__service__pb2.RebootDeviceRequest.FromString,
+                    response_serializer=dmi_dot_hw__management__service__pb2.RebootDeviceResponse.SerializeToString,
+            ),
     }
     generic_handler = grpc.method_handlers_generic_handler(
             'dmi.NativeHWManagementService', rpc_method_handlers)
@@ -524,3 +541,20 @@
             dmi_dot_hw__management__service__pb2.Heartbeat.FromString,
             options, channel_credentials,
             insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def RebootDevice(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/RebootDevice',
+            dmi_dot_hw__management__service__pb2.RebootDeviceRequest.SerializeToString,
+            dmi_dot_hw__management__service__pb2.RebootDeviceResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
