Merge "Added ranfunctionOid for E2APv1.1 for e2setup req."
[ric-plt/e2mgr.git] / E2Manager / models / e2_setup_request_message.go
index 8193b17..96a7bcf 100644 (file)
@@ -21,11 +21,9 @@ package models
 
 import (
        "encoding/xml"
-       "errors"
-       "fmt"
-       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
-       "strconv"
        "strings"
+
+       "gerrit.o-ran-sc.org/r/ric-plt/nodeb-rnib.git/entities"
 )
 
 type Gnb struct {
@@ -52,27 +50,36 @@ type EnGnb struct {
        } `xml:"global-gNB-ID"`
 }
 
+type NgEnbId struct {
+       Text            string `xml:",chardata"`
+       EnbIdMacro      string `xml:"enb-ID-macro"`
+       EnbIdShortMacro string `xml:"enb-ID-shortmacro"`
+       EnbIdLongMacro  string `xml:"enb-ID-longmacro"`
+}
+
 type NgEnb struct {
        Text          string `xml:",chardata"`
        GlobalNgENBID struct {
-               Text   string `xml:",chardata"`
-               PlmnID string `xml:"plmn-id"`
-               GnbID  struct {
-                       Text  string `xml:",chardata"`
-                       GnbID string `xml:"gnb-ID"`
-               } `xml:"gnb-id"`
+               Text   string  `xml:",chardata"`
+               PlmnID string  `xml:"plmn-id"`
+               EnbID  NgEnbId `xml:"enb-id"`
        } `xml:"global-ng-eNB-ID"`
 }
 
+type EnbId struct {
+       Text            string `xml:",chardata"`
+       MacroEnbId      string `xml:"macro-eNB-ID"`
+       HomeEnbId       string `xml:"home-eNB-ID"`
+       ShortMacroEnbId string `xml:"short-Macro-eNB-ID"`
+       LongMacroEnbId  string `xml:"long-Macro-eNB-ID"`
+}
+
 type Enb struct {
        Text        string `xml:",chardata"`
        GlobalENBID struct {
                Text   string `xml:",chardata"`
-               PlmnID string `xml:"plmn-id"`
-               GnbID  struct {
-                       Text  string `xml:",chardata"`
-                       GnbID string `xml:"gnb-ID"`
-               } `xml:"gnb-id"`
+               PlmnID string `xml:"pLMN-Identity"`
+               EnbID  EnbId  `xml:"eNB-ID"`
        } `xml:"global-eNB-ID"`
 }
 
@@ -126,9 +133,10 @@ type E2SetupRequestMessage struct {
 
 type RanFunctionItem struct {
        Text                  string `xml:",chardata"`
-       RanFunctionID         string `xml:"ranFunctionID"`
+       RanFunctionID         uint32 `xml:"ranFunctionID"`
        RanFunctionDefinition string `xml:"ranFunctionDefinition"`
-       RanFunctionRevision   string `xml:"ranFunctionRevision"`
+       RanFunctionRevision   uint32 `xml:"ranFunctionRevision"`
+       RanFunctionOID        string `xml:"ranFunctionOID"`
 }
 
 type RANfunctionsList struct {
@@ -147,78 +155,105 @@ type RANfunctionsList struct {
        } `xml:"ProtocolIE-SingleContainer"`
 }
 
-func (m *E2SetupRequestMessage) ExtractRanFunctionsList() ([]*entities.RanFunction, error) {
-       list := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[1].Value.RANfunctionsList.ProtocolIESingleContainer
-       funcs := make([]*entities.RanFunction, len(list))
+func (m *E2SetupRequestMessage) ExtractRanFunctionsList() []*entities.RanFunction {
+       // TODO: verify e2SetupRequestIEs structure with Adi
+       e2SetupRequestIes := m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs
+       if len(e2SetupRequestIes) < 2 {
+               return nil
+       }
+
+       ranFunctionsListContainer := e2SetupRequestIes[1].Value.RANfunctionsList.ProtocolIESingleContainer
+       funcs := make([]*entities.RanFunction, len(ranFunctionsListContainer))
        for i := 0; i < len(funcs); i++ {
-               funcs[i] = &entities.RanFunction{}
-               id, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionID, 10, 32)
-               if err != nil {
-                       return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.ExtractRanFunctionsList - Failed parse uint RanFunctionID from %s", list[i].Value.RANfunctionItem.RanFunctionID))
-               }
-               funcs[i].RanFunctionId = uint32(id)
-               rev, err := strconv.ParseUint(list[i].Value.RANfunctionItem.RanFunctionRevision, 10, 32)
-               if err != nil {
-                       return nil, errors.New(fmt.Sprintf("#e2_setup_request_message.ExtractRanFunctionsList - Failed parse uint RanFunctionRevision from %s", list[i].Value.RANfunctionItem.RanFunctionRevision))
+               ranFunctionItem := ranFunctionsListContainer[i].Value.RANfunctionItem
+
+               funcs[i] = &entities.RanFunction{
+                       RanFunctionId:         ranFunctionItem.RanFunctionID,
+                       RanFunctionDefinition: ranFunctionItem.RanFunctionDefinition,
+                       RanFunctionRevision:   ranFunctionItem.RanFunctionRevision,
+                       RanFunctionOid:        ranFunctionItem.RanFunctionOID,
                }
-               funcs[i].RanFunctionDefinition = m.trimSpaces(list[i].Value.RANfunctionItem.RanFunctionDefinition)
-               funcs[i].RanFunctionRevision = uint32(rev)
        }
-       return funcs, nil
+       return funcs
 }
 
 func (m *E2SetupRequestMessage) getGlobalE2NodeId() GlobalE2NodeId {
        return m.E2APPDU.InitiatingMessage.Value.E2setupRequest.ProtocolIEs.E2setupRequestIEs[0].Value.GlobalE2nodeID
 }
 
-func (m *E2SetupRequestMessage) GetNodeType() entities.Node_Type {
+func (m *E2SetupRequestMessage) GetPlmnId() string {
        globalE2NodeId := m.getGlobalE2NodeId()
        if id := globalE2NodeId.GNB.GlobalGNBID.PlmnID; id != "" {
-               return entities.Node_GNB
+               return m.trimSpaces(id)
        }
        if id := globalE2NodeId.EnGNB.GlobalGNBID.PlmnID; id != "" {
-               return entities.Node_GNB
+               return m.trimSpaces(id)
        }
        if id := globalE2NodeId.ENB.GlobalENBID.PlmnID; id != "" {
-               return entities.Node_ENB
+               return m.trimSpaces(id)
        }
        if id := globalE2NodeId.NgENB.GlobalNgENBID.PlmnID; id != "" {
-               return entities.Node_GNB
+               return m.trimSpaces(id)
        }
-       return entities.Node_UNKNOWN
+       return ""
 }
 
-func (m *E2SetupRequestMessage) GetPlmnId() string {
-       globalE2NodeId := m.getGlobalE2NodeId()
-       if id := globalE2NodeId.GNB.GlobalGNBID.PlmnID; id != "" {
-               return m.trimSpaces(id)
+func (m *E2SetupRequestMessage) getInnerEnbId(enbId EnbId) string {
+
+       if id := enbId.HomeEnbId; id != "" {
+               return id
        }
-       if id := globalE2NodeId.EnGNB.GlobalGNBID.PlmnID; id != "" {
-               return m.trimSpaces(id)
+
+       if id := enbId.LongMacroEnbId; id != "" {
+               return id
        }
-       if id := globalE2NodeId.ENB.GlobalENBID.PlmnID; id != "" {
-               return m.trimSpaces(id)
+
+       if id := enbId.MacroEnbId; id != "" {
+               return id
        }
-       if id := globalE2NodeId.NgENB.GlobalNgENBID.PlmnID; id != "" {
-               return m.trimSpaces(id)
+
+       if id := enbId.ShortMacroEnbId; id != "" {
+               return id
        }
+
+       return ""
+}
+
+func (m *E2SetupRequestMessage) getInnerNgEnbId(enbId NgEnbId) string {
+       if id := enbId.EnbIdLongMacro; id != "" {
+               return id
+       }
+
+       if id := enbId.EnbIdMacro; id != "" {
+               return id
+       }
+
+       if id := enbId.EnbIdShortMacro; id != "" {
+               return id
+       }
+
        return ""
 }
 
 func (m *E2SetupRequestMessage) GetNbId() string {
        globalE2NodeId := m.getGlobalE2NodeId()
+
        if id := globalE2NodeId.GNB.GlobalGNBID.GnbID.GnbID; id != "" {
                return m.trimSpaces(id)
        }
+
        if id := globalE2NodeId.EnGNB.GlobalGNBID.GnbID.GnbID; id != "" {
                return m.trimSpaces(id)
        }
-       if id := globalE2NodeId.ENB.GlobalENBID.GnbID.GnbID; id != "" {
+
+       if id := m.getInnerEnbId(globalE2NodeId.ENB.GlobalENBID.EnbID); id != "" {
                return m.trimSpaces(id)
        }
-       if id := globalE2NodeId.NgENB.GlobalNgENBID.GnbID.GnbID; id != "" {
+
+       if id := m.getInnerNgEnbId(globalE2NodeId.NgENB.GlobalNgENBID.EnbID); id != "" {
                return m.trimSpaces(id)
        }
+
        return ""
 }