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 transport := httptransport.New(viper.GetString("rtmgr.HostAddr")+":"+viper.GetString("rtmgr.port"), viper.GetString("rtmgr.baseUrl"), []string{"http"})
91 client := rtmgrclient.New(transport, strfmt.Default)
92 handle := rtmgrhandle.NewProvideXappSubscriptionHandleParamsWithTimeout(10 * time.Second)
93 deleteHandle := rtmgrhandle.NewDeleteXappSubscriptionHandleParamsWithTimeout(10 * time.Second)
94 rtmgrClient := RtmgrClient{client, handle, deleteHandle}
96 return &Control{e2ap: new(E2ap),
98 rtmgrClient: &rtmgrClient,
104 func (c *Control) Run() {
108 func (c *Control) rmrSend(params *xapp.RMRParams) (err error) {
111 for ; i <= 10 && status == false; i++ {
112 c.rmrSendMutex.Lock()
113 status = xapp.Rmr.Send(params, false)
114 c.rmrSendMutex.Unlock()
116 xapp.Logger.Info("rmr.Send() failed. Retry count %v, Mtype: %v, SubId: %v, Xid %s", i, params.Mtype, params.SubId, params.Xid)
117 time.Sleep(500 * time.Millisecond)
121 err = errors.New("rmr.Send() failed")
122 xapp.Rmr.Free(params.Mbuf)
127 func (c *Control) rmrReplyToSender(params *xapp.RMRParams) (err error) {
132 func (c *Control) Consume(msg *xapp.RMRParams) (err error) {
134 case xapp.RICMessageTypes["RIC_SUB_REQ"]:
135 go c.handleSubscriptionRequest(msg)
136 case xapp.RICMessageTypes["RIC_SUB_RESP"]:
137 go c.handleSubscriptionResponse(msg)
138 case xapp.RICMessageTypes["RIC_SUB_FAILURE"]:
139 go c.handleSubscriptionFailure(msg)
140 case xapp.RICMessageTypes["RIC_SUB_DEL_REQ"]:
141 go c.handleSubscriptionDeleteRequest(msg)
142 case xapp.RICMessageTypes["RIC_SUB_DEL_RESP"]:
143 go c.handleSubscriptionDeleteResponse(msg)
144 case xapp.RICMessageTypes["RIC_SUB_DEL_FAILURE"]:
145 go c.handleSubscriptionDeleteFailure(msg)
147 xapp.Logger.Info("Unknown Message Type '%d', discarding", msg.Mtype)
152 func (c *Control) handleSubscriptionRequest(params *xapp.RMRParams) {
153 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)
154 xapp.Rmr.Free(params.Mbuf)
157 /* Reserve a sequence number and set it in the payload */
158 newSubId, isIdValid := c.registry.ReserveSequenceNumber()
159 if isIdValid != true {
160 xapp.Logger.Error("SubReq: Failed to reserve sequence number. Dropping this msg. SubId: %v, Xid: %s", params.SubId, params.Xid)
164 err := c.e2ap.SetSubscriptionRequestSequenceNumber(params.Payload, newSubId)
166 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 c.registry.releaseSequenceNumber(newSubId)
171 srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
173 xapp.Logger.Error("SubReq: Failed to update routing-manager. Dropping this msg. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
174 c.registry.releaseSequenceNumber(newSubId)
178 /* Create transatcion records for every subscription request */
179 transaction, err := c.tracker.TrackTransaction(newSubId, CREATE, *srcAddr, *srcPort, params)
181 xapp.Logger.Error("SubReq: Failed to create transaction record. Dropping this msg. Err: %v SubId: %v, Xid: %s", err, params.SubId, params.Xid)
182 c.registry.releaseSequenceNumber(newSubId)
186 /* Update routing manager about the new subscription*/
187 subRouteAction := transaction.SubRouteInfo()
188 xapp.Logger.Info("SubReq: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
190 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
192 xapp.Logger.Error("SubReq: Failed to update routing manager. Dropping this SubReq msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
196 // Setting new subscription ID in the RMR header
197 params.SubId = int(newSubId)
198 xapp.Logger.Info("Forwarding SubReq to E2T: Mtype: %v, SubId: %v, Xid %s, Meid %v", params.Mtype, params.SubId, params.Xid, params.Meid)
199 err = c.rmrSend(params)
201 xapp.Logger.Error("SubReq: Failed to send request to E2T %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
203 c.timerMap.StartTimer("RIC_SUB_REQ", int(newSubId), subReqTime, c.handleSubscriptionRequestTimer)
205 xapp.Logger.Debug("SubReq: Debugging transaction table = %v", c.tracker.transactionTable)
209 func (c *Control) handleSubscriptionResponse(params *xapp.RMRParams) {
210 xapp.Logger.Info("SubResp received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
211 xapp.Rmr.Free(params.Mbuf)
214 payloadSeqNum, err := c.e2ap.GetSubscriptionResponseSequenceNumber(params.Payload)
216 xapp.Logger.Error("SubResp: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
219 xapp.Logger.Info("SubResp: Received payloadSeqNum: %v", payloadSeqNum)
221 if !c.registry.IsValidSequenceNumber(payloadSeqNum) {
222 xapp.Logger.Error("SubResp: Unknown payloadSeqNum. Dropping this msg. PayloadSeqNum: %v, SubId: %v", payloadSeqNum, params.SubId)
226 c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
228 c.registry.setSubscriptionToConfirmed(payloadSeqNum)
229 transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
231 xapp.Logger.Error("SubResp: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
234 xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Retrieved old subId", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
236 params.SubId = int(payloadSeqNum)
237 params.Xid = transaction.OrigParams.Xid
239 xapp.Logger.Info("SubResp: Forwarding Subscription Response to xApp Mtype: %v, SubId: %v, Meid: %v", params.Mtype, params.SubId, params.Meid)
240 err = c.rmrReplyToSender(params)
242 xapp.Logger.Error("SubResp: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
245 xapp.Logger.Info("SubResp: SubId: %v, from address: %v:%v. Deleting transaction record", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
246 transaction, err = c.tracker.completeTransaction(payloadSeqNum, CREATE)
248 xapp.Logger.Error("SubResp: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
254 func (c *Control) handleSubscriptionFailure(params *xapp.RMRParams) {
255 xapp.Logger.Info("SubFail received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
256 xapp.Rmr.Free(params.Mbuf)
259 payloadSeqNum, err := c.e2ap.GetSubscriptionFailureSequenceNumber(params.Payload)
261 xapp.Logger.Error("SubFail: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
264 xapp.Logger.Info("SubFail: Received payloadSeqNum: %v", payloadSeqNum)
266 c.timerMap.StopTimer("RIC_SUB_REQ", int(payloadSeqNum))
268 transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, CREATE)
270 xapp.Logger.Error("SubFail: Failed to retrive transaction record. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
273 xapp.Logger.Info("SubFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
275 params.SubId = int(payloadSeqNum)
276 params.Xid = transaction.OrigParams.Xid
278 xapp.Logger.Info("Forwarding SubFail to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
279 err = c.rmrReplyToSender(params)
281 xapp.Logger.Error("Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
284 time.Sleep(3 * time.Second)
286 xapp.Logger.Info("SubFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
287 subRouteAction := transaction.SubRouteInfo()
288 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
290 xapp.Logger.Error("SubFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
293 xapp.Logger.Info("SubFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
294 if c.registry.releaseSequenceNumber(payloadSeqNum) {
295 transaction, err = c.tracker.completeTransaction(payloadSeqNum, CREATE)
297 xapp.Logger.Error("SubFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
301 xapp.Logger.Error("SubFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
307 func (c *Control) handleSubscriptionRequestTimer(strId string, nbrId int) {
308 newSubId := uint16(nbrId)
309 xapp.Logger.Info("SubReq timer expired. newSubId: %v", newSubId)
310 // var causeContent uint8 = 1 // just some random cause. To be checked later. Should be no respose or something
311 // var causeVal uint8 = 1 // just some random val. To be checked later. Should be no respose or something
312 // c.sendSubscriptionFailure(newSubId, causeContent, causeVal)
316 func (c *Control) sendSubscriptionFailure(subId uint16, causeContent uint8, causeVal uint8) {
318 transaction, err := c.tracker.completeTransaction(subId, CREATE)
320 xapp.Logger.Error("SendSubFail: Failed to delete transaction record. Err:%v. SubId: %v", err, subId)
323 xapp.Logger.Info("SendSubFail: SubId: %v, Xid %v, Meid: %v", subId, transaction.OrigParams.Xid, transaction.OrigParams.Meid)
325 var params xapp.RMRParams
326 params.Mtype = 12012 //xapp.RICMessageTypes["RIC_SUB_FAILURE"]
327 params.SubId = int(subId)
328 params.Meid = transaction.OrigParams.Meid
329 params.Xid = transaction.OrigParams.Xid
331 // newPayload, packErr := c.e2ap.PackSubscriptionFailure(transaction.OrigParams.Payload, subId, causeContent, causeVal)
332 // if packErr != nil {
333 // xapp.Logger.Error("SendSubFail: PackSubscriptionFailure() due to %v", packErr)
337 newPayload := []byte("40CA4018000003EA7E00050000010016EA6300020021EA74000200C0") // Temporary solution
339 params.PayloadLen = len(newPayload)
340 params.Payload = newPayload
342 xapp.Logger.Info("SendSubFail: Forwarding failure to xApp: Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
343 err = c.rmrReplyToSender(¶ms)
345 xapp.Logger.Error("SendSubFail: Failed to send response to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
348 time.Sleep(3 * time.Second)
350 xapp.Logger.Info("SendSubFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.Xappkey.Addr, transaction.Xappkey.Port)
352 xapp.Logger.Info("SubReqTimer: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
353 subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, subId}
354 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
356 xapp.Logger.Error("SendSubFail: Failed to update routing manager %v. SubId: %v, Xid: %s", err, params.SubId, params.Xid)
360 xapp.Logger.Info("SendSubFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
361 if c.registry.releaseSequenceNumber(subId) {
362 transaction, err = c.tracker.completeTransaction(subId, CREATE)
364 xapp.Logger.Error("SendSubFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
368 xapp.Logger.Error("SendSubFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)
374 func (act Action) String() string {
375 actions := [...]string{
382 if act < CREATE || act > DELETE {
388 func (act Action) valid() bool {
390 case CREATE, MERGE, DELETE:
397 func (c *Control) handleSubscriptionDeleteRequest(params *xapp.RMRParams) {
398 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)
399 xapp.Rmr.Free(params.Mbuf)
402 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteRequestSequenceNumber(params.Payload)
404 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)
407 xapp.Logger.Info("SubDelReq: Received payloadSeqNum: %v", payloadSeqNum)
409 if c.registry.IsValidSequenceNumber(payloadSeqNum) {
410 c.registry.deleteSubscription(payloadSeqNum)
411 _, err = c.trackDeleteTransaction(params, payloadSeqNum)
413 xapp.Logger.Error("SubDelReq: Failed to create transaction record. Dropping this msg. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
417 xapp.Logger.Error("SubDelReq: Not valid sequence number. Dropping this msg. SubId: %v, Xid: %s", params.SubId, params.Xid)
421 xapp.Logger.Info("SubDelReq: Forwarding Request to E2T. Mtype: %v, SubId: %v, Xid: %s, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
424 xapp.Logger.Error("SubDelReq: Failed to send request to E2T. Err %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
426 c.timerMap.StartTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum), subReqTime, c.handleSubscriptionDeleteRequestTimer)
431 func (c *Control) trackDeleteTransaction(params *xapp.RMRParams, payloadSeqNum uint16) (transaction *Transaction, err error) {
432 srcAddr, srcPort, err := c.rtmgrClient.SplitSource(params.Src)
434 xapp.Logger.Error("SubDelReq: Failed to update routing-manager. Err: %s, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
436 transaction, err = c.tracker.TrackTransaction(payloadSeqNum, DELETE, *srcAddr, *srcPort, params)
440 func (c *Control) handleSubscriptionDeleteResponse(params *xapp.RMRParams) (err error) {
441 xapp.Logger.Info("SubDelResp received from Src: %s, Mtype: %v, SubId: %v, Meid: %v", params.Src, params.Mtype, params.SubId, params.Meid)
442 xapp.Rmr.Free(params.Mbuf)
445 payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteResponseSequenceNumber(params.Payload)
447 xapp.Logger.Error("SubDelResp: Unable to get Sequence Number from Payload. Dropping this msg. Err: %v, SubId: %v", err, params.SubId)
450 xapp.Logger.Info("SubDelResp: Received payloadSeqNum: %v", payloadSeqNum)
452 c.timerMap.StopTimer("RIC_SUB_DEL_REQ", int(payloadSeqNum))
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.Xappkey.Addr, transaction.Xappkey.Port)
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.Xappkey.Addr, transaction.Xappkey.Port, 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: %v, 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 transaction, err := c.tracker.RetriveTransaction(payloadSeqNum, DELETE)
510 xapp.Logger.Error("SubDelFail: Failed to retrive transaction record. Dropping msg. Err %v, SubId: %v", err, params.SubId)
513 xapp.Logger.Info("SubDelFail: SubId: %v, from address: %v:%v. Forwarding response to xApp", int(payloadSeqNum), transaction.Xappkey.Addr, transaction.Xappkey.Port)
515 params.SubId = int(payloadSeqNum)
516 params.Xid = transaction.OrigParams.Xid
517 xapp.Logger.Info("Forwarding SubDelFail to xApp: Mtype: %v, SubId: %v, Xid: %v, Meid: %v", params.Mtype, params.SubId, params.Xid, params.Meid)
518 err = c.rmrReplyToSender(params)
520 xapp.Logger.Error("Failed to send SubDelFail to xApp. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
524 time.Sleep(3 * time.Second)
526 xapp.Logger.Info("SubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
527 subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, payloadSeqNum}
528 c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
530 xapp.Logger.Error("SubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
534 xapp.Logger.Info("SubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
535 if c.registry.releaseSequenceNumber(payloadSeqNum) {
536 transaction, err = c.tracker.completeTransaction(payloadSeqNum, DELETE)
538 xapp.Logger.Error("SubDelFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
542 xapp.Logger.Error("SubDelFail: Failed to release sequency number. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
548 func (c *Control) handleSubscriptionDeleteRequestTimer(strId string, nbrId int) {
549 newSubId := uint16(nbrId)
550 xapp.Logger.Info("SubDelReq timer expired. newSubId: %v", newSubId)
551 // var causeContent uint8 = 1 // just some random cause. To be checked later. Should be no respose or something
552 // var causeVal uint8 = 1 // just some random val. To be checked later. Should be no respose or something
553 // c.sendSubscriptionDeleteFailure(newSubId, causeContent, causeVal)
557 func (c *Control) sendSubscriptionDeleteFailure(subId uint16, causeContent uint8, causeVal uint8) {
558 transaction, err := c.tracker.completeTransaction(subId, DELETE)
560 xapp.Logger.Error("SendSubDelFail: Failed to delete transaction record. Err: %v, newSubId: %v", err, subId)
563 xapp.Logger.Info("SendSubDelFail: SubId: %v, Xid %v, Meid: %v",subId, transaction.OrigParams.Xid, transaction.OrigParams.Meid)
565 var params xapp.RMRParams
566 params.Mtype = 12022 //xapp.RICMessageTypes["RIC_SUB_DEL_FAILURE"]
567 params.SubId = int(subId)
568 params.Meid = transaction.OrigParams.Meid
569 params.Xid = transaction.OrigParams.Xid
571 // newPayload, packErr := c.e2ap.PackSubscriptionDeleteFailure(transaction.OrigParams.Payload, subId, causeContent, causeVal)
572 // if packErr != nil {
573 // xapp.Logger.Error("SendSubDelFail: PackSubscriptionDeleteFailure(). Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid))
577 newPayload := []byte("40CA4018000003EA7E00050000010016EA6300020021EA74000200C0") // Temporary solution
579 params.PayloadLen = len(newPayload)
580 params.Payload = newPayload
582 xapp.Logger.Info("SendSubDelFail: Forwarding failure to xApp: Mtype: %v, SubId: %v, Xid: %s, Meid: %v",params.Mtype, params.SubId, params.Xid, params.Meid)
583 err = c.rmrReplyToSender(¶ms)
585 xapp.Logger.Error("SendSubDelFail: Failed to send response to xApp: Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
588 time.Sleep(3 * time.Second)
590 xapp.Logger.Info("SendSubDelFail: SubId: %v, from address: %v:%v. Deleting transaction record", int(subId), transaction.Xappkey.Addr, transaction.Xappkey.Port)
592 xapp.Logger.Info("SendSubDelFail: Starting routing manager update. SubId: %v, Xid: %s", params.SubId, params.Xid)
593 subRouteAction := SubRouteInfo{DELETE, transaction.Xappkey.Addr, transaction.Xappkey.Port, subId}
594 err = c.rtmgrClient.SubscriptionRequestUpdate(subRouteAction)
596 xapp.Logger.Error("SendSubDelFail: Failed to update routing manager. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
600 xapp.Logger.Info("SendSubDelFail: Deleting transaction record. SubId: %v, Xid: %s", params.SubId, params.Xid)
601 if c.registry.releaseSequenceNumber(subId) {
602 transaction, err = c.tracker.completeTransaction(subId, DELETE)
604 xapp.Logger.Error("SendSubDelFail: Failed to delete transaction record. Err: %v, SubId: %v, Xid: %s", err, params.SubId, params.Xid)
608 xapp.Logger.Error("SendSubDelFail: Failed to release sequency number. SubId: %v, Xid: %s", params.SubId, params.Xid)