VOL-3395 Encryption of the OMCC GEM

Change-Id: I6d3f9f4340558525f8e04ee18813a61e97bf0d83
diff --git a/agent/src/core_api_handler.cc b/agent/src/core_api_handler.cc
index 147582c..aa45b0f 100644
--- a/agent/src/core_api_handler.cc
+++ b/agent/src/core_api_handler.cc
@@ -90,13 +90,13 @@
     return s_actions_ptr;
 }
 
-bcmolt_stat_alarm_config set_stat_alarm_config(const openolt::OnuItuPonAlarm* request) {
+bcmolt_stat_alarm_config set_stat_alarm_config(const config::OnuItuPonAlarm* request) {
     bcmolt_stat_alarm_config alarm_cfg = {};
     bcmolt_stat_alarm_trigger_config trigger_obj = {};
     bcmolt_stat_alarm_soak_config soak_obj = {};
 
     switch (request->alarm_reporting_condition()) {
-        case openolt::OnuItuPonAlarm::RATE_THRESHOLD:
+        case config::OnuItuPonAlarm::RATE_THRESHOLD:
             trigger_obj.type = BCMOLT_STAT_CONDITION_TYPE_RATE_THRESHOLD;
             BCMOLT_FIELD_SET(&trigger_obj.u.rate_threshold, stat_alarm_trigger_config_rate_threshold,
                     rising, request->rate_threshold_config().rate_threshold_rising());
@@ -107,7 +107,7 @@
             BCMOLT_FIELD_SET(&soak_obj, stat_alarm_soak_config, clear_soak_time,
                     request->rate_threshold_config().soak_time().clear_soak_time());
             break;
-        case openolt::OnuItuPonAlarm::RATE_RANGE:
+        case config::OnuItuPonAlarm::RATE_RANGE:
             trigger_obj.type = BCMOLT_STAT_CONDITION_TYPE_RATE_RANGE;
             BCMOLT_FIELD_SET(&trigger_obj.u.rate_range, stat_alarm_trigger_config_rate_range, upper,
                     request->rate_range_config().rate_range_upper());
@@ -118,7 +118,7 @@
             BCMOLT_FIELD_SET(&soak_obj, stat_alarm_soak_config, clear_soak_time,
                     request->rate_range_config().soak_time().clear_soak_time());
             break;
-        case openolt::OnuItuPonAlarm::VALUE_THRESHOLD:
+        case config::OnuItuPonAlarm::VALUE_THRESHOLD:
             trigger_obj.type = BCMOLT_STAT_CONDITION_TYPE_VALUE_THRESHOLD;
             BCMOLT_FIELD_SET(&trigger_obj.u.value_threshold, stat_alarm_trigger_config_value_threshold,
                     limit, request->value_threshold_config().threshold_limit());
@@ -139,7 +139,7 @@
     return alarm_cfg;
 }
 
-Status OnuItuPonAlarmSet_(const openolt::OnuItuPonAlarm* request) {
+Status OnuItuPonAlarmSet_(const config::OnuItuPonAlarm* request) {
     bcmos_errno err;
     bcmolt_onu_itu_pon_stats_cfg stat_cfg; /* declare main API struct */
     bcmolt_onu_key key = {}; /* declare key */
@@ -179,7 +179,7 @@
     errors_cfg = set_stat_alarm_config(request);
 
     switch (request->alarm_id()) {
-        case openolt::OnuItuPonAlarm_AlarmID::OnuItuPonAlarm_AlarmID_RDI_ERRORS:
+        case config::OnuItuPonAlarm_AlarmID::OnuItuPonAlarm_AlarmID_RDI_ERRORS:
             //set the rdi_errors alarm
             BCMOLT_FIELD_SET(&stat_cfg.data, onu_itu_pon_stats_cfg_data, rdi_errors, errors_cfg);
             break;
@@ -911,6 +911,11 @@
         BCMOLT_MSG_FIELD_SET(&interface_obj, itu.gpon.power_level.mode, BCMOLT_PON_POWER_LEVEL_MODE_DEFAULT);
     }
 
+    //Enable AES Encryption
+    BCMOLT_MSG_FIELD_SET(&interface_obj, itu.onu_activation.key_exchange, BCMOLT_CONTROL_STATE_ENABLE);
+    BCMOLT_MSG_FIELD_SET(&interface_obj, itu.onu_activation.authentication, BCMOLT_CONTROL_STATE_ENABLE);
+    BCMOLT_MSG_FIELD_SET(&interface_obj, itu.onu_activation.fail_due_to_authentication_failure, BCMOLT_CONTROL_STATE_ENABLE);
+
     BCMOLT_FIELD_SET(&pon_interface_set_state.data, pon_interface_set_pon_interface_state_data,
         operation, BCMOLT_INTERFACE_OPERATION_ACTIVE_WORKING);
 
@@ -1108,7 +1113,7 @@
 }
 
 Status ActivateOnu_(uint32_t intf_id, uint32_t onu_id,
-    const char *vendor_id, const char *vendor_specific, uint32_t pir) {
+    const char *vendor_id, const char *vendor_specific, uint32_t pir, bool omcc_encryption_mode) {
     bcmos_errno err = BCM_ERR_OK;
     bcmolt_onu_cfg onu_cfg;
     bcmolt_onu_key onu_key;
@@ -1177,7 +1182,24 @@
             return bcm_to_grpc_err(err, "Failed to configure ONU");
         }
     }
-
+    
+    if (omcc_encryption_mode == true) {
+        // set the encryption mode for omci port id
+        bcmolt_itupon_gem_cfg gem_cfg;
+        bcmolt_itupon_gem_key key = {};
+        bcmolt_gem_port_configuration configuration = {};
+        key.pon_ni = intf_id;
+        key.gem_port_id = onu_id;
+        bcmolt_control_state encryption_mode;
+        encryption_mode = BCMOLT_CONTROL_STATE_ENABLE;
+        BCMOLT_CFG_INIT(&gem_cfg, itupon_gem, key);
+        BCMOLT_FIELD_SET(&gem_cfg.data, itupon_gem_cfg_data, encryption_mode, encryption_mode);
+        err = bcmolt_cfg_set(dev_id, &gem_cfg.hdr);
+        if(err != BCM_ERR_OK) {
+                OPENOLT_LOG(ERROR, openolt_log_id, "failed to confiure omci gem_port encryption mode = %d\n", onu_id);
+                return bcm_to_grpc_err(err, "Access_Control set ITU PON OMCI Gem port failed");
+        }
+    }
     // Now that the ONU is configured, move the ONU to ACTIVE state
     memset(&onu_cfg, 0, sizeof(bcmolt_onu_cfg));
     BCMOLT_CFG_INIT(&onu_cfg, onu, onu_key);