diff --git a/internal/bbsim/dmiserver/dmi_api_server.go b/internal/bbsim/dmiserver/dmi_api_server.go
index 272f3c9..fea52a8 100755
--- a/internal/bbsim/dmiserver/dmi_api_server.go
+++ b/internal/bbsim/dmiserver/dmi_api_server.go
@@ -45,6 +45,8 @@
 	metricChannel           chan interface{}
 	eventChannel            chan interface{}
 	kafkaEndpoint           string
+	loggingEndpoint         string
+	loggingProtocol         string
 	mPublisherCancelFunc    context.CancelFunc
 }
 
diff --git a/internal/bbsim/dmiserver/dmi_event_generator.go b/internal/bbsim/dmiserver/dmi_event_generator.go
index b25cb59..6baf0d8 100644
--- a/internal/bbsim/dmiserver/dmi_event_generator.go
+++ b/internal/bbsim/dmiserver/dmi_event_generator.go
@@ -212,7 +212,7 @@
 }
 
 // CreateEvent creates and the passed event if it's valid and sends it to the msg bus
-func (das *DmiAPIServer) CreateEvent(ctx context.Context, evt *bbsim.DmiEvent) (*bbsim.DmiCreateEventResponse, error) {
+func (dms *DmiAPIServer) CreateEvent(ctx context.Context, evt *bbsim.DmiEvent) (*bbsim.DmiCreateEventResponse, error) {
 	retFunc := func(code codes.Code, msg string) (*bbsim.DmiCreateEventResponse, error) {
 		res := &bbsim.DmiCreateEventResponse{}
 		res.StatusCode = int32(code)
diff --git a/internal/bbsim/dmiserver/dmi_events_mgmt.go b/internal/bbsim/dmiserver/dmi_events_mgmt.go
index da1e8ae..03bfd19 100755
--- a/internal/bbsim/dmiserver/dmi_events_mgmt.go
+++ b/internal/bbsim/dmiserver/dmi_events_mgmt.go
@@ -46,7 +46,7 @@
 			Status: dmi.Status_ERROR_STATUS,
 			//TODO reason must be INVALID_PARAMS, currently this is not available in Device Management interface (DMI),
 			// change below reason with type INVALID_PARAMS once DMI is updated
-			Reason: dmi.Reason_UNDEFINED_REASON,
+			Reason: dmi.EventsConfigurationResponse_UNDEFINED_REASON,
 		}, status.Errorf(codes.FailedPrecondition, "request is nil")
 	}
 
diff --git a/internal/bbsim/dmiserver/dmi_hw_mgmt.go b/internal/bbsim/dmiserver/dmi_hw_mgmt.go
index cd0b0e9..5fd068c 100755
--- a/internal/bbsim/dmiserver/dmi_hw_mgmt.go
+++ b/internal/bbsim/dmiserver/dmi_hw_mgmt.go
@@ -279,11 +279,11 @@
 func (dms *DmiAPIServer) StopManagingDevice(ctx context.Context, req *dmi.StopManagingDeviceRequest) (*dmi.StopManagingDeviceResponse, error) {
 	logger.Debugf("StopManagingDevice API invoked")
 	if req == nil {
-		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_UNKNOWN_DEVICE}, status.Errorf(codes.FailedPrecondition, "request is empty")
+		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.StopManagingDeviceResponse_UNDEFINED_REASON}, status.Errorf(codes.FailedPrecondition, "request is empty")
 	}
 
 	if req.Name == "" {
-		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_UNKNOWN_DEVICE},
+		return &dmi.StopManagingDeviceResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.StopManagingDeviceResponse_UNKNOWN_DEVICE},
 			status.Errorf(codes.InvalidArgument, "'Name' can not be empty in the request")
 	}
 
@@ -329,7 +329,7 @@
 		// Wrong uuid, return error
 		errResponse := &dmi.PhysicalInventoryResponse{
 			Status:    dmi.Status_ERROR_STATUS,
-			Reason:    dmi.Reason_UNKNOWN_DEVICE,
+			Reason:    dmi.PhysicalInventoryResponse_UNKNOWN_DEVICE,
 			Inventory: &dmi.Hardware{},
 		}
 
@@ -397,11 +397,11 @@
 
 func sendGetHWComponentResponse(c *dmi.Component, stream dmi.NativeHWManagementService_GetHWComponentInfoServer) error {
 	apiStatus := dmi.Status_OK_STATUS
-	reason := dmi.Reason_UNDEFINED_REASON
+	reason := dmi.HWComponentInfoGetResponse_UNDEFINED_REASON
 
 	if c == nil {
 		apiStatus = dmi.Status_ERROR_STATUS
-		reason = dmi.Reason_UNKNOWN_DEVICE
+		reason = dmi.HWComponentInfoGetResponse_UNKNOWN_DEVICE
 	}
 
 	response := &dmi.HWComponentInfoGetResponse{
@@ -447,20 +447,65 @@
 }
 
 //SetLoggingEndpoint sets the location to which logs need to be shipped
-func (dms *DmiAPIServer) SetLoggingEndpoint(context.Context, *dmi.SetLoggingEndpointRequest) (*dmi.SetRemoteEndpointResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "rpc SetLoggingEndpoint not implemented")
+func (dms *DmiAPIServer) SetLoggingEndpoint(_ context.Context, request *dmi.SetLoggingEndpointRequest) (*dmi.SetRemoteEndpointResponse, error) {
+	logger.Debugf("SetLoggingEndpoint called with request %+v", request)
+	errRetFunc := func(stat dmi.Status, reason dmi.SetRemoteEndpointResponse_Reason) (*dmi.SetRemoteEndpointResponse, error) {
+		return &dmi.SetRemoteEndpointResponse{
+			Status: stat,
+			Reason: reason,
+		}, status.Errorf(codes.InvalidArgument, "invalid request")
+	}
+
+	//check the validity of the request
+	if request == nil {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_UNKNOWN_DEVICE)
+	}
+	if request.LoggingEndpoint == "" {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_LOGGING_ENDPOINT_ERROR)
+	}
+	if request.LoggingProtocol == "" {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_LOGGING_ENDPOINT_PROTOCOL_ERROR)
+	}
+	if request.DeviceUuid == nil || request.DeviceUuid.Uuid != dms.uuid {
+		return errRetFunc(dmi.Status_ERROR_STATUS, dmi.SetRemoteEndpointResponse_UNKNOWN_DEVICE)
+	}
+
+	dms.loggingEndpoint = request.LoggingEndpoint
+	dms.loggingProtocol = request.LoggingProtocol
+
+	return &dmi.SetRemoteEndpointResponse{
+		Status: dmi.Status_OK_STATUS,
+	}, nil
 }
 
 //GetLoggingEndpoint gets the configured location to which the logs are being shipped
-func (dms *DmiAPIServer) GetLoggingEndpoint(context.Context, *dmi.HardwareID) (*dmi.GetLoggingEndpointResponse, error) {
-	return nil, status.Errorf(codes.Unimplemented, "rpc GetLoggingEndpoint not implemented")
+func (dms *DmiAPIServer) GetLoggingEndpoint(_ context.Context, request *dmi.HardwareID) (*dmi.GetLoggingEndpointResponse, error) {
+	logger.Debugf("GetLoggingEndpoint called with request %+v", request)
+	if request == nil || request.Uuid == nil || request.Uuid.Uuid == "" {
+		return &dmi.GetLoggingEndpointResponse{
+			Status: dmi.Status_ERROR_STATUS,
+			Reason: dmi.GetLoggingEndpointResponse_UNKNOWN_DEVICE,
+		}, status.Errorf(codes.InvalidArgument, "invalid request")
+	}
+	if request.Uuid.Uuid != dms.uuid {
+		return &dmi.GetLoggingEndpointResponse{
+			Status: dmi.Status_ERROR_STATUS,
+			Reason: dmi.GetLoggingEndpointResponse_UNKNOWN_DEVICE,
+		}, nil
+	}
+
+	return &dmi.GetLoggingEndpointResponse{
+		Status:          dmi.Status_OK_STATUS,
+		LoggingEndpoint: dms.loggingEndpoint,
+		LoggingProtocol: dms.loggingProtocol,
+	}, nil
 }
 
 //SetMsgBusEndpoint sets the location of the Message Bus to which events and metrics are shipped
 func (dms *DmiAPIServer) SetMsgBusEndpoint(ctx context.Context, request *dmi.SetMsgBusEndpointRequest) (*dmi.SetRemoteEndpointResponse, error) {
 	logger.Debugf("SetMsgBusEndpoint() invoked with request: %+v and context: %v", request, ctx)
 	if request == nil || request.MsgbusEndpoint == "" {
-		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_KAFKA_ENDPOINT_ERROR},
+		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.SetRemoteEndpointResponse_MSGBUS_ENDPOINT_ERROR},
 			status.Errorf(codes.FailedPrecondition, "request is nil")
 	}
 	olt := devices.GetOLT()
@@ -482,10 +527,10 @@
 		go DMKafkaPublisher(nCtx, dms.eventChannel, "dm.events")
 	} else {
 		logger.Errorf("Failed to start metric kafka publisher: %v", err)
-		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.Reason_KAFKA_ENDPOINT_ERROR}, err
+		return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_ERROR_STATUS, Reason: dmi.SetRemoteEndpointResponse_MSGBUS_ENDPOINT_ERROR}, err
 	}
 
-	return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_OK_STATUS, Reason: dmi.Reason_UNDEFINED_REASON}, nil
+	return &dmi.SetRemoteEndpointResponse{Status: dmi.Status_OK_STATUS, Reason: dmi.SetRemoteEndpointResponse_UNDEFINED_REASON}, nil
 }
 
 //GetMsgBusEndpoint gets the configured location to which the events and metrics are being shipped
@@ -494,13 +539,13 @@
 	if dms.kafkaEndpoint != "" {
 		return &dmi.GetMsgBusEndpointResponse{
 			Status:         dmi.Status_OK_STATUS,
-			Reason:         dmi.Reason_UNDEFINED_REASON,
+			Reason:         dmi.GetMsgBusEndpointResponse_UNDEFINED_REASON,
 			MsgbusEndpoint: dms.kafkaEndpoint,
 		}, nil
 	}
 	return &dmi.GetMsgBusEndpointResponse{
 		Status:         dmi.Status_ERROR_STATUS,
-		Reason:         dmi.Reason_KAFKA_ENDPOINT_ERROR,
+		Reason:         dmi.GetMsgBusEndpointResponse_INTERNAL_ERROR,
 		MsgbusEndpoint: "",
 	}, nil
 }
diff --git a/internal/bbsim/dmiserver/dmi_metrics_generator.go b/internal/bbsim/dmiserver/dmi_metrics_generator.go
index 09deace..fd17ea8 100755
--- a/internal/bbsim/dmiserver/dmi_metrics_generator.go
+++ b/internal/bbsim/dmiserver/dmi_metrics_generator.go
@@ -251,8 +251,8 @@
 	met = *updateMetricIDAndMetaData(dmi.MetricNames_METRIC_CPU_USAGE_PERCENTAGE, cpu, apiSrv, &met)
 	met.Value = &dmi.ComponentSensorData{
 		Value:     generateRand(1, 20),
-		Type:      dmi.SensorValueType_SENSOR_VALUE_TYPE_OTHER,
-		Scale:     dmi.SensorValueScale_SENSOR_VALUE_SCALE_UNITS,
+		Type:      dmi.DataValueType_VALUE_TYPE_OTHER,
+		Scale:     dmi.ValueScale_VALUE_SCALE_UNITS,
 		Timestamp: ptypes.TimestampNow(),
 	}
 	return &met
@@ -263,8 +263,8 @@
 	met = *updateMetricIDAndMetaData(dmi.MetricNames_METRIC_FAN_SPEED, fan, apiSrv, &met)
 	met.Value = &dmi.ComponentSensorData{
 		Value:     generateRand(3000, 4000),
-		Type:      dmi.SensorValueType_SENSOR_VALUE_TYPE_RPM,
-		Scale:     dmi.SensorValueScale_SENSOR_VALUE_SCALE_UNITS,
+		Type:      dmi.DataValueType_VALUE_TYPE_RPM,
+		Scale:     dmi.ValueScale_VALUE_SCALE_UNITS,
 		Timestamp: ptypes.TimestampNow(),
 	}
 	return &met
@@ -299,8 +299,8 @@
 	met = *updateMetricIDAndMetaData(dmi.MetricNames_METRIC_RAM_USAGE_PERCENTAGE, ram, apiSrv, &met)
 	met.Value = &dmi.ComponentSensorData{
 		Value:     generateRand(1, 8),
-		Type:      dmi.SensorValueType_SENSOR_VALUE_TYPE_OTHER,
-		Scale:     dmi.SensorValueScale_SENSOR_VALUE_SCALE_GIGA,
+		Type:      dmi.DataValueType_VALUE_TYPE_OTHER,
+		Scale:     dmi.ValueScale_VALUE_SCALE_GIGA,
 		Timestamp: ptypes.TimestampNow(),
 	}
 	return &met
@@ -311,8 +311,8 @@
 	met = *updateMetricIDAndMetaData(dmi.MetricNames_METRIC_DISK_USAGE_PERCENTAGE, disk, apiSrv, &met)
 	met.Value = &dmi.ComponentSensorData{
 		Value:     generateRand(50, 500),
-		Type:      dmi.SensorValueType_SENSOR_VALUE_TYPE_OTHER,
-		Scale:     dmi.SensorValueScale_SENSOR_VALUE_SCALE_GIGA,
+		Type:      dmi.DataValueType_VALUE_TYPE_OTHER,
+		Scale:     dmi.ValueScale_VALUE_SCALE_GIGA,
 		Timestamp: ptypes.TimestampNow(),
 	}
 	return &met
@@ -323,8 +323,8 @@
 	met = *updateMetricIDAndMetaData(dmi.MetricNames_METRIC_INNER_SURROUNDING_TEMP, istemp, apiSrv, &met)
 	met.Value = &dmi.ComponentSensorData{
 		Value:     generateRand(30, 40),
-		Type:      dmi.SensorValueType_SENSOR_VALUE_TYPE_CELSIUS,
-		Scale:     dmi.SensorValueScale_SENSOR_VALUE_SCALE_UNITS,
+		Type:      dmi.DataValueType_VALUE_TYPE_CELSIUS,
+		Scale:     dmi.ValueScale_VALUE_SCALE_UNITS,
 		Timestamp: ptypes.TimestampNow(),
 	}
 	return &met
diff --git a/internal/bbsim/dmiserver/dmi_metrics_mgmt.go b/internal/bbsim/dmiserver/dmi_metrics_mgmt.go
index e23786f..ea7c33e 100755
--- a/internal/bbsim/dmiserver/dmi_metrics_mgmt.go
+++ b/internal/bbsim/dmiserver/dmi_metrics_mgmt.go
@@ -48,7 +48,7 @@
 			Status: dmi.Status_ERROR_STATUS,
 			//TODO reason must be INVALID_PARAMS, currently this is available in Device Management interface (DMI),
 			// change below reason with type INVALID_PARAMS once DMI is updated
-			Reason: dmi.Reason_UNDEFINED_REASON,
+			Reason: dmi.MetricsConfigurationResponse_INVALID_METRIC,
 		}, status.Errorf(codes.FailedPrecondition, "request is nil")
 	}
 
@@ -81,7 +81,7 @@
 			Status: dmi.Status_ERROR_STATUS,
 			//TODO reason must be INVALID_PARAMS, currently this is not available in Device Management interface (DMI),
 			// change below reason with type INVALID_PARAMS once DMI is updated
-			Reason: dmi.Reason_UNDEFINED_REASON,
+			Reason: dmi.GetMetricResponse_INVALID_METRIC,
 			Metric: &dmi.Metric{},
 		}, status.Errorf(codes.FailedPrecondition, "request is nil")
 	}
@@ -89,7 +89,7 @@
 	if dms.root == nil {
 		return &dmi.GetMetricResponse{
 			Status: dmi.Status_ERROR_STATUS,
-			Reason: dmi.Reason_INTERNAL_ERROR,
+			Reason: dmi.GetMetricResponse_INTERNAL_ERROR,
 			Metric: &dmi.Metric{},
 		}, status.Errorf(codes.FailedPrecondition, "Device is not managed, please start managing device to get the metric")
 	}
@@ -97,7 +97,7 @@
 	metric := getMetric(comp, req.GetMetricId())
 	return &dmi.GetMetricResponse{
 		Status: dmi.Status_OK_STATUS,
-		Reason: dmi.Reason_UNDEFINED_REASON,
+		Reason: dmi.GetMetricResponse_UNDEFINED_REASON,
 		Metric: metric,
 	}, nil
 }
diff --git a/internal/bbsim/dmiserver/dmi_sw_mgmt.go b/internal/bbsim/dmiserver/dmi_sw_mgmt.go
index a1186d3..0c89d42 100755
--- a/internal/bbsim/dmiserver/dmi_sw_mgmt.go
+++ b/internal/bbsim/dmiserver/dmi_sw_mgmt.go
@@ -20,6 +20,8 @@
 	"context"
 
 	dmi "github.com/opencord/device-management-interface/go/dmi"
+	"google.golang.org/grpc/codes"
+	"google.golang.org/grpc/status"
 )
 
 //GetSoftwareVersion gets the software version information of the Active and Standby images
@@ -28,7 +30,7 @@
 	logger.Debugf("GetSoftwareVersion invoked with for device %+v", req)
 	return &dmi.GetSoftwareVersionInformationResponse{
 		Status: dmi.Status_OK_STATUS,
-		Reason: dmi.Reason_UNDEFINED_REASON,
+		Reason: dmi.GetSoftwareVersionInformationResponse_UNDEFINED_REASON,
 		Info: &dmi.SoftwareVersionInformation{
 			ActiveVersions: []*dmi.ImageVersion{{
 				ImageName: "BBSIM-DUMMY-IMAGE-1",
@@ -89,7 +91,53 @@
 }
 
 // UpdateStartupConfiguration API can be used to let the devices pickup their properitary configuration which they need at startup.
-func (dms *DmiAPIServer) UpdateStartupConfiguration(*dmi.ConfigRequest, dmi.NativeSoftwareManagementService_UpdateStartupConfigurationServer) error {
-	logger.Debugf("UpdateStartupConfiguration invoked")
+func (dms *DmiAPIServer) UpdateStartupConfiguration(request *dmi.ConfigRequest, stream dmi.NativeSoftwareManagementService_UpdateStartupConfigurationServer) error {
+	logger.Debugf("UpdateStartupConfiguration invoked with request %+v", request)
+
+	if request == nil {
+		return status.Errorf(codes.InvalidArgument, "ConfigRequest is nil")
+	}
+
+	if request.DeviceUuid == nil || request.DeviceUuid.Uuid != dms.uuid {
+		if err := stream.Send(&dmi.ConfigResponse{
+			Status: dmi.Status_ERROR_STATUS,
+			Reason: dmi.ConfigResponse_UNKNOWN_DEVICE,
+		}); err != nil {
+			return status.Errorf(codes.Internal, "error sending response to client")
+		}
+		return nil
+	}
+
+	if err := stream.Send(&dmi.ConfigResponse{
+		Status: dmi.Status_OK_STATUS,
+	}); err != nil {
+		return status.Errorf(codes.Internal, "error sending response to client")
+	}
+
 	return nil
 }
+
+// GetStartupConfigurationInfo API is used to return the 'StartUp' config present on the device
+func (dms *DmiAPIServer) GetStartupConfigurationInfo(ctx context.Context, request *dmi.StartupConfigInfoRequest) (*dmi.StartupConfigInfoResponse, error) {
+	logger.Debugf("GetStartupConfigurationInfo invoked for device %s", request.DeviceUuid.String())
+
+	if request == nil {
+		return nil, status.Errorf(codes.InvalidArgument, "ConfigRequest is nil")
+	}
+
+	if request.DeviceUuid == nil {
+		return nil, status.Errorf(codes.InvalidArgument, "DeviceUuid is nil")
+	}
+
+	if request.DeviceUuid.Uuid != dms.uuid {
+		return &dmi.StartupConfigInfoResponse{
+			Status: dmi.Status_ERROR_STATUS,
+			Reason: dmi.StartupConfigInfoResponse_UNKNOWN_DEVICE,
+		}, status.Errorf(codes.InvalidArgument, "device-uuid %s not found", request.DeviceUuid.Uuid)
+	}
+
+	return &dmi.StartupConfigInfoResponse{
+		Status:  dmi.Status_OK_STATUS,
+		Version: "BBSIM-STARTUP-CONFIG-DUMMY-VERSION",
+	}, nil
+}
