VOL-4098 reboot device and reboot event

Change-Id: Iaa7599cdc31ff3f48c73ee7000c80f971d7325bf
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)