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 subReqMsg.EventTriggerDefinition.Data.Data = []byte(subscriptionDetail.EventTriggers.OctetString)
68 subReqMsg.EventTriggerDefinition.Data.Length = uint64(len(subscriptionDetail.EventTriggers.OctetString))
70 for _, actionToBeSetup := range subscriptionDetail.ActionToBeSetupList {
71 actionToBeSetupItem := e2ap.ActionToBeSetupItem{}
72 actionToBeSetupItem.ActionType = e2ap.E2AP_ActionTypeInvalid
73 actionToBeSetupItem.ActionId = uint64(*actionToBeSetup.ActionID)
75 actionToBeSetupItem.ActionType = e2ap.E2AP_ActionTypeStrMap[*actionToBeSetup.ActionType]
76 actionToBeSetupItem.RicActionDefinitionPresent = true
78 if actionToBeSetup.ActionDefinition != nil {
79 actionToBeSetupItem.ActionDefinitionChoice.Data.Data = []byte(actionToBeSetup.ActionDefinition.OctetString)
80 actionToBeSetupItem.ActionDefinitionChoice.Data.Length = uint64(len(actionToBeSetup.ActionDefinition.OctetString))
83 if actionToBeSetup.SubsequentAction != nil {
84 actionToBeSetupItem.SubsequentAction.Present = true
85 actionToBeSetupItem.SubsequentAction.Type = e2ap.E2AP_SubSeqActionTypeStrMap[*actionToBeSetup.SubsequentAction.SubsequentActionType]
86 actionToBeSetupItem.SubsequentAction.TimetoWait = e2ap.E2AP_TimeToWaitStrMap[*actionToBeSetup.SubsequentAction.TimeToWait]
88 subReqMsg.ActionSetups = append(subReqMsg.ActionSetups, actionToBeSetupItem)
90 subreqList.E2APSubscriptionRequests = append(subreqList.E2APSubscriptionRequests, subReqMsg)
95 //-----------------------------------------------------------------------------
97 //-----------------------------------------------------------------------------
98 func (c *E2ap) UnpackSubscriptionRequest(payload []byte) (*e2ap.E2APSubscriptionRequest, error) {
99 e2SubReq := packerif.NewPackerSubscriptionRequest()
100 err, subReq := e2SubReq.UnPack(&e2ap.PackedData{payload})
102 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
107 func (c *E2ap) PackSubscriptionRequest(req *e2ap.E2APSubscriptionRequest) (int, *e2ap.PackedData, error) {
108 e2SubReq := packerif.NewPackerSubscriptionRequest()
109 err, packedData := e2SubReq.Pack(req)
113 return xapp.RIC_SUB_REQ, packedData, nil
116 //-----------------------------------------------------------------------------
118 //-----------------------------------------------------------------------------
119 func (c *E2ap) UnpackSubscriptionResponse(payload []byte) (*e2ap.E2APSubscriptionResponse, error) {
120 e2SubResp := packerif.NewPackerSubscriptionResponse()
121 err, subResp := e2SubResp.UnPack(&e2ap.PackedData{payload})
123 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
128 func (c *E2ap) PackSubscriptionResponse(req *e2ap.E2APSubscriptionResponse) (int, *e2ap.PackedData, error) {
129 e2SubResp := packerif.NewPackerSubscriptionResponse()
130 err, packedData := e2SubResp.Pack(req)
134 return xapp.RIC_SUB_RESP, packedData, nil
137 //-----------------------------------------------------------------------------
139 //-----------------------------------------------------------------------------
140 func (c *E2ap) UnpackSubscriptionFailure(payload []byte) (*e2ap.E2APSubscriptionFailure, error) {
141 e2SubFail := packerif.NewPackerSubscriptionFailure()
142 err, subFail := e2SubFail.UnPack(&e2ap.PackedData{payload})
144 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
149 func (c *E2ap) PackSubscriptionFailure(req *e2ap.E2APSubscriptionFailure) (int, *e2ap.PackedData, error) {
150 e2SubFail := packerif.NewPackerSubscriptionFailure()
151 err, packedData := e2SubFail.Pack(req)
155 return xapp.RIC_SUB_FAILURE, packedData, nil
158 //-----------------------------------------------------------------------------
160 //-----------------------------------------------------------------------------
161 func (c *E2ap) UnpackSubscriptionDeleteRequest(payload []byte) (*e2ap.E2APSubscriptionDeleteRequest, error) {
162 e2SubDelReq := packerif.NewPackerSubscriptionDeleteRequest()
163 err, subDelReq := e2SubDelReq.UnPack(&e2ap.PackedData{payload})
165 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
167 return subDelReq, nil
170 func (c *E2ap) PackSubscriptionDeleteRequest(req *e2ap.E2APSubscriptionDeleteRequest) (int, *e2ap.PackedData, error) {
171 e2SubDelReq := packerif.NewPackerSubscriptionDeleteRequest()
172 err, packedData := e2SubDelReq.Pack(req)
176 return xapp.RIC_SUB_DEL_REQ, packedData, nil
179 //-----------------------------------------------------------------------------
181 //-----------------------------------------------------------------------------
182 func (c *E2ap) UnpackSubscriptionDeleteResponse(payload []byte) (*e2ap.E2APSubscriptionDeleteResponse, error) {
183 e2SubDelResp := packerif.NewPackerSubscriptionDeleteResponse()
184 err, subDelResp := e2SubDelResp.UnPack(&e2ap.PackedData{payload})
186 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
188 return subDelResp, nil
191 func (c *E2ap) PackSubscriptionDeleteResponse(req *e2ap.E2APSubscriptionDeleteResponse) (int, *e2ap.PackedData, error) {
192 e2SubDelResp := packerif.NewPackerSubscriptionDeleteResponse()
193 err, packedData := e2SubDelResp.Pack(req)
197 return xapp.RIC_SUB_DEL_RESP, packedData, nil
200 //-----------------------------------------------------------------------------
202 //-----------------------------------------------------------------------------
203 func (c *E2ap) UnpackSubscriptionDeleteFailure(payload []byte) (*e2ap.E2APSubscriptionDeleteFailure, error) {
204 e2SubDelFail := packerif.NewPackerSubscriptionDeleteFailure()
205 err, subDelFail := e2SubDelFail.UnPack(&e2ap.PackedData{payload})
207 return nil, fmt.Errorf("%s buf[%s]", err.Error(), hex.EncodeToString(payload))
209 return subDelFail, nil
213 func (c *E2ap) PackSubscriptionDeleteFailure(req *e2ap.E2APSubscriptionDeleteFailure) (int, *e2ap.PackedData, error) {
214 e2SubDelFail := packerif.NewPackerSubscriptionDeleteFailure()
215 err, packedData := e2SubDelFail.Pack(req)
219 return xapp.RIC_SUB_DEL_FAILURE, packedData, nil