[VOL:3643] support of some OLT device metrics over the Device Management Interface
1. Following metrices are supported :
   METRIC_FAN_SPEED
   METRIC_CPU_USAGE_PERCENTAGE
   METRIC_RAM_USAGE_PERCENTAGE
   METRIC_DISK_USAGE_PERCENTAGE
   METRIC_INNER_SURROUNDING_TEMP
2. Following DMI APIs are implemented:
   ListMetrics
   UpdateMetricsConfiguration
   GetMetric
   SetMsgBusEndpoint
   GetMsgBusEndpoint
3. Updated docs/source/DMI_Server_README.md

Change-Id: I11f988ff972b8a8682012c7aeea88ba61afb82ba
diff --git a/vendor/github.com/opencord/device-management-interface/go/dmi/sw_management_service.pb.go b/vendor/github.com/opencord/device-management-interface/go/dmi/sw_management_service.pb.go
index f3ef3e6..c3c2718 100644
--- a/vendor/github.com/opencord/device-management-interface/go/dmi/sw_management_service.pb.go
+++ b/vendor/github.com/opencord/device-management-interface/go/dmi/sw_management_service.pb.go
@@ -171,45 +171,148 @@
 	return nil
 }
 
+type ConfigRequest struct {
+	DeviceUuid *Uuid `protobuf:"bytes,1,opt,name=device_uuid,json=deviceUuid,proto3" json:"device_uuid,omitempty"`
+	// Location of the configuration file, authentication (user/pass) if any should be in the url string
+	// The config_url would contain the protocol, credentials, the IP address/DNS of the server and the path of the file
+	// e.g. sftp://download_user:download_pass@192.168.0.1:22/OLT-configs/config-v1.2.3.xml
+	ConfigUrl            string   `protobuf:"bytes,2,opt,name=config_url,json=configUrl,proto3" json:"config_url,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConfigRequest) Reset()         { *m = ConfigRequest{} }
+func (m *ConfigRequest) String() string { return proto.CompactTextString(m) }
+func (*ConfigRequest) ProtoMessage()    {}
+func (*ConfigRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_000929e4bec891d7, []int{3}
+}
+
+func (m *ConfigRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConfigRequest.Unmarshal(m, b)
+}
+func (m *ConfigRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConfigRequest.Marshal(b, m, deterministic)
+}
+func (m *ConfigRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConfigRequest.Merge(m, src)
+}
+func (m *ConfigRequest) XXX_Size() int {
+	return xxx_messageInfo_ConfigRequest.Size(m)
+}
+func (m *ConfigRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConfigRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConfigRequest proto.InternalMessageInfo
+
+func (m *ConfigRequest) GetDeviceUuid() *Uuid {
+	if m != nil {
+		return m.DeviceUuid
+	}
+	return nil
+}
+
+func (m *ConfigRequest) GetConfigUrl() string {
+	if m != nil {
+		return m.ConfigUrl
+	}
+	return ""
+}
+
+type ConfigResponse struct {
+	Status               Status   `protobuf:"varint,1,opt,name=status,proto3,enum=dmi.Status" json:"status,omitempty"`
+	Reason               Reason   `protobuf:"varint,2,opt,name=reason,proto3,enum=dmi.Reason" json:"reason,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *ConfigResponse) Reset()         { *m = ConfigResponse{} }
+func (m *ConfigResponse) String() string { return proto.CompactTextString(m) }
+func (*ConfigResponse) ProtoMessage()    {}
+func (*ConfigResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_000929e4bec891d7, []int{4}
+}
+
+func (m *ConfigResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_ConfigResponse.Unmarshal(m, b)
+}
+func (m *ConfigResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_ConfigResponse.Marshal(b, m, deterministic)
+}
+func (m *ConfigResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_ConfigResponse.Merge(m, src)
+}
+func (m *ConfigResponse) XXX_Size() int {
+	return xxx_messageInfo_ConfigResponse.Size(m)
+}
+func (m *ConfigResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_ConfigResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_ConfigResponse proto.InternalMessageInfo
+
+func (m *ConfigResponse) GetStatus() Status {
+	if m != nil {
+		return m.Status
+	}
+	return Status_UNDEFINED_STATUS
+}
+
+func (m *ConfigResponse) GetReason() Reason {
+	if m != nil {
+		return m.Reason
+	}
+	return Reason_UNDEFINED_REASON
+}
+
 func init() {
 	proto.RegisterType((*SoftwareVersionInformation)(nil), "dmi.SoftwareVersionInformation")
 	proto.RegisterType((*GetSoftwareVersionInformationResponse)(nil), "dmi.GetSoftwareVersionInformationResponse")
 	proto.RegisterType((*DownloadImageRequest)(nil), "dmi.DownloadImageRequest")
+	proto.RegisterType((*ConfigRequest)(nil), "dmi.ConfigRequest")
+	proto.RegisterType((*ConfigResponse)(nil), "dmi.ConfigResponse")
 }
 
 func init() { proto.RegisterFile("dmi/sw_management_service.proto", fileDescriptor_000929e4bec891d7) }
 
 var fileDescriptor_000929e4bec891d7 = []byte{
-	// 458 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x53, 0x5d, 0x6b, 0x13, 0x41,
-	0x14, 0x65, 0x13, 0x29, 0x74, 0xd6, 0x36, 0xed, 0x50, 0x21, 0xee, 0x4b, 0x4a, 0x44, 0x08, 0x85,
-	0x66, 0x65, 0xd3, 0x17, 0xad, 0x08, 0x4a, 0x41, 0xf3, 0xa0, 0xe0, 0x46, 0x7d, 0xf0, 0x65, 0x99,
-	0xec, 0xdc, 0xa4, 0x03, 0xce, 0xdc, 0x38, 0x33, 0xbb, 0xd1, 0x3f, 0xe2, 0x4f, 0xd0, 0xbf, 0x29,
-	0xf3, 0x11, 0x53, 0x69, 0x03, 0x7d, 0xdb, 0x3d, 0xf7, 0x9c, 0x33, 0x67, 0xee, 0xbd, 0x43, 0x06,
-	0x5c, 0x8a, 0xdc, 0xac, 0x2b, 0xc9, 0x14, 0x5b, 0x82, 0x04, 0x65, 0x2b, 0x03, 0xba, 0x15, 0x35,
-	0x8c, 0x57, 0x1a, 0x2d, 0xd2, 0x2e, 0x97, 0x22, 0x3b, 0x76, 0xac, 0x1a, 0xa5, 0x44, 0x65, 0x02,
-	0x9e, 0x3d, 0x74, 0xd0, 0xf5, 0x3a, 0xfe, 0xd1, 0x68, 0x23, 0x24, 0x5b, 0x46, 0xe5, 0xf0, 0x57,
-	0x42, 0xb2, 0x19, 0x2e, 0xec, 0x9a, 0x69, 0xf8, 0x02, 0xda, 0x08, 0x54, 0x53, 0xb5, 0x40, 0x2d,
-	0x99, 0x15, 0xa8, 0xe8, 0x0b, 0xd2, 0x63, 0xb5, 0x15, 0x2d, 0x54, 0x6d, 0x28, 0x9a, 0x7e, 0x72,
-	0xda, 0x1d, 0xa5, 0xc5, 0xf1, 0x98, 0x4b, 0x31, 0x9e, 0x3a, 0xa7, 0x28, 0x2b, 0x0f, 0x03, 0x33,
-	0xfe, 0x1a, 0xfa, 0x92, 0x1c, 0x19, 0xcb, 0x14, 0x9f, 0xff, 0xdc, 0x8a, 0x3b, 0xbb, 0xc4, 0xbd,
-	0x48, 0xdd, 0xa8, 0x87, 0xbf, 0x13, 0xf2, 0xf4, 0x2d, 0xd8, 0xdd, 0xd9, 0x4a, 0x30, 0x2b, 0x54,
-	0x06, 0xe8, 0x13, 0xb2, 0x67, 0x2c, 0xb3, 0x8d, 0x8b, 0x96, 0x8c, 0x0e, 0x8b, 0xd4, 0xbb, 0xcf,
-	0x3c, 0x54, 0xc6, 0x92, 0x23, 0x69, 0x60, 0x06, 0x55, 0xbf, 0x73, 0x83, 0x54, 0x7a, 0xa8, 0x8c,
-	0x25, 0x3a, 0x21, 0x0f, 0x84, 0x5a, 0x60, 0xbf, 0x7b, 0x9a, 0x8c, 0xd2, 0x62, 0x10, 0x7c, 0x76,
-	0x07, 0xf0, 0xe4, 0xe1, 0x0f, 0x72, 0x72, 0x85, 0x6b, 0xf5, 0x0d, 0x19, 0xf7, 0x37, 0x2a, 0xe1,
-	0x7b, 0x03, 0xc6, 0xd2, 0x33, 0x92, 0x72, 0x70, 0x33, 0xaa, 0x9a, 0x46, 0x70, 0x9f, 0x2d, 0x2d,
-	0xf6, 0xbd, 0xe7, 0xe7, 0x46, 0xf0, 0x92, 0x84, 0xaa, 0xfb, 0xa6, 0x17, 0x84, 0xf8, 0xa1, 0x54,
-	0xfe, 0xf8, 0x8e, 0xa7, 0x3e, 0xda, 0x36, 0xe9, 0xe6, 0xa1, 0xfb, 0x62, 0x83, 0x14, 0x7f, 0x3a,
-	0x64, 0xf0, 0x81, 0xb9, 0x9e, 0x6f, 0x42, 0xbe, 0xff, 0xb7, 0x20, 0xb3, 0xb0, 0x1f, 0xf4, 0x23,
-	0xa1, 0xb7, 0xbb, 0x48, 0x7b, 0xde, 0xfb, 0x1d, 0xd3, 0xdc, 0xa1, 0xd3, 0xab, 0xec, 0xcc, 0x03,
-	0xf7, 0xeb, 0xf7, 0x2b, 0x72, 0xf0, 0xdf, 0x85, 0xe9, 0x63, 0x2f, 0xbe, 0xab, 0x09, 0xd9, 0xd1,
-	0xf6, 0x12, 0x61, 0x20, 0xcf, 0x12, 0x7a, 0x41, 0x0e, 0x5e, 0xbb, 0x4d, 0x61, 0x16, 0x82, 0xfe,
-	0x56, 0x9a, 0xbb, 0x54, 0x97, 0xe4, 0xa4, 0x84, 0x16, 0xb4, 0xfd, 0x84, 0xb3, 0xb0, 0x2a, 0xf7,
-	0x17, 0xbf, 0xb9, 0xfc, 0xfa, 0x7c, 0x29, 0xec, 0x75, 0x33, 0x1f, 0xd7, 0x28, 0x73, 0x5c, 0x81,
-	0xaa, 0x51, 0xf3, 0x3c, 0x4c, 0xe0, 0x7c, 0xfb, 0xac, 0xce, 0x85, 0xb2, 0xa0, 0x17, 0xac, 0x86,
-	0xbc, 0x9d, 0xe4, 0x4b, 0xcc, 0xb9, 0x14, 0xf3, 0x3d, 0xff, 0x52, 0x26, 0x7f, 0x03, 0x00, 0x00,
-	0xff, 0xff, 0x6d, 0x7d, 0x3b, 0xc8, 0x86, 0x03, 0x00, 0x00,
+	// 528 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xd1, 0x8a, 0x13, 0x3d,
+	0x14, 0x66, 0xda, 0x9f, 0x85, 0x9e, 0xfe, 0x6d, 0x77, 0xe3, 0x0a, 0x75, 0x40, 0xba, 0x54, 0x84,
+	0xb2, 0xb0, 0x9d, 0xa5, 0xdd, 0x1b, 0x5d, 0x11, 0xd4, 0x85, 0xb5, 0x17, 0x0a, 0x4e, 0xad, 0x17,
+	0xbd, 0x19, 0xd2, 0x49, 0x3a, 0x1b, 0x68, 0x92, 0x31, 0xc9, 0x4c, 0xf5, 0x45, 0x7c, 0x04, 0x9f,
+	0xcf, 0x47, 0x90, 0x24, 0x53, 0xbb, 0x65, 0xb7, 0xa0, 0xe2, 0xdd, 0xe4, 0x3b, 0xe7, 0xfb, 0xce,
+	0xc9, 0x39, 0xdf, 0x04, 0x7a, 0x84, 0xb3, 0x48, 0xaf, 0x13, 0x8e, 0x05, 0xce, 0x28, 0xa7, 0xc2,
+	0x24, 0x9a, 0xaa, 0x92, 0xa5, 0x74, 0x98, 0x2b, 0x69, 0x24, 0xaa, 0x13, 0xce, 0xc2, 0x23, 0x9b,
+	0x95, 0x4a, 0xce, 0xa5, 0xd0, 0x1e, 0x0f, 0xff, 0xb7, 0xd0, 0xcd, 0xba, 0x3a, 0xa1, 0x4a, 0x86,
+	0x71, 0x9c, 0x55, 0xcc, 0xfe, 0xb7, 0x00, 0xc2, 0xa9, 0x5c, 0x9a, 0x35, 0x56, 0xf4, 0x13, 0x55,
+	0x9a, 0x49, 0x31, 0x11, 0x4b, 0xa9, 0x38, 0x36, 0x4c, 0x0a, 0xf4, 0x1c, 0x3a, 0x38, 0x35, 0xac,
+	0xa4, 0x49, 0xe9, 0x83, 0xba, 0x1b, 0x9c, 0xd4, 0x07, 0xcd, 0xd1, 0xd1, 0x90, 0x70, 0x36, 0x9c,
+	0x58, 0xa5, 0x8a, 0x16, 0xb7, 0x7d, 0x66, 0x75, 0xd4, 0xe8, 0x05, 0x1c, 0x6a, 0x83, 0x05, 0x59,
+	0x7c, 0xdd, 0x92, 0x6b, 0xfb, 0xc8, 0x9d, 0x2a, 0x75, 0xc3, 0xee, 0x7f, 0x0f, 0xe0, 0xe9, 0x35,
+	0x35, 0xfb, 0x7b, 0x8b, 0xa9, 0xce, 0xa5, 0xd0, 0x14, 0x3d, 0x81, 0x03, 0x6d, 0xb0, 0x29, 0x6c,
+	0x6b, 0xc1, 0xa0, 0x3d, 0x6a, 0x3a, 0xf5, 0xa9, 0x83, 0xe2, 0x2a, 0x64, 0x93, 0x14, 0xc5, 0x5a,
+	0x8a, 0x6e, 0xed, 0x56, 0x52, 0xec, 0xa0, 0xb8, 0x0a, 0xa1, 0x31, 0xfc, 0xc7, 0xc4, 0x52, 0x76,
+	0xeb, 0x27, 0xc1, 0xa0, 0x39, 0xea, 0x79, 0x9d, 0xfd, 0x0d, 0xb8, 0xe4, 0xfe, 0x17, 0x38, 0xbe,
+	0x92, 0x6b, 0xb1, 0x92, 0x98, 0xb8, 0x1b, 0xc5, 0xf4, 0x73, 0x41, 0xb5, 0x41, 0xa7, 0xd0, 0x24,
+	0xd4, 0xee, 0x28, 0x29, 0x0a, 0x46, 0x5c, 0x6f, 0xcd, 0x51, 0xc3, 0x69, 0xce, 0x0a, 0x46, 0x62,
+	0xf0, 0x51, 0xfb, 0x8d, 0x2e, 0x00, 0xdc, 0x52, 0x12, 0x57, 0xbe, 0xe6, 0x52, 0x1f, 0x6e, 0x87,
+	0x74, 0xbb, 0x68, 0x83, 0x6d, 0x90, 0xfe, 0x1c, 0x5a, 0x6f, 0xa4, 0x58, 0xb2, 0xec, 0x6f, 0x4a,
+	0x3e, 0x06, 0x48, 0x1d, 0x39, 0x29, 0xd4, 0xca, 0x95, 0x6c, 0xc4, 0x0d, 0x8f, 0xcc, 0xd4, 0xaa,
+	0x3f, 0x87, 0xf6, 0x46, 0xfb, 0x5f, 0x8f, 0x79, 0xf4, 0xa3, 0x06, 0xbd, 0xf7, 0xd8, 0x7a, 0x65,
+	0x33, 0xdc, 0x77, 0xbf, 0x8c, 0x3d, 0xf5, 0xbe, 0x46, 0x1f, 0x00, 0xdd, 0xdd, 0x3e, 0xea, 0x38,
+	0xb9, 0xb7, 0x58, 0x11, 0x8b, 0x4e, 0xae, 0xc2, 0x53, 0x07, 0xfc, 0x9e, 0x4f, 0x5e, 0x42, 0x6b,
+	0x67, 0x51, 0xe8, 0x91, 0x23, 0xdf, 0xb7, 0xbc, 0xf0, 0x70, 0x3b, 0x7c, 0x7f, 0xc3, 0xf3, 0x00,
+	0x5d, 0x40, 0xeb, 0x95, 0x75, 0x38, 0x36, 0xd4, 0xf3, 0xef, 0x74, 0x73, 0x1f, 0xeb, 0x12, 0x8e,
+	0x63, 0x5a, 0x52, 0x65, 0x3e, 0xca, 0xa9, 0xb7, 0xf8, 0x1f, 0x90, 0xaf, 0x21, 0x9c, 0xe5, 0x04,
+	0x1b, 0x8b, 0x28, 0x53, 0xe4, 0x7e, 0x25, 0x85, 0xf2, 0x3f, 0x27, 0x72, 0x8c, 0x1d, 0x0b, 0x84,
+	0x0f, 0x76, 0x30, 0x7f, 0xf3, 0xf3, 0xe0, 0xf5, 0xe5, 0xfc, 0x59, 0xc6, 0xcc, 0x4d, 0xb1, 0x18,
+	0xa6, 0x92, 0x47, 0x32, 0xa7, 0x22, 0x95, 0x8a, 0x44, 0xde, 0x0f, 0x67, 0xdb, 0x77, 0xe5, 0x8c,
+	0x09, 0x43, 0xd5, 0x12, 0xa7, 0x34, 0x2a, 0xc7, 0x51, 0x26, 0x23, 0xc2, 0xd9, 0xe2, 0xc0, 0x3d,
+	0x15, 0xe3, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xd0, 0x0a, 0x81, 0x87, 0x04, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -235,6 +338,8 @@
 	// Marks the image in the Standby as Active and reboots the device, so that it boots from that image which was in the standby.
 	// This API is to be used if operator wants to go back to the previous software
 	RevertToStandbyImage(ctx context.Context, in *HardwareID, opts ...grpc.CallOption) (NativeSoftwareManagementService_RevertToStandbyImageClient, error)
+	// This API can be used to let the devices pickup their properitary configuration which they need at startup.
+	UpdateStartupConfiguration(ctx context.Context, in *ConfigRequest, opts ...grpc.CallOption) (NativeSoftwareManagementService_UpdateStartupConfigurationClient, error)
 }
 
 type nativeSoftwareManagementServiceClient struct {
@@ -350,6 +455,38 @@
 	return m, nil
 }
 
+func (c *nativeSoftwareManagementServiceClient) UpdateStartupConfiguration(ctx context.Context, in *ConfigRequest, opts ...grpc.CallOption) (NativeSoftwareManagementService_UpdateStartupConfigurationClient, error) {
+	stream, err := c.cc.NewStream(ctx, &_NativeSoftwareManagementService_serviceDesc.Streams[3], "/dmi.NativeSoftwareManagementService/UpdateStartupConfiguration", opts...)
+	if err != nil {
+		return nil, err
+	}
+	x := &nativeSoftwareManagementServiceUpdateStartupConfigurationClient{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_UpdateStartupConfigurationClient interface {
+	Recv() (*ConfigResponse, error)
+	grpc.ClientStream
+}
+
+type nativeSoftwareManagementServiceUpdateStartupConfigurationClient struct {
+	grpc.ClientStream
+}
+
+func (x *nativeSoftwareManagementServiceUpdateStartupConfigurationClient) Recv() (*ConfigResponse, error) {
+	m := new(ConfigResponse)
+	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
@@ -363,6 +500,8 @@
 	// Marks the image in the Standby as Active and reboots the device, so that it boots from that image which was in the standby.
 	// This API is to be used if operator wants to go back to the previous software
 	RevertToStandbyImage(*HardwareID, NativeSoftwareManagementService_RevertToStandbyImageServer) error
+	// This API can be used to let the devices pickup their properitary configuration which they need at startup.
+	UpdateStartupConfiguration(*ConfigRequest, NativeSoftwareManagementService_UpdateStartupConfigurationServer) error
 }
 
 func RegisterNativeSoftwareManagementServiceServer(s *grpc.Server, srv NativeSoftwareManagementServiceServer) {
@@ -450,6 +589,27 @@
 	return x.ServerStream.SendMsg(m)
 }
 
+func _NativeSoftwareManagementService_UpdateStartupConfiguration_Handler(srv interface{}, stream grpc.ServerStream) error {
+	m := new(ConfigRequest)
+	if err := stream.RecvMsg(m); err != nil {
+		return err
+	}
+	return srv.(NativeSoftwareManagementServiceServer).UpdateStartupConfiguration(m, &nativeSoftwareManagementServiceUpdateStartupConfigurationServer{stream})
+}
+
+type NativeSoftwareManagementService_UpdateStartupConfigurationServer interface {
+	Send(*ConfigResponse) error
+	grpc.ServerStream
+}
+
+type nativeSoftwareManagementServiceUpdateStartupConfigurationServer struct {
+	grpc.ServerStream
+}
+
+func (x *nativeSoftwareManagementServiceUpdateStartupConfigurationServer) Send(m *ConfigResponse) error {
+	return x.ServerStream.SendMsg(m)
+}
+
 var _NativeSoftwareManagementService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "dmi.NativeSoftwareManagementService",
 	HandlerType: (*NativeSoftwareManagementServiceServer)(nil),
@@ -475,6 +635,11 @@
 			Handler:       _NativeSoftwareManagementService_RevertToStandbyImage_Handler,
 			ServerStreams: true,
 		},
+		{
+			StreamName:    "UpdateStartupConfiguration",
+			Handler:       _NativeSoftwareManagementService_UpdateStartupConfiguration_Handler,
+			ServerStreams: true,
+		},
 	},
 	Metadata: "dmi/sw_management_service.proto",
 }