diff --git a/go/dmi/sw_management_service.pb.go b/go/dmi/sw_management_service.pb.go
index db176be..fde093c 100644
--- a/go/dmi/sw_management_service.pb.go
+++ b/go/dmi/sw_management_service.pb.go
@@ -126,6 +126,77 @@
 	return fileDescriptor_000929e4bec891d7, []int{6, 0}
 }
 
+type UploadDebugInfoStatus_UploadStatus int32
+
+const (
+	UploadDebugInfoStatus_UNDEFINED_UPLOAD_STATUS UploadDebugInfoStatus_UploadStatus = 0
+	UploadDebugInfoStatus_COMPLETE                UploadDebugInfoStatus_UploadStatus = 1
+	UploadDebugInfoStatus_IN_PROGRESS             UploadDebugInfoStatus_UploadStatus = 2
+	UploadDebugInfoStatus_ERROR                   UploadDebugInfoStatus_UploadStatus = 3
+)
+
+var UploadDebugInfoStatus_UploadStatus_name = map[int32]string{
+	0: "UNDEFINED_UPLOAD_STATUS",
+	1: "COMPLETE",
+	2: "IN_PROGRESS",
+	3: "ERROR",
+}
+
+var UploadDebugInfoStatus_UploadStatus_value = map[string]int32{
+	"UNDEFINED_UPLOAD_STATUS": 0,
+	"COMPLETE":                1,
+	"IN_PROGRESS":             2,
+	"ERROR":                   3,
+}
+
+func (x UploadDebugInfoStatus_UploadStatus) String() string {
+	return proto.EnumName(UploadDebugInfoStatus_UploadStatus_name, int32(x))
+}
+
+func (UploadDebugInfoStatus_UploadStatus) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_000929e4bec891d7, []int{8, 0}
+}
+
+type UploadDebugInfoStatus_Reason int32
+
+const (
+	UploadDebugInfoStatus_UNDEFINED_REASON                  UploadDebugInfoStatus_Reason = 0
+	UploadDebugInfoStatus_UNKNOWN_DEVICE                    UploadDebugInfoStatus_Reason = 1
+	UploadDebugInfoStatus_INTERNAL_ERROR                    UploadDebugInfoStatus_Reason = 2
+	UploadDebugInfoStatus_DEVICE_UNREACHABLE                UploadDebugInfoStatus_Reason = 3
+	UploadDebugInfoStatus_REMOTE_LOCATION_UNREACHABLE       UploadDebugInfoStatus_Reason = 4
+	UploadDebugInfoStatus_REMOTE_LOCATION_PERMISSION_DENIED UploadDebugInfoStatus_Reason = 5
+	UploadDebugInfoStatus_ERROR_DURING_UPLOAD               UploadDebugInfoStatus_Reason = 6
+)
+
+var UploadDebugInfoStatus_Reason_name = map[int32]string{
+	0: "UNDEFINED_REASON",
+	1: "UNKNOWN_DEVICE",
+	2: "INTERNAL_ERROR",
+	3: "DEVICE_UNREACHABLE",
+	4: "REMOTE_LOCATION_UNREACHABLE",
+	5: "REMOTE_LOCATION_PERMISSION_DENIED",
+	6: "ERROR_DURING_UPLOAD",
+}
+
+var UploadDebugInfoStatus_Reason_value = map[string]int32{
+	"UNDEFINED_REASON":                  0,
+	"UNKNOWN_DEVICE":                    1,
+	"INTERNAL_ERROR":                    2,
+	"DEVICE_UNREACHABLE":                3,
+	"REMOTE_LOCATION_UNREACHABLE":       4,
+	"REMOTE_LOCATION_PERMISSION_DENIED": 5,
+	"ERROR_DURING_UPLOAD":               6,
+}
+
+func (x UploadDebugInfoStatus_Reason) String() string {
+	return proto.EnumName(UploadDebugInfoStatus_Reason_name, int32(x))
+}
+
+func (UploadDebugInfoStatus_Reason) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_000929e4bec891d7, []int{8, 1}
+}
+
 type SoftwareVersionInformation struct {
 	ActiveVersions       []*ImageVersion `protobuf:"bytes,1,rep,name=active_versions,json=activeVersions,proto3" json:"active_versions,omitempty"`
 	StandbyVersions      []*ImageVersion `protobuf:"bytes,2,rep,name=standby_versions,json=standbyVersions,proto3" json:"standby_versions,omitempty"`
@@ -503,10 +574,150 @@
 	return ""
 }
 
+type UploadDebugInfoRequest struct {
+	DeviceUuid *Uuid `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	// location_url is the remote location where the information needed for troubleshooting should be uploaded.
+	// Authentication (user/pass) if any should be in the location_url string
+	// The locaion_url would contain the protocol, credentials, the IP address/DNS of the server and the path of the directory
+	// e.g. sftp://upload_user:upload_pass@192.168.0.1:22/hw_debug_info/
+	LocationUrl          string   `protobuf:"bytes,3,opt,name=location_url,json=locationUrl,proto3" json:"location_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UploadDebugInfoRequest) Reset()         { *m = UploadDebugInfoRequest{} }
+func (m *UploadDebugInfoRequest) String() string { return proto.CompactTextString(m) }
+func (*UploadDebugInfoRequest) ProtoMessage()    {}
+func (*UploadDebugInfoRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_000929e4bec891d7, []int{7}
+}
+
+func (m *UploadDebugInfoRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadDebugInfoRequest.Unmarshal(m, b)
+}
+func (m *UploadDebugInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadDebugInfoRequest.Marshal(b, m, deterministic)
+}
+func (m *UploadDebugInfoRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadDebugInfoRequest.Merge(m, src)
+}
+func (m *UploadDebugInfoRequest) XXX_Size() int {
+	return xxx_messageInfo_UploadDebugInfoRequest.Size(m)
+}
+func (m *UploadDebugInfoRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadDebugInfoRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadDebugInfoRequest proto.InternalMessageInfo
+
+func (m *UploadDebugInfoRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *UploadDebugInfoRequest) GetLocationUrl() string {
+	if m != nil {
+		return m.LocationUrl
+	}
+	return ""
+}
+
+// Implementations would be expected to stream multiple UploadDebugInfoStatus indicating the progress of the upload
+type UploadDebugInfoStatus struct {
+	DeviceUuid *Uuid                              `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	Status     UploadDebugInfoStatus_UploadStatus `protobuf:"varint,2,opt,name=status,proto3,enum=dmi.UploadDebugInfoStatus_UploadStatus" json:"status,omitempty"`
+	// percent_uploaded is the percentage of the upload that is done
+	// should be a value between 0 and 100 when status is IN_PROGRESS
+	// should be 100 when status is COMPLETE
+	// can be set to -1 if the device manager implementations cannot support
+	// the progress percentage
+	PercentUploaded int32                        `protobuf:"varint,3,opt,name=percent_uploaded,json=percentUploaded,proto3" json:"percent_uploaded,omitempty"`
+	Reason          UploadDebugInfoStatus_Reason `protobuf:"varint,4,opt,name=reason,proto3,enum=dmi.UploadDebugInfoStatus_Reason" json:"reason,omitempty"`
+	LocationUrl     string                       `protobuf:"bytes,5,opt,name=location_url,json=locationUrl,proto3" json:"location_url,omitempty"`
+	// file_name is the file at location_url where the debug information was uploaded.
+	// Implementations need to ensure that file_name is unique at the remote location.
+	FileName             string   `protobuf:"bytes,6,opt,name=file_name,json=fileName,proto3" json:"file_name,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *UploadDebugInfoStatus) Reset()         { *m = UploadDebugInfoStatus{} }
+func (m *UploadDebugInfoStatus) String() string { return proto.CompactTextString(m) }
+func (*UploadDebugInfoStatus) ProtoMessage()    {}
+func (*UploadDebugInfoStatus) Descriptor() ([]byte, []int) {
+	return fileDescriptor_000929e4bec891d7, []int{8}
+}
+
+func (m *UploadDebugInfoStatus) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_UploadDebugInfoStatus.Unmarshal(m, b)
+}
+func (m *UploadDebugInfoStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_UploadDebugInfoStatus.Marshal(b, m, deterministic)
+}
+func (m *UploadDebugInfoStatus) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_UploadDebugInfoStatus.Merge(m, src)
+}
+func (m *UploadDebugInfoStatus) XXX_Size() int {
+	return xxx_messageInfo_UploadDebugInfoStatus.Size(m)
+}
+func (m *UploadDebugInfoStatus) XXX_DiscardUnknown() {
+	xxx_messageInfo_UploadDebugInfoStatus.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_UploadDebugInfoStatus proto.InternalMessageInfo
+
+func (m *UploadDebugInfoStatus) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *UploadDebugInfoStatus) GetStatus() UploadDebugInfoStatus_UploadStatus {
+	if m != nil {
+		return m.Status
+	}
+	return UploadDebugInfoStatus_UNDEFINED_UPLOAD_STATUS
+}
+
+func (m *UploadDebugInfoStatus) GetPercentUploaded() int32 {
+	if m != nil {
+		return m.PercentUploaded
+	}
+	return 0
+}
+
+func (m *UploadDebugInfoStatus) GetReason() UploadDebugInfoStatus_Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return UploadDebugInfoStatus_UNDEFINED_REASON
+}
+
+func (m *UploadDebugInfoStatus) GetLocationUrl() string {
+	if m != nil {
+		return m.LocationUrl
+	}
+	return ""
+}
+
+func (m *UploadDebugInfoStatus) GetFileName() string {
+	if m != nil {
+		return m.FileName
+	}
+	return ""
+}
+
 func init() {
 	proto.RegisterEnum("dmi.GetSoftwareVersionInformationResponse_Reason", GetSoftwareVersionInformationResponse_Reason_name, GetSoftwareVersionInformationResponse_Reason_value)
 	proto.RegisterEnum("dmi.ConfigResponse_Reason", ConfigResponse_Reason_name, ConfigResponse_Reason_value)
 	proto.RegisterEnum("dmi.StartupConfigInfoResponse_Reason", StartupConfigInfoResponse_Reason_name, StartupConfigInfoResponse_Reason_value)
+	proto.RegisterEnum("dmi.UploadDebugInfoStatus_UploadStatus", UploadDebugInfoStatus_UploadStatus_name, UploadDebugInfoStatus_UploadStatus_value)
+	proto.RegisterEnum("dmi.UploadDebugInfoStatus_Reason", UploadDebugInfoStatus_Reason_name, UploadDebugInfoStatus_Reason_value)
 	proto.RegisterType((*SoftwareVersionInformation)(nil), "dmi.SoftwareVersionInformation")
 	proto.RegisterType((*GetSoftwareVersionInformationResponse)(nil), "dmi.GetSoftwareVersionInformationResponse")
 	proto.RegisterType((*DownloadImageRequest)(nil), "dmi.DownloadImageRequest")
@@ -514,63 +725,79 @@
 	proto.RegisterType((*ConfigResponse)(nil), "dmi.ConfigResponse")
 	proto.RegisterType((*StartupConfigInfoRequest)(nil), "dmi.StartupConfigInfoRequest")
 	proto.RegisterType((*StartupConfigInfoResponse)(nil), "dmi.StartupConfigInfoResponse")
+	proto.RegisterType((*UploadDebugInfoRequest)(nil), "dmi.UploadDebugInfoRequest")
+	proto.RegisterType((*UploadDebugInfoStatus)(nil), "dmi.UploadDebugInfoStatus")
 }
 
 func init() { proto.RegisterFile("dmi/sw_management_service.proto", fileDescriptor_000929e4bec891d7) }
 
 var fileDescriptor_000929e4bec891d7 = []byte{
-	// 804 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xed, 0x6e, 0xe3, 0x44,
-	0x14, 0xc5, 0x71, 0x37, 0x28, 0x37, 0xdb, 0xd6, 0x3b, 0x74, 0x51, 0x1a, 0x54, 0x5a, 0xbc, 0x5a,
-	0xa9, 0x5a, 0x69, 0x93, 0x25, 0xdd, 0x3f, 0xb0, 0x80, 0xe4, 0x8d, 0xdd, 0xd4, 0xa2, 0x38, 0xcb,
-	0xb8, 0x29, 0x62, 0x85, 0x18, 0x4d, 0xe3, 0x49, 0x76, 0xa4, 0xda, 0x13, 0xec, 0x71, 0x0a, 0x2f,
-	0xc2, 0x73, 0xf0, 0x02, 0xfc, 0xe0, 0x05, 0x90, 0x78, 0x23, 0xe4, 0x19, 0x87, 0x90, 0x2f, 0xb4,
-	0xad, 0xd0, 0xfe, 0xb3, 0xef, 0xdc, 0x73, 0x66, 0xe6, 0x9e, 0x7b, 0xcf, 0xc0, 0x61, 0x14, 0xf3,
-	0x76, 0x76, 0x43, 0x62, 0x9a, 0xd0, 0x31, 0x8b, 0x59, 0x22, 0x49, 0xc6, 0xd2, 0x29, 0x1f, 0xb2,
-	0xd6, 0x24, 0x15, 0x52, 0x20, 0x33, 0x8a, 0x79, 0xf3, 0x41, 0x91, 0x35, 0x14, 0x71, 0x2c, 0x92,
-	0x4c, 0xc7, 0x9b, 0xf7, 0x8b, 0xd0, 0x9b, 0x9b, 0xf2, 0x0f, 0x95, 0x34, 0x3c, 0xa6, 0xe3, 0x12,
-	0x69, 0xff, 0x6a, 0x40, 0x33, 0x14, 0x23, 0x79, 0x43, 0x53, 0x76, 0xc9, 0xd2, 0x8c, 0x8b, 0xc4,
-	0x4f, 0x46, 0x22, 0x8d, 0xa9, 0xe4, 0x22, 0x41, 0x9f, 0xc3, 0x2e, 0x1d, 0x4a, 0x3e, 0x65, 0x64,
-	0xaa, 0x17, 0xb3, 0x86, 0x71, 0x64, 0x1e, 0xd7, 0x3b, 0x0f, 0x5a, 0x51, 0xcc, 0x5b, 0x7e, 0xc1,
-	0x54, 0xc2, 0xf0, 0x8e, 0xce, 0x2c, 0x7f, 0x33, 0xf4, 0x05, 0x58, 0x99, 0xa4, 0x49, 0x74, 0xf5,
-	0xcb, 0x1c, 0x5c, 0xd9, 0x04, 0xde, 0x2d, 0x53, 0x67, 0x68, 0xfb, 0xaf, 0x0a, 0x3c, 0xee, 0x31,
-	0xb9, 0xf9, 0x6c, 0x98, 0x65, 0x13, 0x91, 0x64, 0x0c, 0x3d, 0x82, 0x6a, 0x26, 0xa9, 0xcc, 0x8b,
-	0xa3, 0x19, 0xc7, 0x3b, 0x9d, 0xba, 0x62, 0x0f, 0x55, 0x08, 0x97, 0x4b, 0xc8, 0x87, 0x6a, 0xca,
-	0x68, 0x26, 0x92, 0x46, 0x45, 0x25, 0x7d, 0xaa, 0x92, 0xde, 0x6a, 0x83, 0x16, 0x56, 0x40, 0x5c,
-	0x12, 0xa0, 0x13, 0xd8, 0xe2, 0xc9, 0x48, 0x34, 0xcc, 0x23, 0xe3, 0xb8, 0xde, 0x39, 0xd4, 0xbb,
-	0x6d, 0x66, 0x51, 0xc9, 0xe8, 0x11, 0x6c, 0x6b, 0x38, 0x89, 0x98, 0xa4, 0xfc, 0xba, 0xb1, 0x75,
-	0x64, 0x1c, 0xd7, 0xf0, 0x7d, 0x1d, 0x74, 0x55, 0xcc, 0xfe, 0x11, 0xaa, 0x7a, 0x2f, 0xb4, 0x07,
-	0xd6, 0x20, 0x70, 0xbd, 0x53, 0x3f, 0xf0, 0x5c, 0x82, 0x3d, 0x27, 0xec, 0x07, 0xd6, 0x7b, 0x08,
-	0xc1, 0xce, 0x20, 0xf8, 0x3a, 0xe8, 0x7f, 0x17, 0x10, 0xd7, 0xbb, 0xf4, 0xbb, 0x9e, 0x65, 0x14,
-	0x31, 0x3f, 0xb8, 0xf0, 0x70, 0xe0, 0x9c, 0x13, 0x0f, 0xe3, 0x3e, 0xb6, 0x2a, 0xe8, 0x43, 0x40,
-	0x7a, 0x9d, 0x0c, 0x02, 0xec, 0x39, 0xdd, 0x33, 0xe7, 0xe5, 0xb9, 0x67, 0x99, 0xf6, 0xcf, 0xb0,
-	0xe7, 0x8a, 0x9b, 0xe4, 0x5a, 0xd0, 0x48, 0x15, 0x1f, 0xb3, 0x9f, 0x72, 0x96, 0x49, 0xf4, 0x04,
-	0xea, 0x11, 0x2b, 0xda, 0x89, 0xe4, 0x39, 0x8f, 0x54, 0x19, 0xeb, 0x9d, 0x9a, 0xba, 0xd8, 0x20,
-	0xe7, 0x11, 0x06, 0xbd, 0x5a, 0x7c, 0xa3, 0xe7, 0x00, 0xaa, 0x7f, 0x88, 0xaa, 0x41, 0x45, 0xa5,
-	0x3e, 0x9c, 0xeb, 0xf9, 0xef, 0x9b, 0xd7, 0xf8, 0x2c, 0x62, 0xbf, 0x86, 0xed, 0xae, 0x48, 0x46,
-	0x7c, 0x7c, 0x97, 0x2d, 0x0f, 0x00, 0x86, 0x0a, 0x4c, 0xf2, 0xf4, 0x5a, 0x6d, 0x59, 0xc3, 0x35,
-	0x1d, 0x19, 0xa4, 0xd7, 0xf6, 0x1f, 0x15, 0xd8, 0x99, 0x91, 0xdf, 0xa6, 0x25, 0x3a, 0x4b, 0x2d,
-	0xd1, 0x54, 0x49, 0x8b, 0x4c, 0xcb, 0xda, 0xaf, 0xc8, 0x68, 0xae, 0x91, 0xf1, 0x37, 0xe3, 0x7f,
-	0xd2, 0x71, 0x1f, 0x1e, 0xaa, 0x4f, 0x72, 0xea, 0x5d, 0x74, 0xcf, 0xfc, 0xa0, 0x47, 0xba, 0xfd,
-	0xe0, 0xd4, 0xef, 0x59, 0xa6, 0x4e, 0xbf, 0x74, 0xce, 0x7d, 0x77, 0x16, 0xdb, 0x42, 0x9f, 0xc0,
-	0x41, 0xff, 0x95, 0x87, 0x9d, 0x0b, 0xbf, 0x1f, 0x10, 0xe7, 0x1c, 0x7b, 0x8e, 0xfb, 0x3d, 0xf1,
-	0x03, 0xf2, 0x0a, 0xf7, 0x7b, 0xd8, 0x0b, 0x43, 0xeb, 0xde, 0x86, 0xce, 0xa8, 0xda, 0xa7, 0xd0,
-	0x08, 0x25, 0x4d, 0x65, 0x3e, 0xd1, 0xf7, 0x2f, 0x44, 0xbb, 0x83, 0x54, 0xf6, 0xef, 0x15, 0xd8,
-	0x5f, 0x43, 0x74, 0x1b, 0x59, 0xbe, 0x5c, 0x92, 0xe5, 0xf1, 0x2c, 0x69, 0x3d, 0xe9, 0xb2, 0x42,
-	0x8b, 0xcd, 0x62, 0x2e, 0x35, 0x0b, 0x6a, 0xc0, 0xfb, 0xa5, 0x19, 0x95, 0x13, 0x38, 0xfb, 0x5d,
-	0x95, 0xf6, 0xde, 0xbb, 0x9f, 0xd0, 0xce, 0x9f, 0x26, 0x1c, 0x06, 0xb4, 0xb0, 0xd1, 0x99, 0xa3,
-	0x7c, 0xf3, 0x8f, 0xe7, 0x87, 0xda, 0xf2, 0xd1, 0xb7, 0x80, 0x56, 0x7d, 0x0b, 0xed, 0xaa, 0x32,
-	0x9d, 0xd1, 0x34, 0x2a, 0xa2, 0xbe, 0xdb, 0x7c, 0xf2, 0xf6, 0x0e, 0x87, 0xbe, 0x82, 0xed, 0x05,
-	0x63, 0x40, 0xfb, 0x0a, 0xbc, 0xce, 0x2c, 0x9a, 0xd6, 0x7c, 0xd8, 0xb5, 0x72, 0xcf, 0x0c, 0xf4,
-	0x1c, 0xb6, 0x9d, 0xc2, 0xfc, 0xa9, 0x64, 0x1a, 0xbf, 0x72, 0x9a, 0x75, 0xa8, 0x17, 0xb0, 0x87,
-	0xd9, 0x94, 0xa5, 0xf2, 0x42, 0x84, 0xda, 0xfd, 0x6f, 0x01, 0xee, 0x41, 0x73, 0x30, 0x89, 0xa8,
-	0x64, 0x0b, 0x9d, 0x91, 0xa7, 0xfa, 0xdd, 0x42, 0x0b, 0xb3, 0xac, 0x0f, 0xfe, 0xc1, 0x9a, 0xf9,
-	0x7e, 0x66, 0xa0, 0x1f, 0xe0, 0xa3, 0xa2, 0x48, 0x6b, 0x58, 0x8a, 0x4a, 0xa1, 0x83, 0x4d, 0xed,
-	0xa7, 0x49, 0x3f, 0xfe, 0xef, 0xee, 0x7c, 0xf9, 0xe2, 0xf5, 0x67, 0x63, 0x2e, 0xdf, 0xe4, 0x57,
-	0xad, 0xa1, 0x88, 0xdb, 0x62, 0xc2, 0x92, 0xa1, 0x48, 0xa3, 0xb6, 0x1e, 0x99, 0xa7, 0xf3, 0x07,
-	0xfd, 0x29, 0x4f, 0x24, 0x4b, 0x47, 0x74, 0xc8, 0xda, 0xd3, 0x93, 0xf6, 0x58, 0xb4, 0xa3, 0x98,
-	0x5f, 0x55, 0xd5, 0x1b, 0x7d, 0xf2, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdd, 0xa9, 0x07, 0xea,
-	0x00, 0x08, 0x00, 0x00,
+	// 1038 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x56, 0xeb, 0x4e, 0xe3, 0xc6,
+	0x17, 0x5f, 0xe7, 0xf6, 0xdf, 0x9c, 0x00, 0xf1, 0xce, 0xc2, 0x6e, 0x08, 0xe2, 0x0f, 0x78, 0x85,
+	0x4a, 0x57, 0x5a, 0x42, 0xc3, 0x7e, 0xd9, 0x6e, 0x2f, 0xf2, 0xc6, 0x06, 0xac, 0x06, 0x9b, 0x8e,
+	0x63, 0xaa, 0xae, 0xaa, 0x5a, 0x26, 0x9e, 0x64, 0x2d, 0xc5, 0x76, 0xea, 0x0b, 0xb4, 0x2f, 0xd2,
+	0x4f, 0x7d, 0x88, 0xbe, 0x40, 0x55, 0x55, 0x7d, 0x82, 0xbe, 0x51, 0x35, 0x33, 0x0e, 0x10, 0x27,
+	0x59, 0x2d, 0xa8, 0x55, 0xbf, 0xd9, 0xbf, 0x39, 0x97, 0x99, 0xf3, 0x3b, 0x37, 0xd8, 0x72, 0x7d,
+	0xaf, 0x15, 0x5f, 0xd9, 0xbe, 0x13, 0x38, 0x43, 0xe2, 0x93, 0x20, 0xb1, 0x63, 0x12, 0x5d, 0x7a,
+	0x7d, 0xb2, 0x3f, 0x8e, 0xc2, 0x24, 0x44, 0x45, 0xd7, 0xf7, 0x9a, 0x8f, 0xa8, 0x54, 0x3f, 0xf4,
+	0xfd, 0x30, 0x88, 0x39, 0xde, 0x5c, 0xa2, 0xd0, 0xbb, 0xab, 0xec, 0x0f, 0x65, 0x66, 0x3c, 0xdf,
+	0x19, 0x66, 0x9a, 0xd2, 0xcf, 0x02, 0x34, 0xcd, 0x70, 0x90, 0x5c, 0x39, 0x11, 0x39, 0x27, 0x51,
+	0xec, 0x85, 0x81, 0x16, 0x0c, 0xc2, 0xc8, 0x77, 0x12, 0x2f, 0x0c, 0xd0, 0xa7, 0x50, 0x77, 0xfa,
+	0x89, 0x77, 0x49, 0xec, 0x4b, 0x7e, 0x18, 0x37, 0x84, 0xed, 0xe2, 0x5e, 0xad, 0xfd, 0x68, 0xdf,
+	0xf5, 0xbd, 0x7d, 0x8d, 0x5a, 0xca, 0xd4, 0xf0, 0x0a, 0x97, 0xcc, 0x7e, 0x63, 0xf4, 0x19, 0x88,
+	0x71, 0xe2, 0x04, 0xee, 0xc5, 0x4f, 0x37, 0xca, 0x85, 0x45, 0xca, 0xf5, 0x4c, 0x74, 0xa2, 0x2d,
+	0xfd, 0x55, 0x80, 0xdd, 0x63, 0x92, 0x2c, 0xbe, 0x1b, 0x26, 0xf1, 0x38, 0x0c, 0x62, 0x82, 0x9e,
+	0x41, 0x25, 0x4e, 0x9c, 0x24, 0xa5, 0x57, 0x13, 0xf6, 0x56, 0xda, 0x35, 0x66, 0xdd, 0x64, 0x10,
+	0xce, 0x8e, 0x90, 0x06, 0x95, 0x88, 0x38, 0x71, 0x18, 0x34, 0x0a, 0x4c, 0xe8, 0x13, 0x26, 0xf4,
+	0x41, 0x0e, 0xf6, 0x31, 0x53, 0xc4, 0x99, 0x01, 0x74, 0x08, 0x25, 0x2f, 0x18, 0x84, 0x8d, 0xe2,
+	0xb6, 0xb0, 0x57, 0x6b, 0x6f, 0x71, 0x6f, 0x8b, 0xad, 0x30, 0x61, 0xf4, 0x0c, 0x96, 0xb9, 0xba,
+	0xed, 0x92, 0xc4, 0xf1, 0x46, 0x8d, 0xd2, 0xb6, 0xb0, 0x57, 0xc5, 0x4b, 0x1c, 0x54, 0x18, 0x26,
+	0x7d, 0x0f, 0x15, 0xee, 0x0b, 0xad, 0x82, 0x68, 0xe9, 0x8a, 0x7a, 0xa4, 0xe9, 0xaa, 0x62, 0x63,
+	0x55, 0x36, 0x0d, 0x5d, 0x7c, 0x80, 0x10, 0xac, 0x58, 0xfa, 0x57, 0xba, 0xf1, 0x8d, 0x6e, 0x2b,
+	0xea, 0xb9, 0xd6, 0x51, 0x45, 0x81, 0x62, 0x9a, 0xde, 0x53, 0xb1, 0x2e, 0x77, 0x6d, 0x15, 0x63,
+	0x03, 0x8b, 0x05, 0xf4, 0x04, 0x10, 0x3f, 0xb7, 0x2d, 0x1d, 0xab, 0x72, 0xe7, 0x44, 0x7e, 0xd3,
+	0x55, 0xc5, 0xa2, 0xf4, 0x23, 0xac, 0x2a, 0xe1, 0x55, 0x30, 0x0a, 0x1d, 0x97, 0x05, 0x1f, 0x93,
+	0x1f, 0x52, 0x12, 0x27, 0xe8, 0x39, 0xd4, 0x5c, 0x42, 0xd3, 0xc9, 0x4e, 0x53, 0xcf, 0x65, 0x61,
+	0xac, 0xb5, 0xab, 0xec, 0x61, 0x56, 0xea, 0xb9, 0x18, 0xf8, 0x29, 0xfd, 0x46, 0x2f, 0x01, 0x58,
+	0xfe, 0xd8, 0x2c, 0x06, 0x05, 0x26, 0xba, 0x76, 0xc3, 0xe7, 0xed, 0x97, 0x57, 0xbd, 0x09, 0x22,
+	0xbd, 0x85, 0xe5, 0x4e, 0x18, 0x0c, 0xbc, 0xe1, 0x7d, 0x5c, 0x6e, 0x02, 0xf4, 0x99, 0xb2, 0x9d,
+	0x46, 0x23, 0xe6, 0xb2, 0x8a, 0xab, 0x1c, 0xb1, 0xa2, 0x91, 0xf4, 0x47, 0x01, 0x56, 0x26, 0xc6,
+	0xef, 0x92, 0x12, 0xed, 0x5c, 0x4a, 0x34, 0x99, 0xd0, 0xb4, 0xa5, 0x3c, 0xf7, 0x33, 0x34, 0x16,
+	0xe7, 0xd0, 0xf8, 0xab, 0xf0, 0x0f, 0xf1, 0xb8, 0x0e, 0x6b, 0xec, 0xd3, 0x3e, 0x52, 0x7b, 0x9d,
+	0x13, 0x4d, 0x3f, 0xb6, 0x3b, 0x86, 0x7e, 0xa4, 0x1d, 0x8b, 0x45, 0x2e, 0x7e, 0x2e, 0x77, 0x35,
+	0x65, 0x82, 0x95, 0xd0, 0x0e, 0x6c, 0x1a, 0x67, 0x2a, 0x96, 0x7b, 0x9a, 0xa1, 0xdb, 0x72, 0x17,
+	0xab, 0xb2, 0xf2, 0xad, 0xad, 0xe9, 0xf6, 0x19, 0x36, 0x8e, 0xb1, 0x6a, 0x9a, 0x62, 0x79, 0x41,
+	0x66, 0x54, 0xa4, 0x23, 0x68, 0x98, 0x89, 0x13, 0x25, 0xe9, 0x98, 0xbf, 0x9f, 0x92, 0x76, 0x0f,
+	0xaa, 0xa4, 0xdf, 0x0a, 0xb0, 0x3e, 0xc7, 0xd0, 0x5d, 0x68, 0xf9, 0x3c, 0x47, 0xcb, 0xee, 0x44,
+	0x68, 0xbe, 0xd1, 0x3c, 0x43, 0xd3, 0xc9, 0x52, 0xcc, 0x25, 0x0b, 0x6a, 0xc0, 0xff, 0xb2, 0x66,
+	0x94, 0x55, 0xe0, 0xe4, 0x77, 0x96, 0xda, 0xf2, 0x7f, 0x50, 0xa1, 0x43, 0x78, 0x62, 0x8d, 0x69,
+	0x7d, 0x2a, 0xe4, 0x22, 0xbd, 0x2f, 0x0b, 0x68, 0x07, 0x96, 0x46, 0x61, 0x9f, 0x15, 0xe1, 0xad,
+	0x28, 0xd4, 0x26, 0x18, 0x2d, 0x9a, 0x3f, 0x4b, 0xb0, 0x96, 0xf3, 0xc4, 0x79, 0xb8, 0x93, 0xa3,
+	0x2f, 0xaf, 0x09, 0xe5, 0x5c, 0x7d, 0xc4, 0xc5, 0xe6, 0xd9, 0xcd, 0xd0, 0x1c, 0xd9, 0x1f, 0x83,
+	0x38, 0x26, 0x51, 0x9f, 0x4e, 0xb4, 0x94, 0x9d, 0x13, 0x97, 0xdd, 0xb6, 0x8c, 0xeb, 0x19, 0x6e,
+	0x65, 0x30, 0x7a, 0x75, 0x9d, 0x17, 0x25, 0xe6, 0x6b, 0xe7, 0x3d, 0xbe, 0x72, 0x39, 0x91, 0x8f,
+	0x47, 0x79, 0x26, 0x1e, 0x68, 0x03, 0xaa, 0x03, 0x6f, 0x44, 0xec, 0xc0, 0xf1, 0x49, 0xa3, 0xc2,
+	0xce, 0x1f, 0x52, 0x40, 0x77, 0x7c, 0x22, 0x59, 0xb0, 0x74, 0xfb, 0xf6, 0x68, 0x03, 0x9e, 0xde,
+	0x70, 0x6f, 0x9d, 0x75, 0x0d, 0x59, 0xb1, 0xcd, 0x9e, 0xdc, 0xb3, 0x4c, 0xf1, 0x01, 0x5a, 0x82,
+	0x87, 0x1d, 0xe3, 0xf4, 0xac, 0xab, 0xf6, 0x28, 0xf9, 0x75, 0xa8, 0xdd, 0xae, 0xc0, 0x02, 0xaa,
+	0x42, 0x99, 0x27, 0x41, 0x51, 0xfa, 0x5d, 0xf8, 0x77, 0xb3, 0x09, 0x6d, 0xc1, 0x06, 0x56, 0x4f,
+	0x8d, 0x9e, 0x6a, 0x77, 0x8d, 0x0e, 0x6f, 0x0b, 0xb7, 0x05, 0x4a, 0x68, 0x17, 0x76, 0xf2, 0x02,
+	0x67, 0x2a, 0x3e, 0xd5, 0x4c, 0x93, 0x7e, 0x2a, 0xaa, 0xae, 0xa9, 0x8a, 0x58, 0x46, 0x4f, 0xe1,
+	0x31, 0xef, 0x43, 0x8a, 0x85, 0x69, 0x17, 0xe2, 0x4f, 0x16, 0x2b, 0xed, 0x5f, 0x4a, 0xb0, 0xa5,
+	0x3b, 0x74, 0xea, 0x4f, 0x06, 0xe0, 0xe9, 0xf5, 0x8a, 0x62, 0xf2, 0x0d, 0x05, 0x7d, 0x0d, 0x68,
+	0x76, 0xcc, 0xa2, 0x3a, 0x63, 0xef, 0xc4, 0x89, 0x5c, 0x8a, 0x6a, 0x4a, 0xf3, 0xf9, 0x87, 0x0f,
+	0x64, 0xf4, 0x05, 0x2c, 0x4f, 0xcd, 0x31, 0xb4, 0xce, 0x94, 0xe7, 0xcd, 0xb6, 0xa6, 0x78, 0x33,
+	0x9b, 0x38, 0x7b, 0x07, 0x02, 0x7a, 0x09, 0xcb, 0x32, 0xdd, 0x55, 0x9c, 0x84, 0x70, 0xfd, 0x99,
+	0xdb, 0xcc, 0xd3, 0x7a, 0x0d, 0xab, 0x98, 0x5c, 0x92, 0x28, 0xe9, 0xd1, 0x34, 0xa3, 0xcb, 0xca,
+	0x1d, 0x94, 0x8f, 0xa1, 0x69, 0x8d, 0x5d, 0x27, 0x21, 0x53, 0x8d, 0x2c, 0x8d, 0xf8, 0x9a, 0x85,
+	0xa6, 0x46, 0x0f, 0xbf, 0xf8, 0xe3, 0x39, 0xe3, 0xe8, 0x40, 0x40, 0xdf, 0xc1, 0x06, 0x0d, 0xd2,
+	0x1c, 0x2b, 0x34, 0x52, 0x68, 0x73, 0x51, 0xb7, 0xe4, 0x46, 0xff, 0xff, 0xfe, 0x66, 0x8a, 0xba,
+	0x50, 0xcf, 0x55, 0x14, 0xda, 0x98, 0x57, 0x67, 0x13, 0x7b, 0xcd, 0xc5, 0x45, 0x78, 0x20, 0xbc,
+	0x79, 0xfd, 0xf6, 0xd5, 0xd0, 0x4b, 0xde, 0xa5, 0x17, 0xfb, 0xfd, 0xd0, 0x6f, 0x85, 0x63, 0x12,
+	0xf4, 0xc3, 0xc8, 0x6d, 0xf1, 0x06, 0xf2, 0xe2, 0x66, 0x9b, 0x7d, 0xe1, 0x05, 0x09, 0x89, 0x06,
+	0x4e, 0x9f, 0xb4, 0x2e, 0x0f, 0x5b, 0xc3, 0xb0, 0xe5, 0xfa, 0xde, 0x45, 0x85, 0x2d, 0xa8, 0x87,
+	0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x46, 0xf6, 0xed, 0xb0, 0xfd, 0x0a, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -600,6 +827,8 @@
 	UpdateStartupConfiguration(ctx context.Context, in *ConfigRequest, opts ...grpc.CallOption) (NativeSoftwareManagementService_UpdateStartupConfigurationClient, error)
 	// This API can be used to retrieve information about the current startup configuration that a device is using
 	GetStartupConfigurationInfo(ctx context.Context, in *StartupConfigInfoRequest, opts ...grpc.CallOption) (*StartupConfigInfoResponse, error)
+	// This API can be used to upload to a remote location, information useful for troubleshooting problems on the hardware
+	UploadDebugInfo(ctx context.Context, in *UploadDebugInfoRequest, opts ...grpc.CallOption) (NativeSoftwareManagementService_UploadDebugInfoClient, error)
 }
 
 type nativeSoftwareManagementServiceClient struct {
@@ -756,6 +985,38 @@
 	return out, nil
 }
 
+func (c *nativeSoftwareManagementServiceClient) UploadDebugInfo(ctx context.Context, in *UploadDebugInfoRequest, opts ...grpc.CallOption) (NativeSoftwareManagementService_UploadDebugInfoClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_NativeSoftwareManagementService_serviceDesc.Streams[4], "/dmi.NativeSoftwareManagementService/UploadDebugInfo", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &nativeSoftwareManagementServiceUploadDebugInfoClient{stream}
+	if err := x.ClientStream.SendMsg(in); err != nil {
+		return nil, err
+	}
+	if err := x.ClientStream.CloseSend(); err != nil {
+		return nil, err
+	}
+	return x, nil
+}
+
+type NativeSoftwareManagementService_UploadDebugInfoClient interface {
+	Recv() (*UploadDebugInfoStatus, error)
+	grpc.ClientStream
+}
+
+type nativeSoftwareManagementServiceUploadDebugInfoClient struct {
+	grpc.ClientStream
+}
+
+func (x *nativeSoftwareManagementServiceUploadDebugInfoClient) Recv() (*UploadDebugInfoStatus, error) {
+	m := new(UploadDebugInfoStatus)
+	if err := x.ClientStream.RecvMsg(m); err != nil {
+		return nil, err
+	}
+	return m, nil
+}
+
 // NativeSoftwareManagementServiceServer is the server API for NativeSoftwareManagementService service.
 type NativeSoftwareManagementServiceServer interface {
 	// Get the software version information of the Active and Standby images
@@ -773,6 +1034,8 @@
 	UpdateStartupConfiguration(*ConfigRequest, NativeSoftwareManagementService_UpdateStartupConfigurationServer) error
 	// This API can be used to retrieve information about the current startup configuration that a device is using
 	GetStartupConfigurationInfo(context.Context, *StartupConfigInfoRequest) (*StartupConfigInfoResponse, error)
+	// This API can be used to upload to a remote location, information useful for troubleshooting problems on the hardware
+	UploadDebugInfo(*UploadDebugInfoRequest, NativeSoftwareManagementService_UploadDebugInfoServer) error
 }
 
 // UnimplementedNativeSoftwareManagementServiceServer can be embedded to have forward compatible implementations.
@@ -797,6 +1060,9 @@
 func (*UnimplementedNativeSoftwareManagementServiceServer) GetStartupConfigurationInfo(ctx context.Context, req *StartupConfigInfoRequest) (*StartupConfigInfoResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method GetStartupConfigurationInfo not implemented")
 }
+func (*UnimplementedNativeSoftwareManagementServiceServer) UploadDebugInfo(req *UploadDebugInfoRequest, srv NativeSoftwareManagementService_UploadDebugInfoServer) error {
+	return status.Errorf(codes.Unimplemented, "method UploadDebugInfo not implemented")
+}
 
 func RegisterNativeSoftwareManagementServiceServer(s *grpc.Server, srv NativeSoftwareManagementServiceServer) {
 	s.RegisterService(&_NativeSoftwareManagementService_serviceDesc, srv)
@@ -922,6 +1188,27 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _NativeSoftwareManagementService_UploadDebugInfo_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(UploadDebugInfoRequest)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(NativeSoftwareManagementServiceServer).UploadDebugInfo(m, &nativeSoftwareManagementServiceUploadDebugInfoServer{stream})
+}
+
+type NativeSoftwareManagementService_UploadDebugInfoServer interface {
+	Send(*UploadDebugInfoStatus) error
+	grpc.ServerStream
+}
+
+type nativeSoftwareManagementServiceUploadDebugInfoServer struct {
+	grpc.ServerStream
+}
+
+func (x *nativeSoftwareManagementServiceUploadDebugInfoServer) Send(m *UploadDebugInfoStatus) error {
+	return x.ServerStream.SendMsg(m)
+}
+
 var _NativeSoftwareManagementService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "dmi.NativeSoftwareManagementService",
 	HandlerType: (*NativeSoftwareManagementServiceServer)(nil),
@@ -956,6 +1243,11 @@
 			Handler:       _NativeSoftwareManagementService_UpdateStartupConfiguration_Handler,
 			ServerStreams: true,
 		},
+		{
+			StreamName:    "UploadDebugInfo",
+			Handler:       _NativeSoftwareManagementService_UploadDebugInfo_Handler,
+			ServerStreams: true,
+		},
 	},
 	Metadata: "dmi/sw_management_service.proto",
 }
