blob: 9cda9d9cdf601bf53e823937da9921423c117a67 [file] [log] [blame]
Balint Uveges871fa392019-04-02 20:31:11 +00001/*
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/*
20 Mnemonic: rmr.go
21 Abstract: RMR Route Policy implementation
22 Produces RMR (RIC Management Routing) formatted route messages
23 Date: 16 March 2019
24*/
25
26package rpe
27
Peter Szilagyi16d84d62019-04-24 14:51:02 +000028import (
kalnagy92162652019-07-02 15:15:49 +020029 "routing-manager/pkg/rtmgr"
Peter Szilagyi16d84d62019-04-24 14:51:02 +000030 "strconv"
31)
Balint Uveges871fa392019-04-02 20:31:11 +000032
kalnagy92162652019-07-02 15:15:49 +020033type Rmr struct {
34 Rpe
35}
36
37type RmrPub struct {
38 Rmr
39}
40
41type RmrPush struct {
42 Rmr
43}
44
45func NewRmrPub() *RmrPub {
46 instance := new(RmrPub)
47 return instance
48}
49
50func NewRmrPush() *RmrPush {
51 instance := new(RmrPush)
52 return instance
53}
54
Balint Uveges871fa392019-04-02 20:31:11 +000055/*
56Produces the raw route message consumable by RMR
57*/
kalnagy92162652019-07-02 15:15:49 +020058func (r *Rmr) generateRMRPolicies(eps rtmgr.Endpoints, key string) *[]string {
Balint Uveges871fa392019-04-02 20:31:11 +000059 rawrt := []string{key + "newrt|start\n"}
kalnagy92162652019-07-02 15:15:49 +020060 rt := r.getRouteTable(eps)
Balint Uveges871fa392019-04-02 20:31:11 +000061 for _, rte := range *rt {
1000044e90ddda2019-08-01 09:58:52 +020062 rawrte := key + "mse|" + rte.MessageType
Balint Uveges871fa392019-04-02 20:31:11 +000063 for _, tx := range rte.TxList {
Peter Szilagyi16d84d62019-04-24 14:51:02 +000064 rawrte += "," + tx.Ip + ":" + strconv.Itoa(int(tx.Port))
Balint Uveges871fa392019-04-02 20:31:11 +000065 }
kalnagy92162652019-07-02 15:15:49 +020066 rawrte += "|" + strconv.Itoa(int(rte.SubID)) + "|"
Balint Uveges871fa392019-04-02 20:31:11 +000067 group := ""
68 for _, rxg := range rte.RxGroups {
69 member := ""
70 for _, rx := range rxg {
71 if member == "" {
Peter Szilagyi16d84d62019-04-24 14:51:02 +000072 member += rx.Ip + ":" + strconv.Itoa(int(rx.Port))
Balint Uveges871fa392019-04-02 20:31:11 +000073 } else {
Peter Szilagyi16d84d62019-04-24 14:51:02 +000074 member += "," + rx.Ip + ":" + strconv.Itoa(int(rx.Port))
Balint Uveges871fa392019-04-02 20:31:11 +000075 }
76 }
77 if group == "" {
78 group += member
79 } else {
80 group += ";" + member
81 }
82 }
83 rawrte += group
84 rawrt = append(rawrt, rawrte+"\n")
85 }
86 rawrt = append(rawrt, key+"newrt|end\n")
kalnagy92162652019-07-02 15:15:49 +020087 rtmgr.Logger.Debug("rmr.GeneratePolicies returns: %v", rawrt)
Balint Uveges871fa392019-04-02 20:31:11 +000088 return &rawrt
89}
Peter Szilagyi16d84d62019-04-24 14:51:02 +000090
kalnagy92162652019-07-02 15:15:49 +020091func (r *RmrPub) GeneratePolicies(eps rtmgr.Endpoints) *[]string {
92 rtmgr.Logger.Debug("Invoked rmr.GeneratePolicies, args: %v: ", eps)
93 return r.generateRMRPolicies(eps, "00000 ")
Peter Szilagyi16d84d62019-04-24 14:51:02 +000094}
95
kalnagy92162652019-07-02 15:15:49 +020096func (r *RmrPush) GeneratePolicies(eps rtmgr.Endpoints) *[]string {
97 rtmgr.Logger.Debug("Invoked rmr.GeneratePolicies, args: %v: ", eps)
98 return r.generateRMRPolicies(eps, "")
Peter Szilagyi16d84d62019-04-24 14:51:02 +000099}
kalnagy92162652019-07-02 15:15:49 +0200100
101func (r *RmrPub) GetRouteTable(eps rtmgr.Endpoints) *rtmgr.RouteTable {
102 return r.getRouteTable(eps)
103}
104
105func (r *RmrPush) GetRouteTable(eps rtmgr.Endpoints) *rtmgr.RouteTable {
106 return r.getRouteTable(eps)
107}
108