X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=cmd%2Frtmgr.go;h=63b67b739cb85b647e0a486adbd0f41b7b1f5a2f;hb=488200cbf62e6dc51d1e5cc692c1e52e9ef28cb5;hp=a33437adbac8a7b48302308fb9a2da96b580ae24;hpb=a8596ec6db91b8a45a1a21421a726b9b05ce7d48;p=ric-plt%2Frtmgr.git diff --git a/cmd/rtmgr.go b/cmd/rtmgr.go index a33437a..63b67b7 100644 --- a/cmd/rtmgr.go +++ b/cmd/rtmgr.go @@ -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) }