Added RSM platform component routes and xApp Manager interface changes
[ric-plt/rtmgr.git] / pkg / rtmgr / rtmgr.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 /*
20   Mnemonic:     rtmgr/rtmgr.go
21   Abstract:     Contains RTMGR (Routing Manager) module's generic variables and functions
22   Date:         26 March 2019
23 */
24
25 package rtmgr
26
27 import (
28         "encoding/json"
29         "errors"
30         "github.com/jcelliott/lumber"
31         "io/ioutil"
32         "os"
33         "strings"
34 )
35
36 var (
37         //TODO: temporary solution
38         // CamelCase Message Types are for being able to test with old fashioned admin control xApps
39         // TODO: Add a separate message definition file (Not using the one from RMR to not create dependency on that library).
40         MessageTypes = map[string]string{
41                 "HandoverPreparation":                   "0",
42                 "HandoverCancel":                        "1",
43                 "LoadIndication":                        "2",
44                 "ErrorIndication":                       "3",
45                 "SNStatusTransfer":                      "4",
46                 "UEContextRelease":                      "5",
47                 "X2Setup":                               "6",
48                 "Reset":                                 "7",
49                 "E2_TERM_INIT":                       "1100",
50                 "RAN_CONNECTED":                      "1200",
51                 "RAN_RESTARTED":                      "1210",
52                 "RAN_RECONFIGURED":                   "1220",
53                 "RIC_SCTP_CLEAR_ALL":                 "1090",
54                 "RIC_SCTP_CONNECTION_FAILURE":        "1080",
55                 "RIC_X2_SETUP":                      "10000",
56                 "RIC_X2_RESPONSE":                   "10001",
57                 "RIC_X2_RESOURCE_STATUS_REQUEST":    "10002",
58                 "RIC_X2_RESOURCE_STATUS_RESPONSE":   "10003",
59                 "RIC_X2_LOAD_INFORMATION":           "10004",
60                 "RIC_E2_TERMINATION_HC_REQUEST":     "10005",
61                 "RIC_E2_TERMINATION_HC_RESPONSE":    "10006",
62                 "RIC_E2_MANAGER_HC_REQUEST":         "10007",
63                 "RIC_E2_MANAGER_HC_RESPONSE":        "10008",
64                 "RIC_ENB_LOAD_INFORMATION":          "10020",
65                 "RIC_ERROR_INDICATION":              "10030",
66                 "RIC_X2_SETUP_REQ":                  "10060",
67                 "RIC_X2_SETUP_RESP":                 "10061",
68                 "RIC_X2_SETUP_FAILURE":              "10062",
69                 "RIC_X2_RESET_REQ":                  "10070",
70                 "RIC_X2_RESET_RESP":                 "10071",
71                 "RIC_ENB_CONF_UPDATE":               "10080",
72                 "RIC_ENB_CONF_UPDATE_ACK":           "10081",
73                 "RIC_ENB_CONF_UPDATE_FAILURE":       "10082",
74                 "RIC_RES_STATUS_REQ":                "10090",
75                 "RIC_RES_STATUS_RESP":               "10091",
76                 "RIC_RES_STATUS_FAILURE":            "10092",
77                 "RIC_RESOURCE_STATUS_UPDATE":        "10100",
78                 "RIC_ENDC_X2_SETUP_REQ":             "10360",
79                 "RIC_ENDC_X2_SETUP_RESP":            "10361",
80                 "RIC_ENDC_X2_SETUP_FAILURE":         "10362",
81                 "RIC_ENDC_CONF_UPDATE":              "10370",
82                 "RIC_ENDC_CONF_UPDATE_ACK":          "10371",
83                 "RIC_ENDC_CONF_UPDATE_FAILURE":      "10372",
84                 "RIC_GNB_STATUS_INDICATION":         "10450",
85                 "RIC_SUB_REQ":                       "12010",
86                 "RIC_SUB_RESP":                      "12011",
87                 "RIC_SUB_FAILURE":                   "12012",
88                 "RIC_SUB_DEL_REQ":                   "12020",
89                 "RIC_SUB_DEL_RESP":                  "12021",
90                 "RIC_SUB_DEL_FAILURE":               "12022",
91                 "RIC_CONTROL_REQ":                   "12040",
92                 "RIC_CONTROL_ACK":                   "12041",
93                 "RIC_CONTROL_FAILURE":               "12042",
94                 "RIC_INDICATION":                    "12050",
95                 "DC_ADM_INT_CONTROL":                "20000",
96                 "DC_ADM_INT_CONTROL_ACK":            "20001",
97                 "RIC_CONTROL_XAPP_CONFIG_REQUEST":  "100000",
98                 "RIC_CONTROL_XAPP_CONFIG_RESPONSE": "100001",
99         }
100
101         // Messagetype mappings for the platform components.
102         // This implements static default routes needed by the RIC. Needs to be changed in case new components/message types needes to be added/updated.
103         // Representation : {"componentName1": {"tx": <tx message type list>, "rx": <rx message type list>}}
104         PLATFORMMESSAGETYPES = map[string]map[string][]string{
105                 "E2TERM": {"tx": []string{"RIC_X2_SETUP_REQ", "RIC_X2_SETUP_RESP", "RIC_X2_SETUP_FAILURE", "RIC_X2_RESET", "RIC_X2_RESET_RESP", "RIC_ENDC_X2_SETUP_REQ", "RIC_ENDC_X2_SETUP_RESP", "RIC_ENDC_X2_SETUP_FAILURE", "RIC_SUB_RESP", "RIC_SUB_FAILURE", "RIC_SUB_DEL_RESP", "RIC_SUB_DEL_FAILURE"}, "rx": []string{"RIC_X2_SETUP_REQ", "RIC_X2_SETUP_RESP", "RIC_X2_SETUP_FAILURE", "RIC_X2_RESET", "RIC_X2_RESET_RESP", "RIC_ENDC_X2_SETUP_REQ", "RIC_ENDC_X2_SETUP_RESP", "RIC_ENDC_X2_SETUP_FAILURE", "RIC_SUB_REQ", "RIC_SUB_DEL_REQ", "RIC_CONTROL_REQ"}},
106                 "E2MAN":  {"tx": []string{"RIC_X2_SETUP_REQ", "RIC_X2_SETUP_RESP", "RIC_X2_SETUP_FAILURE", "RIC_X2_RESET", "RIC_X2_RESET_RESP", "RIC_ENDC_X2_SETUP_REQ", "RIC_ENDC_X2_SETUP_RESP", "RIC_ENDC_X2_SETUP_FAILURE"}, "rx": []string{"RIC_X2_SETUP_REQ", "RIC_X2_SETUP_RESP", "RIC_X2_SETUP_FAILURE", "RIC_X2_RESET", "RIC_X2_RESET_RESP", "RIC_ENDC_X2_SETUP_REQ", "RIC_ENDC_X2_SETUP_RESP", "RIC_ENDC_X2_SETUP_FAILURE"}},
107                 "SUBMAN": {"tx": []string{"RIC_SUB_REQ", "RIC_SUB_DEL_REQ"}, "rx": []string{"RIC_SUB_RESP", "RIC_SUB_FAILURE", "RIC_SUB_DEL_RESP", "RIC_SUB_DEL_FAILURE"}},
108                 "UEMAN":  {"tx": []string{"RIC_CONTROL_REQ"}, "rx": []string{}},
109                 "RSM":    {"tx": []string{"RIC_RES_STATUS_REQ"}, "rx": []string{"RAN_CONNECTED", "RAN_RESTARTED", "RAN_RECONFIGURED"}},
110         }
111
112         Logger = lumber.NewConsoleLogger(lumber.INFO)
113         Eps    Endpoints
114         Subs   SubscriptionList
115 )
116
117 func SetLogLevel(loglevel string) error {
118         switch strings.ToUpper(loglevel) {
119         case "INFO":
120                 Logger.Level(lumber.INFO)
121                 return nil
122         case "WARN":
123                 Logger.Level(lumber.WARN)
124                 return nil
125         case "ERROR":
126                 Logger.Level(lumber.ERROR)
127                 return nil
128         case "DEBUG":
129                 Logger.Info("Debug mode")
130                 Logger.Level(lumber.DEBUG)
131                 return nil
132         case "TRACE":
133                 Logger.Info("Trace mode")
134                 Logger.Level(lumber.TRACE)
135                 return nil      
136         default:
137                 Logger.Error("invalid log mode, setting info")
138                 Logger.Level(lumber.INFO)
139                 return errors.New("invalid log level, setting info")
140         }
141 }
142
143 func GetPlatformComponents(configfile string) (*PlatformComponents, error) {
144         Logger.Debug("Invoked rtmgr.GetPlatformComponents(" + configfile + ")")
145         var rcfg ConfigRtmgr
146         jsonFile, err := os.Open(configfile)
147         if err != nil {
148                 return nil, errors.New("cannot open the file due to: " + err.Error())
149         }
150         defer jsonFile.Close()
151         byteValue, err := ioutil.ReadAll(jsonFile)
152         if err != nil {
153                 return nil, errors.New("cannot read the file due to: " + err.Error())
154         }
155         err = json.Unmarshal(byteValue, &rcfg)
156         if err != nil {
157                 return nil, errors.New("cannot parse data due to: " + err.Error())
158         }
159         Logger.Debug("Platform components read from the configfile:  %v", rcfg.Pcs)
160         return &(rcfg.Pcs), nil
161 }