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
31 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap"
32 "gerrit.o-ran-sc.org/r/ric-plt/e2ap/pkg/e2ap_wrapper"
33 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/models"
34 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
37 var packerif e2ap.E2APPackerIf = e2ap_wrapper.NewAsn1E2Packer()
39 func GetPackerIf() e2ap.E2APPackerIf {
43 func SetPackerIf(iface e2ap.E2APPackerIf) {
50 //-----------------------------------------------------------------------------
52 //-----------------------------------------------------------------------------
53 func (c *E2ap) FillSubscriptionReqMsgs(params interface{}, subreqList *e2ap.SubscriptionRequestList, restSubscription *RESTSubscription) error {
54 xapp.Logger.Info("FillSubscriptionReqMsgs")
56 p := params.(*models.SubscriptionParams)
58 for _, subscriptionDetail := range p.SubscriptionDetails {
59 subReqMsg := e2ap.E2APSubscriptionRequest{}
61 if p.RANFunctionID != nil {
62 subReqMsg.FunctionId = (e2ap.FunctionId)(*p.RANFunctionID)
64 e2EventInstanceID := restSubscription.GetE2IdFromXappIdToE2Id(*subscriptionDetail.XappEventInstanceID)
65 subReqMsg.RequestId = e2ap.RequestId{uint32(*subscriptionDetail.XappEventInstanceID), uint32(e2EventInstanceID)}
67 if len(subscriptionDetail.EventTriggers) > 0 {
68 for _, val := range subscriptionDetail.EventTriggers {
69 subReqMsg.EventTriggerDefinition.Data.Data = append(subReqMsg.EventTriggerDefinition.Data.Data, byte(val))
71 subReqMsg.EventTriggerDefinition.Data.Length = uint64(len(subscriptionDetail.EventTriggers))
73 for _, actionToBeSetup := range subscriptionDetail.ActionToBeSetupList {
74 actionToBeSetupItem := e2ap.ActionToBeSetupItem{}
75 actionToBeSetupItem.ActionType = e2ap.E2AP_ActionTypeInvalid
76 actionToBeSetupItem.ActionId = uint64(*actionToBeSetup.ActionID)
78 actionToBeSetupItem.ActionType = e2ap.E2AP_ActionTypeStrMap[*actionToBeSetup.ActionType]
79 actionToBeSetupItem.RicActionDefinitionPresent = true
81 if len(actionToBeSetup.ActionDefinition) > 0 {
82 for _, val := range actionToBeSetup.ActionDefinition {
83 actionToBeSetupItem.ActionDefinitionChoice.Data.Data = append(actionToBeSetupItem.ActionDefinitionChoice.Data.Data, byte(val))
85 actionToBeSetupItem.ActionDefinitionChoice.Data.Length = uint64(len(actionToBeSetup.ActionDefinition))
88 if actionToBeSetup.SubsequentAction != nil {
89 actionToBeSetupItem.SubsequentAction.Present = true
90 actionToBeSetupItem.SubsequentAction.Type = e2ap.E2AP_SubSeqActionTypeStrMap[*actionToBeSetup.SubsequentAction.SubsequentActionType]
91 actionToBeSetupItem.SubsequentAction.TimetoWait = e2ap.E2AP_TimeToWaitStrMap[*actionToBeSetup.SubsequentAction.TimeToWait]
93 subReqMsg.ActionSetups = append(subReqMsg.ActionSetups, actionToBeSetupItem)
95 subreqList.E2APSubscriptionRequests = append(subreqList.E2APSubscriptionRequests, subReqMsg)
100 //-----------------------------------------------------------------------------
102 //-----------------------------------------------------------------------------
103 func (c *E2ap) UnpackSubscriptionRequest(payload []byte) (*e2ap.E2APSubscriptionRequest, error) {
104 e2SubReq := packerif.NewPackerSubscriptionRequest()
105 err, subReq := e2SubReq.UnPack(&e2ap.PackedData{payload})
107 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
112 func (c *E2ap) PackSubscriptionRequest(req *e2ap.E2APSubscriptionRequest) (int, *e2ap.PackedData, error) {
113 e2SubReq := packerif.NewPackerSubscriptionRequest()
114 err, packedData := e2SubReq.Pack(req)
118 return xapp.RIC_SUB_REQ, packedData, nil
121 //-----------------------------------------------------------------------------
123 //-----------------------------------------------------------------------------
124 func (c *E2ap) UnpackSubscriptionResponse(payload []byte) (*e2ap.E2APSubscriptionResponse, error) {
125 e2SubResp := packerif.NewPackerSubscriptionResponse()
126 err, subResp := e2SubResp.UnPack(&e2ap.PackedData{payload})
128 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
133 func (c *E2ap) PackSubscriptionResponse(req *e2ap.E2APSubscriptionResponse) (int, *e2ap.PackedData, error) {
134 e2SubResp := packerif.NewPackerSubscriptionResponse()
135 err, packedData := e2SubResp.Pack(req)
139 return xapp.RIC_SUB_RESP, packedData, nil
142 //-----------------------------------------------------------------------------
144 //-----------------------------------------------------------------------------
145 func (c *E2ap) UnpackSubscriptionFailure(payload []byte) (*e2ap.E2APSubscriptionFailure, error) {
146 e2SubFail := packerif.NewPackerSubscriptionFailure()
147 err, subFail := e2SubFail.UnPack(&e2ap.PackedData{payload})
149 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
154 func (c *E2ap) PackSubscriptionFailure(req *e2ap.E2APSubscriptionFailure) (int, *e2ap.PackedData, error) {
155 e2SubFail := packerif.NewPackerSubscriptionFailure()
156 err, packedData := e2SubFail.Pack(req)
160 return xapp.RIC_SUB_FAILURE, packedData, nil
163 //-----------------------------------------------------------------------------
165 //-----------------------------------------------------------------------------
166 func (c *E2ap) UnpackSubscriptionDeleteRequest(payload []byte) (*e2ap.E2APSubscriptionDeleteRequest, error) {
167 e2SubDelReq := packerif.NewPackerSubscriptionDeleteRequest()
168 err, subDelReq := e2SubDelReq.UnPack(&e2ap.PackedData{payload})
170 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
172 return subDelReq, nil
175 func (c *E2ap) PackSubscriptionDeleteRequest(req *e2ap.E2APSubscriptionDeleteRequest) (int, *e2ap.PackedData, error) {
176 e2SubDelReq := packerif.NewPackerSubscriptionDeleteRequest()
177 err, packedData := e2SubDelReq.Pack(req)
181 return xapp.RIC_SUB_DEL_REQ, packedData, nil
184 //-----------------------------------------------------------------------------
186 //-----------------------------------------------------------------------------
187 func (c *E2ap) UnpackSubscriptionDeleteResponse(payload []byte) (*e2ap.E2APSubscriptionDeleteResponse, error) {
188 e2SubDelResp := packerif.NewPackerSubscriptionDeleteResponse()
189 err, subDelResp := e2SubDelResp.UnPack(&e2ap.PackedData{payload})
191 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
193 return subDelResp, nil
196 func (c *E2ap) PackSubscriptionDeleteResponse(req *e2ap.E2APSubscriptionDeleteResponse) (int, *e2ap.PackedData, error) {
197 e2SubDelResp := packerif.NewPackerSubscriptionDeleteResponse()
198 err, packedData := e2SubDelResp.Pack(req)
202 return xapp.RIC_SUB_DEL_RESP, packedData, nil
205 //-----------------------------------------------------------------------------
207 //-----------------------------------------------------------------------------
208 func (c *E2ap) UnpackSubscriptionDeleteFailure(payload []byte) (*e2ap.E2APSubscriptionDeleteFailure, error) {
209 e2SubDelFail := packerif.NewPackerSubscriptionDeleteFailure()
210 err, subDelFail := e2SubDelFail.UnPack(&e2ap.PackedData{payload})
212 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
214 return subDelFail, nil
218 func (c *E2ap) PackSubscriptionDeleteFailure(req *e2ap.E2APSubscriptionDeleteFailure) (int, *e2ap.PackedData, error) {
219 e2SubDelFail := packerif.NewPackerSubscriptionDeleteFailure()
220 err, packedData := e2SubDelFail.Pack(req)
224 return xapp.RIC_SUB_DEL_FAILURE, packedData, nil