blob: df60fcb2489a0dc2bec39a5ed99139455192d87b [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
35Queue<openolt::Indication> oltIndQ;
36//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");
Nicolas Palpacuer3cad49d2018-07-02 14:03:24 -040051 state::activate();
Shad Ansari01b0e652018-04-05 21:02:53 +000052 } else {
53 olt_ind->set_oper_state("down");
Nicolas Palpacuer3cad49d2018-07-02 14:03:24 -040054 state::deactivate();
Shad Ansari01b0e652018-04-05 21:02:53 +000055 }
56 ind.set_allocated_olt_ind(olt_ind);
57 std::cout << "olt indication, oper_state:" << ind.olt_ind().oper_state() << std::endl;
58 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
95 std::cout << "LOS indication : " << intf_id << " " << status << std::endl;
96
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
111 std::cout << "intf indication, intf_id:"
Shad Ansaricb004c52018-05-30 18:07:23 +0000112 << ((bcmbal_interface_oper_status_change *)obj)->key.intf_id << std::endl;
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;
130 std::cout << "intf oper state indication, intf_id:"
nickc063ffd2018-05-22 14:35:28 -0400131 << ((bcmbal_interface_oper_status_change *)obj)->key.intf_id
Shad Ansari01b0e652018-04-05 21:02:53 +0000132 << " type:" << ((bcmbal_interface_oper_status_change *)obj)->key.intf_type
133 << " oper_state:" << ((bcmbal_interface_oper_status_change *)obj)->data.new_oper_status
134 << " admin_state:" << ((bcmbal_interface_oper_status_change *)obj)->data.admin_state
135 << std::endl;
136
137 intf_oper_ind->set_intf_id(((bcmbal_interface_oper_status_change *)obj)->key.intf_id);
138
139 if (((bcmbal_interface_oper_status_change *)obj)->key.intf_type == BCMBAL_INTF_TYPE_NNI) {
140 intf_oper_ind->set_type("nni");
141 } else if (((bcmbal_interface_oper_status_change *)obj)->key.intf_type == BCMBAL_INTF_TYPE_PON) {
142 intf_oper_ind->set_type("pon");
143 } else {
144 intf_oper_ind->set_type("unknown");
145 }
146
147 if (((bcmbal_interface_oper_status_change *)obj)->data.new_oper_status == BCMBAL_STATUS_UP) {
148 intf_oper_ind->set_oper_state("up");
149 } else {
150 intf_oper_ind->set_oper_state("down");
151 }
152
153 ind.set_allocated_intf_oper_ind(intf_oper_ind);
154
155 oltIndQ.push(ind);
156 return BCM_ERR_OK;
157}
158
159bcmos_errno OnuAlarmIndication(bcmbal_obj *obj) {
160 openolt::Indication ind;
161 std::cout << "onu alarm indication" << std::endl;
162 return BCM_ERR_OK;
163}
164
165bcmos_errno OnuDyingGaspIndication(bcmbal_obj *obj) {
166 openolt::Indication ind;
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -0400167 openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
168 openolt::DyingGaspIndication* dg_ind = new openolt::DyingGaspIndication;
nickc063ffd2018-05-22 14:35:28 -0400169
170 bcmbal_subscriber_terminal_key *key =
171 &(((bcmbal_subscriber_terminal_dgi*)obj)->key);
172
173 bcmbal_subscriber_terminal_dgi_data *data =
174 &(((bcmbal_subscriber_terminal_dgi*)obj)->data);
175
176
177 std::cout << "onu dying-gasp indication, intf_id:"
178 << key->intf_id
179 << ", onu_id:"
180 << key->sub_term_id
181 << ", alarm: "
182 << data->dgi_status << std::endl;
183
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -0400184 dg_ind->set_intf_id(key->intf_id);
185 dg_ind->set_onu_id(key->sub_term_id);
186 dg_ind->set_status(alarm_status_to_string(data->dgi_status));
nickc063ffd2018-05-22 14:35:28 -0400187
Nicolas Palpacuera32f4c32018-06-28 12:55:10 -0400188 alarm_ind->set_allocated_dying_gasp_ind(dg_ind);
189 ind.set_allocated_alarm_ind(alarm_ind);
nickc063ffd2018-05-22 14:35:28 -0400190
191 oltIndQ.push(ind);
Shad Ansari01b0e652018-04-05 21:02:53 +0000192 return BCM_ERR_OK;
193}
194
195bcmos_errno OnuDiscoveryIndication(bcmbal_cfg *obj) {
196 openolt::Indication ind;
197 openolt::OnuDiscIndication* onu_disc_ind = new openolt::OnuDiscIndication;
198 openolt::SerialNumber* serial_number = new openolt::SerialNumber;
199
200 bcmbal_subscriber_terminal_key *key =
201 &(((bcmbal_subscriber_terminal_sub_term_disc*)obj)->key);
202
203 bcmbal_subscriber_terminal_sub_term_disc_data *data =
204 &(((bcmbal_subscriber_terminal_sub_term_disc*)obj)->data);
205
206 bcmbal_serial_number *in_serial_number = &(data->serial_number);
207
208 std::cout << "onu discover indication, intf_id:"
209 << key->intf_id
210 << " serial_number:"
211 << serial_number_to_str(in_serial_number) << std::endl;
212
213 onu_disc_ind->set_intf_id(key->intf_id);
214 serial_number->set_vendor_id(reinterpret_cast<const char *>(in_serial_number->vendor_id), 4);
215 serial_number->set_vendor_specific(reinterpret_cast<const char *>(in_serial_number->vendor_specific), 8);
216 onu_disc_ind->set_allocated_serial_number(serial_number);
217 ind.set_allocated_onu_disc_ind(onu_disc_ind);
218
219 oltIndQ.push(ind);
220
221 return BCM_ERR_OK;
222}
223
224bcmos_errno OnuIndication(bcmbal_obj *obj) {
225 openolt::Indication ind;
226 openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
Shad Ansari01b0e652018-04-05 21:02:53 +0000227
228 bcmbal_subscriber_terminal_key *key =
Shad Ansaricb004c52018-05-30 18:07:23 +0000229 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->key);
Shad Ansari01b0e652018-04-05 21:02:53 +0000230
Shad Ansaricb004c52018-05-30 18:07:23 +0000231 bcmbal_subscriber_terminal_oper_status_change_data *data =
232 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->data);
Shad Ansari01b0e652018-04-05 21:02:53 +0000233
234 std::cout << "onu indication, intf_id:"
235 << key->intf_id
Shad Ansaricb004c52018-05-30 18:07:23 +0000236 << " oper_state:" << data->new_oper_status
237 << " admin_state:" << data->admin_state
238 << " onu_id:" << key->sub_term_id << std::endl;
Shad Ansari01b0e652018-04-05 21:02:53 +0000239
240 onu_ind->set_intf_id(key->intf_id);
241 onu_ind->set_onu_id(key->sub_term_id);
Shad Ansaricb004c52018-05-30 18:07:23 +0000242 if (data->new_oper_status == BCMBAL_STATE_UP) {
nickc063ffd2018-05-22 14:35:28 -0400243 onu_ind->set_oper_state("up");
244 } else {
245 onu_ind->set_oper_state("down");
246 }
247 if (data->admin_state == BCMBAL_STATE_UP) {
248 onu_ind->set_admin_state("up");
249 } else {
250 onu_ind->set_admin_state("down");
251 }
252
Shad Ansari01b0e652018-04-05 21:02:53 +0000253 ind.set_allocated_onu_ind(onu_ind);
254
255 oltIndQ.push(ind);
256 return BCM_ERR_OK;
257}
258
259bcmos_errno OnuOperIndication(bcmbal_obj *obj) {
260 openolt::Indication ind;
nickc063ffd2018-05-22 14:35:28 -0400261 openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
nickc063ffd2018-05-22 14:35:28 -0400262
263 bcmbal_subscriber_terminal_key *key =
264 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->key);
265
266 bcmbal_subscriber_terminal_oper_status_change_data *data =
267 &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->data);
268
269
270 std::cout << "onu oper state indication, intf_id:"
271 << key->intf_id
272 << " onu_id: "
273 << key->sub_term_id
274 << " old oper state: "
275 << data->old_oper_status
276 << " new oper state:"
277 << data->new_oper_status << std::endl;
278
279 onu_ind->set_intf_id(key->intf_id);
280 onu_ind->set_onu_id(key->sub_term_id);
nickc063ffd2018-05-22 14:35:28 -0400281 if (data->new_oper_status == BCMBAL_STATE_UP) {
282 onu_ind->set_oper_state("up");
283 } else {
284 onu_ind->set_oper_state("down");
285 }
286 if (data->admin_state == BCMBAL_STATE_UP) {
287 onu_ind->set_admin_state("up");
288 } else {
289 onu_ind->set_admin_state("down");
290 }
291
292 ind.set_allocated_onu_ind(onu_ind);
293
294 oltIndQ.push(ind);
Shad Ansari01b0e652018-04-05 21:02:53 +0000295 return BCM_ERR_OK;
296}
297
298bcmos_errno OmciIndication(bcmbal_obj *obj) {
299 openolt::Indication ind;
300 openolt::OmciIndication* omci_ind = new openolt::OmciIndication;
Shad Ansari5fe93682018-04-26 05:24:19 +0000301 bcmbal_packet_itu_omci_channel_rx *in =
Shad Ansari01b0e652018-04-05 21:02:53 +0000302 (bcmbal_packet_itu_omci_channel_rx *)obj;
303
304 std::cout << "omci indication" << std::endl;
305
Shad Ansari5fe93682018-04-26 05:24:19 +0000306 omci_ind->set_intf_id(in->key.packet_send_dest.u.itu_omci_channel.intf_id);
307 omci_ind->set_onu_id(in->key.packet_send_dest.u.itu_omci_channel.sub_term_id);
308 omci_ind->set_pkt(in->data.pkt.val, in->data.pkt.len);
Shad Ansari01b0e652018-04-05 21:02:53 +0000309
310 ind.set_allocated_omci_ind(omci_ind);
311 oltIndQ.push(ind);
312
313 return BCM_ERR_OK;
314}
315
Shad Ansari5fe93682018-04-26 05:24:19 +0000316bcmos_errno PacketIndication(bcmbal_obj *obj) {
Shad Ansari01b0e652018-04-05 21:02:53 +0000317 openolt::Indication ind;
Shad Ansari5fe93682018-04-26 05:24:19 +0000318 openolt::PacketIndication* pkt_ind = new openolt::PacketIndication;
319 bcmbal_packet_bearer_channel_rx *in = (bcmbal_packet_bearer_channel_rx *)obj;
320
321 std::cout << "packet indication"
322 << " intf_id:" << in->data.intf_id
323 << " svc_port:" << in->data.svc_port
324 << " flow_id:" << in->data.flow_id
325 << std::endl;
326
327 pkt_ind->set_intf_id(in->data.intf_id);
328 pkt_ind->set_gemport_id(in->data.svc_port);
329 pkt_ind->set_flow_id(in->data.flow_id);
330 pkt_ind->set_pkt(in->data.pkt.val, in->data.pkt.len);
331
332 ind.set_allocated_pkt_ind(pkt_ind);
333 oltIndQ.push(ind);
334
Shad Ansari01b0e652018-04-05 21:02:53 +0000335 return BCM_ERR_OK;
336}
337
338bcmos_errno FlowOperIndication(bcmbal_obj *obj) {
339 openolt::Indication ind;
340 std::cout << "flow oper state indication" << std::endl;
341 return BCM_ERR_OK;
342}
343
344bcmos_errno FlowIndication(bcmbal_obj *obj) {
345 openolt::Indication ind;
346 std::cout << "flow indication" << std::endl;
347 return BCM_ERR_OK;
348}
349
350bcmos_errno TmQIndication(bcmbal_obj *obj) {
351 openolt::Indication ind;
352 std::cout << "traffic mgmt queue indication" << std::endl;
353 return BCM_ERR_OK;
354}
355
356bcmos_errno TmSchedIndication(bcmbal_obj *obj) {
357 openolt::Indication ind;
358 std::cout << "traffic mgmt sheduler indication" << std::endl;
359 return BCM_ERR_OK;
360}
361
362bcmos_errno McastGroupIndication(bcmbal_obj *obj) {
363 openolt::Indication ind;
364 std::cout << "mcast group indication" << std::endl;
365 return BCM_ERR_OK;
366}
367
368Status SubscribeIndication() {
369 bcmbal_cb_cfg cb_cfg = {};
370 uint16_t ind_subgroup;
371
372 if (subscribed) {
373 return Status::OK;
374 }
375
376 cb_cfg.module = BCMOS_MODULE_ID_NONE;
377
378
379 /* OLT device indication */
380 cb_cfg.obj_type = BCMBAL_OBJ_ID_ACCESS_TERMINAL;
Shad Ansaricb004c52018-05-30 18:07:23 +0000381 ind_subgroup = bcmbal_access_terminal_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000382 cb_cfg.p_subgroup = &ind_subgroup;
383 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OltIndication;
384 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
385 return Status(grpc::StatusCode::INTERNAL, "Olt indication subscribe failed");
386 }
387
388 /* Interface LOS indication */
389 cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
390 ind_subgroup = bcmbal_interface_auto_id_los;
391 cb_cfg.p_subgroup = &ind_subgroup;
392 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)LosIndication;
393 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
394 return Status(grpc::StatusCode::INTERNAL, "LOS indication subscribe failed");
395 }
396
397 /* Interface indication */
398 cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
Shad Ansaricb004c52018-05-30 18:07:23 +0000399 ind_subgroup = bcmbal_interface_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000400 cb_cfg.p_subgroup = &ind_subgroup;
401 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)IfIndication;
402 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
403 return Status(grpc::StatusCode::INTERNAL, "Interface indication subscribe failed");
404 }
405
406 /* Interface operational state change indication */
407 cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
408 ind_subgroup = bcmbal_interface_auto_id_oper_status_change;
409 cb_cfg.p_subgroup = &ind_subgroup;
410 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)IfOperIndication;
411 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
412 return Status(grpc::StatusCode::INTERNAL, "Interface operations state change indication subscribe failed");
413 }
414
415 /* onu alarm indication */
416 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
417 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sub_term_alarm;
418 cb_cfg.p_subgroup = &ind_subgroup;
419 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuAlarmIndication;
420 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
421 return Status(grpc::StatusCode::INTERNAL, "onu alarm indication subscribe failed");
422 }
423
424 /* onu dying-gasp indication */
425 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
426 ind_subgroup = bcmbal_subscriber_terminal_auto_id_dgi;
427 cb_cfg.p_subgroup = &ind_subgroup;
428 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuDyingGaspIndication;
429 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
430 return Status(grpc::StatusCode::INTERNAL, "onu dying-gasp indication subscribe failed");
431 }
432
433 /* onu discovery indication */
434 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
435 ind_subgroup = bcmbal_subscriber_terminal_auto_id_sub_term_disc;
436 cb_cfg.p_subgroup = &ind_subgroup;
437 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuDiscoveryIndication;
438 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
439 return Status(grpc::StatusCode::INTERNAL, "onu discovery indication subscribe failed");
440 }
441
442 /* onu indication */
443 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
Shad Ansaricb004c52018-05-30 18:07:23 +0000444 ind_subgroup = bcmbal_subscriber_terminal_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000445 cb_cfg.p_subgroup = &ind_subgroup;
446 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuIndication;
447 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
448 return Status(grpc::StatusCode::INTERNAL, "onu indication subscribe failed");
449 }
450 /* onu operational state change indication */
451 cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
452 ind_subgroup = bcmbal_subscriber_terminal_auto_id_oper_status_change;
453 cb_cfg.p_subgroup = &ind_subgroup;
454 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuOperIndication;
455 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
456 return Status(grpc::StatusCode::INTERNAL, "onu operational state change indication subscribe failed");
457 }
458
Shad Ansari5fe93682018-04-26 05:24:19 +0000459 /* Packet (bearer) indication */
Shad Ansari01b0e652018-04-05 21:02:53 +0000460 cb_cfg.obj_type = BCMBAL_OBJ_ID_PACKET;
461 ind_subgroup = bcmbal_packet_auto_id_bearer_channel_rx;
462 cb_cfg.p_subgroup = &ind_subgroup;
Shad Ansari5fe93682018-04-26 05:24:19 +0000463 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)PacketIndication;
Shad Ansari01b0e652018-04-05 21:02:53 +0000464 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
Shad Ansari5fe93682018-04-26 05:24:19 +0000465 return Status(grpc::StatusCode::INTERNAL, "Packet indication subscribe failed");
Shad Ansari01b0e652018-04-05 21:02:53 +0000466 }
467
468 /* Flow Operational State Change */
469 cb_cfg.obj_type = BCMBAL_OBJ_ID_FLOW;
470 ind_subgroup = bcmbal_flow_auto_id_oper_status_change;
471 cb_cfg.p_subgroup = &ind_subgroup;
472 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)FlowOperIndication;
473 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
474 return Status(grpc::StatusCode::INTERNAL, "Flow operational state change indication subscribe failed");
475 }
Shad Ansaricb004c52018-05-30 18:07:23 +0000476#if 0
Shad Ansari01b0e652018-04-05 21:02:53 +0000477 /* Flow Indication */
478 cb_cfg.obj_type = BCMBAL_OBJ_ID_FLOW;
479 ind_subgroup = bcmbal_flow_auto_id_ind;
480 cb_cfg.p_subgroup = &ind_subgroup;
481 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)FlowIndication;
482 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
483 return Status(grpc::StatusCode::INTERNAL, "Flow indication subscribe failed");
484 }
485
486 /* TM queue indication */
487 cb_cfg.obj_type = BCMBAL_OBJ_ID_TM_QUEUE;
488 ind_subgroup = bcmbal_tm_queue_auto_id_ind;
489 cb_cfg.p_subgroup = &ind_subgroup;
490 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)TmQIndication;
491 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
492 return Status(grpc::StatusCode::INTERNAL, "Traffic mgmt queue indication subscribe failed");
493 }
Shad Ansaricb004c52018-05-30 18:07:23 +0000494#endif
Shad Ansari01b0e652018-04-05 21:02:53 +0000495
496 /* TM sched indication */
497 cb_cfg.obj_type = BCMBAL_OBJ_ID_TM_SCHED;
Shad Ansaricb004c52018-05-30 18:07:23 +0000498 ind_subgroup = bcmbal_tm_sched_auto_id_oper_status_change;
Shad Ansari01b0e652018-04-05 21:02:53 +0000499 cb_cfg.p_subgroup = &ind_subgroup;
500 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)TmSchedIndication;
501 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
502 return Status(grpc::StatusCode::INTERNAL, "Traffic mgmt queue indication subscribe failed");
503 }
504
Shad Ansaricb004c52018-05-30 18:07:23 +0000505#if 0
Shad Ansari01b0e652018-04-05 21:02:53 +0000506 /* Multicast group indication */
507 cb_cfg.obj_type = BCMBAL_OBJ_ID_GROUP;
508 ind_subgroup = bcmbal_group_auto_id_ind;
509 cb_cfg.p_subgroup = &ind_subgroup;
510 cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)McastGroupIndication;
511 if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
512 return Status(grpc::StatusCode::INTERNAL, "Multicast group indication subscribe failed");
513 }
Shad Ansaricb004c52018-05-30 18:07:23 +0000514#endif
Shad Ansari01b0e652018-04-05 21:02:53 +0000515
516 subscribed = true;
517
518 return Status::OK;
519}