blob: 40a8b7118cfbce1503a3f8174b75da15c0f84ab5 [file] [log] [blame]
subhash kumar singhe63192f2020-12-11 14:25:11 +05301/*
2==================================================================================
3 Copyright (c) 2020 Samsung
4
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
8
9 http://www.apache.org/licenses/LICENSE-2.0
10
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.
16
subhash kumar singhe63192f2020-12-11 14:25:11 +053017==================================================================================
18*/
19package main
20
21import (
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000022 "encoding/json"
23
subhash kumar singh360ca5a2021-08-25 18:13:38 +000024 "gerrit.o-ran-sc.org/r/ric-plt/alarm-go.git/alarm"
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000025 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/clientmodel"
subhash kumar singhe63192f2020-12-11 14:25:11 +053026 "gerrit.o-ran-sc.org/r/ric-plt/xapp-frame/pkg/xapp"
27)
28
29type HWApp struct {
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000030 stats map[string]xapp.Counter
subhash kumar singhe63192f2020-12-11 14:25:11 +053031}
32
subhash kumar singh83b75672021-06-01 19:38:57 +053033var (
34 A1_POLICY_QUERY = 20013
35 POLICY_QUERY_PAYLOAD = "{\"policy_type_id\":20000}"
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000036 reqId = int64(1)
37 seqId = int64(1)
38 funId = int64(1)
39 actionId = int64(1)
40 actionType = "report"
41 subsequestActioType = "continue"
42 timeToWait = "w10ms"
43 direction = int64(0)
44 procedureCode = int64(27)
45 typeOfMessage = int64(1)
46 subscriptionId = ""
47 hPort = int64(8080)
48 rPort = int64(4560)
49 clientEndpoint = clientmodel.SubscriptionParamsClientEndpoint{Host: "service-ricxapp-hw-go-http.ricxapp", HTTPPort: &hPort, RMRPort: &rPort}
subhash kumar singh83b75672021-06-01 19:38:57 +053050)
51
52func (e *HWApp) sendPolicyQuery() {
53 xapp.Logger.Info("Invoked method to send policy query message")
54
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)
59
60 // send rmr message
61 flg := xapp.Rmr.SendMsg(rmrParams)
62
63 if flg {
64 xapp.Logger.Info("Successfully sent policy query message over RMR")
65 } else {
66 xapp.Logger.Info("Failed to send policy query message over RMR")
67 }
68}
69
subhash kumar singhe63192f2020-12-11 14:25:11 +053070func (e *HWApp) ConfigChangeHandler(f string) {
71 xapp.Logger.Info("Config file changed")
72}
73
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000074func (e *HWApp) getEnbList() ([]*xapp.RNIBNbIdentity, error) {
75 enbs, err := xapp.Rnib.GetListEnbIds()
subhash kumar singh3c8e1c52021-08-11 00:57:39 +053076
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000077 if err != nil {
78 xapp.Logger.Error("err: %s", err)
79 return nil, err
80 }
subhash kumar singh3c8e1c52021-08-11 00:57:39 +053081
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000082 xapp.Logger.Info("List for connected eNBs :")
83 for index, enb := range enbs {
84 xapp.Logger.Info("%d. enbid: %s", index+1, enb.InventoryName)
85 }
86 return enbs, nil
subhash kumar singh3c8e1c52021-08-11 00:57:39 +053087}
88
89func (e *HWApp) getGnbList() ([]*xapp.RNIBNbIdentity, error) {
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000090 gnbs, err := xapp.Rnib.GetListGnbIds()
subhash kumar singh3c8e1c52021-08-11 00:57:39 +053091
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000092 if err != nil {
93 xapp.Logger.Error("err: %s", err)
94 return nil, err
95 }
subhash kumar singh3c8e1c52021-08-11 00:57:39 +053096
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +000097 xapp.Logger.Info("List of connected gNBs :")
98 for index, gnb := range gnbs {
99 xapp.Logger.Info("%d. gnbid : %s", index+1, gnb.InventoryName)
100 }
101 return gnbs, nil
subhash kumar singh3c8e1c52021-08-11 00:57:39 +0530102}
103
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000104func (e *HWApp) getnbList() []*xapp.RNIBNbIdentity {
105 nbs := []*xapp.RNIBNbIdentity{}
subhash kumar singh3c8e1c52021-08-11 00:57:39 +0530106
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000107 if enbs, err := e.getEnbList(); err == nil {
108 nbs = append(nbs, enbs...)
109 }
subhash kumar singh3c8e1c52021-08-11 00:57:39 +0530110
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000111 if gnbs, err := e.getGnbList(); err == nil {
112 nbs = append(nbs, gnbs...)
113 }
114 return nbs
subhash kumar singh3c8e1c52021-08-11 00:57:39 +0530115}
116
subhash kumar singhe51b3242021-08-19 19:45:25 +0000117func (e *HWApp) sendSubscription(meid string) {
118
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000119 xapp.Logger.Info("sending subscription request for meid : %s", meid)
subhash kumar singhe51b3242021-08-19 19:45:25 +0000120
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000121 subscriptionParams := clientmodel.SubscriptionParams{
122 ClientEndpoint: &clientEndpoint,
123 Meid: &meid,
124 RANFunctionID: &funId,
125 SubscriptionDetails: clientmodel.SubscriptionDetailsList{
126 &clientmodel.SubscriptionDetail{
127 RequestorID: &reqId,
128 InstanceID: &seqId,
129 EventTriggers: &clientmodel.EventTriggerDefinition{
130 OctetString: "1234",
131 },
132 ActionToBeSetupList: clientmodel.ActionsToBeSetup{
133 &clientmodel.ActionToBeSetup{
134 ActionDefinition: &clientmodel.ActionDefinition{
135 OctetString: "5678",
136 },
137 ActionID: &actionId,
138 ActionType: &actionType,
139 SubsequentAction: &clientmodel.SubsequentAction{
140 SubsequentActionType: &subsequestActioType,
141 TimeToWait: &timeToWait,
142 },
143 },
144 },
145 },
146 },
147 }
subhash kumar singhe51b3242021-08-19 19:45:25 +0000148
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000149 b, err := json.MarshalIndent(subscriptionParams, "", " ")
subhash kumar singhe51b3242021-08-19 19:45:25 +0000150
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000151 if err != nil {
152 xapp.Logger.Error("Json marshaling failed : %s", err)
153 return
154 }
subhash kumar singhe51b3242021-08-19 19:45:25 +0000155
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000156 xapp.Logger.Info("*****body: %s ", string(b))
subhash kumar singhe51b3242021-08-19 19:45:25 +0000157
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000158 resp, err := xapp.Subscription.Subscribe(&subscriptionParams)
subhash kumar singhe51b3242021-08-19 19:45:25 +0000159
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000160 if err != nil {
161 xapp.Logger.Error("subscription failed (%s) with error: %s", meid, err)
subhash kumar singh360ca5a2021-08-25 18:13:38 +0000162
163 // subscription failed, raise alarm
164 err := xapp.Alarm.Raise(8086, alarm.SeverityCritical, meid, "subscriptionFailed")
165 if err != nil {
166 xapp.Logger.Error("Raising alarm failed with error %v", err)
167 }
168
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000169 return
170 }
171 xapp.Logger.Info("Successfully subcription done (%s), subscription id : %s", meid, *resp.SubscriptionID)
subhash kumar singhe51b3242021-08-19 19:45:25 +0000172}
173
subhash kumar singh02ac5602021-06-01 18:31:07 +0530174func (e *HWApp) xAppStartCB(d interface{}) {
175 xapp.Logger.Info("xApp ready call back received")
subhash kumar singh3c8e1c52021-08-11 00:57:39 +0530176
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000177 // get the list of all NBs
178 nbList := e.getnbList()
subhash kumar singhe51b3242021-08-19 19:45:25 +0000179
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000180 // send subscription request to each of the NBs
181 for _, nb := range nbList {
182 e.sendSubscription(nb.InventoryName)
183 }
184}
185
186func (e *HWApp) handleRICIndication(ranName string, r *xapp.RMRParams) {
187 // update metrics for indication message
188 e.stats["RICIndicationRx"].Inc()
subhash kumar singh02ac5602021-06-01 18:31:07 +0530189}
190
subhash kumar singh2ba8bc22021-06-01 19:22:39 +0530191func (e *HWApp) Consume(msg *xapp.RMRParams) (err error) {
192 id := xapp.Rmr.GetRicMessageName(msg.Mtype)
193
194 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)
195
196 switch id {
197 // policy request handler
198 case "A1_POLICY_REQUEST":
199 xapp.Logger.Info("Recived policy instance list")
200
201 // health check request
202 case "RIC_HEALTH_CHECK_REQ":
203 xapp.Logger.Info("Received health check request")
204
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000205 // RIC INDICATION message
206 case "RIC_INDICATION":
207 xapp.Logger.Info("Received RIC Indication message")
208 e.handleRICIndication(msg.Meid.RanName, msg)
209
subhash kumar singh2ba8bc22021-06-01 19:22:39 +0530210 default:
211 xapp.Logger.Info("Unknown message type '%d', discarding", msg.Mtype)
212 }
213
214 defer func() {
215 xapp.Rmr.Free(msg.Mbuf)
216 msg.Mbuf = nil
217 }()
subhash kumar singhe63192f2020-12-11 14:25:11 +0530218 return
219}
220
221func (e *HWApp) Run() {
222
223 // set MDC
224 xapp.Logger.SetMdc("HWApp", "0.0.1")
225
226 // set config change listener
227 xapp.AddConfigChangeListener(e.ConfigChangeHandler)
228
subhash kumar singh02ac5602021-06-01 18:31:07 +0530229 // register callback after xapp ready
230 xapp.SetReadyCB(e.xAppStartCB, true)
231
subhash kumar singheb2fc4f2021-06-01 18:43:32 +0530232 // reading configuration from config file
233 waitForSdl := xapp.Config.GetBool("db.waitForSdl")
234
235 // start xapp
236 xapp.RunWithParams(e, waitForSdl)
subhash kumar singhe63192f2020-12-11 14:25:11 +0530237
238}
239
240func main() {
subhash kumar singh9dd2cfb2021-08-25 11:43:30 +0000241 // Defind metrics counter that the xapp provides
242 metrics := []xapp.CounterOpts{
243 {
244 Name: "RICIndicationRx",
245 Help: "Total number of RIC Indication message received",
246 },
247 }
248
249 hw := HWApp{
250 stats: xapp.Metric.RegisterCounterGroup(metrics, "hw-go"), // register counter
251 }
subhash kumar singhe63192f2020-12-11 14:25:11 +0530252 hw.Run()
253}