2 ==================================================================================
3 Copyright (c) 2020 Samsung
5 Licensed under the Apache License, Version 2.0 (the "License");
6 you may not use this file except in compliance with the License.
7 You may obtain a copy of the License at
9 http://www.apache.org/licenses/LICENSE-2.0
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
17 This source code is part of the near-RT RIC (RAN Intelligent Controller)
18 platform project (RICP).
19 ==================================================================================
25 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
26 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
33 A1_POLICY_QUERY = 20013
34 POLICY_QUERY_PAYLOAD = "{\"policy_type_id\":20000}"
40 subsequestActioType = "continue"
43 procedureCode = int64(27)
44 typeOfMessage = int64(1)
48 clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "service-ricxapp-hw-go-http.ricxapp", HTTPPort: &hPort, RMRPort: &rPort}
52 func (e *HWApp) sendPolicyQuery() {
53 xapp.Logger.Info("Invoked method to send policy query message")
55 // prepare and send policy query message over RMR
56 rmrParams := new(xapp.RMRParams)
57 rmrParams.Mtype = A1_POLICY_QUERY // A1_POLICY_QUERY
58 rmrParams.Payload = []byte(POLICY_QUERY_PAYLOAD)
61 flg := xapp.Rmr.SendMsg(rmrParams)
64 xapp.Logger.Info("Successfully sent policy query message over RMR")
66 xapp.Logger.Info("Failed to send policy query message over RMR")
70 func (e *HWApp) ConfigChangeHandler(f string) {
71 xapp.Logger.Info("Config file changed")
74 func (e *HWApp) getEnbList() ([]*xapp.RNIBNbIdentity, error){
75 enbs, err := xapp.Rnib.GetListEnbIds()
78 xapp.Logger.Error("err: %s", err)
82 xapp.Logger.Info("List for connected eNBs :")
83 for index, enb := range enbs {
84 xapp.Logger.Info("%d. enbid: %s", index+1, enb.InventoryName)
89 func (e *HWApp) getGnbList() ([]*xapp.RNIBNbIdentity, error) {
90 gnbs, err := xapp.Rnib.GetListGnbIds()
93 xapp.Logger.Error("err: %s", err)
97 xapp.Logger.Info("List of connected gNBs :")
98 for index, gnb := range gnbs {
99 xapp.Logger.Info("%d. gnbid : %s", index+1, gnb.InventoryName)
104 func (e *HWApp) getnbList() ([]*xapp.RNIBNbIdentity) {
105 nbs := []*xapp.RNIBNbIdentity{}
107 if enbs , err := e.getEnbList(); err == nil {
108 nbs = append(nbs, enbs...)
111 if gnbs, err := e.getGnbList(); err == nil {
112 nbs = append(nbs, gnbs...)
117 func (e *HWApp) sendSubscription(meid string) {
119 xapp.Logger.Info("sending subscription request for meid : %s", meid)
121 subscriptionParams := clientmodel.SubscriptionParams{
122 ClientEndpoint: &clientEndpoint,
124 RANFunctionID: &funId,
125 SubscriptionDetails: clientmodel.SubscriptionDetailsList{
126 &clientmodel.SubscriptionDetail{
129 EventTriggers: &clientmodel.EventTriggerDefinition{
132 ActionToBeSetupList: clientmodel.ActionsToBeSetup{
133 &clientmodel.ActionToBeSetup{
134 ActionDefinition: &clientmodel.ActionDefinition{
138 ActionType: &actionType,
139 SubsequentAction: &clientmodel.SubsequentAction{
140 SubsequentActionType: &subsequestActioType,
141 TimeToWait: &timeToWait,
149 b, err := json.MarshalIndent(subscriptionParams, "", " ")
152 xapp.Logger.Error("Json marshaling failed : %s", err)
156 xapp.Logger.Info("*****body: %s ", string(b))
158 resp, err := xapp.Subscription.Subscribe(&subscriptionParams)
161 xapp.Logger.Error("subscription failed (%s) with error: %s", meid, err)
164 xapp.Logger.Info("Successfully subcription done (%s), subscription id : %s", meid, *resp.SubscriptionID)
167 func (e *HWApp) xAppStartCB(d interface{}) {
168 xapp.Logger.Info("xApp ready call back received")
170 // get the list of all NBs
171 nbList := e.getnbList()
173 // send subscription request to each of the NBs
174 for _, nb := range nbList {
175 e.sendSubscription(nb.InventoryName)
179 func (e *HWApp) Consume(msg *xapp.RMRParams) (err error) {
180 id := xapp.Rmr.GetRicMessageName(msg.Mtype)
182 xapp.Logger.Info("Message received: name=%s meid=%s subId=%d txid=%s len=%d", id, msg.Meid.RanName, msg.SubId, msg.Xid, msg.PayloadLen)
185 // policy request handler
186 case "A1_POLICY_REQUEST":
187 xapp.Logger.Info("Recived policy instance list")
189 // health check request
190 case "RIC_HEALTH_CHECK_REQ":
191 xapp.Logger.Info("Received health check request")
194 xapp.Logger.Info("Unknown message type '%d', discarding", msg.Mtype)
198 xapp.Rmr.Free(msg.Mbuf)
204 func (e *HWApp) Run() {
207 xapp.Logger.SetMdc("HWApp", "0.0.1")
209 // set config change listener
210 xapp.AddConfigChangeListener(e.ConfigChangeHandler)
212 // register callback after xapp ready
213 xapp.SetReadyCB(e.xAppStartCB, true)
215 // reading configuration from config file
216 waitForSdl := xapp.Config.GetBool("db.waitForSdl")
219 xapp.RunWithParams(e, waitForSdl)