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 #include <rmr/RIC_message_types.h>
27 #cgo LDFLAGS: -lrmr_nng -lnng
34 submgr "gerrit.o-ran-sc.org/r/ric-plt/submgr/pkg/control"
35 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
36 "github.com/spf13/viper"
44 var c chan xapp.RMRParams = make(chan xapp.RMRParams, 1)
46 var requestRawData string
47 var deleteRawData string
51 viper.SetEnvPrefix("e2t")
52 viper.AllowEmptyEnv(true)
53 requestRawData = viper.GetString("rawdata")
54 if requestRawData == "" {
55 requestRawData = "20c9001d000003ea7e00050000010002ea6300020003ea6c000700ea6d40020004"
57 xapp.Logger.Info("Initial RAW Data: %v", requestRawData)
58 deleteRawData = viper.GetString("rawdata")
59 if deleteRawData == "" {
60 deleteRawData = "20ca0012000002ea7e00050000010002ea6300020003"
62 xapp.Logger.Info("Initial RAW Data: %v", deleteRawData)
65 func (e *E2t) GenerateRequestPayload(subId uint16) (payload []byte, err error) {
66 skeleton, err := hex.DecodeString(requestRawData)
68 return make([]byte, 0), errors.New("unable to decode data provided in \"RCO_RAWDATA\" environment variable")
70 payload, err = e.SetSubscriptionResponseSequenceNumber(skeleton, subId)
74 func (e *E2t) GenerateDeletePayload(subId uint16) (payload []byte, err error) {
75 skeleton, err := hex.DecodeString(deleteRawData)
77 return make([]byte, 0), errors.New("unable to decode data provided in \"RCO_RAWDATA\" environment variable")
79 payload, err = e.SetSubscriptionDeleteResponseSequenceNumber(skeleton, subId)
83 func (e E2t) Consume(rp *xapp.RMRParams) (err error) {
86 err = e.handleSubscriptionRequest(rp)
87 case C.RIC_SUB_DEL_REQ:
88 err = e.handleSubscriptionDeleteRequest(rp)
90 err = errors.New("Message Type " + strconv.Itoa(rp.Mtype) + " is discarded")
91 xapp.Logger.Error("Unknown message type: %v", err)
96 func (e E2t) handleSubscriptionRequest(request *xapp.RMRParams) (err error) {
97 payloadSeqNum, err := e.GetSubscriptionRequestSequenceNumber(request.Payload)
99 xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
101 xapp.Logger.Info("Subscription Request Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", payloadSeqNum, payloadSeqNum)
102 payload, err := e.GenerateRequestPayload(payloadSeqNum)
104 xapp.Logger.Debug(err.Error())
107 request.Payload = payload
108 request.Mtype = 12011
113 func (e E2t) handleSubscriptionDeleteRequest(request *xapp.RMRParams) (err error) {
114 payloadSeqNum, err := e.GetSubscriptionDeleteRequestSequenceNumber(request.Payload)
116 xapp.Logger.Error("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
118 xapp.Logger.Info("Subscription Delete Request Received: RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v", payloadSeqNum, payloadSeqNum)
119 payload, err := e.GenerateDeletePayload(payloadSeqNum)
121 xapp.Logger.Debug(err.Error())
124 request.Payload = payload
125 request.Mtype = 12021
130 func (e *E2t) Run() {
133 var payloadSeqNum uint16
135 if message.Mtype == 12011 {
136 payloadSeqNum, err = e.GetSubscriptionResponseSequenceNumber(message.Payload)
137 } else if message.Mtype == 12021 {
138 payloadSeqNum, err = e.GetSubscriptionDeleteResponseSequenceNumber(message.Payload)
140 err = errors.New("OH MY GOD")
143 xapp.Logger.Debug("Unable to get Subscription Sequence Number from Payload due to: " + err.Error())
145 xapp.Logger.Info("Sending Message: TYPE: %v | RMR SUBSCRIPTION_ID: %v | PAYLOAD SEQUENCE_NUMBER: %v)", message.Mtype, message.SubId, payloadSeqNum)
146 xapp.Rmr.Send(&message, true)