blob: 0d13bb99a7095413ae2c377fc87017222dfa5ceb [file] [log] [blame]
Balint Uveges871fa392019-04-02 20:31:11 +00001/*
Peter Szilagyi16d84d62019-04-24 14:51:02 +00002w
Balint Uveges871fa392019-04-02 20:31:11 +00003==================================================================================
4 Copyright (c) 2019 AT&T Intellectual Property.
5 Copyright (c) 2019 Nokia
6
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
10
11 http://www.apache.org/licenses/LICENSE-2.0
12
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.
18==================================================================================
19*/
20/*
21 Mnemonic: sbi.go
22 Abstract: Contains SBI (SouthBound Interface) module definitions and generic SBI components
23 Date: 16 March 2019
24*/
25
26package sbi
27
28import (
29 "errors"
kalnagy92162652019-07-02 15:15:49 +020030 "routing-manager/pkg/rtmgr"
zkoczkaeb2ff0d2019-09-26 16:59:54 +020031 "strconv"
Balint Uveges871fa392019-04-02 20:31:11 +000032)
33
zkoczkaaaf8d392019-10-02 17:16:06 +020034const DefaultNngPipelineSocketPrefix = "tcp://"
35const DefaultNngPipelineSocketNumber = 4561
36const PlatformType = "platform"
Peter Szilagyi16d84d62019-04-24 14:51:02 +000037
Balint Uveges871fa392019-04-02 20:31:11 +000038var (
zkoczkaaaf8d392019-10-02 17:16:06 +020039 SupportedSbis = []*EngineConfig{
40 {
zkoczkaeb2ff0d2019-09-26 16:59:54 +020041 Name: "nngpush",
42 Version: "v1",
43 Protocol: "nngpipeline",
44 Instance: NewNngPush(),
45 IsAvailable: true,
46 },
Balint Uveges871fa392019-04-02 20:31:11 +000047 }
48)
49
zkoczkaaaf8d392019-10-02 17:16:06 +020050func GetSbi(sbiName string) (Engine, error) {
Balint Uveges871fa392019-04-02 20:31:11 +000051 for _, sbi := range SupportedSbis {
kalnagy92162652019-07-02 15:15:49 +020052 if sbi.Name == sbiName && sbi.IsAvailable {
53 return sbi.Instance, nil
Balint Uveges871fa392019-04-02 20:31:11 +000054 }
55 }
Peter Szilagyi16d84d62019-04-24 14:51:02 +000056 return nil, errors.New("SBI:" + sbiName + " is not supported or still not available")
57}
58
kalnagy92162652019-07-02 15:15:49 +020059type Sbi struct {
kalnagy92162652019-07-02 15:15:49 +020060}
61
zkoczkaaaf8d392019-10-02 17:16:06 +020062func (s *Sbi) pruneEndpointList(sbi Engine) {
zkoczkaeb2ff0d2019-09-26 16:59:54 +020063 for _, ep := range rtmgr.Eps {
64 if !ep.Keepalive {
65 rtmgr.Logger.Debug("deleting %v", ep)
66 sbi.DeleteEndpoint(ep)
67 delete(rtmgr.Eps, ep.Uuid)
68 } else {
69 rtmgr.Eps[ep.Uuid].Keepalive = false
70 }
71 }
Peter Szilagyi16d84d62019-04-24 14:51:02 +000072}
73
zkoczkaaaf8d392019-10-02 17:16:06 +020074func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbi Engine) {
75 for _, xapp := range (*rcs).XApps {
zkoczkaeb2ff0d2019-09-26 16:59:54 +020076 for _, instance := range xapp.Instances {
77 uuid := instance.Ip + ":" + strconv.Itoa(int(instance.Port))
78 if _, ok := rtmgr.Eps[uuid]; ok {
79 rtmgr.Eps[uuid].Keepalive = true
80 } else {
81 ep := &rtmgr.Endpoint{
zkoczkaaaf8d392019-10-02 17:16:06 +020082 Uuid: uuid,
83 Name: instance.Name,
84 XAppType: xapp.Name,
85 Ip: instance.Ip,
86 Port: instance.Port,
87 TxMessages: instance.TxMessages,
88 RxMessages: instance.RxMessages,
89 Socket: nil,
90 IsReady: false,
91 Keepalive: true,
zkoczkaeb2ff0d2019-09-26 16:59:54 +020092 }
zkoczkaaaf8d392019-10-02 17:16:06 +020093 if err := sbi.AddEndpoint(ep); err != nil {
zkoczkaeb2ff0d2019-09-26 16:59:54 +020094 rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
95 continue
96 }
97 rtmgr.Eps[uuid] = ep
98 }
99 }
100 }
zkoczkaaaf8d392019-10-02 17:16:06 +0200101 s.updatePlatformEndpoints(&((*rcs).Pcs), sbi)
102 s.pruneEndpointList(sbi)
Balint Uveges871fa392019-04-02 20:31:11 +0000103}
kalnagy92162652019-07-02 15:15:49 +0200104
zkoczkaaaf8d392019-10-02 17:16:06 +0200105func (s *Sbi) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbi Engine) {
kalnagy92162652019-07-02 15:15:49 +0200106 rtmgr.Logger.Debug("updatePlatformEndpoints invoked. PCS: %v", *pcs)
zkoczkaeb2ff0d2019-09-26 16:59:54 +0200107 for _, pc := range *pcs {
108 uuid := pc.Fqdn + ":" + strconv.Itoa(int(pc.Port))
109 if _, ok := rtmgr.Eps[uuid]; ok {
110 rtmgr.Eps[uuid].Keepalive = true
111 } else {
112 ep := &rtmgr.Endpoint{
zkoczkaaaf8d392019-10-02 17:16:06 +0200113 Uuid: uuid,
114 Name: pc.Name,
115 XAppType: PlatformType,
116 Ip: pc.Fqdn,
117 Port: pc.Port,
118 TxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["tx"],
119 RxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["rx"],
120 Socket: nil,
121 IsReady: false,
122 Keepalive: true,
zkoczkaeb2ff0d2019-09-26 16:59:54 +0200123 }
124 rtmgr.Logger.Debug("ep created: %v", ep)
zkoczkaaaf8d392019-10-02 17:16:06 +0200125 if err := sbi.AddEndpoint(ep); err != nil {
zkoczkaeb2ff0d2019-09-26 16:59:54 +0200126 rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
127 continue
128 }
129 rtmgr.Eps[uuid] = ep
130 }
131 }
kalnagy92162652019-07-02 15:15:49 +0200132}