Removed Book Keeping of RMR CTL ports. Route Distribution only on demand
[ric-plt/rtmgr.git] / pkg / nbi / control.go
index 5483aba..e31379d 100644 (file)
@@ -35,6 +35,7 @@ import (
        "sync"
        "time"
        "os"
+       "fmt"
 )
 
 var m sync.Mutex
@@ -87,6 +88,8 @@ func initRtmgr() (nbiEngine Engine, sbiEngine sbi.Engine, sdlEngine sdl.Engine,
 func (c *Control) controlLoop() {
        for {
                msg := <-c.rcChan
+               c.recievermr(msg)
+               /*
                xapp_msg := sbi.RMRParams{msg}
                switch msg.Mtype {
                case xapp.RICMessageTypes["RMRRM_REQ_TABLE"]:
@@ -103,10 +106,29 @@ func (c *Control) controlLoop() {
                        err := errors.New("Message Type " + strconv.Itoa(msg.Mtype) + " is discarded")
                        xapp.Logger.Error("Unknown message type: %v", err)
                }
-               xapp.Rmr.Free(msg.Mbuf)
+               xapp.Rmr.Free(msg.Mbuf)*/
        }
 }
 
+func (c *Control) recievermr(msg *xapp.RMRParams) {
+       xapp_msg := sbi.RMRParams{msg}
+        switch msg.Mtype {
+        case xapp.RICMessageTypes["RMRRM_REQ_TABLE"]:
+       if rtmgr.Rtmgr_ready == false {
+               xapp.Logger.Info("Update Route Table Request(RMR to RM), message discarded as routing manager is not ready")
+        } else {
+                xapp.Logger.Info("Update Route Table Request(RMR to RM)")
+                go c.handleUpdateToRoutingManagerRequest(msg)
+        }
+        case xapp.RICMessageTypes["RMRRM_TABLE_STATE"]:
+                xapp.Logger.Info("state of table to route mgr %s,payload %s", xapp_msg.String(), msg.Payload)
+        default:
+                err := errors.New("Message Type " + strconv.Itoa(msg.Mtype) + " is discarded")
+                xapp.Logger.Error("Unknown message type: %v", err)
+        }
+        xapp.Rmr.Free(msg.Mbuf)
+}
+
 func (c *Control) handleUpdateToRoutingManagerRequest(params *xapp.RMRParams) {
 
        msg := sbi.RMRParams{params}
@@ -122,14 +144,14 @@ func (c *Control) handleUpdateToRoutingManagerRequest(params *xapp.RMRParams) {
                return
        }
 
-       ep := sbiEngine.CreateEndpoint(string(params.Payload))
-       if ep == nil {
+        ep,whid := sbiEngine.CreateEndpoint(string(params.Payload),msg.String())
+       if ep == nil || whid < 0 {
                xapp.Logger.Error("Update Routing Table Request can't handle due to end point %s is not avail in complete ep list: ", string(params.Payload))
                return
        }
 
        policies := rpeEngine.GeneratePolicies(rtmgr.Eps, data)
-       err = sbiEngine.DistributeToEp(policies, ep)
+       err = sbiEngine.DistributeToEp(policies, *ep, whid)
        if err != nil {
                xapp.Logger.Error("Routing table cannot be published due to: " + err.Error())
                return
@@ -140,10 +162,14 @@ func sendRoutesToAll() (err error) {
 
         m.Lock()
         data, err := sdlEngine.ReadAll(xapp.Config.GetString("rtfile"))
+       fmt.Printf("data = %v,%v,%v",data,sdlEngine,sbiEngine)
         m.Unlock()
         if err != nil || data == nil {
                 return errors.New("Cannot get data from sdl interface due to: " + err.Error())
         }
+       if sbiEngine == nil {
+               fmt.Printf("SBI is nil")
+       }
         sbiEngine.UpdateEndpoints(data)
         policies := rpeEngine.GeneratePolicies(rtmgr.Eps, data)
         err = sbiEngine.DistributeAll(policies)