VOL-1221: OpenOLT Adapter/Driver will use a Technology Profile Instance to create the OLT Upstream and Downstream Queuing and Scheduling Constructs for a Bidirectional Flow.
Change-Id: I8106182a280ee24147e2b19da583d95c254c69ad
diff --git a/agent/src/indications.cc b/agent/src/indications.cc
index 5807c0b..f99f10e 100644
--- a/agent/src/indications.cc
+++ b/agent/src/indications.cc
@@ -143,6 +143,26 @@
return BCM_ERR_OK;
}
+bcmos_errno IfIndication(bcmbal_obj *obj) {
+ openolt::Indication ind;
+ openolt::IntfIndication* intf_ind = new openolt::IntfIndication;
+
+ BCM_LOG(INFO, openolt_log_id, "intf indication, intf_id: %d\n",
+ ((bcmbal_interface_oper_status_change *)obj)->key.intf_id );
+
+ intf_ind->set_intf_id(((bcmbal_interface_oper_status_change *)obj)->key.intf_id);
+ if (((bcmbal_interface_oper_status_change *)obj)->data.new_oper_status == BCMBAL_STATUS_UP) {
+ intf_ind->set_oper_state("up");
+ } else {
+ intf_ind->set_oper_state("down");
+ }
+ ind.set_allocated_intf_ind(intf_ind);
+
+ oltIndQ.push(ind);
+
+ return BCM_ERR_OK;
+}
+
bcmos_errno IfOperIndication(bcmbal_obj *obj) {
openolt::Indication ind;
openolt::IntfOperIndication* intf_oper_ind = new openolt::IntfOperIndication;
@@ -157,7 +177,7 @@
intf_oper_ind->set_oper_state("down");
}
- BCM_LOG(INFO, openolt_log_id, "intf oper state indication, intf_type %s, intf_id %d, oper_state %d, admin_state %d\n",
+ BCM_LOG(INFO, openolt_log_id, "intf oper state indication, intf_type %s, intf_id %d, oper_state %s, admin_state %d\n",
intf_oper_ind->type().c_str(),
bcm_if_oper_ind->key.intf_id,
intf_oper_ind->oper_state().c_str(),
@@ -250,6 +270,38 @@
return BCM_ERR_OK;
}
+bcmos_errno OnuIndication(bcmbal_obj *obj) {
+ openolt::Indication ind;
+ openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
+
+ bcmbal_subscriber_terminal_key *key =
+ &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->key);
+
+ bcmbal_subscriber_terminal_oper_status_change_data *data =
+ &(((bcmbal_subscriber_terminal_oper_status_change*)obj)->data);
+
+ BCM_LOG(INFO, openolt_log_id, "onu indication, intf_id %d, onu_id %d, oper_state %d, admin_state %d\n",
+ key->intf_id, key->sub_term_id, data->new_oper_status, data->admin_state);
+
+ onu_ind->set_intf_id(key->intf_id);
+ onu_ind->set_onu_id(key->sub_term_id);
+ if (data->new_oper_status == BCMBAL_STATUS_UP) {
+ onu_ind->set_oper_state("up");
+ } else {
+ onu_ind->set_oper_state("down");
+ }
+ if (data->admin_state == BCMBAL_STATE_UP) {
+ onu_ind->set_admin_state("up");
+ } else {
+ onu_ind->set_admin_state("down");
+ }
+
+ ind.set_allocated_onu_ind(onu_ind);
+
+ oltIndQ.push(ind);
+ return BCM_ERR_OK;
+}
+
bcmos_errno OnuOperIndication(bcmbal_obj *obj) {
openolt::Indication ind;
openolt::OnuIndication* onu_ind = new openolt::OnuIndication;
@@ -581,6 +633,15 @@
return Status(grpc::StatusCode::INTERNAL, "LOS indication subscribe failed");
}
+ /* Interface indication */
+ cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
+ ind_subgroup = bcmbal_interface_auto_id_oper_status_change;
+ cb_cfg.p_subgroup = &ind_subgroup;
+ cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)IfIndication;
+ if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
+ return Status(grpc::StatusCode::INTERNAL, "Interface indication subscribe failed");
+ }
+
/* Interface operational state change indication */
cb_cfg.obj_type = BCMBAL_OBJ_ID_INTERFACE;
ind_subgroup = bcmbal_interface_auto_id_oper_status_change;
@@ -617,6 +678,14 @@
return Status(grpc::StatusCode::INTERNAL, "onu discovery indication subscribe failed");
}
+ /* onu indication */
+ cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
+ ind_subgroup = bcmbal_subscriber_terminal_auto_id_oper_status_change;
+ cb_cfg.p_subgroup = &ind_subgroup;
+ cb_cfg.ind_cb_hdlr = (f_bcmbal_ind_handler)OnuIndication;
+ if (BCM_ERR_OK != bcmbal_subscribe_ind(DEFAULT_ATERM_ID, &cb_cfg)) {
+ return Status(grpc::StatusCode::INTERNAL, "onu indication subscribe failed");
+ }
/* onu operational state change indication */
cb_cfg.obj_type = BCMBAL_OBJ_ID_SUBSCRIBER_TERMINAL;
ind_subgroup = bcmbal_subscriber_terminal_auto_id_oper_status_change;