X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=pkg%2Fcontrol%2Fe2if_state.go;h=e8ceef2f045af2e4bddd8389f49ce9fe53672874;hb=HEAD;hp=525961852c5694031db9faee1e36b0b04c4a7d78;hpb=e60d7b6dc1c2244ef9f885d03984d2bd238a49e0;p=ric-plt%2Fsubmgr.git diff --git a/pkg/control/e2if_state.go b/pkg/control/e2if_state.go index 5259618..e8ceef2 100644 --- a/pkg/control/e2if_state.go +++ b/pkg/control/e2if_state.go @@ -20,10 +20,12 @@ package control import ( + "encoding/json" "fmt" - "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" "strings" "sync" + + "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp" ) type XappRnibIf struct { @@ -47,16 +49,46 @@ func CreateXappRnibIfInstance() XappRnibInterface { } type E2IfState struct { - mutex sync.Mutex - control *Control - NbIdMap map[string]string + mutex sync.Mutex + control *Control + NbIdMap map[string]string + NbIdStatusMap map[string]string } func (e *E2IfState) Init(c *Control) { e.control = c e.NbIdMap = make(map[string]string, 0) + e.NbIdStatusMap = make(map[string]string, 0) e.ReadE2ConfigurationFromRnib() - e.SubscribeChannels() + err := e.SubscribeChannels() + if err != nil { + xapp.Logger.Error("Init(): SubscribeChannels() failed: %v", err) + } +} + +func (e *E2IfState) GetE2NodesJson() []byte { + + e.mutex.Lock() + defer e.mutex.Unlock() + + // Map contains something like this{"RAN_NAME_1":"RAN_NAME_1","RAN_NAME_11":"RAN_NAME_11","RAN_NAME_2":"RAN_NAME_2"} + var ranNameList []string + for _, ranName := range e.NbIdMap { + ranNameList = append(ranNameList, ranName) + } + + e2NodesJson, err := json.Marshal(ranNameList) + if err != nil { + xapp.Logger.Error("GetE2Node() json.Marshal error: %v", err) + } + return e2NodesJson +} + +func (e *E2IfState) GetAllE2Nodes() map[string]string { + + e.mutex.Lock() + defer e.mutex.Unlock() + return e.NbIdMap } func (e *E2IfState) NotificationCb(ch string, events ...string) { @@ -76,6 +108,7 @@ func (e *E2IfState) NotificationCb(ch string, events ...string) { } xapp.Logger.Debug("E2 CONNECTED. NbId=%s", nbId) e.NbIdMap[nbId] = nbId + e.NbIdStatusMap[nbId] = "CONNECTED" } else if strings.Contains(events[0], "_DISCONNECTED") { e.control.UpdateCounter(cE2StateChangedToDown) nbId, err := ExtractNbiIdFromString(events[0]) @@ -85,9 +118,23 @@ func (e *E2IfState) NotificationCb(ch string, events ...string) { } xapp.Logger.Debug("E2 DISCONNECTED. NbId=%s", nbId) if _, ok := e.NbIdMap[nbId]; ok { + e.NbIdStatusMap[nbId] = "DISCONNECTED" delete(e.NbIdMap, nbId) e.control.registry.DeleteAllE2Subscriptions(nbId, e.control) } + } else if strings.Contains(events[0], "_UNDER_RESET") { + xapp.Logger.Debug("NotificationCb UNDER_RESET len(nbId) == 0 ") + e.control.UpdateCounter(cE2StateUnderReset) + nbId, err := ExtractNbiIdFromString(events[0]) + if err != nil { + xapp.Logger.Error("NotificationCb _UNDER_RESET %v ", err) + return + } + e.NbIdStatusMap[nbId] = "UNDER_RESET" + xapp.Logger.Debug("E2 Under Reset. NbId=%s", nbId) + if _, ok := e.NbIdMap[nbId]; ok { + e.control.registry.DeleteAllE2Subscriptions(nbId, e.control) + } } } @@ -153,6 +200,15 @@ func (e *E2IfState) IsE2ConnectionUp(nbId *string) bool { } } +func (e *E2IfState) IsE2ConnectionUnderReset(nbId *string) bool { + + if status := e.NbIdStatusMap[*nbId]; status == "UNDER_RESET" { + return true + } else { + return false + } +} + func ExtractNbiIdFromString(s string) (string, error) { // Expected string formats are below @@ -168,6 +224,9 @@ func ExtractNbiIdFromString(s string) (string, error) { } else if strings.Contains(s, "_DISCONNECTED") { splitStringTbl := strings.Split(s, "_DISCONNECTED") nbId = splitStringTbl[0] + } else if strings.Contains(s, "_UNDER_RESET") { + splitStringTbl := strings.Split(s, "_UNDER_RESET") + nbId = splitStringTbl[0] } if len(nbId) == 0 { return "", fmt.Errorf("ExtractNbiIdFromString(): len(nbId) == 0 ")