import (
"e2mgr/e2managererrors"
"e2mgr/logger"
+ "e2mgr/managers"
"e2mgr/models"
"e2mgr/services"
"gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/common"
type AddEnbRequestHandler struct {
logger *logger.Logger
+ nodebValidator *managers.NodebValidator
rNibDataService services.RNibDataService
+ ranListManager managers.RanListManager
}
-func NewAddEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService) *AddEnbRequestHandler {
+func NewAddEnbRequestHandler(logger *logger.Logger, rNibDataService services.RNibDataService, nodebValidator *managers.NodebValidator, ranListManager managers.RanListManager) *AddEnbRequestHandler {
return &AddEnbRequestHandler{
logger: logger,
+ nodebValidator: nodebValidator,
rNibDataService: rNibDataService,
+ ranListManager: ranListManager,
}
}
return nil, e2managererrors.NewRequestValidationError()
}
+ enbType := addEnbRequest.Enb.GetEnbType()
+ if h.nodebValidator.IsNgEnbType(enbType){
+ h.logger.Errorf("#AddEnbRequestHandler.Handle - validation failure: enb type is not supported. enb type: %s", enbType)
+ return nil, e2managererrors.NewRequestValidationError()
+ }
+
_, err = h.rNibDataService.GetNodeb(addEnbRequest.RanName)
if err == nil {
return nil, e2managererrors.NewRnibDbError()
}
- nbIdentity := h.createNbIdentity(addEnbRequest)
nodebInfo := h.createNodebInfo(addEnbRequest)
+ err = h.rNibDataService.AddEnb(nodebInfo)
+
+ if err != nil {
+ h.logger.Errorf("#AddEnbRequestHandler.Handle - RAN name: %s - failed to add eNB entity in RNIB. Error: %s", addEnbRequest.RanName, err)
+ return nil, e2managererrors.NewRnibDbError()
+ }
- err = h.rNibDataService.SaveNodeb(nbIdentity, nodebInfo)
+ nbIdentity := h.createNbIdentity(addEnbRequest)
+ err = h.ranListManager.AddNbIdentity(entities.Node_ENB, nbIdentity)
if err != nil {
- h.logger.Errorf("#AddEnbRequestHandler.Handle - RAN name: %s - failed to save nodeb entity in RNIB. Error: %s", addEnbRequest.RanName, err)
return nil, e2managererrors.NewRnibDbError()
}
- return models.NewAddEnbResponse(nodebInfo), nil
+ return models.NewNodebResponse(nodebInfo), nil
}
func (h *AddEnbRequestHandler) createNodebInfo(addEnbRequest *models.AddEnbRequest) *entities.NodebInfo {
Port: addEnbRequest.Port,
GlobalNbId: addEnbRequest.GlobalNbId,
Configuration: &entities.NodebInfo_Enb{Enb: addEnbRequest.Enb},
+ NodeType: entities.Node_ENB,
ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
+ SetupFromNetwork: false,
}
return &nodebInfo
}
func (h *AddEnbRequestHandler) createNbIdentity(addEnbRequest *models.AddEnbRequest) *entities.NbIdentity {
- nbIdentity := entities.NbIdentity{
- GlobalNbId: addEnbRequest.GlobalNbId,
- InventoryName: addEnbRequest.RanName,
+ return &entities.NbIdentity{
+ GlobalNbId: addEnbRequest.GlobalNbId,
+ InventoryName: addEnbRequest.RanName,
+ ConnectionStatus: entities.ConnectionStatus_DISCONNECTED,
}
-
- return &nbIdentity
}
func (h *AddEnbRequestHandler) validateRequestBody(addEnbRequest *models.AddEnbRequest) error {
return errors.New("enb")
}
- if err := isEnbValid(addEnbRequest.Enb); err != nil {
+ if err := h.nodebValidator.IsEnbValid(addEnbRequest.Enb); err != nil {
return err
}
return nil
}
-
-func isEnbValid(enb *entities.Enb) error {
- if enb.EnbType == entities.EnbType_UNKNOWN_ENB_TYPE {
- return errors.New("enb.enbType")
- }
-
- if enb.ServedCells == nil || len(enb.ServedCells) == 0 {
- return errors.New("enb.servedCells")
- }
-
- for _, servedCell := range enb.ServedCells {
- err := isServedCellValid(servedCell)
-
- if err != nil {
- return err
- }
- }
-
- return nil
-}
-
-func isServedCellValid(servedCell *entities.ServedCellInfo) error {
-
- if servedCell.CellId == "" {
- return errors.New("servedCell.cellId")
- }
-
- if servedCell.EutraMode == entities.Eutra_UNKNOWN {
- return errors.New("servedCell.eutraMode")
- }
-
- if servedCell.Tac == "" {
- return errors.New("servedCell.tac")
- }
-
- if servedCell.BroadcastPlmns == nil || len(servedCell.BroadcastPlmns) == 0 {
- return errors.New("servedCell.broadcastPlmns")
- }
-
- if servedCell.ChoiceEutraMode == nil {
- return errors.New("servedCell.choiceEutraMode")
- }
-
- return isChoiceEutraModeValid(servedCell.ChoiceEutraMode)
-}
-
-func isChoiceEutraModeValid(choiceEutraMode *entities.ChoiceEUTRAMode) error {
- if choiceEutraMode.Fdd != nil {
- return isFddInfoValid(choiceEutraMode.Fdd)
- }
-
- if choiceEutraMode.Tdd != nil {
- return isTddInfoValid(choiceEutraMode.Tdd)
- }
-
- return errors.New("servedCell.fdd / servedCell.tdd")
-}
-
-func isTddInfoValid(tdd *entities.TddInfo) error {
- return nil
-}
-
-func isFddInfoValid(fdd *entities.FddInfo) error {
- return nil
-}