Routing manager needs to support for xApps that terminate other protocols than E2
[ric-plt/rtmgr.git] / pkg / rtmgr / rtmgr.go
index 03e7c48..e5e0dcb 100644 (file)
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
+
+   This source code is part of the near-RT RIC (RAN Intelligent Controller)
+   platform project (RICP).
+
 ==================================================================================
 */
 /*
 ==================================================================================
 */
 /*
@@ -27,7 +31,8 @@ package rtmgr
 import (
        "encoding/json"
        "errors"
 import (
        "encoding/json"
        "errors"
-       "github.com/jcelliott/lumber"
+       "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+       "github.com/ghodss/yaml"
        "io/ioutil"
        "os"
        "strings"
        "io/ioutil"
        "os"
        "strings"
@@ -46,6 +51,14 @@ var (
                "UEContextRelease":                 "5",
                "X2Setup":                          "6",
                "Reset":                            "7",
                "UEContextRelease":                 "5",
                "X2Setup":                          "6",
                "Reset":                            "7",
+               "E2_TERM_INIT":                     "1100",
+               "E2_TERM_KEEP_ALIVE_REQ":            "1101",
+               "E2_TERM_KEEP_ALIVE_RESP":           "1102",
+               "RAN_CONNECTED":                    "1200",
+               "RAN_RESTARTED":                    "1210",
+               "RAN_RECONFIGURED":                 "1220",
+               "RIC_SCTP_CLEAR_ALL":               "1090",
+               "RIC_SCTP_CONNECTION_FAILURE":      "1080",
                "RIC_X2_SETUP":                     "10000",
                "RIC_X2_RESPONSE":                  "10001",
                "RIC_X2_RESOURCE_STATUS_REQUEST":   "10002",
                "RIC_X2_SETUP":                     "10000",
                "RIC_X2_RESPONSE":                  "10001",
                "RIC_X2_RESOURCE_STATUS_REQUEST":   "10002",
@@ -55,103 +68,103 @@ var (
                "RIC_E2_TERMINATION_HC_RESPONSE":   "10006",
                "RIC_E2_MANAGER_HC_REQUEST":        "10007",
                "RIC_E2_MANAGER_HC_RESPONSE":       "10008",
                "RIC_E2_TERMINATION_HC_RESPONSE":   "10006",
                "RIC_E2_MANAGER_HC_REQUEST":        "10007",
                "RIC_E2_MANAGER_HC_RESPONSE":       "10008",
+               "RIC_ENB_LOAD_INFORMATION":         "10020",
+               "RIC_ERROR_INDICATION":             "10030",
+               "RIC_X2_SETUP_REQ":                 "10060",
+               "RIC_X2_SETUP_RESP":                "10061",
+               "RIC_X2_SETUP_FAILURE":             "10062",
+               "RIC_X2_RESET_REQ":                 "10070",
+               "RIC_X2_RESET_RESP":                "10071",
+               "RIC_ENB_CONF_UPDATE":              "10080",
+               "RIC_ENB_CONF_UPDATE_ACK":          "10081",
+               "RIC_ENB_CONF_UPDATE_FAILURE":      "10082",
+               "RIC_RES_STATUS_REQ":               "10090",
+               "RIC_RES_STATUS_RESP":              "10091",
+               "RIC_RES_STATUS_FAILURE":           "10092",
+               "RIC_RESOURCE_STATUS_UPDATE":       "10100",
+               "RIC_ENDC_X2_SETUP_REQ":            "10360",
+               "RIC_ENDC_X2_SETUP_RESP":           "10361",
+               "RIC_ENDC_X2_SETUP_FAILURE":        "10362",
+               "RIC_ENDC_CONF_UPDATE":             "10370",
+               "RIC_ENDC_CONF_UPDATE_ACK":         "10371",
+               "RIC_ENDC_CONF_UPDATE_FAILURE":     "10372",
+               "RIC_GNB_STATUS_INDICATION":        "10450",
+               "RIC_SUB_REQ":                      "12010",
+               "RIC_SUB_RESP":                     "12011",
+               "RIC_SUB_FAILURE":                  "12012",
+               "RIC_SUB_DEL_REQ":                  "12020",
+               "RIC_SUB_DEL_RESP":                 "12021",
+               "RIC_SUB_DEL_FAILURE":              "12022",
+               "RIC_CONTROL_REQ":                  "12040",
+               "RIC_CONTROL_ACK":                  "12041",
+               "RIC_CONTROL_FAILURE":              "12042",
+               "RIC_INDICATION":                   "12050",
+               "DC_ADM_INT_CONTROL":               "20000",
+               "DC_ADM_INT_CONTROL_ACK":           "20001",
+               "A1_POLICY_REQ":                    "20010",
+               "A1_POLICY_RESPONSE":               "20011",
+               "A1_POLICY_QUERY":                  "20012",
                "RIC_CONTROL_XAPP_CONFIG_REQUEST":  "100000",
                "RIC_CONTROL_XAPP_CONFIG_RESPONSE": "100001",
                "RIC_CONTROL_XAPP_CONFIG_REQUEST":  "100000",
                "RIC_CONTROL_XAPP_CONFIG_RESPONSE": "100001",
-
-               "RIC_X2_SETUP_REQ":     "10060",
-               "RIC_X2_SETUP_RESP":    "10061",
-               "RIC_X2_SETUP_FAILURE": "10062",
-               "RIC_X2_RESET":         "10070",
-               "RIC_X2_RESET_RESP":    "10071",
-
-               "RIC_SUB_REQ":         "12010",
-               "RIC_SUB_RESP":        "12011",
-               "RIC_SUB_FAILURE":     "12012",
-               "RIC_SUB_DEL_REQ":     "12020",
-               "RIC_SUB_DEL_RESP":    "12021",
-               "RIC_SUB_DEL_FAILURE": "12022",
-
-               "RIC_CONTROL_REQ":              "12040",
-               "RIC_CONTROL_ACK":              "12041",
-               "RIC_CONTROL_FAILURE":          "12042",
-               "RIC_INDICATION":               "12050",
-               "RIC_ENDC_X2_SETUP_REQ":        "10360",
-               "RIC_ENDC_X2_SETUP_RESP":       "10361",
-               "RIC_ENDC_X2_SETUP_FAILURE":    "10362",
-               "RIC_ENDC_CONF_UPDATE":         "10370",
-               "RIC_ENDC_CONF_UPDATE_ACK":     "10371",
-               "RIC_ENDC_CONF_UPDATE_FAILURE": "10372",
-               "RIC_RES_STATUS_REQ":           "10090",
-               "RIC_RES_STATUS_RESP":          "10091",
-               "RIC_RES_STATUS_FAILURE":       "10092",
-               "RIC_ENB_CONF_UPDATE":          "10080",
-               "RIC_ENB_CONF_UPDATE_ACK":      "10081",
-               "RIC_ENB_CONF_UPDATE_FAILURE":  "10082",
-               "RIC_ENB_LOAD_INFORMATION":     "10020",
-               "RIC_GNB_STATUS_INDICATION":    "10450",
-               "RIC_RESOURCE_STATUS_UPDATE":   "10100",
-               "RIC_ERROR_INDICATION":         "10030",
-               "DC_ADM_INT_CONTROL":           "20000",
-               "DC_ADM_INT_CONTROL_ACK":       "20001",
        }
 
        // Messagetype mappings for the platform components.
        // This implements static default routes needed by the RIC. Needs to be changed in case new components/message types needes to be added/updated.
        // Representation : {"componentName1": {"tx": <tx message type list>, "rx": <rx message type list>}}
        PLATFORMMESSAGETYPES = map[string]map[string][]string{
        }
 
        // Messagetype mappings for the platform components.
        // This implements static default routes needed by the RIC. Needs to be changed in case new components/message types needes to be added/updated.
        // Representation : {"componentName1": {"tx": <tx message type list>, "rx": <rx message type list>}}
        PLATFORMMESSAGETYPES = map[string]map[string][]string{
-               "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"}},
-               "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"}},
-               "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"}},
-               "UEMAN":  {"tx": []string{"RIC_CONTROL_REQ"}, "rx": []string{}},
+               "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"}},
+               "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"}},
+               "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"}},
+               "UEMAN":      {"tx": []string{"RIC_CONTROL_REQ"}, "rx": []string{}},
+               "RSM":        {"tx": []string{"RIC_RES_STATUS_REQ"}, "rx": []string{"RAN_CONNECTED", "RAN_RESTARTED", "RAN_RECONFIGURED"}},
+               "A1MEDIATOR": {"tx": []string{}, "rx": []string{"A1_POLICY_QUERY", "A1_POLICY_RESPONSE"}},
        }
 
        }
 
-       Logger = lumber.NewConsoleLogger(lumber.INFO)
-       Eps    Endpoints
-       Subs   SubscriptionList
+       Eps  Endpoints
+       Subs SubscriptionList
+       PrsCfg  *PlatformRoutes
+       Mtype MessageTypeList
+       DynamicRouteList []string
 )
 
 )
 
-func SetLogLevel(loglevel string) error {
-       switch strings.ToUpper(loglevel) {
-       case "INFO":
-               Logger.Level(lumber.INFO)
-               return nil
-       case "WARN":
-               Logger.Level(lumber.WARN)
-               return nil
-       case "ERROR":
-               Logger.Level(lumber.ERROR)
-               return nil
-       case "DEBUG":
-               Logger.Info("Debug mode")
-               Logger.Level(lumber.DEBUG)
-               return nil
-       case "TRACE":
-               Logger.Info("Trace mode")
-               Logger.Level(lumber.TRACE)
-               return nil      
-       default:
-               Logger.Error("invalid log mode, setting info")
-               Logger.Level(lumber.INFO)
-               return errors.New("invalid log level, setting info")
-       }
-}
-
 func GetPlatformComponents(configfile string) (*PlatformComponents, error) {
 func GetPlatformComponents(configfile string) (*PlatformComponents, error) {
-       Logger.Debug("Invoked rtmgr.GetPlatformComponents(" + configfile + ")")
+       xapp.Logger.Debug("Invoked rtmgr.GetPlatformComponents(" + configfile + ")")
        var rcfg ConfigRtmgr
        var rcfg ConfigRtmgr
-       jsonFile, err := os.Open(configfile)
+       var rtroutes RtmgrRoutes
+       var mtypes MessageTypeIdentifier
+       yamlFile, err := os.Open(configfile)
        if err != nil {
                return nil, errors.New("cannot open the file due to: " + err.Error())
        }
        if err != nil {
                return nil, errors.New("cannot open the file due to: " + err.Error())
        }
-       defer jsonFile.Close()
-       byteValue, err := ioutil.ReadAll(jsonFile)
+       defer yamlFile.Close()
+       byteValue, err := ioutil.ReadAll(yamlFile)
+       if err != nil {
+               return nil, errors.New("cannot read the file due to: " + err.Error())
+       }
+       jsonByteValue, err := yaml.YAMLToJSON(byteValue)
        if err != nil {
                return nil, errors.New("cannot read the file due to: " + err.Error())
        }
        if err != nil {
                return nil, errors.New("cannot read the file due to: " + err.Error())
        }
-       err = json.Unmarshal(byteValue, &rcfg)
+       err = json.Unmarshal(jsonByteValue,&rtroutes)
+        if err != nil {
+               return nil, errors.New("cannot parse data due to: " + err.Error())
+        }
+        PrsCfg = &(rtroutes.Prs)
+
+       err = json.Unmarshal(jsonByteValue,&mtypes)
+        if err != nil {
+               return nil, errors.New("cannot parse data due to: " + err.Error())
+        } else {
+               xapp.Logger.Debug("Messgaetypes = %v", mtypes)
+               for _,m := range mtypes.Mit {
+                       splitstr := strings.Split(m,"=")
+                       Mtype[splitstr[0]] = splitstr[1]
+               }
+       }
+       err = json.Unmarshal(jsonByteValue, &rcfg)
        if err != nil {
                return nil, errors.New("cannot parse data due to: " + err.Error())
        }
        if err != nil {
                return nil, errors.New("cannot parse data due to: " + err.Error())
        }
-       Logger.Debug("Platform components read from the configfile:  %v", rcfg.Pcs)
+       xapp.Logger.Debug("Platform components read from the configfile:  %v", rcfg.Pcs)
        return &(rcfg.Pcs), nil
 }
        return &(rcfg.Pcs), nil
 }