MEID tableupdated incrementally rather than full update
[ric-plt/rtmgr.git] / pkg / rpe / rmr.go
1 /*
2 ==================================================================================
3   Copyright (c) 2019 AT&T Intellectual Property.
4   Copyright (c) 2019 Nokia
5
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9
10        http://www.apache.org/licenses/LICENSE-2.0
11
12    Unless required by applicable law or agreed to in writing, software
13    distributed under the License is distributed on an "AS IS" BASIS,
14    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15    See the License for the specific language governing permissions and
16    limitations under the License.
17
18
19    This source code is part of the near-RT RIC (RAN Intelligent Controller)
20    platform project (RICP).
21
22 ==================================================================================
23 */
24 /*
25   Mnemonic:     rmr.go
26   Abstract:     RMR Route Policy implementation
27                 Produces RMR (RIC Management Routing) formatted route messages
28   Date:         16 March 2019
29 */
30
31 package rpe
32
33 import (
34         "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
35         "routing-manager/pkg/rtmgr"
36         "strconv"
37         //"strings"
38 )
39
40 type Rmr struct {
41         Rpe
42 }
43
44 type RmrPush struct {
45         Rmr
46 }
47
48 func NewRmrPush() *RmrPush {
49         instance := new(RmrPush)
50         return instance
51 }
52
53 /*
54 Produces the raw route message consumable by RMR
55 */
56 func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents, key string) *[]string {
57         rawrt := []string{key + "newrt|start\n"}
58         rt := r.generateRouteTable(eps)
59         for _, rte := range *rt {
60                 rawrte := key + "mse|" + rte.MessageType
61                 for _, tx := range rte.TxList {
62                         rawrte += "," + tx.Ip + ":" + strconv.Itoa(int(tx.Port))
63                 }
64                 rawrte += "|" + strconv.Itoa(int(rte.SubID)) + "|"
65                 group := ""
66                 for _, rxg := range rte.RxGroups {
67                         member := ""
68                         for _, rx := range rxg {
69                                 if member == "" {
70                                         member += rx.Ip + ":" + strconv.Itoa(int(rx.Port))
71                                 } else {
72                                         member += "," + rx.Ip + ":" + strconv.Itoa(int(rx.Port))
73                                 }
74                         }
75                         if group == "" {
76                                 group += member
77                         } else {
78                                 group += ";" + member
79                         }
80                 }
81                 rawrte += group
82
83                 if (rte.RouteType == "%meid") {
84                         rawrte += group + rte.RouteType
85                 }
86
87                 rawrt = append(rawrt, rawrte+"\n")
88         }
89         rawrt = append(rawrt, key+"newrt|end\n")
90         count := 0
91 /*      meidrt := key +"meid_map|start\n"
92         for e2tkey, value := range rcs.E2Ts {
93                 xapp.Logger.Debug("rmr.E2T Key: %v", e2tkey)
94                 xapp.Logger.Debug("rmr.E2T Value: %v", value)
95                 xapp.Logger.Debug("rmr.E2T RAN List: %v", rcs.E2Ts[e2tkey].Ranlist)
96                 if ( len(rcs.E2Ts[e2tkey].Ranlist) != 0 ) {
97                         ranList := strings.Join(rcs.E2Ts[e2tkey].Ranlist, " ")
98                         meidrt += key + "mme_ar|" + e2tkey + "|" + ranList + "\n"
99                         count++
100                 } else {
101                 xapp.Logger.Debug("rmr.E2T Empty RAN LIST for FQDN: %v", e2tkey)
102                 }
103         }
104         meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n" */
105         meidrt := key +"meid_map|start\n"
106         for _, value := range rcs.MeidMap {
107             meidrt += key + value + "\n"
108             count++
109         }
110         meidrt += key+"meid_map|end|" + strconv.Itoa(count) +"\n"
111
112         rawrt = append(rawrt, meidrt)
113         xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rawrt)
114         xapp.Logger.Debug("rmr.GeneratePolicies returns: %v", rcs)
115         return &rawrt
116 }
117
118 func (r *RmrPush) GeneratePolicies(eps rtmgr.Endpoints, rcs *rtmgr.RicComponents) *[]string {
119         xapp.Logger.Debug("Invoked rmr.GeneratePolicies, args: %v: ", eps)
120         return r.generateRMRPolicies(eps, rcs, "")
121 }
122
123 func (r *RmrPush) GenerateRouteTable(eps rtmgr.Endpoints) *rtmgr.RouteTable {
124         return r.generateRouteTable(eps)
125 }