[VOL-5452]: Disable/Enable Onu OLT agent
Change-Id: I99855e5627fd683cd5310b887be65133813ddbe9
Signed-off-by: balaji.nagarajan <balaji.nagarajan@radisys.com>
diff --git a/agent/src/indications.cc b/agent/src/indications.cc
index f24dca9..681ed99 100644
--- a/agent/src/indications.cc
+++ b/agent/src/indications.cc
@@ -340,6 +340,77 @@
bcmolt_msg_free(msg);
}
+static void OnuDisableIndication(bcmolt_devid olt, bcmolt_msg *msg) {
+ openolt::Indication ind;
+ openolt::OnuDisabledIndication* onu_disable_ind = new openolt::OnuDisabledIndication;
+ openolt::SerialNumber* serial_number = new openolt::SerialNumber;
+
+ switch (msg->obj_type) {
+ case BCMOLT_OBJ_ID_ONU:
+ switch (msg->subgroup) {
+ case BCMOLT_ONU_AUTO_SUBGROUP_ONU_DISABLE_COMPLETED:
+ {
+ bcmolt_onu_onu_disable_completed* onu = (bcmolt_onu_onu_disable_completed *)msg;
+ bcmolt_onu_key *key = &((bcmolt_onu_onu_disable_completed *)msg)->key;
+
+ int port_no = interface_key_to_port_no(key->pon_ni, BCMOLT_INTERFACE_TYPE_PON);
+
+ bcmolt_serial_number *in_serial_number = &(onu->data.serial_number);
+
+
+ OPENOLT_LOG(INFO, openolt_log_id, "onu disable indication, pon_ni %d, onu_id %d, port_no %d, status %s, serial_number %s\n",
+ key->pon_ni, key->onu_id, port_no, bcmolt_result_to_string(onu->data.status).c_str(),serial_number_to_str(in_serial_number).c_str());
+
+ onu_disable_ind->set_intf_id(key->pon_ni);
+ onu_disable_ind->set_onu_id(key->onu_id);
+ serial_number->set_vendor_id(reinterpret_cast<const char *>(in_serial_number->vendor_id.arr), 4);
+ serial_number->set_vendor_specific(reinterpret_cast<const char *>(in_serial_number->vendor_specific.arr), 8);
+ onu_disable_ind->set_allocated_serial_number(serial_number);
+ ind.set_allocated_onu_disabled_ind(onu_disable_ind);
+ break;
+ }
+ }
+ }
+
+ oltIndQ.push(ind);
+ bcmolt_msg_free(msg);
+}
+
+static void OnuEnableIndication(bcmolt_devid olt, bcmolt_msg *msg) {
+ openolt::Indication ind;
+ openolt::OnuEnabledIndication* onu_enable_ind = new openolt::OnuEnabledIndication;
+ openolt::SerialNumber* serial_number = new openolt::SerialNumber;
+
+ switch (msg->obj_type) {
+ case BCMOLT_OBJ_ID_ONU:
+ switch (msg->subgroup) {
+ case BCMOLT_ONU_AUTO_SUBGROUP_ONU_ENABLE_COMPLETED:
+ {
+ bcmolt_onu_onu_enable_completed* onu = (bcmolt_onu_onu_enable_completed *)msg;
+ bcmolt_onu_key *key = &((bcmolt_onu_onu_enable_completed *)msg)->key;
+
+ int port_no = interface_key_to_port_no(key->pon_ni, BCMOLT_INTERFACE_TYPE_PON);
+ bcmolt_serial_number *in_serial_number = &(onu->data.serial_number);
+
+ OPENOLT_LOG(INFO, openolt_log_id, "onu enable indication, pon_ni %d, onu_id %d, port_no %d, serial_number %s\n",
+ key->pon_ni, key->onu_id, port_no,serial_number_to_str(in_serial_number).c_str());
+
+ onu_enable_ind->set_intf_id(key->pon_ni);
+ onu_enable_ind->set_onu_id(key->onu_id);
+ serial_number->set_vendor_id(reinterpret_cast<const char *>(in_serial_number->vendor_id.arr), 4);
+ serial_number->set_vendor_specific(reinterpret_cast<const char *>(in_serial_number->vendor_specific.arr), 8);
+ onu_enable_ind->set_allocated_serial_number(serial_number);
+
+ ind.set_allocated_onu_enabled_ind(onu_enable_ind);
+ break;
+ }
+ }
+ }
+
+ oltIndQ.push(ind);
+ bcmolt_msg_free(msg);
+}
+
static void OnuAlarmIndication(bcmolt_devid olt, bcmolt_msg *msg) {
openolt::Indication ind;
openolt::AlarmIndication* alarm_ind = new openolt::AlarmIndication;
@@ -1340,6 +1411,22 @@
if(rc != BCM_ERR_OK)
return Status(grpc::StatusCode::INTERNAL, "onu dying-gasp indication subscribe failed");
+ rx_cfg.obj_type = BCMOLT_OBJ_ID_ONU;
+ rx_cfg.rx_cb = OnuDisableIndication;
+ rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
+ rx_cfg.subgroup = bcmolt_onu_auto_subgroup_onu_disable_completed;
+ rc = bcmolt_ind_subscribe(current_device, &rx_cfg);
+ if(rc != BCM_ERR_OK)
+ return Status(grpc::StatusCode::INTERNAL, "onu disable indication subscribe failed");
+
+ rx_cfg.obj_type = BCMOLT_OBJ_ID_ONU;
+ rx_cfg.rx_cb = OnuEnableIndication;
+ rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;
+ rx_cfg.subgroup = bcmolt_onu_auto_subgroup_onu_enable_completed;
+ rc = bcmolt_ind_subscribe(current_device, &rx_cfg);
+ if(rc != BCM_ERR_OK)
+ return Status(grpc::StatusCode::INTERNAL, "onu enable indication subscribe failed");
+
rx_cfg.obj_type = BCMOLT_OBJ_ID_PON_INTERFACE;
rx_cfg.rx_cb = OnuDiscoveryIndication;
rx_cfg.flags = BCMOLT_AUTO_FLAGS_NONE;