+
+ e2taddress_key := *element.E2TAddress
+ if !checkValidaE2TAddress(e2taddress_key) {
+ return fmt.Errorf("E2TAddress doesn't exist!!!, E2TAddress: %v", e2taddress_key)
+ }
+
+ }
+ return nil
+}
+
+func associateRanToE2THandlerImpl(assranchan chan<- models.RanE2tMap,
+ data models.RanE2tMap) error {
+ xapp.Logger.Debug("Invoked associateRanToE2THandlerImpl")
+ err := validateE2TAddressRANListData(data)
+ if err != nil {
+ xapp.Logger.Warn(" Association of RAN to E2T Instance data validation failed: " + err.Error())
+ return err
+ }
+ assranchan <- data
+ return nil
+}
+
+func disassociateRanToE2THandlerImpl(disassranchan chan<- models.RanE2tMap,
+ data models.RanE2tMap) error {
+ xapp.Logger.Debug("Invoked disassociateRanToE2THandlerImpl")
+ err := validateE2TAddressRANListData(data)
+ if err != nil {
+ xapp.Logger.Warn(" Disassociation of RAN List from E2T Instance data validation failed: " + err.Error())
+ return err
+ }
+ disassranchan <- data
+ return nil
+}
+
+func deleteE2tHandleHandlerImpl(e2tdelchan chan<- *models.E2tDeleteData,
+ data *models.E2tDeleteData) error {
+ xapp.Logger.Debug("Invoked deleteE2tHandleHandlerImpl")
+
+ err := validateDeleteE2tData(data)
+ if err != nil {
+ xapp.Logger.Error(err.Error())
+ return err
+ }
+
+ e2tdelchan <- data
+ return nil
+}
+
+func dumpDebugData() (models.Debuginfo, error) {
+ var response models.Debuginfo
+ sdlEngine, _ := sdl.GetSdl("file")
+ rpeEngine, _ := rpe.GetRpe("rmrpush")
+ data, err := sdlEngine.ReadAll(xapp.Config.GetString("rtfile"))
+ if err != nil || data == nil {
+ xapp.Logger.Error("Cannot get data from sdl interface due to: " + err.Error())
+ return response, err
+ }
+ response.RouteTable = *rpeEngine.GeneratePolicies(rtmgr.Eps, data)
+
+ prettyJSON, err := json.MarshalIndent(data, "", "")
+ response.RouteConfigs = string(prettyJSON)
+
+ return response, err
+}
+
+func launchRest(nbiif *string, datach chan<- *models.XappCallbackData, subchan chan<- *models.XappSubscriptionData, subupdatechan chan<- *rtmgr.XappList,
+ subdelchan chan<- *models.XappSubscriptionData, e2taddchan chan<- *models.E2tData, assranchan chan<- models.RanE2tMap, disassranchan chan<- models.RanE2tMap, e2tdelchan chan<- *models.E2tDeleteData) {
+ swaggerSpec, err := loads.Embedded(restapi.SwaggerJSON, restapi.FlatSwaggerJSON)
+ if err != nil {
+ //log.Fatalln(err)
+ xapp.Logger.Error(err.Error())
+ os.Exit(1)
+ }
+ nbiUrl, err := url.Parse(*nbiif)
+ if err != nil {
+ xapp.Logger.Error(err.Error())
+ os.Exit(1)
+ }
+ api := operations.NewRoutingManagerAPI(swaggerSpec)
+ server := restapi.NewServer(api)
+ defer server.Shutdown()
+
+ server.Port, err = strconv.Atoi(nbiUrl.Port())
+ if err != nil {
+ xapp.Logger.Error("Invalid NBI RestAPI port")
+ os.Exit(1)
+ }
+ server.Host = "0.0.0.0"
+ // set handlers
+ api.HandleProvideXappHandleHandler = handle.ProvideXappHandleHandlerFunc(
+ func(params handle.ProvideXappHandleParams) middleware.Responder {
+ xapp.Logger.Info("Data received on Http interface")
+ err := provideXappHandleHandlerImpl(datach, params.XappCallbackData)
+ if err != nil {
+ xapp.Logger.Error("Invalid XApp callback data: " + err.Error())
+ return handle.NewProvideXappHandleBadRequest()
+ } else {
+ return handle.NewGetHandlesOK()
+ }
+ })