X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Frpe%2Frmr.go;h=544769362658fe34deea99a5f8d0bed95a8e2f58;hb=e27ecb21e2be4644bfc0da5b1e8670f4dd1f9c81;hp=80323a3131096ed2785010e33d49735804270130;hpb=e110ee0d197cd7d61faf4ad761ebad3bf0c68121;p=ric-plt%2Frtmgr.git diff --git a/pkg/rpe/rmr.go b/pkg/rpe/rmr.go index 80323a3..5447693 100644 --- a/pkg/rpe/rmr.go +++ b/pkg/rpe/rmr.go @@ -32,6 +32,7 @@ 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" @@ -78,37 +79,101 @@ 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||" + 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] + rawrt[i] = "" + delete(keys, mapindex) + count-- + } } } - meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n" + rawrt = removeEmptyStrings(rawrt) + rawrt = append(rawrt, key+"meid_map|end|"+strconv.Itoa(count)+"\n") - rawrt = append(rawrt, meidrt) 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, "") @@ -117,3 +182,18 @@ 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.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 +}