From b3dc15673967c1c94a52d82ea8b169fefd6f9154 Mon Sep 17 00:00:00 2001 From: Juha Hyttinen Date: Tue, 14 Jan 2020 14:32:17 +0200 Subject: [PATCH] RICPLT-2982 SubDelReq go asn into use Change-Id: I1346388fb879da216f744aa9214b72d243e07b3b Signed-off-by: Juha Hyttinen --- pkg/control/control.go | 39 +++++++++++++++++++++++++++++++-------- pkg/control/e2ap.go | 25 +------------------------ 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/pkg/control/control.go b/pkg/control/control.go index cfe3dfb..6fc7d33 100755 --- a/pkg/control/control.go +++ b/pkg/control/control.go @@ -447,23 +447,27 @@ func (c *Control) handleSubscriptionDeleteRequest(params *RMRParams) { return } - payloadSeqNum, err := c.e2ap.GetSubscriptionDeleteRequestSequenceNumber(params.Payload) - if err == nil { - subs = c.registry.GetSubscription(payloadSeqNum) + // + // + // + trans.SubDelReqMsg, err = c.e2ap.UnpackSubscriptionDeleteRequest(params.Payload) + if err != nil { + xapp.Logger.Error("SubDelReq: %s Dropping this msg. %s", err.Error(), trans) + trans.Release() + return } + + subs = c.registry.GetSubscription(uint16(trans.SubDelReqMsg.RequestId.Seq)) if subs == nil && params.SubId > 0 { subs = c.registry.GetSubscription(uint16(params.SubId)) } if subs == nil { - xapp.Logger.Error("SubDelReq: Not valid subscription found payloadSeqNum: %d. Dropping this msg. %s", payloadSeqNum, trans) + xapp.Logger.Error("SubDelReq: Not valid subscription found payloadSeqNum: %d, SubId: %d. Dropping this msg. %s", trans.SubDelReqMsg.RequestId.Seq, params.SubId, trans) trans.Release() return } - xapp.Logger.Info("SubDelReq: subscription found payloadSeqNum: %d. %s", payloadSeqNum, trans) - - trans.PayloadLen = params.PayloadLen - trans.Payload = params.Payload + xapp.Logger.Info("SubDelReq: subscription found payloadSeqNum: %d, SubId: %d. %s", trans.SubDelReqMsg.RequestId.Seq, params.SubId, trans) err = subs.SetTransaction(trans) if err != nil { @@ -472,6 +476,25 @@ func (c *Control) handleSubscriptionDeleteRequest(params *RMRParams) { return } + // + // TODO: subscription delete is in fact owned by subscription and not transaction. + // Transaction is toward xapp while Subscription is toward ran. + // In merge several xapps may wake transactions, while only one subscription + // toward ran occurs -> subscription owns subscription creation toward ran + // + // This is intermediate solution while improving message handling + // + packedData, err := c.e2ap.PackSubscriptionDeleteRequest(trans.SubDelReqMsg) + if err != nil { + xapp.Logger.Error("SubDelReq: %s for trans %s", err.Error(), trans) + trans.Release() + return + } + + //Optimize and store packed message to be sent (for retransmission). Again owned by subscription? + trans.Payload = packedData.Buf + trans.PayloadLen = len(packedData.Buf) + subs.UnConfirmed() c.rmrSend("SubDelReq to E2T", subs, trans, trans.Payload, trans.PayloadLen) diff --git a/pkg/control/e2ap.go b/pkg/control/e2ap.go index 5cabe6e..fe71f26 100644 --- a/pkg/control/e2ap.go +++ b/pkg/control/e2ap.go @@ -39,7 +39,7 @@ var packerif e2ap.E2APPackerIf = e2ap_wrapper.NewAsn1E2Packer() type E2ap struct { } -/* RICsubscriptionRequest */ +/* RICsubscriptionResponse */ // Used by submgr, xapp test stub func (c *E2ap) GetSubscriptionResponseSequenceNumber(payload []byte) (subId uint16, err error) { @@ -62,29 +62,6 @@ func (c *E2ap) SetSubscriptionResponseSequenceNumber(payload []byte, newSubscrip return } -/* RICsubscriptionDeleteRequest */ - -// Used by submgr, e2t test stub -func (c *E2ap) GetSubscriptionDeleteRequestSequenceNumber(payload []byte) (subId uint16, err error) { - cptr := unsafe.Pointer(&payload[0]) - cret := C.e2ap_get_ric_subscription_delete_request_sequence_number(cptr, C.size_t(len(payload))) - if cret < 0 { - return 0, fmt.Errorf("e2ap wrapper is unable to get Subscirption Delete Request Sequence Number due to wrong or invalid payload. Erroxappde: %v", cret) - } - subId = uint16(cret) - return -} - -// Used by xapp test stub -func (c *E2ap) SetSubscriptionDeleteRequestSequenceNumber(payload []byte, newSubscriptionid uint16) (err error) { - cptr := unsafe.Pointer(&payload[0]) - size := C.e2ap_set_ric_subscription_delete_request_sequence_number(cptr, C.size_t(len(payload)), C.long(newSubscriptionid)) - if size < 0 { - return fmt.Errorf("e2ap wrapper is unable to set Subscription Delete Request Sequence Number due to wrong or invalid payload. Erroxappde: %v", size) - } - return -} - /* RICsubscriptionDeleteResponse */ // Used by submgr, e2t test stub -- 2.16.6