VOL-3444 Handling of ONT Activation Failure and generation of an alarm

Change-Id: Ibdf7add4258b856f10c121351d9c691bba325a24
diff --git a/agent/src/indications.cc b/agent/src/indications.cc
index 759f419..1939e60 100644
--- a/agent/src/indications.cc
+++ b/agent/src/indications.cc
@@ -818,6 +818,25 @@
                         onu_ind->set_oper_state("up");
                     if (ONU_ACTIVATION_COMPLETED_FAIL(data->status))
                         onu_ind->set_oper_state("down");
+                        switch (data->fail_reason) {
+                            case BCMOLT_ACTIVATION_FAIL_REASON_RANGING:
+                                onu_ind->set_fail_reason(openolt::OnuIndication_ActivationFailReason_ONU_ACTIVATION_FAIL_REASON_RANGING);
+                                break;
+                            case BCMOLT_ACTIVATION_FAIL_REASON_PASSWORD_AUTHENTICATION:
+                                onu_ind->set_fail_reason(openolt::OnuIndication_ActivationFailReason_ONU_ACTIVATION_FAIL_REASON_PASSWORD_AUTHENTICATION);
+                                break;
+                            case BCMOLT_ACTIVATION_FAIL_REASON_LOS:
+                                onu_ind->set_fail_reason(openolt::OnuIndication_ActivationFailReason_ONU_ACTIVATION_FAIL_REASON_LOS);
+                                break;
+                            case BCMOLT_ACTIVATION_FAIL_REASON_ONU_ALARM:
+                                onu_ind->set_fail_reason(openolt::OnuIndication_ActivationFailReason_ONU_ACTIVATION_FAIL_ONU_ALARM);
+                                break;
+                            case BCMOLT_ACTIVATION_FAIL_REASON_SWITCH_OVER:
+                                onu_ind->set_fail_reason(openolt::OnuIndication_ActivationFailReason_ONU_ACTIVATION_FAIL_SWITCH_OVER);
+                                break;
+                            default:
+                                onu_ind->set_fail_reason(openolt::OnuIndication_ActivationFailReason_ONU_ACTIVATION_FAIL_REASON_NONE);
+			}
                     // Setting the admin_state state field based on a valid onu_id does not make any sense.
                     // The adapter too does not seem to interpret this seriously.
                     // Legacy code, lets keep this as is for now.