fixed issue in meid table if same meid is associated with different E2T
[ric-plt/rtmgr.git] / pkg / rpe / rmr.go
index 56d2ff7..87c0e2b 100644 (file)
@@ -79,10 +79,11 @@ func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents,
                                group += ";" + member
                        }
                }
-               rawrte += group
 
                if rte.RouteType == "%meid" {
-                       rawrte += group + rte.RouteType
+                       rawrte += "%" + "meid"
+               } else {
+                       rawrte += group
                }
 
                rawrt = append(rawrt, rawrte+"\n")
@@ -95,30 +96,35 @@ func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents,
        count := 0
 
        rawrt = append(rawrt, key+"meid_map|start\n")
-       keys := make(map[string]RouteIndex)
+       
+       keys := make(map[string]MeidEntry)
+       MEID := ""
+       E2TIP := ""
+       RECTYP := ""
        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++
+               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")
+                       E2TIP = strings.TrimSuffix(tmpstr[1], "\n")
+                       RECTYP = "mme_ar"
+               } else if strings.Contains(value, "mme_del") {
+                       tmpstr := strings.Split(value, "|")
+                       MEID = strings.TrimSuffix(tmpstr[1], "\n")
+                       E2TIP = ""
+                       RECTYP = "mme_del"
                }
-               if strings.Contains(value,"mme_ar") {
-                   tmpstr := strings.Split(value,"|")
-
-                   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--
-                   }
-        }
+               keys[MEID] = MeidEntry{RECTYP, E2TIP}
        }
+
+       for k, v := range keys {
+               if v.recordtype == "mme_ar" {
+                       rawrt = append(rawrt, key+v.recordtype+"|"+v.e2tip+"|"+k+"\n")
+                   count++
+               }
+       }
+
+       rawrt = removeEmptyStrings(rawrt)
        rawrt = append(rawrt, key+"meid_map|end|"+strconv.Itoa(count)+"\n")
 
        xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rawrt)
@@ -154,10 +160,11 @@ func (r *Rmr) generatePartialRMRPolicies(eps rtmgr.Endpoints, xappSubData *model
                                group += ";" + member
                        }
                }
-               rawrte += group
 
                if rte.RouteType == "%meid" {
-                       rawrte += group + rte.RouteType
+                       rawrte += "%" + "meid"
+               } else {
+                       rawrte += group
                }
 
                rawrt = append(rawrt, rawrte+"\n")
@@ -179,6 +186,16 @@ func (r *RmrPush) GenerateRouteTable(eps rtmgr.Endpoints) *rtmgr.RouteTable {
 }
 
 func (r *RmrPush) GeneratePartialPolicies(eps rtmgr.Endpoints, xappSubData *models.XappSubscriptionData, updatetype rtmgr.RMRUpdateType) *[]string {
-       xapp.Logger.Debug("Invoked rmr.GeneratePartialRMR, args: %v: ", eps)
+       xapp.Logger.Debug("Invoked rmr.GeneratePartialPolicies, args: %v: ", eps)
        return r.generatePartialRMRPolicies(eps, xappSubData, "", updatetype)
 }
+
+func removeEmptyStrings(s []string) []string {
+       var r []string
+       for _, str := range s {
+               if str != "" {
+                       r = append(r, str)
+               }
+       }
+       return r
+}