import (
"errors"
+ //"fmt"
+ "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
+ //"net"
"routing-manager/pkg/rtmgr"
"strconv"
+ "strings"
)
-const DefaultNngPipelineSocketPrefix = "tcp://"
-const DefaultNngPipelineSocketNumber = 4561
+const DefaultRmrPipelineSocketPrefix = "tcp://"
+const DefaultRmrPipelineSocketNumber = 4561
const PlatformType = "platform"
var (
SupportedSbis = []*EngineConfig{
{
- Name: "nngpush",
+ Name: "rmrpush",
Version: "v1",
- Protocol: "nngpipeline",
- Instance: NewNngPush(),
+ Protocol: "rmrpipeline",
+ Instance: NewRmrPush(),
IsAvailable: true,
},
}
}
func (s *Sbi) pruneEndpointList(sbi Engine) {
- rtmgr.Logger.Debug("pruneEndpointList invoked.")
+ xapp.Logger.Debug("pruneEndpointList invoked.")
for _, ep := range rtmgr.Eps {
if !ep.Keepalive {
- rtmgr.Logger.Debug("deleting %v", ep)
+ xapp.Logger.Debug("deleting %v", ep)
sbi.DeleteEndpoint(ep)
delete(rtmgr.Eps, ep.Uuid)
} else {
- rtmgr.Eps[ep.Uuid].Keepalive = false
+ if rtmgr.Eps[ep.Uuid] != nil {
+ rtmgr.Eps[ep.Uuid].Keepalive = false
+ }
}
}
}
func (s *Sbi) updateEndpoints(rcs *rtmgr.RicComponents, sbi Engine) {
- for _, xapp := range (*rcs).XApps {
- for _, instance := range xapp.Instances {
+ for _, xapps := range (*rcs).XApps {
+ for _, instance := range xapps.Instances {
uuid := instance.Ip + ":" + strconv.Itoa(int(instance.Port))
if _, ok := rtmgr.Eps[uuid]; ok {
rtmgr.Eps[uuid].Keepalive = true
ep := &rtmgr.Endpoint{
Uuid: uuid,
Name: instance.Name,
- XAppType: xapp.Name,
+ XAppType: xapps.Name,
Ip: instance.Ip,
Port: instance.Port,
TxMessages: instance.TxMessages,
RxMessages: instance.RxMessages,
+ Policies: instance.Policies,
Socket: nil,
IsReady: false,
Keepalive: true,
}
if err := sbi.AddEndpoint(ep); err != nil {
- rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
+ xapp.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
continue
}
rtmgr.Eps[uuid] = ep
}
}
s.updatePlatformEndpoints(&((*rcs).Pcs), sbi)
+ s.updateE2TEndpoints(&((*rcs).E2Ts), sbi)
s.pruneEndpointList(sbi)
}
func (s *Sbi) updatePlatformEndpoints(pcs *rtmgr.PlatformComponents, sbi Engine) {
- rtmgr.Logger.Debug("updatePlatformEndpoints invoked. PCS: %v", *pcs)
+ xapp.Logger.Debug("updatePlatformEndpoints invoked. PCS: %v", *pcs)
for _, pc := range *pcs {
uuid := pc.Fqdn + ":" + strconv.Itoa(int(pc.Port))
if _, ok := rtmgr.Eps[uuid]; ok {
XAppType: PlatformType,
Ip: pc.Fqdn,
Port: pc.Port,
- TxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["tx"],
- RxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["rx"],
+ //TxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["tx"],
+ //RxMessages: rtmgr.PLATFORMMESSAGETYPES[pc.Name]["rx"],
Socket: nil,
IsReady: false,
Keepalive: true,
}
- rtmgr.Logger.Debug("ep created: %v", ep)
+ xapp.Logger.Debug("ep created: %v", ep)
if err := sbi.AddEndpoint(ep); err != nil {
- rtmgr.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
+ xapp.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
continue
}
rtmgr.Eps[uuid] = ep
}
}
}
+
+func (s *Sbi) updateE2TEndpoints(E2Ts *map[string]rtmgr.E2TInstance, sbi Engine) {
+ xapp.Logger.Debug("updateE2TEndpoints invoked. E2T: %v", *E2Ts)
+ for _, e2t := range *E2Ts {
+ uuid := e2t.Fqdn
+ stringSlice := strings.Split(e2t.Fqdn, ":")
+ ipaddress := stringSlice[0]
+ port, _ := strconv.Atoi(stringSlice[1])
+ if _, ok := rtmgr.Eps[uuid]; ok {
+ rtmgr.Eps[uuid].Keepalive = true
+ } else {
+ ep := &rtmgr.Endpoint{
+ Uuid: uuid,
+ Name: e2t.Name,
+ XAppType: PlatformType,
+ Ip: ipaddress,
+ Port: uint16(port),
+ //TxMessages: rtmgr.PLATFORMMESSAGETYPES[e2t.Name]["tx"],
+ //RxMessages: rtmgr.PLATFORMMESSAGETYPES[e2t.Name]["rx"],
+ Socket: nil,
+ IsReady: false,
+ Keepalive: true,
+ }
+ xapp.Logger.Debug("ep created: %v", ep)
+ if err := sbi.AddEndpoint(ep); err != nil {
+ xapp.Logger.Error("can't create socket for endpoint: " + ep.Name + " due to:" + err.Error())
+ continue
+ }
+ rtmgr.Eps[uuid] = ep
+ }
+ }
+}
+
+func (s *Sbi) createEndpoint(payload string,rmrsrc string, sbi Engine) (*string,int) {
+ xapp.Logger.Debug("CreateEndPoint %v", payload)
+// stringSlice := strings.Split(payload, " ")
+// uuid := stringSlice[0]
+// xapp.Logger.Debug(">>> uuid %v", stringSlice[0])
+
+/* if _, ok := rtmgr.Eps[uuid]; ok {
+ ep := rtmgr.Eps[uuid]
+ return ep
+ }*/
+
+ /* incase the stored Endpoint list is in the form of IP:port*/
+/* stringsubsplit := strings.Split(uuid, ":")
+ addr, err := net.LookupIP(stringsubsplit[0])
+ if err == nil {
+ convertedUuid := fmt.Sprintf("%s:%s", addr[0], stringsubsplit[1])
+ xapp.Logger.Info(" IP:Port received is %s", convertedUuid)
+ if _, ok := rtmgr.Eps[convertedUuid]; ok {
+ ep := rtmgr.Eps[convertedUuid]
+ return ep
+ }
+ }*/
+
+ /* Create a new mapping, this case is assumed for multiple process sending RMR request from a container */
+ srcString := strings.Split(rmrsrc," ")
+ srcStringSlice := strings.Split(srcString[0],"=")
+ Whid := int(xapp.Rmr.Openwh(srcStringSlice[1]))
+
+ xapp.Logger.Info("Wormhole Id created is %d for EndPoint %s",Whid,srcStringSlice[1])
+ if Whid > 0 {
+// rtmgr.RmrEp[srcStringSlice[1]] = Whid
+ xapp.Logger.Info("received %s and mapped to Whid = %d",srcStringSlice[1],Whid)
+ return &srcStringSlice[1],Whid
+ }
+
+ return nil,Whid
+ }