2 ==================================================================================
3 Copyright (c) 2019 AT&T Intellectual Property.
4 Copyright (c) 2019 Nokia
6 Licensed under the Apache License, Version 2.0 (the "License");
7 you may not use this file except in compliance with the License.
8 You may obtain a copy of the License at
10 http://www.apache.org/licenses/LICENSE-2.0
12 Unless required by applicable law or agreed to in writing, software
13 distributed under the License is distributed on an "AS IS" BASIS,
14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 See the License for the specific language governing permissions and
16 limitations under the License.
17 ==================================================================================
23 #cgo LDFLAGS: -le2ap_wrapper -le2ap
32 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
33 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap_wrapper"
34 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
35 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
38 var packerif e2ap.E2APPackerIf = e2ap_wrapper.NewAsn1E2Packer()
40 func GetPackerIf() e2ap.E2APPackerIf {
44 func SetPackerIf(iface e2ap.E2APPackerIf) {
51 //-----------------------------------------------------------------------------
53 //-----------------------------------------------------------------------------
54 func (e *E2ap) SetASN1DebugPrintStatus(logLevel int) {
55 e2ap_wrapper.SetASN1DebugPrintStatus(logLevel)
58 //-----------------------------------------------------------------------------
60 //-----------------------------------------------------------------------------
61 func (e *E2ap) FillSubscriptionReqMsgs(params interface{}, subreqList *e2ap.SubscriptionRequestList, restSubscription *RESTSubscription) error {
62 xapp.Logger.Debug("FillSubscriptionReqMsgs")
64 p := params.(*models.SubscriptionParams)
66 for _, subscriptionDetail := range p.SubscriptionDetails {
67 subReqMsg := e2ap.E2APSubscriptionRequest{}
69 if p.RANFunctionID != nil {
70 subReqMsg.FunctionId = (e2ap.FunctionId)(*p.RANFunctionID)
72 e2EventInstanceID := restSubscription.GetE2IdFromXappIdToE2Id(*subscriptionDetail.XappEventInstanceID)
73 subReqMsg.RequestId = e2ap.RequestId{uint32(*subscriptionDetail.XappEventInstanceID), uint32(e2EventInstanceID)}
75 if len(subscriptionDetail.EventTriggers) > 0 {
76 for _, val := range subscriptionDetail.EventTriggers {
77 subReqMsg.EventTriggerDefinition.Data.Data = append(subReqMsg.EventTriggerDefinition.Data.Data, byte(val))
79 subReqMsg.EventTriggerDefinition.Data.Length = uint64(len(subscriptionDetail.EventTriggers))
81 for _, actionToBeSetup := range subscriptionDetail.ActionToBeSetupList {
82 actionToBeSetupItem := e2ap.ActionToBeSetupItem{}
83 actionToBeSetupItem.ActionType = e2ap.E2AP_ActionTypeInvalid
84 actionToBeSetupItem.ActionId = uint64(*actionToBeSetup.ActionID)
86 actionToBeSetupItem.ActionType = e2ap.E2AP_ActionTypeStrMap[*actionToBeSetup.ActionType]
87 actionToBeSetupItem.RicActionDefinitionPresent = true
89 if len(actionToBeSetup.ActionDefinition) > 0 {
90 for _, val := range actionToBeSetup.ActionDefinition {
91 actionToBeSetupItem.ActionDefinitionChoice.Data.Data = append(actionToBeSetupItem.ActionDefinitionChoice.Data.Data, byte(val))
93 actionToBeSetupItem.ActionDefinitionChoice.Data.Length = uint64(len(actionToBeSetup.ActionDefinition))
96 if actionToBeSetup.SubsequentAction != nil {
97 actionToBeSetupItem.SubsequentAction.Present = true
98 actionToBeSetupItem.SubsequentAction.Type = e2ap.E2AP_SubSeqActionTypeStrMap[*actionToBeSetup.SubsequentAction.SubsequentActionType]
99 actionToBeSetupItem.SubsequentAction.TimetoWait = e2ap.E2AP_TimeToWaitStrMap[*actionToBeSetup.SubsequentAction.TimeToWait]
101 subReqMsg.ActionSetups = append(subReqMsg.ActionSetups, actionToBeSetupItem)
103 subreqList.E2APSubscriptionRequests = append(subreqList.E2APSubscriptionRequests, subReqMsg)
108 //-----------------------------------------------------------------------------
110 //-----------------------------------------------------------------------------
111 func (e *E2ap) CheckActionNotAdmittedList(msgType int, actionNotAdmittedList e2ap.ActionNotAdmittedList, c *Control) ErrorInfo {
113 var prefixString string
114 var errorInfo ErrorInfo
115 var actionNotAdmittedString string
116 if len(actionNotAdmittedList.Items) > 0 {
117 if msgType == xapp.RIC_SUB_RESP {
118 prefixString = "RICSubscriptionResponse partially accepted:"
119 c.UpdateCounter(cPartialSubRespFromE2)
120 } else if msgType == xapp.RIC_SUB_FAILURE {
121 prefixString = "RICSubscriptionFailure:"
123 jsonActionNotAdmittedList, err := json.Marshal(actionNotAdmittedList.Items)
125 actionNotAdmittedString = "ActionNotAdmittedList > 0. Submgr json.Marshal error"
126 xapp.Logger.Error("CheckActionNotAdmittedList() json.Marshal error %s", err.Error())
128 actionNotAdmittedString = "ActionNotAdmittedList: " + string(jsonActionNotAdmittedList)
131 err := fmt.Errorf("%s %s", prefixString, actionNotAdmittedString)
132 errorInfo.SetInfo(err.Error(), models.SubscriptionInstanceErrorSourceE2Node, "")
136 //-----------------------------------------------------------------------------
138 //-----------------------------------------------------------------------------
139 func (e *E2ap) UnpackSubscriptionRequest(payload []byte) (*e2ap.E2APSubscriptionRequest, error) {
140 e2SubReq := packerif.NewPackerSubscriptionRequest()
141 err, subReq := e2SubReq.UnPack(&e2ap.PackedData{payload})
143 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
148 func (c *E2ap) PackSubscriptionRequest(req *e2ap.E2APSubscriptionRequest) (int, *e2ap.PackedData, error) {
149 e2SubReq := packerif.NewPackerSubscriptionRequest()
150 err, packedData := e2SubReq.Pack(req)
154 return xapp.RIC_SUB_REQ, packedData, nil
157 //-----------------------------------------------------------------------------
159 //-----------------------------------------------------------------------------
160 func (e *E2ap) UnpackSubscriptionResponse(payload []byte) (*e2ap.E2APSubscriptionResponse, error) {
161 e2SubResp := packerif.NewPackerSubscriptionResponse()
162 err, subResp := e2SubResp.UnPack(&e2ap.PackedData{payload})
164 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
169 func (e *E2ap) PackSubscriptionResponse(req *e2ap.E2APSubscriptionResponse) (int, *e2ap.PackedData, error) {
170 e2SubResp := packerif.NewPackerSubscriptionResponse()
171 err, packedData := e2SubResp.Pack(req)
175 return xapp.RIC_SUB_RESP, packedData, nil
178 //-----------------------------------------------------------------------------
180 //-----------------------------------------------------------------------------
181 func (e *E2ap) UnpackSubscriptionFailure(payload []byte) (*e2ap.E2APSubscriptionFailure, error) {
182 e2SubFail := packerif.NewPackerSubscriptionFailure()
183 err, subFail := e2SubFail.UnPack(&e2ap.PackedData{payload})
185 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
190 func (e *E2ap) PackSubscriptionFailure(req *e2ap.E2APSubscriptionFailure) (int, *e2ap.PackedData, error) {
191 e2SubFail := packerif.NewPackerSubscriptionFailure()
192 err, packedData := e2SubFail.Pack(req)
196 return xapp.RIC_SUB_FAILURE, packedData, nil
199 //-----------------------------------------------------------------------------
201 //-----------------------------------------------------------------------------
202 func (e *E2ap) UnpackSubscriptionDeleteRequest(payload []byte) (*e2ap.E2APSubscriptionDeleteRequest, error) {
203 e2SubDelReq := packerif.NewPackerSubscriptionDeleteRequest()
204 err, subDelReq := e2SubDelReq.UnPack(&e2ap.PackedData{payload})
206 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
208 return subDelReq, nil
211 func (e *E2ap) PackSubscriptionDeleteRequest(req *e2ap.E2APSubscriptionDeleteRequest) (int, *e2ap.PackedData, error) {
212 e2SubDelReq := packerif.NewPackerSubscriptionDeleteRequest()
213 err, packedData := e2SubDelReq.Pack(req)
217 return xapp.RIC_SUB_DEL_REQ, packedData, nil
220 //-----------------------------------------------------------------------------
222 //-----------------------------------------------------------------------------
223 func (e *E2ap) UnpackSubscriptionDeleteResponse(payload []byte) (*e2ap.E2APSubscriptionDeleteResponse, error) {
224 e2SubDelResp := packerif.NewPackerSubscriptionDeleteResponse()
225 err, subDelResp := e2SubDelResp.UnPack(&e2ap.PackedData{payload})
227 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
229 return subDelResp, nil
232 func (e *E2ap) PackSubscriptionDeleteResponse(req *e2ap.E2APSubscriptionDeleteResponse) (int, *e2ap.PackedData, error) {
233 e2SubDelResp := packerif.NewPackerSubscriptionDeleteResponse()
234 err, packedData := e2SubDelResp.Pack(req)
238 return xapp.RIC_SUB_DEL_RESP, packedData, nil
241 //-----------------------------------------------------------------------------
243 //-----------------------------------------------------------------------------
244 func (e *E2ap) UnpackSubscriptionDeleteFailure(payload []byte) (*e2ap.E2APSubscriptionDeleteFailure, error) {
245 e2SubDelFail := packerif.NewPackerSubscriptionDeleteFailure()
246 err, subDelFail := e2SubDelFail.UnPack(&e2ap.PackedData{payload})
248 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
250 return subDelFail, nil
254 func (e *E2ap) PackSubscriptionDeleteFailure(req *e2ap.E2APSubscriptionDeleteFailure) (int, *e2ap.PackedData, error) {
255 e2SubDelFail := packerif.NewPackerSubscriptionDeleteFailure()
256 err, packedData := e2SubDelFail.Pack(req)
260 return xapp.RIC_SUB_DEL_FAILURE, packedData, nil