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
47 skipRouteUpdate bool // temp solution to skip routeupdate in unittests
66 xapp.Logger.Info("SUBMGR /ric-plt-submgr:r3-test-v4")
68 viper.SetEnvPrefix("submgr")
69 viper.AllowEmptyEnv(true)
70 seedSN = uint16(viper.GetInt("seed_sn"))
72 rand.Seed(time.Now().UnixNano())
73 seedSN = uint16(rand.Intn(65535))
78 xapp.Logger.Info("SUBMGR: Initial Sequence Number: %v", seedSN)
81 func NewControl() *Control {
82 registry := new(Registry)
83 registry.Initialize(seedSN)
85 tracker := new(Tracker)
88 timerMap := new(TimerMap)
91 transport := httptransport.New(viper.GetString("rtmgr.HostAddr")+":"+viper.GetString("rtmgr.port"), viper.GetString("rtmgr.baseUrl"), []string{"http"})
92 client := rtmgrclient.New(transport, strfmt.Default)
93 handle := rtmgrhandle.NewProvideXappSubscriptionHandleParamsWithTimeout(10 * time.Second)
94 deleteHandle := rtmgrhandle.NewDeleteXappSubscriptionHandleParamsWithTimeout(10 * time.Second)
95 rtmgrClient := RtmgrClient{client, handle, deleteHandle}
97 return &Control{e2ap: new(E2ap),
99 rtmgrClient: &rtmgrClient,
102 skipRouteUpdate: false,
106 func (c *Control) Run() {
110 func (c *Control) rmrSend(params *xapp.RMRParams) (err error) {
113 for ; i <= 10 && status == false; i++ {
114 c.rmrSendMutex.Lock()
115 status = xapp.Rmr.Send(params, false)
116 c.rmrSendMutex.Unlock()
118 xapp.Logger.Info("rmr.Send() failed. Retry count %v, Mtype: %v, SubId: %v, Xid %s", i, params.Mtype, params.SubId, params.Xid)
119 time.Sleep(500 * time.Millisecond)
123 err = errors.New("rmr.Send() failed")
124 xapp.Rmr.Free(params.Mbuf)
129 func (c *Control) rmrReplyToSender(params *xapp.RMRParams) (err error) {
134 func (c *Control) Consume(msg *xapp.RMRParams) (err error) {
136 case xapp.RICMessageTypes["RIC_SUB_REQ"]:
137 go c.handleSubscriptionRequest(msg)
138 case xapp.RICMessageTypes["RIC_SUB_RESP"]:
139 go c.handleSubscriptionResponse(msg)
140 case xapp.RICMessageTypes["RIC_SUB_FAILURE"]:
141 go c.handleSubscriptionFailure(msg)
142 case xapp.RICMessageTypes["RIC_SUB_DEL_REQ"]:
143 go c.handleSubscriptionDeleteRequest(msg)
144 case xapp.RICMessageTypes["RIC_SUB_DEL_RESP"]:
145 go c.handleSubscriptionDeleteResponse(msg)
146 case xapp.RICMessageTypes["RIC_SUB_DEL_FAILURE"]:
147 go c.handleSubscriptionDeleteFailure(msg)
149 xapp.Logger.Info("Unknown Message Type '%d', discarding", msg.Mtype)
154 func (c *Control) handleSubscriptionRequest(params *xapp.RMRParams) {
155 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)
156 xapp.Rmr.Free(params.Mbuf)
159 /* Reserve a sequence number and set it in the payload */
160 newSubId, isIdValid := c.registry.ReserveSequenceNumber()
161 if isIdValid != true {
162 xapp.Logger.Error("SubReq: Failed to reserve sequence number. Dropping this msg. SubId: %v, Xid: %s", params.SubId, params.Xid)
166 err := c.e2ap.SetSubscriptionRequestSequenceNumber(params.Payload, newSubId)
168 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)
172 srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
174 xapp.Logger.Error("SubReq: Failed to update routing-manager. Dropping this msg. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
178 /* Create transatcion records for every subscription request */
179 xactKey := TransactionKey{newSubId, CREATE}
180 xactValue := Transaction{*srcAddr, *srcPort, params}
181 err = c.tracker.TrackTransaction(xactKey, xactValue)
183 xapp.Logger.Error("SubReq: Failed to create transaction record. Dropping this msg. Err: %v SubId: %v, Xid: %s", err, params.SubId, params.Xid)
187 /* Update routing manager about the new subscription*/
188 subRouteAction := SubRouteInfo{CREATE, *srcAddr, *srcPort, newSubId}
189 xapp.Logger.Info("SubReq: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
191 if c.skipRouteUpdate == false {
192 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
194 xapp.Logger.Error("SubReq: Failed to update routing manager. Dropping this SubReq msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
199 // Setting new subscription ID in the RMR header
200 params.SubId = int(newSubId)
201 xapp.Logger.Info("Forwarding SubReq to E2T: Mtype: %v, SubId: %v, Xid %s, Meid %v", params.Mtype, params.SubId, params.Xid, params.Meid)
202 err = c.rmrSend(params)
204 xapp.Logger.Error("SubReq: Failed to send request to E2T %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
206 c.timerMap.StartTimer("RIC_SUB_REQ", int(newSubId), subReqTime, c.handleSubscriptionRequestTimer)
208 xapp.Logger.Debug("SubReq: Debugging transaction table = %v", c.tracker.transactionTable)
212 func (c *Control) handleSubscriptionResponse(params *xapp.RMRParams) {
213 xapp.Logger.Info("SubResp received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
214 xapp.Rmr.Free(params.Mbuf)
217 payloadSeqNum, err := c.e2ap.GetSubscriptionResponseSequenceNumber(params.Payload)
219 xapp.Logger.Error("SubResp: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
222 xapp.Logger.Info("SubResp: Received payloadSeqNum: %v", payloadSeqNum)
224 if !c.registry.IsValidSequenceNumber(payloadSeqNum) {
225 xapp.Logger.Error("SubResp: Unknown payloadSeqNum. Dropping this msg. PayloadSeqNum: %v, SubId: %v", payloadSeqNum, params.SubId)
229 c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
231 c.registry.setSubscriptionToConfirmed(payloadSeqNum)
232 var transaction Transaction
233 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
235 xapp.Logger.Error("SubResp: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
238 xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Retrieved old subId", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
240 params.SubId = int(payloadSeqNum)
241 params.Xid = transaction.OrigParams.Xid
243 xapp.Logger.Info("SubResp: Forwarding Subscription Response to xApp Mtype: %v, SubId: %v, Meid: %v", params.Mtype, params.SubId, params.Meid)
244 err = c.rmrReplyToSender(params)
246 xapp.Logger.Error("SubResp: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
249 xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Deleting transaction record", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
250 transaction, err = c.tracker.completeTransaction(payloadSeqNum, CREATE)
252 xapp.Logger.Error("SubResp: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
258 func (c *Control) handleSubscriptionFailure(params *xapp.RMRParams) {
259 xapp.Logger.Info("SubFail received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
260 xapp.Rmr.Free(params.Mbuf)
263 payloadSeqNum, err := c.e2ap.GetSubscriptionFailureSequenceNumber(params.Payload)
265 xapp.Logger.Error("SubFail: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
268 xapp.Logger.Info("SubFail: Received payloadSeqNum: %v", payloadSeqNum)
270 c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
272 var transaction Transaction
273 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
275 xapp.Logger.Error("SubFail: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
278 xapp.Logger.Info("SubFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
280 params.SubId = int(payloadSeqNum)
281 params.Xid = transaction.OrigParams.Xid
283 xapp.Logger.Info("Forwarding SubFail to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
284 err = c.rmrReplyToSender(params)
286 xapp.Logger.Error("Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
289 time.Sleep(3 * time.Second)
291 if c.skipRouteUpdate == false {
292 xapp.Logger.Info("SubFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
293 subRouteAction := SubRouteInfo{CREATE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
294 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
296 xapp.Logger.Error("SubFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
300 xapp.Logger.Info("SubFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
301 if c.registry.releaseSequenceNumber(payloadSeqNum) {
302 transaction, err = c.tracker.completeTransaction(payloadSeqNum, CREATE)
304 xapp.Logger.Error("SubFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
308 xapp.Logger.Error("SubFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
314 func (c *Control) handleSubscriptionRequestTimer(strId string, nbrId int) {
315 newSubId := uint16(nbrId)
316 xapp.Logger.Info("SubReq timer expired. newSubId: %v", newSubId)
317 // var causeContent uint8 = 1 // just some random cause. To be checked later. Should be no respose or something
318 // var causeVal uint8 = 1 // just some random val. To be checked later. Should be no respose or something
319 // c.sendSubscriptionFailure(newSubId, causeContent, causeVal)
323 func (c *Control) sendSubscriptionFailure(subId uint16, causeContent uint8, causeVal uint8) {
325 transaction, err := c.tracker.completeTransaction(subId, CREATE)
327 xapp.Logger.Error("SendSubFail: Failed to delete transaction record. Err:%v. SubId: %v", err, subId)
330 xapp.Logger.Info("SendSubFail: SubId: %v, Xid %v, Meid: %v", subId, transaction.OrigParams.Xid, transaction.OrigParams.Meid)
332 var params xapp.RMRParams
333 params.Mtype = 12012 //xapp.RICMessageTypes["RIC_SUB_FAILURE"]
334 params.SubId = int(subId)
335 params.Meid = transaction.OrigParams.Meid
336 params.Xid = transaction.OrigParams.Xid
338 // newPayload, packErr := c.e2ap.PackSubscriptionFailure(transaction.OrigParams.Payload, subId, causeContent, causeVal)
339 // if packErr != nil {
340 // xapp.Logger.Error("SendSubFail: PackSubscriptionFailure() due to %v", packErr)
344 newPayload := []byte("40CA4018000003EA7E00050000010016EA6300020021EA74000200C0") // Temporary solution
346 params.PayloadLen = len(newPayload)
347 params.Payload = newPayload
349 xapp.Logger.Info("SendSubFail: Forwarding failure to xApp: Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
350 err = c.rmrReplyToSender(¶ms)
352 xapp.Logger.Error("SendSubFail: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
355 time.Sleep(3 * time.Second)
357 xapp.Logger.Info("SendSubFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.XappInstanceAddress, transaction.XappPort)
359 xapp.Logger.Info("SubReqTimer: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
360 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, subId}
361 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
363 xapp.Logger.Error("SendSubFail: Failed to update routing manager %v. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
367 xapp.Logger.Info("SendSubFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
368 if c.registry.releaseSequenceNumber(subId) {
369 transaction, err = c.tracker.completeTransaction(subId, CREATE)
371 xapp.Logger.Error("SendSubFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
375 xapp.Logger.Error("SendSubFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
381 func (act Action) String() string {
382 actions := [...]string{
389 if act < CREATE || act > DELETE {
395 func (act Action) valid() bool {
397 case CREATE, MERGE, DELETE:
404 func (c *Control) handleSubscriptionDeleteRequest(params *xapp.RMRParams) {
405 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)
406 xapp.Rmr.Free(params.Mbuf)
409 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteRequestSequenceNumber(params.Payload)
411 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)
414 xapp.Logger.Info("SubDelReq: Received payloadSeqNum: %v", payloadSeqNum)
416 if c.registry.IsValidSequenceNumber(payloadSeqNum) {
417 c.registry.deleteSubscription(payloadSeqNum)
418 err = c.trackDeleteTransaction(params, payloadSeqNum)
420 xapp.Logger.Error("SubDelReq: Failed to create transaction record. Dropping this msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
424 xapp.Logger.Error("SubDelReq: Not valid sequence number. Dropping this msg. SubId: %v, Xid: %s", params.SubId, params.Xid)
428 xapp.Logger.Info("SubDelReq: Forwarding Request to E2T. Mtype: %v, SubId: %v, Xid: %s, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
431 xapp.Logger.Error("SubDelReq: Failed to send request to E2T. Err %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
433 c.timerMap.StartTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum), subReqTime, c.handleSubscriptionDeleteRequestTimer)
438 func (c *Control) trackDeleteTransaction(params *xapp.RMRParams, payloadSeqNum uint16) (err error) {
439 srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
441 xapp.Logger.Error("SubDelReq: Failed to update routing-manager. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
443 xactKey := TransactionKey{payloadSeqNum, DELETE}
444 xactValue := Transaction{*srcAddr, *srcPort, params}
445 err = c.tracker.TrackTransaction(xactKey, xactValue)
449 func (c *Control) handleSubscriptionDeleteResponse(params *xapp.RMRParams) (err error) {
450 xapp.Logger.Info("SubDelResp received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
451 xapp.Rmr.Free(params.Mbuf)
454 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteResponseSequenceNumber(params.Payload)
456 xapp.Logger.Error("SubDelResp: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
459 xapp.Logger.Info("SubDelResp: Received payloadSeqNum: %v", payloadSeqNum)
461 c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
463 var transaction Transaction
464 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
466 xapp.Logger.Error("SubDelResp: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
469 xapp.Logger.Info("SubDelResp: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
471 params.SubId = int(payloadSeqNum)
472 params.Xid = transaction.OrigParams.Xid
473 xapp.Logger.Info("Forwarding SubDelResp to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
474 err = c.rmrReplyToSender(params)
476 xapp.Logger.Error("SubDelResp: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
480 time.Sleep(3 * time.Second)
482 if c.skipRouteUpdate == false {
483 xapp.Logger.Info("SubDelResp: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
484 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
485 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
487 xapp.Logger.Error("SubDelResp: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
492 xapp.Logger.Info("SubDelResp: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
493 if c.registry.releaseSequenceNumber(payloadSeqNum) {
494 transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
496 xapp.Logger.Error("SubDelResp: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
500 xapp.Logger.Error("SubDelResp: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
506 func (c *Control) handleSubscriptionDeleteFailure(params *xapp.RMRParams) {
507 xapp.Logger.Info("SubDelFail received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
508 xapp.Rmr.Free(params.Mbuf)
511 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteFailureSequenceNumber(params.Payload)
513 xapp.Logger.Error("SubDelFail: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
516 xapp.Logger.Info("SubDelFail: Received payloadSeqNum: %v", payloadSeqNum)
518 c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
520 var transaction Transaction
521 transaction, err = c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
523 xapp.Logger.Error("SubDelFail: Failed to retrive transaction record. Dropping msg. Err %v, SubId: %v", err, params.SubId)
526 xapp.Logger.Info("SubDelFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.XappInstanceAddress, transaction.XappPort)
528 params.SubId = int(payloadSeqNum)
529 params.Xid = transaction.OrigParams.Xid
530 xapp.Logger.Info("Forwarding SubDelFail to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
531 err = c.rmrReplyToSender(params)
533 xapp.Logger.Error("Failed to send SubDelFail to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
537 time.Sleep(3 * time.Second)
539 if c.skipRouteUpdate == false {
540 xapp.Logger.Info("SubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
541 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, payloadSeqNum}
542 c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
544 xapp.Logger.Error("SubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
549 xapp.Logger.Info("SubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
550 if c.registry.releaseSequenceNumber(payloadSeqNum) {
551 transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
553 xapp.Logger.Error("SubDelFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
557 xapp.Logger.Error("SubDelFail: Failed to release sequency number. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
563 func (c *Control) handleSubscriptionDeleteRequestTimer(strId string, nbrId int) {
564 newSubId := uint16(nbrId)
565 xapp.Logger.Info("SubDelReq timer expired. newSubId: %v", newSubId)
566 // var causeContent uint8 = 1 // just some random cause. To be checked later. Should be no respose or something
567 // var causeVal uint8 = 1 // just some random val. To be checked later. Should be no respose or something
568 // c.sendSubscriptionDeleteFailure(newSubId, causeContent, causeVal)
572 func (c *Control) sendSubscriptionDeleteFailure(subId uint16, causeContent uint8, causeVal uint8) {
573 transaction, err := c.tracker.completeTransaction(subId, DELETE)
575 xapp.Logger.Error("SendSubDelFail: Failed to delete transaction record. Err: %v, newSubId: %v", err, subId)
578 xapp.Logger.Info("SendSubDelFail: SubId: %v, Xid %v, Meid: %v",subId, transaction.OrigParams.Xid, transaction.OrigParams.Meid)
580 var params xapp.RMRParams
581 params.Mtype = 12022 //xapp.RICMessageTypes["RIC_SUB_DEL_FAILURE"]
582 params.SubId = int(subId)
583 params.Meid = transaction.OrigParams.Meid
584 params.Xid = transaction.OrigParams.Xid
586 // newPayload, packErr := c.e2ap.PackSubscriptionDeleteFailure(transaction.OrigParams.Payload, subId, causeContent, causeVal)
587 // if packErr != nil {
588 // xapp.Logger.Error("SendSubDelFail: PackSubscriptionDeleteFailure(). Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid))
592 newPayload := []byte("40CA4018000003EA7E00050000010016EA6300020021EA74000200C0") // Temporary solution
594 params.PayloadLen = len(newPayload)
595 params.Payload = newPayload
597 xapp.Logger.Info("SendSubDelFail: Forwarding failure to xApp: Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
598 err = c.rmrReplyToSender(¶ms)
600 xapp.Logger.Error("SendSubDelFail: Failed to send response to xApp: Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
603 time.Sleep(3 * time.Second)
605 xapp.Logger.Info("SendSubDelFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.XappInstanceAddress, transaction.XappPort)
607 xapp.Logger.Info("SendSubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
608 subRouteAction := SubRouteInfo{DELETE, transaction.XappInstanceAddress, transaction.XappPort, subId}
609 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
611 xapp.Logger.Error("SendSubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
615 xapp.Logger.Info("SendSubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
616 if c.registry.releaseSequenceNumber(subId) {
617 transaction, err = c.tracker.completeTransaction(subId, DELETE)
619 xapp.Logger.Error("SendSubDelFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
623 xapp.Logger.Error("SendSubDelFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)