3 ==================================================================================
4 Copyright (c) 2019 AT&T Intellectual Property.
5 Copyright (c) 2019 Nokia
7 Licensed under the Apache License, Version 2.0 (the "License");
8 you may not use this file except in compliance with the License.
9 You may obtain a copy of the License at
11 http://www.apache.org/licenses/LICENSE-2.0
13 Unless required by applicable law or agreed to in writing, software
14 distributed under the License is distributed on an "AS IS" BASIS,
15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 See the License for the specific language governing permissions and
17 limitations under the License.
19 This source code is part of the near-RT RIC (RAN Intelligent Controller)
20 platform project (RICP).
22 ==================================================================================
26 Abstract: Contains SBI (SouthBound Interface) module definitions and generic SBI components
34 "routing-manager/pkg/rtmgr"
38 const DefaultNngPipelineSocketPrefix = "tcp://"
39 const DefaultNngPipelineSocketNumber = 4561
40 const PlatformType = "platform"
43 SupportedSbis = []*EngineConfig{
47 Protocol: "nngpipeline",
48 Instance: NewNngPush(),
54 func GetSbi(sbiName string) (Engine, error) {
55 for _, sbi := range SupportedSbis {
56 if sbi.Name == sbiName && sbi.IsAvailable {
57 return sbi.Instance, nil
60 return nil, errors.New("SBI:" + sbiName + " is not supported or still not available")
66 func (s *Sbi) pruneEndpointList(sbi Engine) {
67 rtmgr.Logger.Debug("pruneEndpointList invoked.")
68 for _, ep := range rtmgr.Eps {
70 rtmgr.Logger.Debug("deleting %v", ep)
71 sbi.DeleteEndpoint(ep)
72 delete(rtmgr.Eps, ep.Uuid)
74 rtmgr.Eps[ep.Uuid].Keepalive = false
79 func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbi Engine) {
80 for _, xapp := range (*rcs).XApps {
81 for _, instance := range xapp.Instances {
82 uuid := instance.Ip + ":" + strconv.Itoa(int(instance.Port))
83 if _, ok := rtmgr.Eps[uuid]; ok {
84 rtmgr.Eps[uuid].Keepalive = true
86 ep := &rtmgr.Endpoint{
92 TxMessages: instance.TxMessages,
93 RxMessages: instance.RxMessages,
98 if err := sbi.AddEndpoint(ep); err != nil {
99 rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
106 s.updatePlatformEndpoints(&((*rcs).Pcs), sbi)
107 s.pruneEndpointList(sbi)
110 func (s *Sbi) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbi Engine) {
111 rtmgr.Logger.Debug("updatePlatformEndpoints invoked. PCS: %v", *pcs)
112 for _, pc := range *pcs {
113 uuid := pc.Fqdn + ":" + strconv.Itoa(int(pc.Port))
114 if _, ok := rtmgr.Eps[uuid]; ok {
115 rtmgr.Eps[uuid].Keepalive = true
117 ep := &rtmgr.Endpoint{
120 XAppType: PlatformType,
123 TxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["tx"],
124 RxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["rx"],
129 rtmgr.Logger.Debug("ep created: %v", ep)
130 if err := sbi.AddEndpoint(ep); err != nil {
131 rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())