blob: 7a576de30076e232f3fadc7340902aef0a77df54 [file] [log] [blame]
Shad Ansari01b0e652018-04-05 21:02:53 +00001/*
2 Copyright (C) 2018 Open Networking Foundation
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17#include "indications.h"
Shad Ansarib7b0ced2018-05-11 21:53:32 +000018#include "core.h"
Shad Ansari01b0e652018-04-05 21:02:53 +000019#include "utils.h"
Nicolas Palpacuer0f19b1a2018-06-07 17:29:31 -040020#include "stats_collection.h"
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -040021#include "translation.h"
Nicolas Palpacuer3cad49d2018-07-02 14:03:24 -040022#include "state.h"
23
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -040024#include <string>
Nicolas Palpacuer3cad49d2018-07-02 14:03:24 -040025
Shad Ansari01b0e652018-04-05 21:02:53 +000026extern "C"
27{
28#include <bcmos_system.h>
29#include <bal_api.h>
30#include <bal_api_end.h>
31}
32
33using grpc::Status;
34
Shad Ansari627b5782018-08-13 22:49:32 +000035extern Queue<openolt::Indication> oltIndQ;
Shad Ansari01b0e652018-04-05 21:02:53 +000036//Queue<openolt::Indication*> oltIndQ;
37
Nicolas Palpacuer3cad49d2018-07-02 14:03:24 -040038
Shad Ansari01b0e652018-04-05 21:02:53 +000039bool subscribed = false;
40
41bcmos_errno OmciIndication(bcmbal_obj *obj);
42
43bcmos_errno OltIndication(bcmbal_obj *obj) {
44 openolt::Indication ind;
45 openolt::OltIndication* olt_ind = new openolt::OltIndication;
46 Status status;
47
Shad Ansaricb004c52018-05-30 18:07:23 +000048 bcmbal_access_terminal_oper_status_change *acc_term_ind = (bcmbal_access_terminal_oper_status_change *)obj;
49 if (acc_term_ind->data.new_oper_status == BCMBAL_STATUS_UP) {
Shad Ansari01b0e652018-04-05 21:02:53 +000050 olt_ind->set_oper_state("up");
Shad Ansariedef2132018-08-10 22:14:50 +000051 state.activate();
Shad Ansari01b0e652018-04-05 21:02:53 +000052 } else {
53 olt_ind->set_oper_state("down");
Shad Ansariedef2132018-08-10 22:14:50 +000054 state.deactivate();
Shad Ansari01b0e652018-04-05 21:02:53 +000055 }
56 ind.set_allocated_olt_ind(olt_ind);
Nicolas Palpacuer967438f2018-09-07 14:41:54 -040057 BCM_LOG(INFO, openolt_log_id, "Olt indication, oper_state: %s\n", ind.olt_ind().oper_state().c_str());
Shad Ansari01b0e652018-04-05 21:02:53 +000058 oltIndQ.push(ind);
59
Shad Ansaricb004c52018-05-30 18:07:23 +000060#define MAX_SUPPORTED_INTF 16
Shad Ansari01b0e652018-04-05 21:02:53 +000061 // Enable all PON interfaces.
62 for (int i = 0; i < MAX_SUPPORTED_INTF; i++) {
63 status = EnablePonIf_(i);
64 if (!status.ok()) {
65 // FIXME - raise alarm to report error in enabling PON
66 }
67 }
68
69 /* register for omci indication */
70 {
71 bcmbal_cb_cfg cb_cfg = {};
72 uint16_t ind_subgroup;
73
74 cb_cfg.module = BCMOS_MODULE_ID_NONE;
75 cb_cfg.obj_type = BCMBAL_OBJ_ID_PACKET;
76 ind_subgroup = BCMBAL_IND_SUBGROUP(packet, itu_omci_channel_rx);
77 cb_cfg.p_object_key_info = NULL;
78 cb_cfg.p_subgroup = &ind_subgroup;
79 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OmciIndication;
80 bcmbal_subscribe_ind(0, &cb_cfg);
81 }
82
83 return BCM_ERR_OK;
84}
85
86bcmos_errno LosIndication(bcmbal_obj *obj) {
87 openolt::Indication ind;
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -040088 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
89 openolt::LosIndication* los_ind = new openolt::LosIndication;
90
91 bcmbal_interface_los* bcm_los_ind = (bcmbal_interface_los *) obj;
92 int intf_id = interface_key_to_port_no(bcm_los_ind->key);
93 std::string status = alarm_status_to_string(bcm_los_ind->data.status);
94
Nicolas Palpacuer967438f2018-09-07 14:41:54 -040095 BCM_LOG(INFO, openolt_log_id, "LOS indication : %d status %s\n", intf_id, status.c_str());
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -040096
97 los_ind->set_intf_id(intf_id);
98 los_ind->set_status(status);
99
100 alarm_ind->set_allocated_los_ind(los_ind);
101 ind.set_allocated_alarm_ind(alarm_ind);
102
103 oltIndQ.push(ind);
Shad Ansari01b0e652018-04-05 21:02:53 +0000104 return BCM_ERR_OK;
105}
106
107bcmos_errno IfIndication(bcmbal_obj *obj) {
108 openolt::Indication ind;
109 openolt::IntfIndication* intf_ind = new openolt::IntfIndication;
110
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400111 BCM_LOG(INFO, openolt_log_id, "intf indication, intf_id: %d\n",
112 ((bcmbal_interface_oper_status_change *)obj)->key.intf_id );
Shad Ansari01b0e652018-04-05 21:02:53 +0000113
Shad Ansaricb004c52018-05-30 18:07:23 +0000114 intf_ind->set_intf_id(((bcmbal_interface_oper_status_change *)obj)->key.intf_id);
115 if (((bcmbal_interface_oper_status_change *)obj)->data.new_oper_status == BCMBAL_STATUS_UP) {
Shad Ansari01b0e652018-04-05 21:02:53 +0000116 intf_ind->set_oper_state("up");
117 } else {
118 intf_ind->set_oper_state("down");
119 }
120 ind.set_allocated_intf_ind(intf_ind);
121
122 oltIndQ.push(ind);
123
124 return BCM_ERR_OK;
125}
126
127bcmos_errno IfOperIndication(bcmbal_obj *obj) {
128 openolt::Indication ind;
129 openolt::IntfOperIndication* intf_oper_ind = new openolt::IntfOperIndication;
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400130 BCM_LOG(INFO, openolt_log_id, "intf oper state indication, intf_id %d, type %d, oper_state %d, admin_state %d\n",
131 ((bcmbal_interface_oper_status_change *)obj)->key.intf_id,
132 ((bcmbal_interface_oper_status_change *)obj)->key.intf_type,
133 ((bcmbal_interface_oper_status_change *)obj)->data.new_oper_status,
134 ((bcmbal_interface_oper_status_change *)obj)->data.admin_state);
Shad Ansari01b0e652018-04-05 21:02:53 +0000135
136 intf_oper_ind->set_intf_id(((bcmbal_interface_oper_status_change *)obj)->key.intf_id);
137
138 if (((bcmbal_interface_oper_status_change *)obj)->key.intf_type == BCMBAL_INTF_TYPE_NNI) {
139 intf_oper_ind->set_type("nni");
140 } else if (((bcmbal_interface_oper_status_change *)obj)->key.intf_type == BCMBAL_INTF_TYPE_PON) {
141 intf_oper_ind->set_type("pon");
142 } else {
143 intf_oper_ind->set_type("unknown");
144 }
145
146 if (((bcmbal_interface_oper_status_change *)obj)->data.new_oper_status == BCMBAL_STATUS_UP) {
147 intf_oper_ind->set_oper_state("up");
148 } else {
149 intf_oper_ind->set_oper_state("down");
150 }
151
152 ind.set_allocated_intf_oper_ind(intf_oper_ind);
153
154 oltIndQ.push(ind);
155 return BCM_ERR_OK;
156}
157
158bcmos_errno OnuAlarmIndication(bcmbal_obj *obj) {
159 openolt::Indication ind;
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400160 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
161 openolt::OnuAlarmIndication* onu_alarm_ind = new openolt::OnuAlarmIndication;
162
163 bcmbal_subscriber_terminal_key *key =
164 &((bcmbal_subscriber_terminal_sub_term_alarm*)obj)->key;
165
166 bcmbal_subscriber_terminal_alarms *alarms =
167 &(((bcmbal_subscriber_terminal_sub_term_alarm*)obj)->data.alarm);
168
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400169 BCM_LOG(WARNING, openolt_log_id, "onu alarm indication intf_id %d, onu_id %d, alarm: los %d, lob %d, lopc_miss %d, lopc_mic_error %d\n",
170 key->intf_id, key->sub_term_id, alarms->los, alarms->lob, alarms->lopc_miss, alarms->lopc_mic_error);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400171
172 onu_alarm_ind->set_intf_id(key->intf_id);
173 onu_alarm_ind->set_onu_id(key->sub_term_id);
174 onu_alarm_ind->set_los_status(alarm_status_to_string(alarms->los));
175 onu_alarm_ind->set_lob_status(alarm_status_to_string(alarms->lob));
176 onu_alarm_ind->set_lopc_miss_status(alarm_status_to_string(alarms->lopc_miss));
177 onu_alarm_ind->set_lopc_mic_error_status(alarm_status_to_string(alarms->lopc_mic_error));
178
179 alarm_ind->set_allocated_onu_alarm_ind(onu_alarm_ind);
180 ind.set_allocated_alarm_ind(alarm_ind);
181
182 oltIndQ.push(ind);
Shad Ansari01b0e652018-04-05 21:02:53 +0000183 return BCM_ERR_OK;
184}
185
186bcmos_errno OnuDyingGaspIndication(bcmbal_obj *obj) {
187 openolt::Indication ind;
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -0400188 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
189 openolt::DyingGaspIndication* dg_ind = new openolt::DyingGaspIndication;
nickc063ffd2018-05-22 14:35:28 -0400190
191 bcmbal_subscriber_terminal_key *key =
192 &(((bcmbal_subscriber_terminal_dgi*)obj)->key);
193
194 bcmbal_subscriber_terminal_dgi_data *data =
195 &(((bcmbal_subscriber_terminal_dgi*)obj)->data);
196
197
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400198 BCM_LOG(WARNING, openolt_log_id, "onu dying-gasp indication, intf_id %d, onu_id %d, alarm %d\n",
199 key->intf_id, key->sub_term_id, data->dgi_status);
nickc063ffd2018-05-22 14:35:28 -0400200
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -0400201 dg_ind->set_intf_id(key->intf_id);
202 dg_ind->set_onu_id(key->sub_term_id);
203 dg_ind->set_status(alarm_status_to_string(data->dgi_status));
nickc063ffd2018-05-22 14:35:28 -0400204
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -0400205 alarm_ind->set_allocated_dying_gasp_ind(dg_ind);
206 ind.set_allocated_alarm_ind(alarm_ind);
nickc063ffd2018-05-22 14:35:28 -0400207
208 oltIndQ.push(ind);
Shad Ansari01b0e652018-04-05 21:02:53 +0000209 return BCM_ERR_OK;
210}
211
212bcmos_errno OnuDiscoveryIndication(bcmbal_cfg *obj) {
213 openolt::Indication ind;
214 openolt::OnuDiscIndication* onu_disc_ind = new openolt::OnuDiscIndication;
215 openolt::SerialNumber* serial_number = new openolt::SerialNumber;
216
217 bcmbal_subscriber_terminal_key *key =
218 &(((bcmbal_subscriber_terminal_sub_term_disc*)obj)->key);
219
220 bcmbal_subscriber_terminal_sub_term_disc_data *data =
221 &(((bcmbal_subscriber_terminal_sub_term_disc*)obj)->data);
222
223 bcmbal_serial_number *in_serial_number = &(data->serial_number);
224
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400225 BCM_LOG(INFO, openolt_log_id, "onu discover indication, intf_id %d, serial_number %s\n",
226 key->intf_id, serial_number_to_str(in_serial_number));
Shad Ansari01b0e652018-04-05 21:02:53 +0000227
228 onu_disc_ind->set_intf_id(key->intf_id);
229 serial_number->set_vendor_id(reinterpret_cast<const char *>(in_serial_number->vendor_id), 4);
230 serial_number->set_vendor_specific(reinterpret_cast<const char *>(in_serial_number->vendor_specific), 8);
231 onu_disc_ind->set_allocated_serial_number(serial_number);
232 ind.set_allocated_onu_disc_ind(onu_disc_ind);
233
234 oltIndQ.push(ind);
235
236 return BCM_ERR_OK;
237}
238
239bcmos_errno OnuIndication(bcmbal_obj *obj) {
240 openolt::Indication ind;
241 openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
Shad Ansari01b0e652018-04-05 21:02:53 +0000242
243 bcmbal_subscriber_terminal_key *key =
Shad Ansaricb004c52018-05-30 18:07:23 +0000244 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->key);
Shad Ansari01b0e652018-04-05 21:02:53 +0000245
Shad Ansaricb004c52018-05-30 18:07:23 +0000246 bcmbal_subscriber_terminal_oper_status_change_data *data =
247 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->data);
Shad Ansari01b0e652018-04-05 21:02:53 +0000248
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400249 BCM_LOG(INFO, openolt_log_id, "onu indication, intf_id %d, onu_id %d, oper_state %d, admin_state %d\n",
250 key->intf_id, key->sub_term_id, data->new_oper_status, data->admin_state);
Shad Ansari01b0e652018-04-05 21:02:53 +0000251
252 onu_ind->set_intf_id(key->intf_id);
253 onu_ind->set_onu_id(key->sub_term_id);
Shad Ansaricb004c52018-05-30 18:07:23 +0000254 if (data->new_oper_status == BCMBAL_STATE_UP) {
nickc063ffd2018-05-22 14:35:28 -0400255 onu_ind->set_oper_state("up");
256 } else {
257 onu_ind->set_oper_state("down");
258 }
259 if (data->admin_state == BCMBAL_STATE_UP) {
260 onu_ind->set_admin_state("up");
261 } else {
262 onu_ind->set_admin_state("down");
263 }
264
Shad Ansari01b0e652018-04-05 21:02:53 +0000265 ind.set_allocated_onu_ind(onu_ind);
266
267 oltIndQ.push(ind);
268 return BCM_ERR_OK;
269}
270
271bcmos_errno OnuOperIndication(bcmbal_obj *obj) {
272 openolt::Indication ind;
nickc063ffd2018-05-22 14:35:28 -0400273 openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
nickc063ffd2018-05-22 14:35:28 -0400274
275 bcmbal_subscriber_terminal_key *key =
276 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->key);
277
278 bcmbal_subscriber_terminal_oper_status_change_data *data =
279 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->data);
280
281
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400282 BCM_LOG(INFO, openolt_log_id, "onu oper state indication, intf_id %d, onu_id %d, old oper state %d, new oper state %d\n",
283 key->intf_id, key->sub_term_id, data->old_oper_status, data->new_oper_status);
nickc063ffd2018-05-22 14:35:28 -0400284
285 onu_ind->set_intf_id(key->intf_id);
286 onu_ind->set_onu_id(key->sub_term_id);
nickc063ffd2018-05-22 14:35:28 -0400287 if (data->new_oper_status == BCMBAL_STATE_UP) {
288 onu_ind->set_oper_state("up");
289 } else {
290 onu_ind->set_oper_state("down");
291 }
292 if (data->admin_state == BCMBAL_STATE_UP) {
293 onu_ind->set_admin_state("up");
294 } else {
295 onu_ind->set_admin_state("down");
296 }
297
298 ind.set_allocated_onu_ind(onu_ind);
299
300 oltIndQ.push(ind);
Shad Ansari01b0e652018-04-05 21:02:53 +0000301 return BCM_ERR_OK;
302}
303
304bcmos_errno OmciIndication(bcmbal_obj *obj) {
305 openolt::Indication ind;
306 openolt::OmciIndication* omci_ind = new openolt::OmciIndication;
Shad Ansari5fe93682018-04-26 05:24:19 +0000307 bcmbal_packet_itu_omci_channel_rx *in =
Shad Ansari01b0e652018-04-05 21:02:53 +0000308 (bcmbal_packet_itu_omci_channel_rx *)obj;
309
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400310 BCM_LOG(DEBUG, omci_log_id, "OMCI indication: intf_id %d, onu_id %d\n",
311 in->key.packet_send_dest.u.itu_omci_channel.intf_id,
312 in->key.packet_send_dest.u.itu_omci_channel.sub_term_id);
Shad Ansari01b0e652018-04-05 21:02:53 +0000313
Shad Ansari5fe93682018-04-26 05:24:19 +0000314 omci_ind->set_intf_id(in->key.packet_send_dest.u.itu_omci_channel.intf_id);
315 omci_ind->set_onu_id(in->key.packet_send_dest.u.itu_omci_channel.sub_term_id);
316 omci_ind->set_pkt(in->data.pkt.val, in->data.pkt.len);
Shad Ansari01b0e652018-04-05 21:02:53 +0000317
318 ind.set_allocated_omci_ind(omci_ind);
319 oltIndQ.push(ind);
320
321 return BCM_ERR_OK;
322}
323
Shad Ansari5fe93682018-04-26 05:24:19 +0000324bcmos_errno PacketIndication(bcmbal_obj *obj) {
Shad Ansari01b0e652018-04-05 21:02:53 +0000325 openolt::Indication ind;
Shad Ansari5fe93682018-04-26 05:24:19 +0000326 openolt::PacketIndication* pkt_ind = new openolt::PacketIndication;
327 bcmbal_packet_bearer_channel_rx *in = (bcmbal_packet_bearer_channel_rx *)obj;
328
Shad Ansariebc80362018-09-30 09:33:35 +0000329 BCM_LOG(INFO, openolt_log_id, "packet indication, intf_type %d, intf_id %d, svc_port %d, flow_id %d\n",
330 in->data.intf_type, in->data.intf_id, in->data.svc_port, in->data.flow_id);
Shad Ansari5fe93682018-04-26 05:24:19 +0000331
Shad Ansariebc80362018-09-30 09:33:35 +0000332 if (in->data.intf_type == BCMBAL_INTF_TYPE_NNI) {
333 pkt_ind->set_intf_type("nni");
334 } else if (in->data.intf_type == BCMBAL_INTF_TYPE_PON) {
335 pkt_ind->set_intf_type("pon");
336 } else {
337 pkt_ind->set_intf_type("unknown");
338 }
Shad Ansari5fe93682018-04-26 05:24:19 +0000339 pkt_ind->set_intf_id(in->data.intf_id);
340 pkt_ind->set_gemport_id(in->data.svc_port);
341 pkt_ind->set_flow_id(in->data.flow_id);
342 pkt_ind->set_pkt(in->data.pkt.val, in->data.pkt.len);
343
344 ind.set_allocated_pkt_ind(pkt_ind);
345 oltIndQ.push(ind);
346
Shad Ansari01b0e652018-04-05 21:02:53 +0000347 return BCM_ERR_OK;
348}
349
350bcmos_errno FlowOperIndication(bcmbal_obj *obj) {
351 openolt::Indication ind;
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400352 BCM_LOG(DEBUG, openolt_log_id, "flow oper state indication\n");
Shad Ansari01b0e652018-04-05 21:02:53 +0000353 return BCM_ERR_OK;
354}
355
356bcmos_errno FlowIndication(bcmbal_obj *obj) {
357 openolt::Indication ind;
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400358 BCM_LOG(DEBUG, openolt_log_id, "flow indication\n");
Shad Ansari01b0e652018-04-05 21:02:53 +0000359 return BCM_ERR_OK;
360}
361
362bcmos_errno TmQIndication(bcmbal_obj *obj) {
363 openolt::Indication ind;
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400364 BCM_LOG(DEBUG, openolt_log_id, "traffic mgmt queue indication\n");
Shad Ansari01b0e652018-04-05 21:02:53 +0000365 return BCM_ERR_OK;
366}
367
368bcmos_errno TmSchedIndication(bcmbal_obj *obj) {
369 openolt::Indication ind;
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400370 BCM_LOG(DEBUG, openolt_log_id, "traffic mgmt sheduler indication\n");
Shad Ansari01b0e652018-04-05 21:02:53 +0000371 return BCM_ERR_OK;
372}
373
374bcmos_errno McastGroupIndication(bcmbal_obj *obj) {
375 openolt::Indication ind;
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400376 BCM_LOG(DEBUG, openolt_log_id, "mcast group indication\n");
Shad Ansari01b0e652018-04-05 21:02:53 +0000377 return BCM_ERR_OK;
378}
379
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400380bcmos_errno OnuStartupFailureIndication(bcmbal_obj *obj) {
381 openolt::Indication ind;
382 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
383 openolt::OnuStartupFailureIndication* sufi_ind = new openolt::OnuStartupFailureIndication;
384
385 bcmbal_subscriber_terminal_key *key =
386 &(((bcmbal_subscriber_terminal_sufi*)obj)->key);
387
388 bcmbal_subscriber_terminal_sufi_data *data =
389 &(((bcmbal_subscriber_terminal_sufi*)obj)->data);
390
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400391 BCM_LOG(WARNING, openolt_log_id, "onu startup failure indication, intf_id %d, onu_id %d, alarm %d\n",
392 key->intf_id, key->sub_term_id, data->sufi_status);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400393
394 sufi_ind->set_intf_id(key->intf_id);
395 sufi_ind->set_onu_id(key->sub_term_id);
396 sufi_ind->set_status(alarm_status_to_string(data->sufi_status));
397
398 alarm_ind->set_allocated_onu_startup_fail_ind(sufi_ind);
399 ind.set_allocated_alarm_ind(alarm_ind);
400
401 oltIndQ.push(ind);
402 return BCM_ERR_OK;
403}
404
405bcmos_errno OnuSignalDegradeIndication(bcmbal_obj *obj) {
406 openolt::Indication ind;
407 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
408 openolt::OnuSignalDegradeIndication* sdi_ind = new openolt::OnuSignalDegradeIndication;
409
410 bcmbal_subscriber_terminal_key *key =
411 &(((bcmbal_subscriber_terminal_sdi*)obj)->key);
412
413 bcmbal_subscriber_terminal_sdi_data *data =
414 &(((bcmbal_subscriber_terminal_sdi*)obj)->data);
415
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400416 BCM_LOG(WARNING, openolt_log_id, "onu signal degrade indication, intf_id %d, onu_id %d, alarm %d, BER %d\n",
417 key->intf_id, key->sub_term_id, data->sdi_status, data->ber);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400418
419 sdi_ind->set_intf_id(key->intf_id);
420 sdi_ind->set_onu_id(key->sub_term_id);
421 sdi_ind->set_status(alarm_status_to_string(data->sdi_status));
422 sdi_ind->set_inverse_bit_error_rate(data->ber);
423
424 alarm_ind->set_allocated_onu_signal_degrade_ind(sdi_ind);
425 ind.set_allocated_alarm_ind(alarm_ind);
426
427 oltIndQ.push(ind);
428 return BCM_ERR_OK;
429}
430
431bcmos_errno OnuDriftOfWindowIndication(bcmbal_obj *obj) {
432 openolt::Indication ind;
433 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
434 openolt::OnuDriftOfWindowIndication* dowi_ind = new openolt::OnuDriftOfWindowIndication;
435
436 bcmbal_subscriber_terminal_key *key =
437 &(((bcmbal_subscriber_terminal_dowi*)obj)->key);
438
439 bcmbal_subscriber_terminal_dowi_data *data =
440 &(((bcmbal_subscriber_terminal_dowi*)obj)->data);
441
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400442 BCM_LOG(WARNING, openolt_log_id, "onu drift of window indication, intf_id %d, onu_id %d, alarm %d, drift %d, new_eqd %d\n",
443 key->intf_id, key->sub_term_id, data->dowi_status, data->drift_value, data->new_eqd);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400444
445 dowi_ind->set_intf_id(key->intf_id);
446 dowi_ind->set_onu_id(key->sub_term_id);
447 dowi_ind->set_status(alarm_status_to_string(data->dowi_status));
448 dowi_ind->set_drift(data->drift_value);
449 dowi_ind->set_new_eqd(data->new_eqd);
450
451 alarm_ind->set_allocated_onu_drift_of_window_ind(dowi_ind);
452 ind.set_allocated_alarm_ind(alarm_ind);
453
454 oltIndQ.push(ind);
455 return BCM_ERR_OK;
456}
457
458bcmos_errno OnuLossOfOmciChannelIndication(bcmbal_obj *obj) {
459 openolt::Indication ind;
460 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
461 openolt::OnuLossOfOmciChannelIndication* looci_ind = new openolt::OnuLossOfOmciChannelIndication;
462
463 bcmbal_subscriber_terminal_key *key =
464 &(((bcmbal_subscriber_terminal_looci*)obj)->key);
465
466 bcmbal_subscriber_terminal_looci_data *data =
467 &(((bcmbal_subscriber_terminal_looci*)obj)->data);
468
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400469 BCM_LOG(WARNING, openolt_log_id, "onu loss of OMCI channel indication, intf_id %d, onu_id %d, alarm %d\n",
470 key->intf_id, key->sub_term_id, data->looci_status);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400471
472 looci_ind->set_intf_id(key->intf_id);
473 looci_ind->set_onu_id(key->sub_term_id);
474 looci_ind->set_status(alarm_status_to_string(data->looci_status));
475
476 alarm_ind->set_allocated_onu_loss_omci_ind(looci_ind);
477 ind.set_allocated_alarm_ind(alarm_ind);
478
479 oltIndQ.push(ind);
480 return BCM_ERR_OK;
481}
482
483bcmos_errno OnuSignalsFailureIndication(bcmbal_obj *obj) {
484 openolt::Indication ind;
485 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
486 openolt::OnuSignalsFailureIndication* sfi_ind = new openolt::OnuSignalsFailureIndication;
487
488 bcmbal_subscriber_terminal_key *key =
489 &(((bcmbal_subscriber_terminal_sfi*)obj)->key);
490
491 bcmbal_subscriber_terminal_sfi_data *data =
492 &(((bcmbal_subscriber_terminal_sfi*)obj)->data);
493
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400494 BCM_LOG(WARNING, openolt_log_id, "onu signals failure indication, intf_id %d, onu_id %d, alarm %d, BER %d\n",
495 key->intf_id, key->sub_term_id, data->sfi_status, data->ber);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400496
497
498 sfi_ind->set_intf_id(key->intf_id);
499 sfi_ind->set_onu_id(key->sub_term_id);
500 sfi_ind->set_status(alarm_status_to_string(data->sfi_status));
501 sfi_ind->set_inverse_bit_error_rate(data->ber);
502
503 alarm_ind->set_allocated_onu_signals_fail_ind(sfi_ind);
504 ind.set_allocated_alarm_ind(alarm_ind);
505
506 oltIndQ.push(ind);
507 return BCM_ERR_OK;
508}
509
510bcmos_errno OnuTransmissionInterferenceWarningIndication(bcmbal_obj *obj) {
511 openolt::Indication ind;
512 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
513 openolt::OnuTransmissionInterferenceWarning* tiwi_ind = new openolt::OnuTransmissionInterferenceWarning;
514
515 bcmbal_subscriber_terminal_key *key =
516 &(((bcmbal_subscriber_terminal_tiwi*)obj)->key);
517
518 bcmbal_subscriber_terminal_tiwi_data *data =
519 &(((bcmbal_subscriber_terminal_tiwi*)obj)->data);
520
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400521 BCM_LOG(WARNING, openolt_log_id, "onu transmission interference warning indication, intf_id %d, onu_id %d, alarm %d, drift %d\n",
522 key->intf_id, key->sub_term_id, data->tiwi_status, data->drift_value);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400523
524 tiwi_ind->set_intf_id(key->intf_id);
525 tiwi_ind->set_onu_id(key->sub_term_id);
526 tiwi_ind->set_status(alarm_status_to_string(data->tiwi_status));
527 tiwi_ind->set_drift(data->drift_value);
528
529 alarm_ind->set_allocated_onu_tiwi_ind(tiwi_ind);
530 ind.set_allocated_alarm_ind(alarm_ind);
531
532 oltIndQ.push(ind);
533 return BCM_ERR_OK;
534}
535
536bcmos_errno OnuActivationFailureIndication(bcmbal_obj *obj) {
537 openolt::Indication ind;
538 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
539 openolt::OnuActivationFailureIndication* activation_fail_ind = new openolt::OnuActivationFailureIndication;
540
541 bcmbal_subscriber_terminal_key *key =
542 &(((bcmbal_subscriber_terminal_sub_term_act_fail*)obj)->key);
543
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400544 BCM_LOG(WARNING, openolt_log_id, "onu activation failure indication, intf_id %d, onu_id %d\n",
545 key->intf_id, key->sub_term_id);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400546
547
548 activation_fail_ind->set_intf_id(key->intf_id);
549 activation_fail_ind->set_onu_id(key->sub_term_id);
550
551 alarm_ind->set_allocated_onu_activation_fail_ind(activation_fail_ind);
552 ind.set_allocated_alarm_ind(alarm_ind);
553
554 oltIndQ.push(ind);
555 return BCM_ERR_OK;
556}
557
558bcmos_errno OnuProcessingErrorIndication(bcmbal_obj *obj) {
559 openolt::Indication ind;
560 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
561 openolt::OnuProcessingErrorIndication* onu_proc_error_ind = new openolt::OnuProcessingErrorIndication;
562
563 bcmbal_subscriber_terminal_key *key =
564 &(((bcmbal_subscriber_terminal_processing_error*)obj)->key);
565
Nicolas Palpacuer967438f2018-09-07 14:41:54 -0400566 BCM_LOG(WARNING, openolt_log_id, "onu processing error indication, intf_id %d, onu_id %d\n",
567 key->intf_id, key->sub_term_id);
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400568
569
570 onu_proc_error_ind->set_intf_id(key->intf_id);
571 onu_proc_error_ind->set_onu_id(key->sub_term_id);
572
573 alarm_ind->set_allocated_onu_processing_error_ind(onu_proc_error_ind);
574 ind.set_allocated_alarm_ind(alarm_ind);
575
576 oltIndQ.push(ind);
577 return BCM_ERR_OK;
578}
579
Shad Ansari01b0e652018-04-05 21:02:53 +0000580Status SubscribeIndication() {
581 bcmbal_cb_cfg cb_cfg = {};
582 uint16_t ind_subgroup;
583
584 if (subscribed) {
585 return Status::OK;
586 }
587
588 cb_cfg.module = BCMOS_MODULE_ID_NONE;
589
590
591 /* OLT device indication */
592 cb_cfg.obj_type = BCMBAL_OBJ_ID_ACCESS_TERMINAL;
Shad Ansaricb004c52018-05-30 18:07:23 +0000593 ind_subgroup = bcmbal_access_terminal_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000594 cb_cfg.p_subgroup = &ind_subgroup;
595 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OltIndication;
596 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
597 return Status(grpc::StatusCode::INTERNAL, "Olt indication subscribe failed");
598 }
599
600 /* Interface LOS indication */
601 cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
602 ind_subgroup = bcmbal_interface_auto_id_los;
603 cb_cfg.p_subgroup = &ind_subgroup;
604 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)LosIndication;
605 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
606 return Status(grpc::StatusCode::INTERNAL, "LOS indication subscribe failed");
607 }
608
609 /* Interface indication */
610 cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
Shad Ansaricb004c52018-05-30 18:07:23 +0000611 ind_subgroup = bcmbal_interface_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000612 cb_cfg.p_subgroup = &ind_subgroup;
613 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)IfIndication;
614 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
615 return Status(grpc::StatusCode::INTERNAL, "Interface indication subscribe failed");
616 }
617
618 /* Interface operational state change indication */
619 cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
620 ind_subgroup = bcmbal_interface_auto_id_oper_status_change;
621 cb_cfg.p_subgroup = &ind_subgroup;
622 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)IfOperIndication;
623 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
624 return Status(grpc::StatusCode::INTERNAL, "Interface operations state change indication subscribe failed");
625 }
626
627 /* onu alarm indication */
628 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
629 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sub_term_alarm;
630 cb_cfg.p_subgroup = &ind_subgroup;
631 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuAlarmIndication;
632 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
633 return Status(grpc::StatusCode::INTERNAL, "onu alarm indication subscribe failed");
634 }
635
636 /* onu dying-gasp indication */
637 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
638 ind_subgroup = bcmbal_subscriber_terminal_auto_id_dgi;
639 cb_cfg.p_subgroup = &ind_subgroup;
640 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuDyingGaspIndication;
641 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
642 return Status(grpc::StatusCode::INTERNAL, "onu dying-gasp indication subscribe failed");
643 }
644
645 /* onu discovery indication */
646 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
647 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sub_term_disc;
648 cb_cfg.p_subgroup = &ind_subgroup;
649 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuDiscoveryIndication;
650 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
651 return Status(grpc::StatusCode::INTERNAL, "onu discovery indication subscribe failed");
652 }
653
654 /* onu indication */
655 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
Shad Ansaricb004c52018-05-30 18:07:23 +0000656 ind_subgroup = bcmbal_subscriber_terminal_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000657 cb_cfg.p_subgroup = &ind_subgroup;
658 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuIndication;
659 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
660 return Status(grpc::StatusCode::INTERNAL, "onu indication subscribe failed");
661 }
662 /* onu operational state change indication */
663 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
664 ind_subgroup = bcmbal_subscriber_terminal_auto_id_oper_status_change;
665 cb_cfg.p_subgroup = &ind_subgroup;
666 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuOperIndication;
667 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
668 return Status(grpc::StatusCode::INTERNAL, "onu operational state change indication subscribe failed");
669 }
670
Shad Ansari5fe93682018-04-26 05:24:19 +0000671 /* Packet (bearer) indication */
Shad Ansari01b0e652018-04-05 21:02:53 +0000672 cb_cfg.obj_type = BCMBAL_OBJ_ID_PACKET;
673 ind_subgroup = bcmbal_packet_auto_id_bearer_channel_rx;
674 cb_cfg.p_subgroup = &ind_subgroup;
Shad Ansari5fe93682018-04-26 05:24:19 +0000675 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)PacketIndication;
Shad Ansari01b0e652018-04-05 21:02:53 +0000676 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
Shad Ansari5fe93682018-04-26 05:24:19 +0000677 return Status(grpc::StatusCode::INTERNAL, "Packet indication subscribe failed");
Shad Ansari01b0e652018-04-05 21:02:53 +0000678 }
679
680 /* Flow Operational State Change */
681 cb_cfg.obj_type = BCMBAL_OBJ_ID_FLOW;
682 ind_subgroup = bcmbal_flow_auto_id_oper_status_change;
683 cb_cfg.p_subgroup = &ind_subgroup;
684 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)FlowOperIndication;
685 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
686 return Status(grpc::StatusCode::INTERNAL, "Flow operational state change indication subscribe failed");
687 }
Shad Ansaricb004c52018-05-30 18:07:23 +0000688#if 0
Shad Ansari01b0e652018-04-05 21:02:53 +0000689 /* Flow Indication */
690 cb_cfg.obj_type = BCMBAL_OBJ_ID_FLOW;
691 ind_subgroup = bcmbal_flow_auto_id_ind;
692 cb_cfg.p_subgroup = &ind_subgroup;
693 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)FlowIndication;
694 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
695 return Status(grpc::StatusCode::INTERNAL, "Flow indication subscribe failed");
696 }
697
698 /* TM queue indication */
699 cb_cfg.obj_type = BCMBAL_OBJ_ID_TM_QUEUE;
700 ind_subgroup = bcmbal_tm_queue_auto_id_ind;
701 cb_cfg.p_subgroup = &ind_subgroup;
702 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)TmQIndication;
703 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
704 return Status(grpc::StatusCode::INTERNAL, "Traffic mgmt queue indication subscribe failed");
705 }
Shad Ansaricb004c52018-05-30 18:07:23 +0000706#endif
Shad Ansari01b0e652018-04-05 21:02:53 +0000707
708 /* TM sched indication */
709 cb_cfg.obj_type = BCMBAL_OBJ_ID_TM_SCHED;
Shad Ansaricb004c52018-05-30 18:07:23 +0000710 ind_subgroup = bcmbal_tm_sched_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000711 cb_cfg.p_subgroup = &ind_subgroup;
712 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)TmSchedIndication;
713 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
714 return Status(grpc::StatusCode::INTERNAL, "Traffic mgmt queue indication subscribe failed");
715 }
716
Shad Ansaricb004c52018-05-30 18:07:23 +0000717#if 0
Shad Ansari01b0e652018-04-05 21:02:53 +0000718 /* Multicast group indication */
719 cb_cfg.obj_type = BCMBAL_OBJ_ID_GROUP;
720 ind_subgroup = bcmbal_group_auto_id_ind;
721 cb_cfg.p_subgroup = &ind_subgroup;
722 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)McastGroupIndication;
723 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
724 return Status(grpc::StatusCode::INTERNAL, "Multicast group indication subscribe failed");
725 }
Shad Ansaricb004c52018-05-30 18:07:23 +0000726#endif
Shad Ansari01b0e652018-04-05 21:02:53 +0000727
Nicolas Palpacuerde4325b2018-07-03 11:18:42 -0400728
729 /* ONU startup failure indication */
730 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
731 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sufi;
732 cb_cfg.p_subgroup = &ind_subgroup;
733 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuStartupFailureIndication;
734 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
735 return Status(grpc::StatusCode::INTERNAL, "onu startup failure indication subscribe failed");
736 }
737
738 /* SDI indication */
739 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
740 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sdi;
741 cb_cfg.p_subgroup = &ind_subgroup;
742 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuSignalDegradeIndication;
743 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
744 return Status(grpc::StatusCode::INTERNAL, "onu sdi indication subscribe failed");
745 }
746
747 /* DOWI indication */
748 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
749 ind_subgroup = bcmbal_subscriber_terminal_auto_id_dowi;
750 cb_cfg.p_subgroup = &ind_subgroup;
751 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuDriftOfWindowIndication;
752 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
753 return Status(grpc::StatusCode::INTERNAL, "onu dowi indication subscribe failed");
754 }
755
756 /* LOOCI indication */
757 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
758 ind_subgroup = bcmbal_subscriber_terminal_auto_id_looci;
759 cb_cfg.p_subgroup = &ind_subgroup;
760 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuLossOfOmciChannelIndication;
761 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
762 return Status(grpc::StatusCode::INTERNAL, "onu looci indication subscribe failed");
763 }
764
765 /* SFI indication */
766 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
767 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sfi;
768 cb_cfg.p_subgroup = &ind_subgroup;
769 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuSignalsFailureIndication;
770 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
771 return Status(grpc::StatusCode::INTERNAL, "onu sfi indication subscribe failed");
772 }
773
774 /* TIWI indication */
775 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
776 ind_subgroup = bcmbal_subscriber_terminal_auto_id_tiwi;
777 cb_cfg.p_subgroup = &ind_subgroup;
778 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuTransmissionInterferenceWarningIndication;
779 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
780 return Status(grpc::StatusCode::INTERNAL, "onu tiwi indication subscribe failed");
781 }
782
783 /* TIWI indication */
784 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
785 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sub_term_act_fail;
786 cb_cfg.p_subgroup = &ind_subgroup;
787 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuActivationFailureIndication;
788 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
789 return Status(grpc::StatusCode::INTERNAL, "onu activation falaire indication subscribe failed");
790 }
791
792 /* ONU processing error indication */
793 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
794 ind_subgroup = bcmbal_subscriber_terminal_auto_id_processing_error;
795 cb_cfg.p_subgroup = &ind_subgroup;
796 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuProcessingErrorIndication;
797 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
798 return Status(grpc::StatusCode::INTERNAL, "onu processing error indication subscribe failed");
799 }
800
Shad Ansari01b0e652018-04-05 21:02:53 +0000801 subscribed = true;
802
803 return Status::OK;
804}