Updating to xapp frw v0.4.10, for dcap to adxapp new message type
[ric-plt/rtmgr.git] / cmd / rtmgr.go
index a33437a..63b67b7 100644 (file)
@@ -45,6 +45,7 @@ import (
        "routing-manager/pkg/sdl"
        "syscall"
        "time"
+       "sync"
 )
 
 const SERVICENAME = "rtmgr"
@@ -63,16 +64,20 @@ func initRtmgr() (nbiEngine nbi.Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engi
        return nil, nil, nil, nil, err
 }
 
-func serveSBI(triggerSBI <-chan bool, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine) {
+
+
+func serveSBI(triggerSBI <-chan bool, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine, m *sync.Mutex) {
        for {
                if <-triggerSBI {
+                       m.Lock()
                        data, err := sdlEngine.ReadAll(xapp.Config.GetString("rtfile"))
+                       m.Unlock()
                        if err != nil || data == nil {
                                xapp.Logger.Error("Cannot get data from sdl interface due to: " + err.Error())
                                continue
                        }
                        sbiEngine.UpdateEndpoints(data)
-                       policies := rpeEngine.GeneratePolicies(rtmgr.Eps)
+                       policies := rpeEngine.GeneratePolicies(rtmgr.Eps, data)
                        err = sbiEngine.DistributeAll(policies)
                        if err != nil {
                                xapp.Logger.Error("Routing table cannot be published due to: " + err.Error())
@@ -81,12 +86,29 @@ func serveSBI(triggerSBI <-chan bool, sbiEngine sbi.Engine, sdlEngine sdl.Engine
        }
 }
 
-func serve(nbiEngine nbi.Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine) {
+func sendRoutesToAll(sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine) {
+
+       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
+       }
+       sbiEngine.UpdateEndpoints(data)
+       policies := rpeEngine.GeneratePolicies(rtmgr.Eps, data)
+       err = sbiEngine.DistributeAll(policies)
+       if err != nil {
+               xapp.Logger.Error("Routing table cannot be published due to: " + err.Error())
+               return
+       }
+}
+
+
+func serve(nbiEngine nbi.Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpeEngine rpe.Engine, m *sync.Mutex) {
 
        triggerSBI := make(chan bool)
 
-       nbiErr := nbiEngine.Initialize(xapp.Config.GetString("xmurl"), xapp.Config.GetString("nbiurl"), xapp.Config.GetString("rtfile"), xapp.Config.GetString("cfgfile"),
-               sdlEngine, rpeEngine, triggerSBI)
+       nbiErr := nbiEngine.Initialize(xapp.Config.GetString("xmurl"), xapp.Config.GetString("nbiurl"), xapp.Config.GetString("rtfile"), xapp.Config.GetString("cfgfile"), xapp.Config.GetString("e2murl"), 
+               sdlEngine, rpeEngine, triggerSBI, m)
        if nbiErr != nil {
                xapp.Logger.Error("Failed to initialize nbi due to: " + nbiErr.Error())
                return
@@ -101,7 +123,7 @@ func serve(nbiEngine nbi.Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpe
        defer sbiEngine.Terminate()
 
        // This SBI Go routine is trtiggered by periodic main loop and when data is recieved on REST interface.
-       go serveSBI(triggerSBI, sbiEngine, sdlEngine, rpeEngine)
+       go serveSBI(triggerSBI, sbiEngine, sdlEngine, rpeEngine, m)
 
        for {
                if xapp.Config.GetString("nbi") == "httpGetter" {
@@ -113,8 +135,9 @@ func serve(nbiEngine nbi.Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engine, rpe
                        }
                }
 
-               triggerSBI <- true
+               sendRoutesToAll(sbiEngine, sdlEngine, rpeEngine)
 
+               rtmgr.Rtmgr_ready = true
                time.Sleep(INTERVAL * time.Second)
                xapp.Logger.Debug("Periodic loop timed out. Setting triggerSBI flag to distribute updated routes.")
        }
@@ -131,14 +154,34 @@ func SetupCloseHandler() {
 }
 
 func main() {
+
        nbiEngine, sbiEngine, sdlEngine, rpeEngine, err := initRtmgr()
        if err != nil {
                xapp.Logger.Error(err.Error())
                os.Exit(1)
        }
+
        SetupCloseHandler()
+
        xapp.Logger.Info("Start " + SERVICENAME + " service")
        rtmgr.Eps = make(rtmgr.Endpoints)
-       serve(nbiEngine, sbiEngine, sdlEngine, rpeEngine)
+       rtmgr.Rtmgr_ready = false
+
+       var m sync.Mutex
+
+// RMR thread is starting port: 4560
+       c := nbi.NewControl()
+       go c.Run(sbiEngine, sdlEngine, rpeEngine, &m)
+
+// Waiting for RMR to be ready
+       time.Sleep(time.Duration(2) * time.Second)
+       for xapp.Rmr.IsReady() == false {
+               time.Sleep(time.Duration(2) * time.Second)
+       }
+
+       dummy_whid := int(xapp.Rmr.Openwh("localhost:4560"))
+       xapp.Logger.Info("created dummy Wormhole ID for routingmanager and dummy_whid :%d", dummy_whid)
+
+       serve(nbiEngine, sbiEngine, sdlEngine, rpeEngine, &m)
        os.Exit(0)
 }