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 ==================================================================================
26 rtmgrclient "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/rtmgr_client"
27 rtmgrhandle "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/rtmgr_client/handle"
28 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
29 httptransport "github.com/go-openapi/runtime/client"
30 "github.com/go-openapi/strfmt"
31 "github.com/spf13/viper"
37 var subReqTime time.Duration = 5 * time.Second
38 var SubDelReqTime time.Duration = 5 * time.Second
43 rtmgrClient *RtmgrClient
46 rmrSendMutex *sync.Mutex
65 xapp.Logger.Info("SUBMGR /ric-plt-submgr:r3-test-v4")
67 viper.SetEnvPrefix("submgr")
68 viper.AllowEmptyEnv(true)
69 seedSN = uint16(viper.GetInt("seed_sn"))
71 rand.Seed(time.Now().UnixNano())
72 seedSN = uint16(rand.Intn(65535))
77 xapp.Logger.Info("SUBMGR: Initial Sequence Number: %v", seedSN)
80 func NewControl() Control {
81 registry := new(Registry)
82 registry.Initialize(seedSN)
84 tracker := new(Tracker)
87 timerMap := new(TimerMap)
90 rmrSendMutex := &sync.Mutex{}
92 transport := httptransport.New(viper.GetString("rtmgr.HostAddr")+":"+viper.GetString("rtmgr.port"), viper.GetString("rtmgr.baseUrl"), []string{"http"})
93 client := rtmgrclient.New(transport, strfmt.Default)
94 handle := rtmgrhandle.NewProvideXappSubscriptionHandleParamsWithTimeout(10 * time.Second)
95 deleteHandle := rtmgrhandle.NewDeleteXappSubscriptionHandleParamsWithTimeout(10 * time.Second)
96 rtmgrClient := RtmgrClient{client, handle, deleteHandle}
98 return Control{new(E2ap), registry, &rtmgrClient, tracker, timerMap, rmrSendMutex}
101 func (c *Control) Run() {
105 func (c *Control) rmrSend(params *xapp.RMRParams) (err error) {
108 for ; i <= 10 && status == false; i++ {
109 c.rmrSendMutex.Lock()
110 status = xapp.Rmr.Send(params, false)
111 c.rmrSendMutex.Unlock()
113 xapp.Logger.Info("rmr.Send() failed. Retry count %v, Mtype: %v, SubId: %v, Xid %s",i, params.Mtype, params.SubId, params.Xid)
114 time.Sleep(500 * time.Millisecond)
118 err = errors.New("rmr.Send() failed")
119 xapp.Rmr.Free(params.Mbuf)
124 func (c *Control) rmrReplyToSender(params *xapp.RMRParams) (err error) {
129 func (c *Control) Consume(msg *xapp.RMRParams) (err error) {
131 case xapp.RICMessageTypes["RIC_SUB_REQ"]:
132 go c.handleSubscriptionRequest(msg)
133 case xapp.RICMessageTypes["RIC_SUB_RESP"]:
134 go c.handleSubscriptionResponse(msg)
135 case xapp.RICMessageTypes["RIC_SUB_FAILURE"]:
136 go c.handleSubscriptionFailure(msg)
137 case xapp.RICMessageTypes["RIC_SUB_DEL_REQ"]:
138 go c.handleSubscriptionDeleteRequest(msg)
139 case xapp.RICMessageTypes["RIC_SUB_DEL_RESP"]:
140 go c.handleSubscriptionDeleteResponse(msg)
141 case xapp.RICMessageTypes["RIC_SUB_DEL_FAILURE"]:
142 go c.handleSubscriptionDeleteFailure(msg)
144 xapp.Logger.Info("Unknown Message Type '%d', discarding", msg.Mtype)
149 func (c *Control) handleSubscriptionRequest(params *xapp.RMRParams) {
150 xapp.Logger.Info("SubReq received from Src: %s, Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Src, params.Mtype, params.SubId, params.Xid, params.Meid)
151 xapp.Rmr.Free(params.Mbuf)
154 /* Reserve a sequence number and set it in the payload */
155 newSubId, isIdValid := c.registry.ReserveSequenceNumber()
156 if isIdValid != true {
157 xapp.Logger.Error("SubReq: Failed to reserve sequence number. Dropping this msg. SubId: %v, Xid: %s",params.SubId, params.Xid)
161 err := c.e2ap.SetSubscriptionRequestSequenceNumber(params.Payload, newSubId)
163 xapp.Logger.Error("SubReq: Unable to set Sequence Number in Payload. Dropping this msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
167 srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
169 xapp.Logger.Error("SubReq: Failed to update routing-manager. Dropping this msg. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
173 /* Create transatcion records for every subscription request */
174 xactKey := TransactionKey{newSubId, CREATE}
175 xactValue := Transaction{*srcAddr, *srcPort, params}
176 err = c.tracker.TrackTransaction(xactKey, xactValue)
178 xapp.Logger.Error("SubReq: Failed to create transaction record. Dropping this msg. Err: %v SubId: %v, Xid: %s", err, params.SubId, params.Xid)
182 /* Update routing manager about the new subscription*/
183 subRouteAction := SubRouteInfo{CREATE, *srcAddr, *srcPort, newSubId}
184 xapp.Logger.Info("SubReq: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
185 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
187 xapp.Logger.Error("SubReq: Failed to update routing manager. Dropping this SubReq msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
191 // Setting new subscription ID in the RMR header
192 params.SubId = int(newSubId)
193 xapp.Logger.Info("Forwarding SubReq to E2T: Mtype: %v, SubId: %v, Xid %s, Meid %v",params.Mtype, params.SubId, params.Xid, params.Meid)
194 err = c.rmrSend(params)
196 xapp.Logger.Error("SubReq: Failed to send request to E2T %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
198 c.timerMap.StartTimer("RIC_SUB_REQ", int(newSubId), subReqTime, c.handleSubscriptionRequestTimer)
200 xapp.Logger.Debug("SubReq: Debugging transaction table = %v", c.tracker.transactionTable)
204 func (c *Control) handleSubscriptionResponse(params *xapp.RMRParams) {
205 xapp.Logger.Info("SubResp received from Src: %s, Mtype: %v, SubId: %v, Meid: %v",params.Src, params.Mtype, params.SubId, params.Meid)
206 xapp.Rmr.Free(params.Mbuf)
209 payloadSeqNum, err := c.e2ap.GetSubscriptionResponseSequenceNumber(params.Payload)
211 xapp.Logger.Error("SubResp: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
214 xapp.Logger.Info("SubResp: Received payloadSeqNum: %v",payloadSeqNum)
216 if !c.registry.IsValidSequenceNumber(payloadSeqNum) {
217 xapp.Logger.Error("SubResp: Unknown payloadSeqNum. Dropping this msg. PayloadSeqNum: %v, SubId: %v", payloadSeqNum, params.SubId)
221 c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
223 c.registry.setSubscriptionToConfirmed(payloadSeqNum)
224 var transaction Transaction
225 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
227 xapp.Logger.Error("SubResp: Failed to retrive transaction record. Dropping this msg. Err: %V, SubId: %v", err, params.SubId)
230 xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Retrieved old subId", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
232 params.SubId = int(payloadSeqNum)
233 params.Xid = transaction.OrigParams.Xid
235 xapp.Logger.Info("SubResp: Forwarding Subscription Response to xApp Mtype: %v, SubId: %v, Meid: %v",params.Mtype, params.SubId, params.Meid)
236 err = c.rmrReplyToSender(params)
238 xapp.Logger.Error("SubResp: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
241 xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Deleting transaction record", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
242 transaction, err = c.tracker.completeTransaction(payloadSeqNum, CREATE)
244 xapp.Logger.Error("SubResp: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
250 func (c *Control) handleSubscriptionFailure(params *xapp.RMRParams) {
251 xapp.Logger.Info("SubFail received from Src: %s, Mtype: %v, SubId: %v, Meid: %v",params.Src, params.Mtype, params.SubId, params.Meid)
252 xapp.Rmr.Free(params.Mbuf)
255 payloadSeqNum, err := c.e2ap.GetSubscriptionFailureSequenceNumber(params.Payload)
257 xapp.Logger.Error("SubFail: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
260 xapp.Logger.Info("SubFail: Received payloadSeqNum: %v", payloadSeqNum)
262 c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
264 var transaction Transaction
265 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
267 xapp.Logger.Error("SubFail: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v: %s", err, params.SubId)
270 xapp.Logger.Info("SubFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
272 params.SubId = int(payloadSeqNum)
273 params.Xid = transaction.OrigParams.Xid
275 xapp.Logger.Info("Forwarding SubFail to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
276 err = c.rmrReplyToSender(params)
278 xapp.Logger.Error("Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
281 time.Sleep(3 * time.Second)
283 xapp.Logger.Info("SubFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
284 subRouteAction := SubRouteInfo{CREATE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
285 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
287 xapp.Logger.Error("SubFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
290 xapp.Logger.Info("SubFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
291 if c.registry.releaseSequenceNumber(payloadSeqNum) {
292 transaction, err = c.tracker.completeTransaction(payloadSeqNum, CREATE)
294 xapp.Logger.Error("SubFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
298 xapp.Logger.Error("SubFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
304 func (c *Control) handleSubscriptionRequestTimer(strId string, nbrId int) {
305 newSubId := uint16(nbrId)
306 xapp.Logger.Info("SubReq timer expired. newSubId: %v", newSubId)
307 // var causeContent uint8 = 1 // just some random cause. To be checked later. Should be no respose or something
308 // var causeVal uint8 = 1 // just some random val. To be checked later. Should be no respose or something
309 // c.sendSubscriptionFailure(newSubId, causeContent, causeVal)
313 func (c *Control) sendSubscriptionFailure(subId uint16, causeContent uint8, causeVal uint8) {
315 transaction, err := c.tracker.completeTransaction(subId, CREATE)
317 xapp.Logger.Error("SendSubFail: Failed to delete transaction record. Err:%v. SubId: %v", err, subId)
320 xapp.Logger.Info("SendSubFail: SubId: %v, Xid %v, Meid: %v", subId, transaction.OrigParams.Xid, transaction.OrigParams.Meid)
322 var params xapp.RMRParams
323 params.Mtype = 12012 //xapp.RICMessageTypes["RIC_SUB_FAILURE"]
324 params.SubId = int(subId)
325 params.Meid = transaction.OrigParams.Meid
326 params.Xid = transaction.OrigParams.Xid
328 // newPayload, packErr := c.e2ap.PackSubscriptionFailure(transaction.OrigParams.Payload, subId, causeContent, causeVal)
329 // if packErr != nil {
330 // xapp.Logger.Error("SendSubFail: PackSubscriptionFailure() due to %v", packErr)
334 newPayload := []byte("40CA4018000003EA7E00050000010016EA6300020021EA74000200C0") // Temporary solution
336 params.PayloadLen = len(newPayload)
337 params.Payload = newPayload
339 xapp.Logger.Info("SendSubFail: Forwarding failure to xApp: Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
340 err = c.rmrReplyToSender(¶ms)
342 xapp.Logger.Error("SendSubFail: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
345 time.Sleep(3 * time.Second)
347 xapp.Logger.Info("SendSubFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.XappInstanceAddress, transaction.XappPort)
349 xapp.Logger.Info("SubReqTimer: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
350 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, subId}
351 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
353 xapp.Logger.Error("SendSubFail: Failed to update routing manager %v. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
357 xapp.Logger.Info("SendSubFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
358 if c.registry.releaseSequenceNumber(subId) {
359 transaction, err = c.tracker.completeTransaction(subId, CREATE)
361 xapp.Logger.Error("SendSubFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
365 xapp.Logger.Error("SendSubFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
371 func (act Action) String() string {
372 actions := [...]string{
379 if act < CREATE || act > DELETE {
385 func (act Action) valid() bool {
387 case CREATE, MERGE, DELETE:
394 func (c *Control) handleSubscriptionDeleteRequest(params *xapp.RMRParams) {
395 xapp.Logger.Info("SubDelReq received from Src: %s, Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Src, params.Mtype, params.SubId, params.Xid, params.Meid)
396 xapp.Rmr.Free(params.Mbuf)
399 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteRequestSequenceNumber(params.Payload)
401 xapp.Logger.Error("SubDelReq: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
404 xapp.Logger.Info("SubDelReq: Received payloadSeqNum: %v", payloadSeqNum)
406 if c.registry.IsValidSequenceNumber(payloadSeqNum) {
407 c.registry.deleteSubscription(payloadSeqNum)
408 err = c.trackDeleteTransaction(params, payloadSeqNum)
410 xapp.Logger.Error("SubDelReq: Failed to create transaction record. Dropping this msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
414 xapp.Logger.Error("SubDelReq: Not valid sequence number. Dropping this msg. SubId: %v, Xid: %s", params.SubId, params.Xid)
418 xapp.Logger.Info("SubDelReq: Forwarding Request to E2T. Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
421 xapp.Logger.Error("SubDelReq: Failed to send request to E2T. Err %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
423 c.timerMap.StartTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum), subReqTime, c.handleSubscriptionDeleteRequestTimer)
428 func (c *Control) trackDeleteTransaction(params *xapp.RMRParams, payloadSeqNum uint16) (err error) {
429 srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
431 xapp.Logger.Error("SubDelReq: Failed to update routing-manager. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
433 xactKey := TransactionKey{payloadSeqNum, DELETE}
434 xactValue := Transaction{*srcAddr, *srcPort, params}
435 err = c.tracker.TrackTransaction(xactKey, xactValue)
439 func (c *Control) handleSubscriptionDeleteResponse(params *xapp.RMRParams) (err error) {
440 xapp.Logger.Info("SubDelResp received from Src: %s, Mtype: %v, SubId: %v, Meid: %v",params.Src, params.Mtype, params.SubId, params.Meid)
441 xapp.Rmr.Free(params.Mbuf)
444 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteResponseSequenceNumber(params.Payload)
446 xapp.Logger.Error("SubDelResp: Unable to get Sequence Number from Payload. Dropping this msg. Err: %, SubId: %v", err, params.SubId)
449 xapp.Logger.Info("SubDelResp: Received payloadSeqNum: %v", payloadSeqNum)
451 c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
453 var transaction Transaction
454 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
456 xapp.Logger.Error("SubDelResp: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
459 xapp.Logger.Info("SubDelResp: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
461 params.SubId = int(payloadSeqNum)
462 params.Xid = transaction.OrigParams.Xid
463 xapp.Logger.Info("Forwarding SubDelResp to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
464 err = c.rmrReplyToSender(params)
466 xapp.Logger.Error("SubDelResp: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
470 time.Sleep(3 * time.Second)
472 xapp.Logger.Info("SubDelResp: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
473 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
474 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
476 xapp.Logger.Error("SubDelResp: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
480 xapp.Logger.Info("SubDelResp: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
481 if c.registry.releaseSequenceNumber(payloadSeqNum) {
482 transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
484 xapp.Logger.Error("SubDelResp: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
488 xapp.Logger.Error("SubDelResp: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
494 func (c *Control) handleSubscriptionDeleteFailure(params *xapp.RMRParams) {
495 xapp.Logger.Info("SubDelFail received from Src: %s, Mtype: %v, SubId: %v, Meid: %v",params.Src, params.Mtype, params.SubId, params.Meid)
496 xapp.Rmr.Free(params.Mbuf)
499 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteFailureSequenceNumber(params.Payload)
501 xapp.Logger.Error("SubDelFail: Unable to get Sequence Number from Payload. Dropping this msg. Err: %, SubId: %v", err, params.SubId)
504 xapp.Logger.Info("SubDelFail: Received payloadSeqNum: %v", payloadSeqNum)
506 c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
508 var transaction Transaction
509 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
511 xapp.Logger.Error("SubDelFail: Failed to retrive transaction record. Dropping msg. Err %v, SubId: %v", err, params.SubId)
514 xapp.Logger.Info("SubDelFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
516 params.SubId = int(payloadSeqNum)
517 params.Xid = transaction.OrigParams.Xid
518 xapp.Logger.Info("Forwarding SubDelFail to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
519 err = c.rmrReplyToSender(params)
521 xapp.Logger.Error("Failed to send SubDelFail to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
525 time.Sleep(3 * time.Second)
527 xapp.Logger.Info("SubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
528 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
529 c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
531 xapp.Logger.Error("SubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
535 xapp.Logger.Info("SubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
536 if c.registry.releaseSequenceNumber(payloadSeqNum) {
537 transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
539 xapp.Logger.Error("SubDelFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
543 xapp.Logger.Error("SubDelFail: Failed to release sequency number. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
549 func (c *Control) handleSubscriptionDeleteRequestTimer(strId string, nbrId int) {
550 newSubId := uint16(nbrId)
551 xapp.Logger.Info("SubDelReq timer expired. newSubId: %v", newSubId)
552 // var causeContent uint8 = 1 // just some random cause. To be checked later. Should be no respose or something
553 // var causeVal uint8 = 1 // just some random val. To be checked later. Should be no respose or something
554 // c.sendSubscriptionDeleteFailure(newSubId, causeContent, causeVal)
558 func (c *Control) sendSubscriptionDeleteFailure(subId uint16, causeContent uint8, causeVal uint8) {
559 transaction, err := c.tracker.completeTransaction(subId, DELETE)
561 xapp.Logger.Error("SendSubDelFail: Failed to delete transaction record. Err: %v, newSubId: %v", err, subId)
564 xapp.Logger.Info("SendSubDelFail: SubId: %v, Xid %v, Meid: %v",subId, transaction.OrigParams.Xid, transaction.OrigParams.Meid)
566 var params xapp.RMRParams
567 params.Mtype = 12022 //xapp.RICMessageTypes["RIC_SUB_DEL_FAILURE"]
568 params.SubId = int(subId)
569 params.Meid = transaction.OrigParams.Meid
570 params.Xid = transaction.OrigParams.Xid
572 // newPayload, packErr := c.e2ap.PackSubscriptionDeleteFailure(transaction.OrigParams.Payload, subId, causeContent, causeVal)
573 // if packErr != nil {
574 // xapp.Logger.Error("SendSubDelFail: PackSubscriptionDeleteFailure(). Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid))
578 newPayload := []byte("40CA4018000003EA7E00050000010016EA6300020021EA74000200C0") // Temporary solution
580 params.PayloadLen = len(newPayload)
581 params.Payload = newPayload
583 xapp.Logger.Info("SendSubDelFail: Forwarding failure to xApp: Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
584 err = c.rmrReplyToSender(¶ms)
586 xapp.Logger.Error("SendSubDelFail: Failed to send response to xApp: Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
589 time.Sleep(3 * time.Second)
591 xapp.Logger.Info("SendSubDelFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.XappInstanceAddress, transaction.XappPort)
593 xapp.Logger.Info("SendSubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
594 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, subId}
595 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
597 xapp.Logger.Error("SendSubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
601 xapp.Logger.Info("SendSubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
602 if c.registry.releaseSequenceNumber(subId) {
603 transaction, err = c.tracker.completeTransaction(subId, DELETE)
605 xapp.Logger.Error("SendSubDelFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
609 xapp.Logger.Error("SendSubDelFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)