Taking xapp-fwk 0.8.3-1
[ric-plt/rtmgr.git] / pkg / rpe / rmr.go
index 860c1eb..8279e17 100644 (file)
@@ -32,9 +32,10 @@ package rpe
 
 import (
        "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+       "routing-manager/pkg/models"
        "routing-manager/pkg/rtmgr"
        "strconv"
-       //"strings"
+       "strings"
 )
 
 type Rmr struct {
@@ -78,43 +79,99 @@ func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents,
                                group += ";" + member
                        }
                }
-               rawrte += group
 
-                if (rte.RouteType == "%meid") {
-                        rawrte += group + rte.RouteType
-                }
+               if rte.RouteType == "%meid" {
+                       rawrte += "%" + "meid"
+               } else {
+                       rawrte += group
+               }
 
                rawrt = append(rawrt, rawrte+"\n")
        }
+       for _, val := range rtmgr.DynamicRouteList {
+               rawrt = append(rawrt, val)
+       }
+
        rawrt = append(rawrt, key+"newrt|end\n")
-        count := 0
-/*     meidrt := key +"meid_map|start\n"
-       for e2tkey, value := range rcs.E2Ts {
-               xapp.Logger.Debug("rmr.E2T Key: %v", e2tkey)
-               xapp.Logger.Debug("rmr.E2T Value: %v", value)
-               xapp.Logger.Debug("rmr.E2T RAN List: %v", rcs.E2Ts[e2tkey].Ranlist)
-               if ( len(rcs.E2Ts[e2tkey].Ranlist) != 0 ) {
-                       ranList := strings.Join(rcs.E2Ts[e2tkey].Ranlist, " ")
-                       meidrt += key + "mme_ar|" + e2tkey + "|" + ranList + "\n"
+       count := 0
+
+       rawrt = append(rawrt, key+"meid_map|start\n")
+       keys := make(map[string]RouteIndex)
+       for _, value := range rcs.MeidMap {
+               if _, v := keys[key+value+"\n"]; !v {
+                       rawrt = append(rawrt, key+value+"\n")
+                       appendedindex := uint16(len(rawrt) - 1)
+                       keys[key+value+"\n"] = RouteIndex{true, appendedindex}
                        count++
-               } else {
-               xapp.Logger.Debug("rmr.E2T Empty RAN LIST for FQDN: %v", e2tkey)
+               }
+               if strings.Contains(value, "mme_ar") {
+                       tmpstr := strings.Split(value, "|")
+
+                       //MEID entry for mme_ar must always contain 3 strings speartred by | i.e "mme_ar|<string1>|<string2>"
+                       MEID := strings.TrimSuffix(tmpstr[2], "\n")
+
+                       mapindex := "mme_del|" + MEID + "\n"
+                       i := keys[mapindex].index
+                       if keys[mapindex].flag {
+                               copy(rawrt[i:], rawrt[i+1:])
+                               rawrt[len(rawrt)-1] = ""
+                               rawrt = rawrt[:len(rawrt)-1]
+                               delete(keys, mapindex)
+                               count--
+                       }
                }
        }
-        meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n" */
-       meidrt := key +"meid_map|start\n"
-        for _, value := range rcs.MeidMap {
-            meidrt += key + value + "\n"
-            count++
-        }
-        meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n"
-
-       rawrt = append(rawrt, meidrt)
+       rawrt = append(rawrt, key+"meid_map|end|"+strconv.Itoa(count)+"\n")
+
        xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rawrt)
        xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rcs)
        return &rawrt
 }
 
+/*
+Produces the raw route message consumable by RMR
+*/
+func (r *Rmr) generatePartialRMRPolicies(eps rtmgr.Endpoints, xappSubData *models.XappSubscriptionData, key string, updatetype rtmgr.RMRUpdateType) *[]string {
+       rawrt := []string{key + "updatert|start\n"}
+       rt := r.generatePartialRouteTable(eps, xappSubData, updatetype)
+       for _, rte := range *rt {
+               rawrte := key + "mse|" + rte.MessageType
+               for _, tx := range rte.TxList {
+                       rawrte += "," + tx.Ip + ":" + strconv.Itoa(int(tx.Port))
+               }
+               rawrte += "|" + strconv.Itoa(int(rte.SubID)) + "|"
+               group := ""
+               for _, rxg := range rte.RxGroups {
+                       member := ""
+                       for _, rx := range rxg {
+                               if member == "" {
+                                       member += rx.Ip + ":" + strconv.Itoa(int(rx.Port))
+                               } else {
+                                       member += "," + rx.Ip + ":" + strconv.Itoa(int(rx.Port))
+                               }
+                       }
+                       if group == "" {
+                               group += member
+                       } else {
+                               group += ";" + member
+                       }
+               }
+
+               if rte.RouteType == "%meid" {
+                       rawrte += "%" + "meid"
+               } else {
+                       rawrte += group
+               }
+
+               rawrt = append(rawrt, rawrte+"\n")
+       }
+
+       rawrt = append(rawrt, key+"updatert|end\n")
+       //count := 0
+
+       xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rawrt)
+       return &rawrt
+}
 func (r *RmrPush) GeneratePolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents) *[]string {
        xapp.Logger.Debug("Invoked rmr.GeneratePolicies, args: %v: ", eps)
        return r.generateRMRPolicies(eps, rcs, "")
@@ -123,3 +180,8 @@ func (r *RmrPush) GeneratePolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents
 func (r *RmrPush) GenerateRouteTable(eps rtmgr.Endpoints) *rtmgr.RouteTable {
        return r.generateRouteTable(eps)
 }
+
+func (r *RmrPush) GeneratePartialPolicies(eps rtmgr.Endpoints, xappSubData *models.XappSubscriptionData, updatetype rtmgr.RMRUpdateType) *[]string {
+       xapp.Logger.Debug("Invoked rmr.GeneratePartialRMR, args: %v: ", eps)
+       return r.generatePartialRMRPolicies(eps, xappSubData, "", updatetype)
+}