VOL-1236: BAL upgrade for 2.6 and support for Traffic Shaping

Change-Id: If12f914e5981b2eabfca90a70dbb0f0750a76c4b
diff --git a/src/bal_subscriber_terminal_hdlr.c b/src/bal_subscriber_terminal_hdlr.c
index 91fcfac..42dccc2 100755
--- a/src/bal_subscriber_terminal_hdlr.c
+++ b/src/bal_subscriber_terminal_hdlr.c
@@ -49,18 +49,11 @@
     {
        bcmbal_serial_number serial_num = {} ;
        bcmbal_serial_number zero_serial_num =  {};
-       bcmbal_registration_id registration_id =  {};
        int has_serial_num = BCMOS_FALSE;
-       int has_registration_id = BCMOS_FALSE;
        char two_digit_buf[3];
 
        two_digit_buf[2] = 0;
 
-       ASFVOLT_LOG(ASFVOLT_DEBUG, "Before encoding,Vendor Id(%s),Vendor Specific Id(%s), Registration Id(%s)",
-		       onu_cfg->data->serial_number->vendor_id,
-		       onu_cfg->data->serial_number->vendor_specific,
-		       onu_cfg->data->registration_id);
-
        char vendor_id[20];
        memset(&vendor_id, 0, 20);
        sprintf(vendor_id,"%2X%2X%2X%2X",
@@ -69,11 +62,6 @@
 		       onu_cfg->data->serial_number->vendor_id[2],
 		       onu_cfg->data->serial_number->vendor_id[3]);
        onu_cfg->data->serial_number->vendor_id = vendor_id;
-       ASFVOLT_LOG(ASFVOLT_DEBUG, "After encoding,Vendor Id(%s),Vendor Specific Id(%s), Registration Id(%s)",
-		       onu_cfg->data->serial_number->vendor_id,
-		       onu_cfg->data->serial_number->vendor_specific,
-		       onu_cfg->data->registration_id);
-
        /* Vendor Id is totally 16 byte string and should be
           send in hexadecimmal format */
        for(idx=0; idx<2*sizeof(serial_num.vendor_id); idx+=2)
@@ -91,17 +79,6 @@
        ASFVOLT_CFG_PROP_SET(sub_term_obj, subscriber_terminal, serial_number,
                   has_serial_num, serial_num);
 
-       /* Registration ID is a string and should be given in hexadecimal format */
-       for(idx=0; idx<strlen(onu_cfg->data->registration_id) && idx<2*sizeof(registration_id.arr); idx+=2)
-       {
-          memcpy(two_digit_buf, &onu_cfg->data->registration_id[idx], 2);
-          registration_id.arr[idx>>1] = strtol(two_digit_buf, NULL, 16);
-          has_registration_id = BCMOS_TRUE;
-       }
-
-       ASFVOLT_CFG_PROP_SET(sub_term_obj, subscriber_terminal, registration_id,
-                  has_registration_id, registration_id);
-
        if (!memcmp(&serial_num, &zero_serial_num, sizeof(serial_num)))
           skip_onu = BCMOS_TRUE;
     }
@@ -111,14 +88,6 @@
 
     if (!skip_onu)
     {
-
-       /*ASFVOLT_LOG(ASFVOLT_DEBUG, "Onu's(%d) Serial number %02x%02x%02x%2x%02x%02x%02x%02x",
-             onu_cfg->key->sub_term_id,
-             sub_term_obj.data->serial_number.vendor_id[0], sub_term_obj.data->serial_number.vendor_id[1],
-             sub_term_obj.data->serial_number.vendor_id[2], sub_term_obj.data->serial_number.vendor_id[3],
-             sub_term_obj.data->serial_number.vendor_specific[0], sub_term_obj.data->serial_number.vendor_specific[1],
-             sub_term_obj.data->serial_number.vendor_specific[2], sub_term_obj.data->serial_number.vendor_specific[3]);*/
-
        err = bcmbal_cfg_set(DEFAULT_ATERM_ID, &(sub_term_obj.hdr));
 
        ASFVOLT_LOG(ASFVOLT_DEBUG,
@@ -255,8 +224,7 @@
  * Function    : bal_subscriber_terminal_cfg_get                    *
  * Description : Get the subscriber terminal(ONU) configuration     *
  ********************************************************************/
-uint32_t bal_subscriber_terminal_cfg_get(BalSubscriberTerminalKey *terminal_key,
-                                         BalSubscriberTerminalCfg *onu_cfg)
+uint32_t bal_subscriber_terminal_cfg_get(BalSubscriberTerminalCfg *onu_cfg)
 {
 
     bcmos_errno err = BCM_ERR_OK;
@@ -268,20 +236,8 @@
                     "Processing subscriber terminal cfg get: %d",
                      onu_cfg->key->sub_term_id);
 
-    if (terminal_key->has_sub_term_id &&
-                    terminal_key->has_intf_id)
-    {
-        key.sub_term_id = terminal_key->sub_term_id ;
-        key.intf_id = terminal_key->intf_id ;
-    }
-    else
-    {
-       ASFVOLT_LOG(ASFVOLT_ERROR,
-                   "Invalid Key to handle subscriber terminal Cfg Get subscriber_terminal_id(%d), Interface ID(%d)",
-                   key.sub_term_id, key.intf_id);
-
-        return BAL_ERRNO__BAL_ERR_PARM;
-    }
+    key.sub_term_id = onu_cfg->key->sub_term_id ;
+    key.intf_id = onu_cfg->key->intf_id ;
 
     /* init the API struct */
     BCMBAL_CFG_INIT(&cfg, subscriber_terminal, key);
@@ -312,7 +268,73 @@
         return BAL_ERRNO__BAL_ERR_INTERNAL;
     }
 
-    ASFVOLT_LOG(ASFVOLT_INFO,
-                  "To-Do. Send subscriber terminal details to Adapter");
+    ASFVOLT_LOG(ASFVOLT_INFO, "Get Subscriber cfg sent to OLT for Subscriber Id(%d) on Interface(%d)",
+                               key.sub_term_id, key.intf_id);
+	
+    onu_cfg->key->has_sub_term_id = BAL_ELEMENT_PRES;
+    onu_cfg->key->sub_term_id = cfg.key.sub_term_id;
+
+    onu_cfg->key->has_intf_id = BAL_ELEMENT_PRES;
+    onu_cfg->key->intf_id = cfg.key.intf_id;
+
+    onu_cfg->data->has_admin_state = BAL_ELEMENT_PRES;
+    onu_cfg->data->admin_state = cfg.data.admin_state;
+
+    onu_cfg->data->has_oper_status = BAL_ELEMENT_PRES;
+    onu_cfg->data->oper_status = cfg.data.oper_status;
+
+    onu_cfg->data->has_svc_port_id = BAL_ELEMENT_PRES;
+    onu_cfg->data->svc_port_id = cfg.data.svc_port_id;
+
+    onu_cfg->data->has_ds_tm = BAL_ELEMENT_PRES;
+    onu_cfg->data->ds_tm = cfg.data.ds_tm;
+
+    onu_cfg->data->has_us_tm = BAL_ELEMENT_PRES;
+    onu_cfg->data->us_tm = cfg.data.us_tm;
+
+    onu_cfg->data->has_sub_term_rate = BAL_ELEMENT_PRES;
+    onu_cfg->data->sub_term_rate = cfg.data.sub_term_rate;
+
+    char *password = malloc(sizeof(char)*MAX_CHAR_LENGTH*2);
+    memset(password, 0, MAX_CHAR_LENGTH*2);
+    strcpy(password,(const char *)cfg.data.password.arr);
+    onu_cfg->data->password = password;
+
+    char *registration_id = malloc(sizeof(char)*MAX_REGID_LENGTH);
+    memset(registration_id, 0, MAX_REGID_LENGTH);
+    strcpy(registration_id,(const char *)cfg.data.registration_id.arr);
+    onu_cfg->data->registration_id =  registration_id;
+
+    BalSerialNumber *serialNum;
+    serialNum = malloc(sizeof(BalSerialNumber));
+    memset(serialNum, 0, sizeof(BalSerialNumber));
+    bal_serial_number__init(serialNum);
+    onu_cfg->data->serial_number = serialNum;
+
+    char *vendor_id = malloc(sizeof(char)*MAX_CHAR_LENGTH);
+    memset(vendor_id, 0, MAX_CHAR_LENGTH);
+    sprintf(vendor_id,"%c%c%c%c",
+        cfg.data.serial_number.vendor_id[0],
+	cfg.data.serial_number.vendor_id[1],
+	cfg.data.serial_number.vendor_id[2],
+	cfg.data.serial_number.vendor_id[3]);
+
+    onu_cfg->data->serial_number->vendor_id = vendor_id;
+
+    char *vendor_specific = malloc(sizeof(char)*MAX_CHAR_LENGTH);
+    memset(vendor_specific, 0, MAX_CHAR_LENGTH);
+    sprintf(vendor_specific,"%1X%1X%1X%1X%1X%1X%1X%1X",
+        cfg.data.serial_number.vendor_specific[0]>>4 & 0x0f,
+	cfg.data.serial_number.vendor_specific[0] & 0x0f,
+	cfg.data.serial_number.vendor_specific[1]>>4 & 0x0f,
+	cfg.data.serial_number.vendor_specific[1] & 0x0f,
+	cfg.data.serial_number.vendor_specific[2]>>4 & 0x0f,
+	cfg.data.serial_number.vendor_specific[2] & 0x0f,
+	cfg.data.serial_number.vendor_specific[3]>>4 & 0x0f,
+	cfg.data.serial_number.vendor_specific[3] & 0x0f);
+    onu_cfg->data->serial_number->vendor_specific = vendor_specific;
+
+    free(list_mem);
+
     return BAL_ERRNO__BAL_ERR_OK;
 }