diff --git a/recipes-rdkb/sysint-broadband/files/DCMscript.sh b/recipes-rdkb/sysint-broadband/files/DCMscript.sh
new file mode 100755
index 0000000..6dfc564
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/DCMscript.sh
@@ -0,0 +1,577 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+#
+
+. /etc/include.properties
+. /etc/device.properties
+source /etc/log_timestamp.sh
+source /lib/rdk/getpartnerid.sh
+source /lib/rdk/getaccountid.sh
+# Enable override only for non prod builds
+if [ "$BUILD_TYPE" != "prod" ] && [ -f $PERSISTENT_PATH/dcm.properties ]; then
+      . $PERSISTENT_PATH/dcm.properties
+else
+      . /etc/dcm.properties
+fi
+
+if [ -f /lib/rdk/utils.sh ]; then 
+   . /lib/rdk/utils.sh
+fi
+
+if [ -f /etc/mount-utils/getConfigFile.sh ];then
+     . /etc/mount-utils/getConfigFile.sh
+fi
+SIGN_FILE="/tmp/.signedRequest_$$_`date +'%s'`"
+DIRECT_BLOCK_TIME=86400
+DIRECT_BLOCK_FILENAME="/tmp/.lastdirectfail_dcm"
+TFTP_SERVER_IP=/tmp/tftpip.txt
+export PATH=$PATH:/usr/bin:/bin:/usr/local/bin:/sbin:/usr/local/lighttpd/sbin:/usr/local/sbin
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/lib
+
+if [ -z $LOG_PATH ]; then
+    LOG_PATH="/rdklogs/logs"
+fi
+
+if [ -z $PERSISTENT_PATH ]; then
+    PERSISTENT_PATH="/nvram"
+fi
+
+TELEMETRY_PATH="$PERSISTENT_PATH/.telemetry"
+DCMFLAG="/tmp/.DCMSettingsFlag"
+DCM_LOG_FILE="$LOG_PATH/dcmscript.log"
+TELEMETRY_INOTIFY_FOLDER="/rdklogs/logs/"
+TELEMETRY_INOTIFY_EVENT="$TELEMETRY_INOTIFY_FOLDER/eventType.cmd"
+DCMRESPONSE="$PERSISTENT_PATH/DCMresponse.txt"
+TELEMETRY_TEMP_RESEND_FILE="/rdklogs/logs/.temp_resend.txt"
+
+PEER_COMM_ID="/tmp/elxrretyt.swr"
+
+TELEMETRY_PREVIOUS_LOG_COMPLETE="/tmp/.telemetry_previous_log_done"
+TELEMETRY_PREVIOUS_LOG="/tmp/.telemetry_previous_log"
+MAX_PREV_LOG_COMPLETE_WAIT=12
+
+IDLE_TIMEOUT=30
+
+# http header
+HTTP_HEADERS='Content-Type: application/json'
+## RETRY DELAY in secs
+RETRY_DELAY=60
+## RETRY COUNT
+RETRY_COUNT=3
+
+echo_t "Starting execution of DCMscript.sh"
+
+if [ $# -ne 5 ]; then
+    echo_t "Argument does not match"
+    echo 0 > $DCMFLAG
+    exit 1
+fi
+
+. $RDK_PATH/utils.sh
+
+echo "`/bin/timestamp` Starting execution of DCMscript.sh" >> $LOG_PATH/dcmscript.log
+#---------------------------------
+# Initialize Variables
+#---------------------------------
+# URL
+URL=$2
+tftp_server=$3
+reboot_flag=$4
+checkon_reboot=$5
+touch $TFTP_SERVER_IP
+echo_t "URL: "$URL
+echo_t "DCM_TFTP_SERVER: "$tftp_server >> $TFTP_SERVER_IP
+echo_t "BOOT_FLAG: "$reboot_flag
+echo_t "CHECK_ON_REBOOT: "$checkon_reboot
+rm -f $TELEMETRY_TEMP_RESEND_FILE
+
+conn_str="Direct"
+first_conn=useDirectRequest
+sec_conn=useCodebigRequest
+CodebigAvailable=0
+
+ 
+if [ -f "/tmp/DCMSettings.conf" ]
+then
+    Check_URL=`grep 'urn:settings:ConfigurationServiceURL' /tmp/DCMSettings.conf | cut -d '=' -f2 | head -n 1`
+    if [ -n "$Check_URL" ]
+    then
+        URL=`grep 'urn:settings:ConfigurationServiceURL' /tmp/DCMSettings.conf | cut -d '=' -f2 | head -n 1`
+        #last_char=`echo $URL | sed -e 's/\(^.*\)\(.$\)/\2/'`
+        last_char=`echo $URL | awk '$0=$NF' FS=`
+        if [ "$last_char" != "?" ]
+        then
+            URL="$URL?"
+        fi
+    fi
+fi
+# File to save curl response 
+#FILENAME="$PERSISTENT_PATH/DCMresponse.txt"
+TELE_HTTP_CODE="$PERSISTENT_PATH/telemetry_http_code"
+# File to save http code
+HTTP_CODE="$PERSISTENT_PATH/http_code"
+rm -rf $HTTP_CODE
+# Cron job file name
+current_cron_file="$PERSISTENT_PATH/cron_file.txt"
+# Tftpboot Server Ip
+echo TFTP_SERVER: $tftp_server >> $LOG_PATH/dcmscript.log
+# Timeout value
+timeout=30
+default_IP=$DEFAULT_IP
+upload_protocol='TFTP'
+upload_httplink=$HTTP_UPLOAD_LINK
+
+#---------------------------------
+# Function declarations
+#---------------------------------
+
+## FW version from version.txt 
+getFWVersion()
+{
+    #cat /version.txt | grep ^imagename:PaceX1 | grep -v image
+    verStr=`cat /version.txt | grep ^imagename: | cut -d ":" -f 2`
+    echo $verStr
+}
+
+## Identifies whether it is a VBN or PROD build
+getBuildType()
+{
+   echo $BUILD_TYPE
+}
+
+## Get ECM mac address
+getECMMacAddress()
+{
+    address=`getECMMac`
+	mac=`echo $address | tr -d ' ' | tr -d '"'`
+	echo $mac
+}
+
+## Get Receiver Id
+getReceiverId()
+{
+    if [ -f "$PERSISTENT_PATH/www/whitebox/wbdevice.dat" ]
+    then
+        ReceiverId=`cat $PERSISTENT_PATH/www/whitebox/wbdevice.dat`
+        echo "$ReceiverId"
+    else
+        echo " "
+    fi
+}
+
+## Get Controller Id
+getControllerId()
+{
+    echo "2504"
+}
+
+## Get ChannelMap Id
+getChannelMapId()
+{
+    echo "2345"
+}
+
+## Get VOD Id
+getVODId()
+{
+    echo "15660"
+}
+
+IsDirectBlocked()
+{
+    ret=0
+    if [ -f $DIRECT_BLOCK_FILENAME ]; then
+        modtime=$(($(date +%s) - $(date +%s -r $DIRECT_BLOCK_FILENAME)))
+        if [ "$modtime" -le "$DIRECT_BLOCK_TIME" ]; then
+            echo "DCM: Last direct failed blocking is still valid, preventing direct" >>  $DCM_LOG_FILE
+            ret=1
+        else
+            echo "DCM: Last direct failed blocking has expired, removing $DIRECT_BLOCK_FILENAME, allowing direct" >> $DCM_LOG_FILE
+            rm -f $DIRECT_BLOCK_FILENAME
+            ret=0
+        fi
+    fi
+    return $ret
+}
+
+# Get the configuration of codebig settings
+get_Codebigconfig()
+{
+   # If GetServiceUrl not available, then only direct connection available and no fallback mechanism
+   if [ -f /usr/bin/GetServiceUrl ]; then
+      CodebigAvailable=1
+   fi
+
+   if [ "$CodebigAvailable" -eq "1" ]; then
+       CodeBigEnable=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.CodeBigFirst.Enable | grep true 2>/dev/null`
+   fi
+   if [ "$CodebigAvailable" -eq "1" ] && [ "x$CodeBigEnable" != "x" ] ; then
+      conn_str="Codebig"
+      first_conn=useCodebigRequest
+      sec_conn=useDirectRequest
+   fi
+
+   if [ "$CodebigAvailable" -eq 1 ]; then
+      echo_t "Xconf dcm : Using $conn_str connection as the Primary" >> $DCM_LOG_FILE
+   else
+      echo_t "Xconf dcm : Only $conn_str connection is available" >> $DCM_LOG_FILE
+   fi
+}
+
+# Direct connection Download function
+useDirectRequest()
+{
+    # Direct connection will not be tried if .lastdirectfail exists
+    IsDirectBlocked
+    if [ "$?" -eq "1" ]; then
+       return 1
+    fi
+   count=0
+   while [ "$count" -lt "$RETRY_COUNT" ] ; do    
+      echo_t " DCM connection type DIRECT"
+      CURL_CMD="curl -w '%{http_code}\n' --tlsv1.2 --interface $EROUTER_INTERFACE $addr_type --connect-timeout $timeout -m $timeout -o  \"$FILENAME\" '$HTTPS_URL$JSONSTR'"
+      echo_t "CURL_CMD: $CURL_CMD" >> $DCM_LOG_FILE
+      HTTP_CODE=`result= eval $CURL_CMD`
+      ret=$?
+
+      sleep 2
+      http_code=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' )
+      [ "x$http_code" != "x" ] || http_code=0
+      echo_t "ret = $ret http_code: $http_code" >> $DCM_LOG_FILE
+
+    # log security failure
+      case $ret in
+        35|51|53|54|58|59|60|64|66|77|80|82|83|90|91)
+           echo_t "DCM Direct Connection Failure Attempt:$count - ret:$ret http_code:$http_code" >> $DCM_LOG_FILE
+           ;;
+      esac
+      if [ $http_code -eq 200 ]; then
+           echo_t "Direct connection success - ret:$ret http_code:$http_code" >> $DCM_LOG_FILE
+           return 0
+      elif [ $http_code -eq 404 ]; then 
+           echo "`Timestamp` Direct connection Received HTTP $http_code Response from Xconf Server. Retry logic not needed" >> $DCM_LOG_FILE
+           bypass_conn=1
+           return 0  # Do not return 1, if retry for next conn type is not to be done
+      else 
+           if [ "$ret" -eq 0 ]; then
+               echo_t "DCM Direct Connection Failure Attempt:$count - ret:$ret http_code:$http_code" >> $DCM_LOG_FILE
+           fi 
+           rm -rf $DCMRESPONSE
+      fi
+      count=$((count + 1))
+      sleep $RETRY_DELAY
+    done
+    echo_t "DCM :Retries for Direct connection exceeded " >> $DCM_LOG_FILE
+    [ "$CodebigAvailable" -ne "1" ] || [ -f $DIRECT_BLOCK_FILENAME ] || touch $DIRECT_BLOCK_FILENAME
+    return 1
+}
+
+# Codebig connection Download function        
+useCodebigRequest()
+{
+   # Do not try Codebig if CodebigAvailable != 1 (GetServiceUrl not there)
+   if [ "$CodebigAvailable" -eq "0" ] ; then
+       echo "DCM : Only direct connection Available" >> $DCM_LOG_FILE
+       return 1
+   fi
+   count=0
+   while [ "$count" -lt "$RETRY_COUNT" ] ; do    
+      SIGN_CMD="GetServiceUrl 3 \"$JSONSTR\""
+      eval $SIGN_CMD > $SIGN_FILE
+      CB_SIGNED_REQUEST=`cat $SIGN_FILE`
+      rm -f $SIGN_FILE
+      CURL_CMD="curl -w '%{http_code}\n' --tlsv1.2 --interface $EROUTER_INTERFACE $addr_type --connect-timeout $timeout -m $timeout -o  \"$FILENAME\" \"$CB_SIGNED_REQUEST\""
+      echo_t " DCM connection type CODEBIG at `echo "$CURL_CMD" | sed -ne 's#.*\(https:.*\)?.*#\1#p'`" >> $DCM_LOG_FILE
+      echo_t "CURL_CMD: `echo "$CURL_CMD" | sed -ne 's#oauth_consumer_key=.*#<hidden>#p'`" >> $DCM_LOG_FILE
+      HTTP_CODE=`result= eval $CURL_CMD`
+      curlret=$?
+      http_code=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' )
+      [ "x$http_code" != "x" ] || http_code=0
+      echo_t "ret = $curlret http_code: $http_code" >> $DCM_LOG_FILE
+
+      # log security failure
+      case $curlret in
+          35|51|53|54|58|59|60|64|66|77|80|82|83|90|91)
+             echo_t "DCM Codebig Connection Failure Attempt: $count - ret:$curlret http_code:$http_code" >> $DCM_LOG_FILE
+             ;;
+        esac
+       if [ "$http_code" -eq 200 ]; then
+           echo_t "Codebig connection success - ret:$curlret http_code:$http_code" >> $DCM_LOG_FILE
+           return 0
+       elif [ "$http_code" -eq 404 ]; then
+           echo_t "DCM Codebig connection Received HTTP $http_code Response from Xconf Server. Retry logic not needed" >> $DCM_LOG_FILE
+           bypass_conn=1
+           return 0  # Do not return 1, if retry for next conn type is not to be done
+       else 
+             if [ "$curlret" -eq 0 ]; then
+                echo_t "DCM Codebig Connection Failure Attempt:$count - ret:$curlret http_code:$http_code" >> $DCM_LOG_FILE
+             fi
+              rm -rf $DCMRESPONSE
+       fi
+       count=$((count + 1))
+       sleep $RETRY_DELAY
+    done
+    echo_t "Retries for Codebig connection exceeded " >> $DCM_LOG_FILE
+    return 1
+}
+
+sendHttpRequestToServer()
+{
+    resp=0
+    FILENAME=$1
+    URL=$2
+    echo "filename--args in sendHttpRequestToServer-------"$FILENAME
+    echo "url---args in sendHttpRequestToServer------"$URL
+
+    estbMacAddress=`ifconfig erouter0 | grep HWaddr | cut -c39-55`
+    JSONSTR=$estbMacAddress
+    CURL_CMD="curl -w "%{http_code}" '$URL?estbMacAddress=$JSONSTR&model=$MODEL_NAME'  -o $DCMRESPONSE >> /tmp/telehttpcode.txt "
+    echo "------CURL_CMD:"$CURL_CMD
+
+    # Execute curl command
+    result= eval $CURL_CMD > $TELE_HTTP_CODE
+    #echo "Processing $FILENAME"
+    sleep $timeout
+    echo "sleep for :------------------"$timeout
+    # Get the http_code
+    http_code=$(awk -F\" '{print $1}' /tmp/telehttpcode.txt)
+    #start of pokuru
+                                                                                                         
+if [ "$http_code" != "200" ]; then                                                               
+    #Added for retry - START                                                                          
+    rm -rf /tmp/telehttpcode.txt             
+    rm -rf $DCMRESPONSE                                                          
+                                                                                                      
+    xconfRetryCount=0                                                                                 
+    while [ $xconfRetryCount -lt 2 ]
+    do                                                                                                
+        echo "Trying to Retry connection with XCONF server..."
+                                                                                                              
+        CURL_CMD="curl -w "%{http_code}" '$URL?estbMacAddress=$JSONSTR&model=$MODEL_NAME'  -o $DCMRESPONSE >> /tmp/telehttpcode.txt "
+                                                                                                              
+        result= eval $CURL_CMD                                                                                
+                                                                                                              
+        http_code_retry=$(awk -F\" '{print $1}' /tmp/telehttpcode.txt)                                  
+                                                                                                              
+        if [ "$http_code_retry" != "200" ]; then                                                         
+            echo "Error in establishing communication with xconf server."                                     
+                        if [ $xconfRetryCount -ne 0 ]; then sleep 30; fi                                      
+                        rm -f /tmp/telehttpcode.txt                                                          
+                        rm -rf $DCMRESPONSE
+                                                                      
+        else                                                                                               
+                        echo "After retries...No error in curl command and curl http code is:"$http_code_retry
+                        resp=0
+                        break                                                                                      
+        fi                                                                                                 
+                                                                                                                   
+        xconfRetryCount=`expr $xconfRetryCount + 1`                                                                
+    done
+    echo "xconf retry count is:"$xconfRetryCount
+    if [ $xconfRetryCount -eq 2 ]; then
+         echo "No xconf comm ,exiting script"
+         startdcmEnd=`ps -ef | grep -i "StartDCM.sh" | head -n 1`
+         kill -9 $startdcmEnd
+         exit 0
+    fi
+    #Added for retry - END                                                                                         
+    #echo "Error from cloud exiting,check in upcoming reboot-------------"                                         
+    #exit 0                                                                                                        
+else                                                                                                               
+      echo "No error in curl command and curl http code is:"$http_code                                        
+fi     
+    #end of pokuru
+    echo "----------ret http_code:"$http_code
+    echo "----------ret http_code_retry:"$http_code_retry
+
+    if [ $http_code -ne 200 ] ; then
+        if [ $http_code_retry -ne 200 ]; then
+           echo "curl HTTP request failed http_code :"$http_code
+           echo "curl HTTP request failed http_code_retry :"$http_code_retry
+           #pokuru rm -rf /tmp/DCMSettings.conf
+	    resp=1
+        fi 
+    else
+        echo "curl HTTP request success. Processing response.."
+        resp=0
+    fi
+    echo "----------res:"$resp
+    return $resp
+}
+
+dropbearRecovery()
+{
+   dropbearPid=`ps | grep -i dropbear | grep "$ARM_INTERFACE_IP" | grep -v grep`
+   if [ -z "$dropbearPid" ]; then
+       echo "Dropbear instance is missing ... Recovering dropbear !!! " >> $DCM_LOG_FILE
+       DROPBEAR_PARAMS_1="/tmp/.dropbear/dropcfg1$$"
+       DROPBEAR_PARAMS_2="/tmp/.dropbear/dropcfg2$$"
+       if [ ! -d '/tmp/.dropbear' ]; then
+           echo "wan_ssh.sh: need to create dropbear dir !!! " >> $DCM_LOG_FILE
+           mkdir -p /tmp/.dropbear
+       fi
+       echo "wan_ssh.sh: need to create dropbear files !!! " >> $DCM_LOG_FILE
+       getConfigFile $DROPBEAR_PARAMS_1
+       getConfigFile $DROPBEAR_PARAMS_2
+       dropbear -r $DROPBEAR_PARAMS_1 -r $DROPBEAR_PARAMS_2 -E -s -p $ARM_INTERFACE_IP:22 &
+       sleep 2
+   fi
+   rm -rf /tmp/.dropbear/*
+}
+
+# Safe wait for IP acquisition
+loop=1
+counter=0
+while [ $loop -eq 1 ]
+do
+    estbIp=`ifconfig erouter0 | grep -i inet | cut -d ":" -f2 | cut -d " " -f1`
+    if [ "X$estbIp" == "X" ]; then
+         echo_t "waiting for IP"
+         sleep 2
+         let counter++
+    else
+         echo "got IP in erouter0-------------------"
+         loop=0
+    fi
+done
+
+    ret=1
+    if [ "$estbIp" == "$default_IP" ] ; then
+	  ret=0
+    fi
+    if [ $checkon_reboot -eq 1 ]; then
+        echo "call sendHttpRequestToServer-------------------"
+	sendHttpRequestToServer $DCMRESPONSE $URL
+	ret=$?
+	echo_t "sendHttpRequestToServer returned "$ret
+    else
+	ret=0
+	echo_t "sendHttpRequestToServer has not executed since the value of 'checkon_reboot' is $checkon_reboot" >> $DCM_LOG_FILE
+    fi                
+
+        echo "after sendHttpRequestToServer-----sleep for 5 sec-------------"
+    sleep 5
+
+
+    if [ $ret -ne 0 ]; then
+        echo_t "Processing response failed." >> $DCM_LOG_FILE
+        rm -rf $FILENAME 
+        echo_t "count = $count. Sleeping $RETRY_DELAY seconds ..." >> $DCM_LOG_FILE
+        exit 1
+    fi
+
+    if [ "x$DCA_MULTI_CORE_SUPPORTED" == "xyes" ]; then
+            dropbearRecovery
+
+            isPeriodicFWCheckEnabled=`syscfg get PeriodicFWCheck_Enable`
+            if [ "$isPeriodicFirmwareEnabled" == "true" ]; then
+               echo "XCONF SCRIPT : Calling XCONF Client firmwareSched for the updated time"
+               sh /etc/firmwareSched.sh &
+            fi
+
+            isAxb6Device="no"
+            if [ "$MODEL_NUM" == "TG3482G" ]; then
+               isNvram2Mounted=`grep nvram2 /proc/mounts`
+               if [ "$isNvram2Mounted" == "" -a -d "/nvram/logs" ]; then
+                  isAxb6Device="yes"
+               fi
+            fi
+
+            if [ "x$isAxb6Device" == "xno" ]; then
+               # wait for telemetry previous log to be copied to atom
+               loop=1
+               while [ $loop -eq 1 ]
+               do
+                   if [ ! -f $TELEMETRY_PREVIOUS_LOG ]; then
+                        echo_t "waiting for previous log file" >> $DCM_LOG_FILE
+                        sleep 10
+                   else
+                        echo_t "scp previous logs from arm to atom done, so breaking loop" >> $DCM_LOG_FILE
+                        loop=0
+                   fi
+               done
+
+               ### Trigger an inotify event on ATOM 
+               echo "Telemetry run for previous log trigger to atom" >> $DCM_LOG_FILE
+               GetConfigFile $PEER_COMM_ID
+               ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ATOM_INTERFACE_IP "/bin/echo 'xconf_update' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
+               rm -f $PEER_COMM_ID
+
+            fi
+
+            # wait for telemetry previous log to be completed upto 2 mins . Avoid indefenite loops 
+            loop=1
+            count=0
+            while [ "$loop" = "1" ]
+            do
+                if [ ! -f $TELEMETRY_PREVIOUS_LOG_COMPLETE ]; then
+                     echo_t "waiting for previous log done file" >> $DCM_LOG_FILE
+                     sleep 10
+                     if [ $count -ge $MAX_PREV_LOG_COMPLETE_WAIT ]; then 
+                         echo_t "Max wait for previous log done file reached. Proceeding with new config from xconf " >> $DCM_LOG_FILE
+                         loop=0
+                     fi
+                else
+                   echo_t "Telemetry run for previous log done, so breaking loop" >> $DCM_LOG_FILE
+                   loop=0
+                fi
+                count=`expr $count + 1`
+            done
+
+            GetConfigFile $PEER_COMM_ID
+            scp -i $PEER_COMM_ID $DCMRESPONSE root@$ATOM_INTERFACE_IP:$PERSISTENT_PATH > /dev/null 2>&1
+            if [ $? -ne 0 ]; then
+                scp -i $PEER_COMM_ID $DCMRESPONSE root@$ATOM_INTERFACE_IP:$PERSISTENT_PATH > /dev/null 2>&1
+            fi
+            echo "Signal atom to pick the XCONF config data $DCMRESPONSE and schedule telemetry !!! " >> $DCM_LOG_FILE
+            ## Trigger an inotify event on ATOM 
+            ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ATOM_INTERFACE_IP "/bin/echo 'xconf_update' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
+            rm -f $PEER_COMM_ID
+        else
+             echo "opensource platforms----------------------------"
+            
+			isPeriodicFWCheckEnabled=`syscfg get PeriodicFWCheck_Enable`
+  		    if [ "$isPeriodicFirmwareEnabled" == "true" ]; then
+			   echo "XCONF SCRIPT : Calling XCONF Client firmwareSched for the updated time"
+			   sh /etc/firmwareSched.sh &
+			fi
+             
+            # wait for telemetry previous log to be completed
+            loop=1
+            count=0
+            while [ "$loop" = "1" ]
+            do
+                 echo "TELEMETRY_PREVIOUS_LOG_COMPLETE--------------"$TELEMETRY_PREVIOUS_LOG_COMPLETE
+                if [ ! -f $TELEMETRY_PREVIOUS_LOG_COMPLETE ]; then
+                     echo_t "waiting for previous log done file"
+                     sleep 10
+                     if [ $count -ge $MAX_PREV_LOG_COMPLETE_WAIT ]; then 
+                         echo_t "Max wait for previous log done file reached. Proceeding with new config from xconf " 
+                         loop=0
+                     fi
+                else
+                   echo_t "Telemetry run for previous log done, so breaking loop"
+                   loop=0
+                fi
+                count=`expr $count + 1`
+            done
+             echo "before calling dca_utility  start of TELEMETRY LOGIC-----------------"
+            sh /lib/rdk/dca_utility.sh 1 &
+        fi
diff --git a/recipes-rdkb/sysint-broadband/files/StartDCM.sh b/recipes-rdkb/sysint-broadband/files/StartDCM.sh
new file mode 100755
index 0000000..70655b6
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/StartDCM.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+#
+##################################################################
+## Script to start Device Configuration Management script
+## Author: Ajaykumar/Shakeel/Suraj
+##################################################################
+. /etc/include.properties
+
+                                                                         
+if [ -f "$RDK_PATH/DCMscript.sh" ]
+then
+    if [ -f "$TELEMETRY_JSON_RESPONSE" ]; then
+        echo "remove previous json resp"
+        rm -f $TELEMETRY_JSON_RESPONSE
+        rm -f $PERSISTENT_PATH/*TELE*
+    fi
+    sh /lib/rdk/DCMscript.sh $DCM_LOG_SERVER $DCM_LOG_SERVER_URL $LOG_SERVER 0 1  >> /rdklogs/logs/telemetry.log &
+    sleep 10                                                                                                      
+    fileRetryCount=0                                                                                              
+    while [ $fileRetryCount -ne 120 ]
+    do                                                                                                            
+       echo "Trying to check if rtl_json files exists ..."                                                        
+       if [ -f "/nvram/rtl_json.txt" ]; then                                                                      
+         echo "files exists !!!!..."                                                                              
+         #sh $RDK_PATH/DCMscript-log.sh $DCM_LOG_SERVER $DCM_LOG_SERVER_URL $LOG_SERVER 0 1  >> /rdklogs/logs/logupload.log &
+         sleep 5
+         proUpdel=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c`
+         echo "number of proUPdel:"$proUpdel
+         #proUpdel=$((proUpdel - 1))
+         uploadProto=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$proUpdel`
+         echo "Upload protocol is:"$uploadProto
+         if [ "$uploadProto" != "TFTP" ]; then
+           HTTPLOGUPLOADURL=`cat /tmp/DCMSettings.conf | grep -i "urn:settings:LogUploadSettings:RepositoryURL" | cut -d "=" -f2`
+           if [ "$HTTPLOGUPLOADURL" == "" ]; then
+              echo "No HTTP URL configured in xconf,going with internal one !!"
+              HTTPLOGUPLOADURL=$DCM_LA_SERVER_URL
+           fi
+           echo "HTTPURL:"$HTTPLOGUPLOADURL
+           sh $RDK_PATH/uploadSTBLogs.sh $HTTPLOGUPLOADURL 1 1 1 0 0 &
+           break
+         else
+           delimnr=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | tr -dc ':' |wc -c`
+           echo "number of deli:"$delimnr
+           delimnr=$((delimnr - 1))
+           TFTPIP=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d ":" -f$delimnr | cut -d '"' -f 2`
+           echo "TFTPIP:"$TFTPIP
+           sleep 5
+           sh $RDK_PATH/uploadSTBLogs.sh $TFTPIP 1 1 1 0 0 &
+           break
+         fi
+       else
+         echo "still file is not there sleep for 5 sec"$fileRetryCount
+         sleep 5
+       fi
+       fileRetryCount=`expr $fileRetryCount + 1`
+    done
+else
+    echo "$RDK_PATH/DCMscript.sh file not found."
+fi
diff --git a/recipes-rdkb/sysint-broadband/files/TurrisFwUpgrade.sh b/recipes-rdkb/sysint-broadband/files/TurrisFwUpgrade.sh
new file mode 100755
index 0000000..e24e244
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/TurrisFwUpgrade.sh
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+if [ $1 ] ; then
+  echo "Usage '/lib/rdk/FwUgrade.sh'"
+  echo "Note: New images should be downloaded in /tmp directory"
+  exit 1
+fi
+
+check ()
+{
+  if [ $? != 0 ]; then
+    echo $*
+    exit 1
+  fi
+}
+
+ls /tmp/zImage* >/dev/null
+check "No new image present in /tmp directory"
+
+BootPartition="/dev/mmcblk0p1"
+NewTurrisModel=1
+
+ActiveRootPartition=`mount | grep "/" -w | cut -d' ' -f1`
+if [ $ActiveRootPartition == "/dev/mmcblk0p2" ]; then
+  TargetRootPartition="/dev/mmcblk0p3"
+elif [ $ActiveRootPartition == "/dev/mmcblk0p3" ]; then
+  TargetRootPartition="/dev/mmcblk0p2"
+elif [ $ActiveRootPartition == "/dev/mmcblk0p5" ]; then
+  TargetRootPartition="/dev/mmcblk0p7"
+  BootPartition="/dev/mmcblk0p3"
+  NewTurrisModel=0
+else ##if $ActiveRootPartition is "/dev/mmcblk0p7"
+  TargetRootPartition="/dev/mmcblk0p5"
+  BootPartition="/dev/mmcblk0p3"
+  NewTurrisMode=0
+fi
+echo "ActiveRootPartition: $ActiveRootPartition"
+echo "TargetRootPartition: $TargetRootPartition"
+echo "BootPartition: $BootPartition"
+
+umount /mnt 2>/dev/null
+echo y | mkfs.ext2 $TargetRootPartition
+check "Error in formatting $TargetRootPartition"
+
+mount $TargetRootPartition /mnt
+check "Error in mounting $TargetRootPartition"
+
+tar -xzf /tmp/*.tar.gz -C /mnt
+check "Error in unpacking new rootfs"
+
+umount /mnt
+check "Error in unmounting"
+echo "New rootfs is loaded in $TargetRootPartition"
+
+mount $BootPartition /mnt/
+check "Error in mounting $BootPartition"
+
+mv /mnt/zImage /zImage_old
+cp /tmp/zImage* /mnt/zImage
+if [ $? != 0 ]; then
+echo "Error in copying zImage. Falling back."
+mv /zImage_old /mnt/zImage
+exit 1
+fi
+
+if [ $NewTurrisModel -eq 1 ]; then
+  if [ $TargetRootPartition == "/dev/mmcblk0p2" ]; then
+    cp /boot-main.scr /mnt/boot.scr
+  else
+    cp /boot-alt.scr /mnt/boot.scr
+  fi
+else
+  fw_setenv yocto_bootargs earlyprintk console=ttyS0,115200 root=$TargetRootPartition rootfstype=ext2 rw rootwait
+fi
diff --git a/recipes-rdkb/sysint-broadband/files/commonUtils.sh b/recipes-rdkb/sysint-broadband/files/commonUtils.sh
new file mode 100755
index 0000000..86c2138
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/commonUtils.sh
@@ -0,0 +1,107 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+#
+. /etc/include.properties
+. /etc/device.properties
+
+REBOOTLOG="$LOG_PATH/ocapri_log.txt"
+export PATH=$PATH:/sbin:/usr/sbin
+CORE_LOG="$LOG_PATH/core_log.txt"
+
+#This is need to set core path for yocto builds
+if [ -f /etc/os-release ]; then
+	export CORE_PATH="/var/lib/systemd/coredump/"
+fi
+
+Timestamp()
+{
+    date +"%Y-%m-%d %T"
+}
+
+resetRebootFlag()
+{
+    message=$1
+    echo `Timestamp` 'Rebooting the box'>>$REBOOTLOG;
+    echo 0 > /opt/.rebootFlag
+    echo `/bin/timestamp` ------------ $message ----------------- >> $REBOOTLOG
+}  
+
+# Return system uptime in seconds
+Uptime()
+{       
+    cat /proc/uptime | awk '{ split($1,a,".");  print a[1]; }'
+}
+
+# get eSTB IP address
+getIPAddress()
+{
+    if [ -f /tmp/estb_ipv6 ]; then
+        ifconfig -a $DEFAULT_ESTB_INTERFACE | grep inet6 | tr -s " " | grep -v Link | cut -d " " -f4 | cut -d "/" -f1 | head -n1
+    else
+        ifconfig -a $ESTB_INTERFACE | grep inet | grep -v inet6 | tr -s " " | cut -d ":" -f2 | cut -d " " -f1 | head -n1
+    fi
+
+}
+
+## get eSTB mac address 
+getMacAddress()
+{
+    ifconfig -a $ESTB_INTERFACE | grep $ESTB_INTERFACE | tr -s ' ' | cut -d ' ' -f5
+}
+
+getMacAddressOnly()
+{
+    ifconfig -a $ESTB_INTERFACE | grep $ESTB_INTERFACE | tr -s ' ' | cut -d ' ' -f5 | sed 's/://g'
+}
+
+# argument is maximum time to wait in seconds
+waitForDumpCompletion()
+{
+    waitTime=$1
+    while [[ `dumpInProcess` == 'true' ]];
+    do
+        echo "Waiting for core dump completion." >> $CORE_LOG
+        count=`expr $count + 1`
+        sleep 1
+        if [ $count -gt $waitTime ]; then
+            echo "Core dump creation is taking more time than expected. Returning." >> $CORE_LOG
+            return
+        fi
+    done
+}
+
+dumpInProcess()
+{
+    if [[ -n "`ls $CORE_PATH/*.gz.tmp 2>/dev/null`" ]]; then
+        echo 'true'
+    else
+        echo 'false'
+    fi
+}
+
+haveCoreToUpload()
+{
+    if [[ -n "`ls $CORE_PATH/*.gz.tmp 2>/dev/null`" ]] || [[ -n "`ls $CORE_PATH/*.gz 2>/dev/null`" ]]; then
+        echo 'true'
+    else
+        echo 'false'
+    fi
+}
+
diff --git a/recipes-rdkb/sysint-broadband/files/dcaSplunkUpload.sh b/recipes-rdkb/sysint-broadband/files/dcaSplunkUpload.sh
new file mode 100755
index 0000000..246a861
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/dcaSplunkUpload.sh
@@ -0,0 +1,546 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2016 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+
+
+####
+## This script will be invoked upon receiving events from ATOM when processed telemetry dat is available for upload
+## This cript is expected to pull the 
+####
+
+. /etc/include.properties
+. /etc/device.properties
+
+if [ -f /lib/rdk/utils.sh  ]; then
+   . /lib/rdk/utils.sh
+fi
+source /etc/log_timestamp.sh
+TELEMETRY_PATH="$PERSISTENT_PATH/.telemetry"
+TELEMETRY_RESEND_FILE="$PERSISTENT_PATH/.resend.txt"
+TELEMETRY_TEMP_RESEND_FILE="$PERSISTENT_PATH/.temp_resend.txt"
+
+TELEMETRY_PROFILE_DEFAULT_PATH="/tmp/DCMSettings.conf"
+TELEMETRY_PROFILE_RESEND_PATH="$PERSISTENT_PATH/.DCMSettings.conf"
+TELEMETRY_TFTP_UPLOAD_JSON_FILE="$PERSISTENT_PATH/tftp_json.txt"
+
+RTL_LOG_FILE="$LOG_PATH/dcmscript.log"
+
+HTTP_FILENAME="$TELEMETRY_PATH/dca_httpresult.txt"
+
+DCMRESPONSE="$PERSISTENT_PATH/DCMresponse.txt"
+
+PEER_COMM_ID="/tmp/elxrretyt.swr"
+
+#pokuru if [ ! -f /usr/bin/GetConfigFile ];then
+    #pokuru echo "Error: GetConfigFile Not Found"
+    #pokuru exit 127
+#pokuru fi
+
+SIGN_FILE="/tmp/.signedRequest_$$_`date +'%s'`"
+DIRECT_BLOCK_TIME=86400
+DIRECT_BLOCK_FILENAME="/tmp/.lastdirectfail_dca"
+
+SLEEP_TIME_FILE="/tmp/.rtl_sleep_time.txt"
+#MAX_LIMIT_RESEND=2
+# Max backlog queue set to 5, after which the resend file will discard subsequent entries
+MAX_CONN_QUEUE=5
+DIRECT_RETRY_COUNT=2
+
+ignoreResendList="false"
+
+# exit if an instance is already running
+if [ ! -f /tmp/.dca-splunk.upload ];then
+    # store the PID
+    echo $$ > /tmp/.dca-splunk.upload
+else
+    pid=`cat /tmp/.dca-splunk.upload`
+    if [ -d /proc/$pid ];then
+         echo_t "dca : previous instance of dcaSplunkUpload.sh is running."
+         ignoreResendList="true"
+         # Cannot exit as triggers can be from immediate log upload
+    else
+        rm -f /tmp/.dca-splunk.upload
+        echo $$ > /tmp/.dca-splunk.upload
+    fi
+fi
+
+conn_type_used=""   # Use this to check the connection success, else set to fail
+conn_type="Direct" # Use this to check the connection success, else set to fail
+first_conn=useDirectRequest
+sec_conn=useCodebigRequest
+CodebigAvailable=0
+
+CURL_TIMEOUT=30
+TLS="--tlsv1.2" 
+
+mkdir -p $TELEMETRY_PATH
+
+# Processing Input Args
+inputArgs=$1
+
+# dca_utility.sh does  not uses TELEMETRY_PROFILE_RESEND_PATH, to hardwired to TELEMETRY_PROFILE_DEFAULT_PATH
+[ "x$sendInformation" != "x"  ] || sendInformation=1
+if [ "$sendInformation" -ne 1 ] ; then
+   TELEMETRY_PROFILE_PATH=$TELEMETRY_PROFILE_RESEND_PATH
+else
+   TELEMETRY_PROFILE_PATH=$TELEMETRY_PROFILE_DEFAULT_PATH
+fi
+	
+echo "Telemetry Profile File Being Used : $TELEMETRY_PROFILE_PATH" >> $RTL_LOG_FILE
+	
+#Adding support for opt override for dcm.properties file
+if [ "$BUILD_TYPE" != "prod" ] && [ -f $PERSISTENT_PATH/dcm.properties ]; then
+      . $PERSISTENT_PATH/dcm.properties
+else
+      . /etc/dcm.properties
+fi
+TelemetryNewEndpointAvailable=0
+getTelemetryEndpoint() {
+    DEFAULT_DCA_UPLOAD_URL="$DCA_UPLOAD_URL"
+    TelemetryEndpoint=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.TelemetryEndpoint.Enable  | grep value | awk '{print $5}'`
+    TelemetryEndpointURL=""
+    if [ "x$TelemetryEndpoint" = "xtrue" ]; then
+        TelemetryEndpointURL=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.TelemetryEndpoint.URL  | grep value | awk '{print $5}'`
+        if [ ! -z "$TelemetryEndpointURL" ]; then
+            DCA_UPLOAD_URL="https://$TelemetryEndpointURL"
+            echo_t "dca upload url from RFC is $TelemetryEndpointURL" >> $RTL_LOG_FILE
+            TelemetryNewEndpointAvailable=1
+        fi
+    else
+        if [ -f "$DCMRESPONSE" ]; then    
+            TelemetryEndpointURL=`grep '"uploadRepository:URL":"' $DCMRESPONSE | awk -F 'uploadRepository:URL":' '{print $NF}' | awk -F '",' '{print $1}' | sed 's/"//g' | sed 's/}//g'`
+        
+            if [ ! -z "$TelemetryEndpointURL" ]; then	    
+            	DCA_UPLOAD_URL="$TelemetryEndpointURL"
+            	echo_t "dca upload url from dcmresponse is $TelemetryEndpointURL" >> $RTL_LOG_FILE
+            fi
+        fi
+    fi
+
+    if [ -z "$TelemetryEndpointURL" ]; then
+        DCA_UPLOAD_URL="$DEFAULT_DCA_UPLOAD_URL"
+    fi
+}
+
+getTelemetryEndpoint
+
+if [ -z $DCA_UPLOAD_URL ]; then
+    echo_t "dca upload url read from dcm.properties is NULL"
+    exit 1
+fi
+
+pidCleanup()
+{
+   # PID file cleanup
+   if [ -f /tmp/.dca-splunk.upload ];then
+        rm -rf /tmp/.dca-splunk.upload
+   fi
+}
+
+IsDirectBlocked()
+{
+    ret=0
+    # Temporarily disabling blocking of direct connection due to increased load on Codebig servers.
+    return $ret
+}
+
+# Get the configuration of codebig settings
+get_Codebigconfig()
+{
+   # If GetServiceUrl not available, then only direct connection available and no fallback mechanism
+   if [ -f /usr/bin/GetServiceUrl ]; then
+      CodebigAvailable=1
+   fi
+   if [ "$CodebigAvailable" -eq "1" ]; then
+       CodeBigEnable=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.CodeBigFirst.Enable | grep true 2>/dev/null`
+   fi
+   if [ "$CodebigAvailable" -eq "1" ] && [ "x$CodeBigEnable" != "x" ] ; then
+      conn_type="Codebig"
+      first_conn=useCodebigRequest
+      sec_conn=useDirectRequest
+   fi
+
+   if [ "$CodebigAvailable" -eq 1 ]; then
+      echo_t "dca : Using $conn_type connection as the Primary" >> $RTL_LOG_FILE
+   else
+      echo_t "dca : Only $conn_type connection is available" >> $RTL_LOG_FILE
+   fi
+}
+
+# Direct connection Download function
+useDirectRequest()
+{
+       # Direct connection will not be tried if .lastdirectfail exists
+       IsDirectBlocked
+       if [ "$?" -eq "1" ]; then
+           return 1
+       fi
+       echo_t "dca$2: Using Direct commnication"
+       proUpdel=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c`
+       echo "number of proUPdel1:"$proUpdel
+       #proUpdel=$((proUpdel - 1))
+       uploadProtocoltel=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$proUpdel`
+       echo "Upload protocol telemetry is:"$uploadProtocoltel
+       if [ "$uploadProtocoltel" != "TFTP" ]; then
+           echo "before HTTP upload"
+           delimhttp=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c`
+           echo "number of httpdeli:"$delimhttp
+           delimhttp=$((delimhttp - 4))
+           HTTPURL=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$delimhttp`
+           if [ "$HTTPURL" == "" ]; then
+              echo "No HTTP URL configured in xconf,going with internal one !!"
+              HTTPURL=$DCM_HTTP_SERVER_URL
+           fi
+           echo "HTTPTELEMETRYURL:"$HTTPURL
+           CURL_CMD="curl --tlsv1.2 -w '%{http_code}\n' -H \"Accept: application/json\" -H \"Content-type: application/json\" -X POST -d @/nvram/rtl_json.txt '$HTTPURL' --connect-timeout 30 -m 30"
+           echo "------CURL_CMD:"$CURL_CMD
+           HTTP_CODE=`result= eval $CURL_CMD`
+           http_code=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' )
+           echo "http code in telemetry is :"$http_code
+            #curl --tlsv1.2 -w '%{http_code}\n' -H "Accept: application/json" -H "Content-type: application/json" -X POST -d @/nvram/hell.txt '$HTTPURL' -o "/nvram/dca_httpresult.txt" --connect-timeout 30 -m 30
+           if [ $http_code -eq 200 ]; then
+                 echo "HTTP telemetry curl upload succeded!!!!!!!!!!!!!!!!!"
+                 ret=0
+           else
+                 uploadRetryCount=0
+                 while [ $uploadRetryCount -lt 2 ]
+                 do
+                       echo "Trying to upload telemetry file..."
+                       CURL_CMD="curl --tlsv1.2 -w '%{http_code}\n' -H \"Accept: application/json\" -H \"Content-type: application/json\" -X POST -d @/nvram/rtl_json.txt '$HTTPURL' --connect-timeout 30 -m 30"
+                       HTTP_CODE=`result= eval $CURL_CMD`
+                       http_code_retry=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' )
+                       echo "http code in telemetry is :"$http_code_retry
+                       if [ "$http_code_retry" != "200" ]; then
+                           echo "Error in uploading telemetry file"
+                       else
+                           echo "telemetry json upload succeded in retry"
+                           ret=0
+                           break
+                       fi
+                       uploadRetryCount=`expr $uploadRetryCount + 1`
+                 done
+                 if [ $uploadRetryCount -eq 2]; then
+                      ret=1
+                      echo "HTTP telemetry curl upload failed!!!!!!!!!!!!!!!!!"
+                 fi
+           fi
+	   if [ $ret -eq 0 ]; then
+              echo_t "dca$2: Direct connection success - ret:$ret " >> $RTL_LOG_FILE
+              # Use direct connection for rest of the connections
+              conn_type_used="Direct"
+              cd ..
+              return 0
+           else
+              echo_t "dca$2: Direct Connection Failure - ret:$ret " >> $RTL_LOG_FILE
+              direct_retry=$(( direct_retry += 1 ))
+              if [ "$direct_retry" -ge "$DIRECT_RETRY_COUNT" ]; then
+              # .lastdirectfail will not be created for only direct connection
+              [ "$CodebigAvailable" -ne "1" ] || [ -f $DIRECT_BLOCK_FILENAME ] || touch $DIRECT_BLOCK_FILENAME
+             fi
+             sleep 10
+             cd ..
+             return 1
+           fi
+      else
+           echo "before TFTP load-----------"
+           delimnr=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | tr -dc ':' |wc -c`
+           echo "number of delim:"$delimnr
+           delimnr=$((delimnr - 1))
+           IP=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d ":" -f$delimnr | cut -d '"' -f 2`
+           echo "tftp ip is :"$IP
+           cd /nvram/
+           if [ -f "rtl_json.txt" ]; then
+              echo "rtl_json.txt available,going for tftp upload"
+              iptables -t raw -I OUTPUT -j CT -p udp -m udp --dport 69 --helper tftp
+              TurrisMacAddress=`ifconfig erouter0 | grep HWaddr | cut -c39-55`
+              extractVal=`echo $TurrisMacAddress | sed -e 's/://g'`
+              dt=`date "+%m-%d-%y-%I-%M%p"`
+              cp /nvram/rtl_json.txt /nvram/$extractVal-TELE-$dt.json
+              tftp -p -r $extractVal-TELE-$dt.json $IP
+           else
+              echo "No rtl_json.txt available,returning 1"
+              return 1
+           fi
+           ret=$?
+           echo $ret
+           if [ "$ret" -eq 1 ]; then
+               tftpuploadRetryCount=0
+               while [ $tftpuploadRetryCount -lt 2 ]
+               do
+                   echo "Trying to upload telemetry file using tftp again..."
+                   tftp -p -r $extractVal-TELE-$dt.json $IP
+                   ret=$?
+                   if [ "$ret" -eq 1 ]; then
+                     echo "error in uploading using tftp"
+                   else
+                     echo "tftp upload in retry succeded"
+                     ret=0
+                     break
+                   fi
+                   tftpuploadRetryCount=`expr $tftpuploadRetryCount + 1`
+               done
+               if [ "$tftpuploadRetryCount" -eq 2]; then
+                      ret=1
+                      echo "TFTP telemetry  upload failed!!!!!!!!!!!!!!!!!"
+               fi
+           else
+                echo "TFTP Telemetry succeded !!!"
+                ret=0
+           fi
+           sleep 10
+
+           echo_t "dca $2 : Direct Connection HTTP RESPONSE CODE : $http_code" >> $RTL_LOG_FILE
+           if [ $ret -eq 0 ]; then
+              echo_t "dca$2: Direct connection success - ret:$ret " >> $RTL_LOG_FILE
+              # Use direct connection for rest of the connections
+              conn_type_used="Direct"
+              cd ..
+              return 0
+           else
+              echo_t "dca$2: Direct Connection Failure - ret:$ret " >> $RTL_LOG_FILE
+              direct_retry=$(( direct_retry += 1 ))
+              if [ "$direct_retry" -ge "$DIRECT_RETRY_COUNT" ]; then
+              # .lastdirectfail will not be created for only direct connection 
+              [ "$CodebigAvailable" -ne "1" ] || [ -f $DIRECT_BLOCK_FILENAME ] || touch $DIRECT_BLOCK_FILENAME
+             fi
+             sleep 10
+             cd ..
+             return 1
+           fi
+      fi
+}
+
+# Codebig connection Download function
+useCodebigRequest()
+{
+      # Do not try Codebig if CodebigAvailable != 1 (GetServiceUrl not there)
+      if [ "$CodebigAvailable" -eq "0" ] ; then
+         echo "dca$2 : Only direct connection Available"
+         return 1
+      fi
+
+      if [ "x$CodeBigEnable" = "x" ] ; then
+          echo_t "dca$2 : Codebig connection attempts are disabled through RFC. Exiting !!!" >> $RTL_LOG_FILE
+          return 1
+      fi
+
+      if [ "$TelemetryNewEndpointAvailable" -eq "1" ]; then
+          SIGN_CMD="GetServiceUrl 10 "
+      else
+          SIGN_CMD="GetServiceUrl 9 "
+      fi
+      eval $SIGN_CMD > $SIGN_FILE
+      CB_SIGNED_REQUEST=`cat $SIGN_FILE`
+      rm -f $SIGN_FILE
+      CURL_CMD="curl $TLS -w '%{http_code}\n' --interface $EROUTER_INTERFACE $addr_type -H \"Accept: application/json\" -H \"Content-type: application/json\" -X POST -d '$1' -o \"$HTTP_FILENAME\" \"$CB_SIGNED_REQUEST\" --connect-timeout $CURL_TIMEOUT -m $CURL_TIMEOUT"
+      echo_t "dca$2: Using Codebig connection at `echo "$CURL_CMD" | sed -ne 's#.*\(https:.*\)?.*#\1#p'`" >> $RTL_LOG_FILE
+      echo_t "CURL_CMD: `echo "$CURL_CMD" | sed -ne 's#oauth_consumer_key=.*oauth_signature=.* --#<hidden> --#p'`" >> $RTL_LOG_FILE
+      HTTP_CODE=`curl $TLS -w '%{http_code}\n' --interface $EROUTER_INTERFACE $addr_type -H "Accept: application/json" -H "Content-type: application/json" -X POST -d "$1" -o "$HTTP_FILENAME" "$CB_SIGNED_REQUEST" --connect-timeout $CURL_TIMEOUT -m $CURL_TIMEOUT`
+      curlret=$?
+      http_code=$(echo "$HTTP_CODE" | awk -F\" '{print $1}' )
+      [ "x$http_code" != "x" ] || http_code=0
+      # log security failure
+      echo_t "dca $2 : Codebig Connection HTTP RESPONSE CODE : $http_code" >> $RTL_LOG_FILE
+      case $curlret in
+          35|51|53|54|58|59|60|64|66|77|80|82|83|90|91)
+             echo_t "dca$2: Codebig Connection Failure - ret:$curlret http_code:$http_code" >> $RTL_LOG_FILE
+             ;;
+      esac
+      if [ "$http_code" -eq 200 ]; then
+           echo_t "dca$2: Codebig connection success - ret:$curlret http_code:$http_code" >> $RTL_LOG_FILE
+           conn_type_used="Codebig"
+           return 0
+      fi
+      if [ "$curlret" -eq 0 ]; then
+          echo_t "dca$2: Codebig Connection Failure - ret:$curlret http_code:$http_code" >> $RTL_LOG_FILE
+      fi
+      sleep 10
+    return 1
+}
+
+# Function to get erouter0 ipv4 address
+getErouterIpv4()
+{
+    erouter_ipv4=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IP | grep value | awk '{print $5}'`
+    if [ "$erouter_ipv4" != "" ];then
+        echo $erouter_ipv4
+    else
+        echo "null"
+    fi
+}
+
+# Function to get erouter0 ipv6 address
+getErouterIpv6()
+{
+    erouter_ipv6=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IPv6 | grep value | awk '{print $5}'`
+    if [ "$erouter_ipv6" != "" ];then
+        echo $erouter_ipv6
+    else
+        echo "null"
+    fi
+}
+
+timestamp=`date +%Y-%b-%d_%H-%M-%S`
+#main app
+estbMac=`getErouterMacAddress`
+cur_time=`date "+%Y-%m-%d %H:%M:%S"`
+erouteripv4=`getErouterIpv4`
+erouteripv6=`getErouterIpv6`
+DEFAULT_IPV4="<#=#>EROUTER_IPV4<#=#>"
+DEFAULT_IPV6="<#=#>EROUTER_IPV6<#=#>"
+
+# If interface doesnt have ipv6 address then we will force the curl to go with ipv4.
+# Otherwise we will not specify the ip address family in curl options
+addr_type=""
+[ "x`ifconfig $EROUTER_INTERFACE | grep inet6 | grep -i 'Global'`" != "x" ] || addr_type="-4"
+
+if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
+   ##  1]  Pull processed data from ATOM 
+   rm -f $TELEMETRY_JSON_RESPONSE
+
+   
+   GetConfigFile $PEER_COMM_ID
+   scp -i $PEER_COMM_ID root@$ATOM_INTERFACE_IP:$TELEMETRY_JSON_RESPONSE $TELEMETRY_JSON_RESPONSE > /dev/null 2>&1
+   if [ $? -ne 0 ]; then
+       scp -i $PEER_COMM_ID root@$ATOM_INTERFACE_IP:$TELEMETRY_JSON_RESPONSE $TELEMETRY_JSON_RESPONSE > /dev/null 2>&1
+   fi
+   echo_t "Copied $TELEMETRY_JSON_RESPONSE " >> $RTL_LOG_FILE 
+   rm -f $PEER_COMM_ID
+   sleep 2
+fi
+
+# Add the erouter MAC address from ARM as this is not available in ATOM
+sed -i -e "s/ErouterMacAddress/$estbMac/g" $TELEMETRY_JSON_RESPONSE
+
+
+if [ ! -f $SLEEP_TIME_FILE ]; then
+    if [ -f $DCMRESPONSE ]; then
+        cron=`grep -i TelemetryProfile $DCMRESPONSE | awk -F '"schedule":' '{print $NF}' | awk -F "," '{print $1}' | sed 's/://g' | sed 's/"//g' | sed -e 's/^[ ]//' | sed -e 's/^[ ]//'`
+    fi
+
+    if [ -n "$cron" ]; then
+        sleep_time=`echo "$cron" | awk -F '/' '{print $2}' | cut -d ' ' -f1`
+    fi 
+
+    if [ -n "$sleep_time" ];then
+        sleep_time=`expr $sleep_time - 1` #Subtract 1 miute from it
+        sleep_time=`expr $sleep_time \* 60` #Make it to seconds
+        # Adding generic RANDOM number implementation as sh in RDK_B doesn't support RANDOM
+        RANDOM=`awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1)*(max-min+1)*1000)}'`
+        sleep_time=$(($RANDOM%$sleep_time)) #Generate a random value out of it
+        echo "$sleep_time" > $SLEEP_TIME_FILE
+    else
+        sleep_time=10
+    fi
+else 
+    sleep_time=`cat $SLEEP_TIME_FILE`
+fi
+
+if [ -z "$sleep_time" ];then
+    sleep_time=10
+fi
+
+if [ "$inputArgs" = "logbackup_without_upload" ];then
+      echo_t "log backup during bootup, Will upload on later call..!"
+      if [ -f $TELEMETRY_JSON_RESPONSE ]; then
+           outputJson=`cat $TELEMETRY_JSON_RESPONSE`
+      fi
+      if [ ! -f $TELEMETRY_JSON_RESPONSE ] || [ "x$outputJson" = "x" ] ; then
+               echo_t "dca: Unable to find Json message or Json is empty." >> $RTL_LOG_FILE
+         if [ ! -f /etc/os-release ];then pidCleanup; fi
+         exit 0
+      fi
+      if [ -f $TELEMETRY_RESEND_FILE ]; then
+            #If resend queue has already reached MAX_CONN_QUEUE entries then remove recent two
+            if [ "`cat $TELEMETRY_RESEND_FILE | wc -l`" -ge "$MAX_CONN_QUEUE" ]; then
+                echo_t "resend queue size at its max. removing recent two entries" >> $RTL_LOG_FILE
+                sed -i '1,2d' $TELEMETRY_RESEND_FILE
+            fi
+            mv $TELEMETRY_RESEND_FILE $TELEMETRY_TEMP_RESEND_FILE
+      fi
+      # ensure that Json is put at the top of the queue
+      echo "$outputJson" > $TELEMETRY_RESEND_FILE
+      if [ -f $TELEMETRY_TEMP_RESEND_FILE ] ; then
+         cat $TELEMETRY_TEMP_RESEND_FILE >> $TELEMETRY_RESEND_FILE
+         rm -f $TELEMETRY_TEMP_RESEND_FILE
+      fi
+      if [ ! -f /etc/os-release ];then pidCleanup; fi
+      exit 0
+fi
+get_Codebigconfig
+direct_retry=0
+##  2] Check for unsuccessful posts from previous execution in resend que.
+##  If present repost either with appending to existing or as independent post
+echo "=============Telemetry has file only one upload======================="
+if [ -f $TELEMETRY_RESEND_FILE ] && [ "x$ignoreResendList" != "xtrue" ]; then
+    echo "=============Loop1======================="
+    rm -f $TELEMETRY_TEMP_RESEND_FILE
+    while read resend
+    do
+        resend=`echo $resend | sed "s/$DEFAULT_IPV4/$erouteripv4/" | sed "s/$DEFAULT_IPV6/$erouteripv6/"`
+        echo_t "dca resend : $resend" >> $RTL_LOG_FILE 
+        $first_conn "$resend" "resend" || $sec_conn "$resend" "resend" ||  conn_type_used="Fail" 
+
+        if [ "x$conn_type_used" = "xFail" ] ; then 
+           echo "$resend" >> $TELEMETRY_TEMP_RESEND_FILE
+           echo_t "dca Connecion failed for this Json : requeuing back"  >> $RTL_LOG_FILE 
+        fi 
+        echo_t "dca Attempting next Json in the queue "  >> $RTL_LOG_FILE 
+        sleep 10 
+   done < $TELEMETRY_RESEND_FILE
+   sleep 2
+   rm -f $TELEMETRY_RESEND_FILE
+fi
+
+##  3] Attempt to post current message. Check for status if failed add it to resend queue
+if [ -f $TELEMETRY_JSON_RESPONSE ]; then
+   outputJson=`cat $TELEMETRY_JSON_RESPONSE`
+fi
+if [ ! -f $TELEMETRY_JSON_RESPONSE ] || [ "x$outputJson" = "x" ] ; then
+    echo_t "dca: Unable to find Json message or Json is empty." >> $RTL_LOG_FILE
+    [ ! -f $TELEMETRY_TEMP_RESEND_FILE ] ||  mv $TELEMETRY_TEMP_RESEND_FILE $TELEMETRY_RESEND_FILE
+    if [ ! -f /etc/os-release ];then pidCleanup; fi
+    exit 0
+fi
+
+echo "$outputJson" > $TELEMETRY_RESEND_FILE
+# sleep for random time before upload to avoid bulk requests on splunk server
+echo_t "dca: Sleeping for $sleep_time before upload." >> $RTL_LOG_FILE
+sleep $sleep_time
+timestamp=`date +%Y-%b-%d_%H-%M-%S`
+$first_conn "$outputJson"  || $sec_conn "$outputJson"  ||  conn_type_used="Fail" 
+if [ "x$conn_type_used" != "xFail" ]; then
+    echo_t "dca: Json message successfully submitted." >> $RTL_LOG_FILE
+    rm -f $TELEMETRY_RESEND_FILE
+    [ ! -f $TELEMETRY_TEMP_RESEND_FILE ] ||  mv $TELEMETRY_TEMP_RESEND_FILE $TELEMETRY_RESEND_FILE
+else
+   if [ -f $TELEMETRY_TEMP_RESEND_FILE ] ; then
+       if [ "`cat $TELEMETRY_TEMP_RESEND_FILE | wc -l `" -ge "$MAX_CONN_QUEUE" ]; then
+            echo_t "dca: resend queue size has already reached MAX_CONN_QUEUE. Not adding anymore entries" >> $RTL_LOG_FILE
+            mv $TELEMETRY_TEMP_RESEND_FILE $TELEMETRY_RESEND_FILE
+       else
+            cat $TELEMETRY_TEMP_RESEND_FILE >> $TELEMETRY_RESEND_FILE
+            echo_t "dca: Json message submit failed. Adding message to resend queue" >> $RTL_LOG_FILE
+       fi
+       rm -f $TELEMETRY_TEMP_RESEND_FILE
+    fi
+fi
+#rm -f $TELEMETRY_JSON_RESPONSE
+# PID file cleanup
+if [ ! -f /etc/os-release ];then pidCleanup; fi
diff --git a/recipes-rdkb/sysint-broadband/files/dca_utility.sh b/recipes-rdkb/sysint-broadband/files/dca_utility.sh
new file mode 100755
index 0000000..5cd86b6
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/dca_utility.sh
@@ -0,0 +1,779 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2016 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+
+. /etc/include.properties
+. /etc/device.properties
+
+echo "inside dca_utility script with 1 as value for arguments"
+
+if [ -f /lib/rdk/utils.sh  ]; then
+   . /lib/rdk/utils.sh
+fi
+if [ -f /etc/mount-utils/getConfigFile.sh ];then
+     . /etc/mount-utils/getConfigFile.sh
+fi
+source /etc/log_timestamp.sh
+source /lib/rdk/getpartnerid.sh
+source /lib/rdk/getaccountid.sh
+EROUTER_IF=erouter0
+DCMRESPONSE="$PERSISTENT_PATH/DCMresponse.txt"
+DCM_SETTINGS_CONF="/tmp/DCMSettings.conf"
+
+TELEMETRY_PATH="$PERSISTENT_PATH/.telemetry"
+TELEMETRY_PATH_TEMP="$TELEMETRY_PATH/tmp"
+TELEMETRY_PROFILE_PATH="$PERSISTENT_PATH/.DCMSettings.conf"
+LOG_SYNC_PATH="/rdklogs/logs/"
+
+RTL_LOG_FILE="$LOG_PATH/dcmProcessing.log"
+RTL_DELTA_LOG_FILE="$RAMDISK_PATH/.rtl_temp.log"
+MAP_PATTERN_CONF_FILE="$TELEMETRY_PATH/dcafile.conf"
+TEMP_PATTERN_CONF_FILE="$TELEMETRY_PATH/temp_dcafile.conf"
+EXEC_COUNTER_FILE="/tmp/.dcaCounter.txt"
+
+# Persist this files for telemetry operation
+# Regenerate this only when there is a change identified from XCONF update
+SORTED_PATTERN_CONF_FILE="$TELEMETRY_PATH/dca_sorted_file.conf"
+
+current_cron_file="$PERSISTENT_PATH/cron_file.txt"
+
+#Performance oriented binaries
+DCA_BINARY="/usr/bin/dca"
+
+TELEMETRY_INOTIFY_FOLDER=/rdklogs/logs/
+TELEMETRY_INOTIFY_EVENT="$TELEMETRY_INOTIFY_FOLDER/eventType.cmd"
+TELEMETRY_EXEC_COMPLETE="/tmp/.dca_done"
+SCP_COMPLETE="/tmp/.scp_done"
+
+PEER_COMM_ID="/tmp/elxrretyt.swr"
+IDLE_TIMEOUT=30
+
+DEFAULT_IPV4="<#=#>EROUTER_IPV4<#=#>"
+DEFAULT_IPV6="<#=#>EROUTER_IPV6<#=#>"
+TELEMETRY_PREVIOUS_LOG="/tmp/.telemetry_previous_log"
+TELEMETRY_PREVIOUS_LOG_COMPLETE="/tmp/.telemetry_previous_log_done"
+TEMP_NVRAM_LOG_PATH="/tmp/nvram2_logs/"
+NVRAM_LOG_PATH="/nvram/logs/"
+
+
+# Retain source for future enabling. Defaulting to disable for now
+snmpCheck=false
+
+dcaCleanup()
+{
+    if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
+        $CONFIGPARAMGEN jx $PEER_COMM_DAT $PEER_COMM_ID
+        ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'notifyTelemetryCleanup' > $TELEMETRY_INOTIFY_EVENT"  > /dev/null 2>&1
+        echo_t "notify ARM for dca execution completion" >> $RTL_LOG_FILE
+        rm -f $PEER_COMM_ID
+    else
+        touch $TELEMETRY_EXEC_COMPLETE
+    fi
+
+    echo_t "forced DCA execution before log upload/reboot. Clearing all markers !!!" >> $RTL_LOG_FILE
+    # Forced execution before flusing of logs, so clear the markers
+    if [ -d $TELEMETRY_PATH_TEMP ]; then
+       rm -rf $TELEMETRY_PATH_TEMP
+    fi
+    rm -rf $TELEMETRY_PATH
+
+}
+
+# exit if an instance is already running
+if [ ! -f /tmp/.dca-utility.pid ];then
+    # store the PID
+    echo $$ > /tmp/.dca-utility.pid
+     echo "No dca-utility pid -------"
+else
+    echo "dca-utility pis existing----------"
+    pid=`cat /tmp/.dca-utility.pid`
+    if [ -d /proc/$pid ];then
+        if [ "$1" == "2" ]; then
+           loop=0
+           while [ $loop -le 6 ]
+           do
+               sleep 10
+               loop=$((loop+1))
+               if [ ! -f /tmp/.dca-utility.pid ] || [ ! -d /proc/`cat /tmp/.dca-utility.pid` ]; then
+                   dcaCleanup
+                   break
+               fi
+           done
+        fi
+    	exit 0
+    else
+        echo $$ > /tmp/.dca-utility.pid
+    fi
+fi
+
+mkdir -p $LOG_PATH
+touch $RTL_LOG_FILE
+
+previousLogPath=""
+if [ -f $TELEMETRY_PREVIOUS_LOG ]; then
+
+   isAxb6Device="no"
+   if [ "$MODEL_NUM" == "TG3482G" ];then
+      isNvram2Mounted=`grep nvram2 /proc/mounts`
+      if [ "$isNvram2Mounted" == "" -a -d "/nvram/logs" ];then
+         isAxb6Device="yes"
+      fi
+   fi
+
+   if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" -a "x$isAxb6Device" == "xno" ]; then
+      previousLogPath="$TEMP_NVRAM_LOG_PATH"
+   elif [ "x$isAxb6Device" = "xyes" ]; then
+      previousLogPath="$NVRAM_LOG_PATH"
+   else
+      previousLogPath="$LOG_SYNC_PATH"
+   fi
+
+   echo_t "Telemetry run for previous log path : "$previousLogPath
+fi
+
+if [ ! -f /tmp/.dca_bootup -a ! -f $TELEMETRY_PREVIOUS_LOG ]; then
+   echo_t "First dca execution after bootup. Clearing all markers."
+   touch /tmp/.dca_bootup
+   rm -rf $TELEMETRY_PATH
+   rm -f $RTL_LOG_FILE
+fi
+
+
+PrevFileName=''
+
+#Adding support for opt override for dcm.properties file
+if [ "$BUILD_TYPE" != "prod" ] && [ -f $PERSISTENT_PATH/dcm.properties ]; then
+      . $PERSISTENT_PATH/dcm.properties
+else
+      . /etc/dcm.properties
+fi
+
+
+if [ ! -d "$TELEMETRY_PATH_TEMP" ]
+then
+    echo_t "Telemetry Folder does not exist . Creating now"
+    mkdir -p "$TELEMETRY_PATH_TEMP"
+else
+    cp $TELEMETRY_PATH/rtl_* $TELEMETRY_PATH_TEMP/
+fi
+
+mkdir -p $TELEMETRY_PATH
+
+pidCleanup()
+{
+   # PID file cleanup
+   if [ -f /tmp/.dca-utility.pid ];then
+        rm -rf /tmp/.dca-utility.pid
+   fi
+}
+
+if [ $# -ne 1 ]; then
+   echo "Usage : `basename $0` <0/1/2> 0 - Telemtry From Cron 1 - Reinitialize Map 2 - Forced Telemetry search " >> $RTL_LOG_FILE
+   pidCleanup
+   exit 0
+fi
+
+# 0 if as part of normal execution
+# 1 if initiated due to an XCONF update
+# 2 if forced execution before log upload
+# 3 if modify the cron schedule 
+
+triggerType=$1
+echo_t "dca: Trigger type is :"$triggerType
+
+cd $LOG_PATH
+
+
+isNum()
+{
+    Number=$1
+    if [ $Number -ne 0 -o $Number -eq 0 2>/dev/null ];then
+        echo 0
+    else
+        echo 1
+    fi
+}
+
+# Function to get erouerMAC
+getEstbMac()
+{
+
+    estbMac=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_MAC  | grep type: | awk '{print $5}'|tr '[:lower:]' '[:upper:]'`
+    
+    if [ "$estbMac" ]; then
+       echo "$estbMac"
+    else
+       if [ "$BOX_TYPE" == "XB3" ]; then
+          estbMac=`/usr/bin/rpcclient $ARM_ARPING_IP "ifconfig erouter0" | grep 'Link encap:' | cut -d ' ' -f7`
+          echo "$estbMac"
+       else
+          estbMac=`ifconfig erouter0 | grep 'Link encap:' | cut -d ' ' -f7`
+          echo "$estbMac"
+       fi
+    fi
+
+}
+
+# Function to get erouter0 ipv4 address
+getErouterIpv4()
+{
+    erouter_ipv4=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IP | grep value | awk '{print $5}'`
+    if [ "$erouter_ipv4" != "" ];then
+        echo $erouter_ipv4
+    else
+        echo "null"
+    fi
+}
+
+# Function to get erouter0 ipv6 address
+getErouterIpv6()
+{
+    erouter_ipv6=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IPv6 | grep value | awk '{print $5}'`
+    if [ "$erouter_ipv6" != "" ];then
+        echo $erouter_ipv6
+    else
+        echo "null"
+    fi
+}
+
+getSNMPUpdates() {
+     snmpMIB=$1
+     TotalCount=0
+     export MIBS=ALL
+     export MIBDIRS=/mnt/nfs/bin/target-snmp/share/snmp/mibs:/usr/share/snmp/mibs
+     export PATH=$PATH:/mnt/nfs/bin/target-snmp/bin
+     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs/bin/target-snmp/lib:/mnt/nfs/usr/lib
+     snmpCommunityVal=`head -n 1 /tmp/snmpd.conf | awk '{print $4}'`
+     tuneString=`snmpwalk  -OQv -v 2c -c $snmpCommunityVal 127.0.0.1 $snmpMIB`
+     for count in $tuneString
+     do
+         count=`echo $count | tr -d ' '`
+         if [ $(isNum $count) -eq 0 ]; then
+            TotalCount=`expr $TotalCount + $count`
+         else
+            TotalCount=$count
+         fi
+     done
+     
+     echo $TotalCount
+}
+
+## Reatining for future support when net-snmp tools will be enabled in XB3s
+getControllerId(){    
+    ChannelMapId=''
+    ControllerId=''
+    VctId=''
+    vodServerId=''
+    export MIBS=ALL
+    export MIBDIRS=/mnt/nfs/bin/target-snmp/share/snmp/mibs:/usr/share/snmp/mibs
+    export PATH=$PATH:/mnt/nfs/bin/target-snmp/bin
+    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs/bin/target-snmp/lib:/mnt/nfs/usr/lib
+    
+    snmpCommunityVal=`head -n 1 /tmp/snmpd.conf | awk '{print $4}'`
+    ChannelMapId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 1.3.6.1.4.1.17270.9225.1.1.40 | awk -F '= ' '{print $2}'`
+    ControllerId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 1.3.6.1.4.1.17270.9225.1.1.41 | awk -F '= ' '{print $2}'`  
+    VctId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 OC-STB-HOST-MIB::ocStbHostCardVctId.0 | awk -F '= ' '{print $2}'`
+    vodServerId=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 127.0.0.1 1.3.6.1.4.1.17270.9225.1.1.43 | awk -F '= ' '{print $2}'`
+    
+    echo "{\"ChannelMapId\":\"$ChannelMapId\"},{\"ControllerId\":\"$ControllerId\"},{\"VctId\":$VctId},{\"vodServerId\":\"$vodServerId\"}"    
+}
+
+# Function to get RF status
+## Reatining for future support when net-snmp tools will be enabled in XB3s
+getRFStatus(){
+    Dwn_RX_pwr=''
+    Ux_TX_pwr=''
+    Dx_SNR=''
+    export MIBS=ALL
+    export MIBDIRS=/mnt/nfs/bin/target-snmp/share/snmp/mibs
+    export PATH=$PATH:/mnt/nfs/bin/target-snmp/bin
+    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/nfs/bin/target-snmp/lib:/mnt/nfs/usr/lib
+    
+    snmpCommunityVal=`head -n 1 /tmp/snmpd.conf | awk '{print $4}'`
+    Dwn_RX_pwr=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 192.168.100.1 DOCS-IF-MIB::docsIfDownChannelPower.3 | awk -F '= ' '{print $2}'`
+    Ux_TX_pwr=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 192.168.100.1 DOCS-IF-MIB::docsIfCmStatusTxPower.2 | awk -F '= ' '{print $2}'`  
+    Dx_SNR=`snmpwalk -OQ -v 2c -c $snmpCommunityVal 192.168.100.1 DOCS-IF-MIB::docsIfSigQSignalNoise.3 | awk -F '= ' '{print $2}'`
+    
+    echo "{\"Dwn_RX_pwr\":\"$Dwn_RX_pwr\"},{\"Ux_TX_pwr\":\"$Ux_TX_pwr\"},{\"Dx_SNR\":\"$Dx_SNR\"}"
+}
+
+processJsonResponse()
+{
+    FILENAME=$1
+    #Condider getting the filename as an argument instead of using global file name
+    if [ -f "$FILENAME" ]; then
+        # Start pre-processing the original file
+        sed -i 's/,"urn:/\n"urn:/g' $FILENAME # Updating the file by replacing all ',"urn:' with '\n"urn:'
+        sed -i 's/^{//g' $FILENAME # Delete first character from file '{'
+        sed -i 's/}$//g' $FILENAME # Delete first character from file '}'
+        echo "" >> $FILENAME         # Adding a new line to the file
+        # Start pre-processing the original file
+
+        OUTFILE=$DCM_SETTINGS_CONF
+        OUTFILEOPT="$PERSISTENT_PATH/.DCMSettings.conf"
+        #rm -f $OUTFILE #delete old file
+        cat /dev/null > $OUTFILE #empty old file
+        cat /dev/null > $OUTFILEOPT
+        while read line
+        do
+            # Special processing for telemetry
+            profile_Check=`echo "$line" | grep -ci 'TelemetryProfile'`
+            if [ $profile_Check -ne 0 ];then
+                #echo "$line"
+                echo "$line" | sed 's/"header":"/"header" : "/g' | sed 's/"content":"/"content" : "/g' | sed 's/"type":"/"type" : "/g' >> $OUTFILE
+
+                echo "$line" | sed 's/"header":"/"header" : "/g' | sed 's/"content":"/"content" : "/g' | sed 's/"type":"/"type" : "/g' | sed -e 's/uploadRepository:URL.*","//g'  >> $OUTFILEOPT
+            else
+                echo "$line" | sed 's/":/=/g' | sed 's/"//g' >> $OUTFILE
+            fi
+        done < $FILENAME
+    else
+        echo "$FILENAME not found." >> $RTL_LOG_FILE
+        return 1
+    fi
+}
+
+scheduleCron()
+{
+    echo "schedulecronjob!!"
+    cron=''
+    scheduler_Check=`grep '"schedule":' $DCM_SETTINGS_CONF`
+    if [ -n "$scheduler_Check" ]; then
+        cron=`grep -i TelemetryProfile $DCM_SETTINGS_CONF | awk -F '"schedule":' '{print $NF}' | awk -F "," '{print $1}' | sed 's/://g' | sed 's/"//g' | sed -e 's/^[ ]//' | sed -e 's/^[ ]//'`
+    fi
+
+	#During diagnostic mode need to apply the cron schedule value through this custom configuration
+	DiagnosticMode=`dmcli eRT getv Device.SelfHeal.X_RDKCENTRAL-COM_DiagnosticMode | grep value | cut -f3 -d : | cut -f2 -d" "`
+	if [ "$DiagnosticMode" == "true" ];then
+	LogUploadFrequency=`dmcli eRT getv Device.SelfHeal.X_RDKCENTRAL-COM_DiagMode_LogUploadFrequency | grep value | cut -f3 -d : | cut -f2 -d" "`
+		if [ "$LogUploadFrequency" != "" ]; then
+			cron=''
+			cron="*/$LogUploadFrequency * * * *"
+			echo "$timestamp dca: the default Cron schedule from XCONF is ignored and instead SNMP overriden value is used" >> $RTL_LOG_FILE
+		fi
+	fi	
+
+	#Check whether cron having empty value if it is empty then need to assign 
+	#15mins by default
+	if [ -z "$cron" ]; then
+		echo "$timestamp: dca: Empty cron value so set default as 15mins"
+		cron="*/15 * * * *"
+	fi	
+
+    if [ -n "$cron" ]; then
+	# Dump existing cron jobs to a file
+	crontab -l -c $CRON_SPOOL > $current_cron_file
+	# Check whether any cron jobs are existing or not
+	existing_cron_check=`cat $current_cron_file | tail -n 1`
+	tempfile="$PERSISTENT_PATH/tempfile.txt"
+	rm -rf $tempfile  # Delete temp file if existing
+	if [ -n "$existing_cron_check" ]; then
+		rtl_cron_check=`grep -c 'dca_utility.sh' $current_cron_file`
+		if [ $rtl_cron_check -eq 0 ]; then
+			echo "$cron nice -n 19 sh $RDK_PATH/dca_utility.sh 1" >> $tempfile
+		fi
+		while read line
+		do
+			retval=`echo "$line" | grep 'dca_utility.sh'`
+			if [ -n "$retval" ]; then
+				echo "$cron nice -n 19 sh $RDK_PATH/dca_utility.sh 1" >> $tempfile
+			else
+				echo "$line" >> $tempfile
+			fi
+		done < $current_cron_file
+	else
+		# If no cron job exists, create one, with the value from DCMSettings.conf file
+		echo "$cron nice -n 19 sh $RDK_PATH/dca_utility.sh 1" >> $tempfile
+	fi
+	# Set new cron job from the file
+	crontab $tempfile -c $CRON_SPOOL
+	rm -rf $current_cron_file # Delete temp file
+	rm -rf $tempfile          # Delete temp file
+    else
+	echo " `date` Failed to read \"schedule\" cronjob value from DCMSettings.conf." >> $RTL_LOG_FILE
+    fi
+}
+
+dropbearRecovery()
+{
+   dropbearPid=`ps | grep -i dropbear | grep "$ATOM_INTERFACE_IP" | grep -v grep`
+   if [ -z "$dropbearPid" ]; then
+       DROPBEAR_PARAMS_1="/tmp/.dropbear/dropcfg1$$"
+       DROPBEAR_PARAMS_2="/tmp/.dropbear/dropcfg2$$"
+       if [ ! -d '/tmp/.dropbear' ]; then
+          echo "wan_ssh.sh: need to create dropbear dir !!! " >> $RTL_LOG_FILE
+          mkdir -p /tmp/.dropbear
+       fi
+       echo "wan_ssh.sh: need to create dropbear files !!! " >> $RTL_LOG_FILE
+       getConfigFile $DROPBEAR_PARAMS_1
+       getConfigFile $DROPBEAR_PARAMS_2
+       dropbear -r $DROPBEAR_PARAMS_1 -r $DROPBEAR_PARAMS_2 -E -s -p $ATOM_INTERFACE_IP:22 &
+       sleep 2
+   fi
+   rm -rf /tmp/.dropbear/*
+}
+   
+clearTelemetryConfig()
+{
+    echo_t "dca: Clearing telemetry config and markers" >> $RTL_LOG_FILE
+    if [ -f $RTL_DELTA_LOG_FILE ]; then
+        echo_t "dca: Deleting : $RTL_DELTA_LOG_FILE" >> $RTL_LOG_FILE
+        rm -f $RTL_DELTA_LOG_FILE
+    fi
+
+    if [ -f $MAP_PATTERN_CONF_FILE ]; then
+        echo_t "dca: MAP_PATTERN_CONF_FILE : $MAP_PATTERN_CONF_FILE" >> $RTL_LOG_FILE
+        rm -f $MAP_PATTERN_CONF_FILE
+    fi
+
+    if [ -f $TEMP_PATTERN_CONF_FILE ]; then
+        echo_t "dca: TEMP_PATTERN_CONF_FILE : $TEMP_PATTERN_CONF_FILE" >> $RTL_LOG_FILE
+        rm -f $TEMP_PATTERN_CONF_FILE
+    fi
+
+    if [ -f $SORTED_PATTERN_CONF_FILE ]; then
+        echo_t "dca: SORTED_PATTERN_CONF_FILE : $SORTED_PATTERN_CONF_FILE" >> $RTL_LOG_FILE
+        rm -f $SORTED_PATTERN_CONF_FILE
+    fi
+
+    # Clear markers with XCONF update as logs will be flushed in case of maintenance window case as well. 
+    # During boot-up no need of maintaining old markers.
+    if [ -d $TELEMETRY_PATH ]; then
+        rm -rf $TELEMETRY_PATH
+        mkdir -p $TELEMETRY_PATH
+    fi
+
+    if [ -d $TELEMETRY_PATH_TEMP ]; then
+        rm -rf $TELEMETRY_PATH_TEMP
+        mkdir -p $TELEMETRY_PATH_TEMP
+    fi
+
+}
+
+## Pass The I/P O/P Files As Arguments
+generateTelemetryConfig()
+{
+    echo_t "dca: Generating telemetry config file." >> $RTL_LOG_FILE
+    input_file=$1
+    output_file=$2
+    touch $TEMP_PATTERN_CONF_FILE
+    if [ -f $input_file ]; then
+      grep -i 'TelemetryProfile' $input_file | sed 's/=\[/\n/g' | sed 's/},/}\n/g' | sed 's/],.*?/\n/g'| sed -e 's/^[ ]//' > $TEMP_PATTERN_CONF_FILE
+    fi
+
+  # Create map file from json message file
+    while read line
+    do         
+        header_Check=`echo "$line" | grep -c '{"header"'`
+        if [ $header_Check -ne 0 ];then
+           polling=`echo "$line" | grep -c 'pollingFrequency'`
+           if [ $polling -ne 0 ];then
+              header=`echo "$line" | awk -F '"header" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
+              content=`echo "$line" | awk -F '"content" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
+              logFileName=`echo "$line" | awk -F '"type" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
+              skipInterval=`echo "$line" | sed -e "s/.*pollingFrequency\":\"//g" | sed 's/"}//'`
+           else
+              header=`echo "$line" | awk -F '"header" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
+              content=`echo "$line" | awk -F '"content" :' '{print $NF}' | awk -F '",' '{print $1}' | sed -e 's/^[ ]//' | sed 's/^"//'`
+              logFileName=`echo "$line" | awk -F '"type" :' '{print $NF}' | sed -e 's/^[ ]//' | sed 's/^"//' | sed 's/"}//'`
+              #default value to 0
+              skipInterval=0
+           fi 
+
+           if [ -n "$header" ] && [ -n "$content" ] && [ -n "$logFileName" ] && [ -n "$skipInterval" ]; then
+              echo "$header<#=#>$content<#=#>$logFileName<#=#>$skipInterval" >> $MAP_PATTERN_CONF_FILE
+           fi
+        fi
+    done < $TEMP_PATTERN_CONF_FILE
+    # Sort the config file based on file names to minimise the duplicate delta file generation
+    if [ -f $MAP_PATTERN_CONF_FILE ]; then
+        if [ -f $output_file ]; then
+            rm -f $output_file
+        fi
+        awk -F '<#=#>' '{print $3,$0}' $MAP_PATTERN_CONF_FILE | sort -n | cut -d ' ' -f 2- > $output_file
+    fi
+
+}
+
+      echo "triggertype------------"$triggerType
+# Reschedule the cron based on diagnositic mode
+if [ $triggerType -eq 3 ] ; then
+	echo_t "$timestamp: dca: Processing rescheduleCron job" >> $RTL_LOG_FILE
+    scheduleCron
+    ## Telemetry must be invoked only for reschedule cron job
+    pidCleanup
+    exit 0
+fi
+
+# Pull the settings from Telemetry server periodically
+estbMacAddress=`ifconfig erouter0 | grep HWaddr | cut -c39-55`
+JSONSTR=$estbMacAddress
+CURL_CMD="curl '$DCM_LOG_SERVER_URL?estbMacAddress=$JSONSTR&model=$MODEL_NAME' -o $DCMRESPONSE > /tmp/httpcode.txt"
+
+# Execute curl command
+result= eval $CURL_CMD
+sleep 5
+echo "sleep for :------------------$timeout"
+
+# Regenerate config only during boot-up and when there is an update
+if [ ! -f $SORTED_PATTERN_CONF_FILE ] || [ $triggerType -eq 1 -a ! -f $TELEMETRY_PREVIOUS_LOG ] ; then
+# Start crond daemon for yocto builds
+    pidof crond
+    if [ $? -ne 0 ]; then
+        mkdir -p $CRON_SPOOL
+        touch $CRON_SPOOL/root
+        crond -c $CRON_SPOOL -l 9
+    fi
+
+    if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
+        while [ ! -f $DCMRESPONSE ]
+        do
+            echo "WARNING !!! Unable to locate $DCMRESPONSE .. Retrying " >> $RTL_LOG_FILE
+            GetConfigFile $PEER_COMM_ID
+            scp -i $PEER_COMM_ID -r $ARM_INTERFACE_IP:$DCMRESPONSE $DCMRESPONSE > /dev/null 2>&1
+            rm -f $PEER_COMM_ID
+            sleep 10
+        done
+    fi
+    echo "calling processJsonResponse--------"
+    processJsonResponse $DCMRESPONSE
+    echo "after calling processJsonResponse-----------"
+    clearTelemetryConfig
+    echo "after calling clearTelemetryConfig-----------"
+    generateTelemetryConfig $TELEMETRY_PROFILE_PATH $SORTED_PATTERN_CONF_FILE
+    echo "after calling generateTelemetryConfig--------"
+    scheduleCron
+    echo "after calling scheduleCron-------------------"
+    if [ $triggerType -eq 1 ]; then
+        bootupTelemetryBackup=true
+        ## Telemetry must be invoked only via cron and not during boot-up
+	# pidCleanup
+        #exit 0
+    fi
+fi
+
+mkdir -p $TELEMETRY_PATH_TEMP
+
+if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
+    dropbearRecovery
+    mkdir -p $LOG_PATH
+    TMP_SCP_PATH="/tmp/scp_logs"
+    mkdir -p $TMP_SCP_PATH
+    GetConfigFile $PEER_COMM_ID
+    scp -i $PEER_COMM_ID -r $ARM_INTERFACE_IP:$LOG_PATH/* $TMP_SCP_PATH/ > /dev/null 2>&1
+    scp -i $PEER_COMM_ID -r $ARM_INTERFACE_IP:$LOG_SYNC_PATH/$SelfHealBootUpLogFile  $ARM_INTERFACE_IP:$LOG_SYNC_PATH/$PcdLogFile  $TMP_SCP_PATH/ > /dev/null 2>&1
+    rm -f $PEER_COMM_ID
+
+    RPC_RES=`rpcclient $ARM_ARPING_IP "touch $SCP_COMPLETE"`
+    RPC_OK=`echo $RPC_RES | grep "RPC CONNECTED"`
+    if [ "$RPC_OK" == "" ]; then
+	 echo_t "RPC touch failed : attemp 1"
+
+	 RPC_RES=`rpcclient $ARM_ARPING_IP "touch $SCP_COMPLETE"`
+     RPC_OK=`echo $RPC_RES | grep "RPC CONNECTED"`
+	 if [ "$RPC_OK" == "" ]; then
+		echo_t "RPC touch failed : attemp 2"
+	 fi
+    fi
+
+    ATOM_FILE_LIST=`echo ${ATOM_FILE_LIST} | sed -e "s/{//g" -e "s/}//g" -e "s/,/ /g"`
+    for file in $ATOM_FILE_LIST
+    do
+        if [ -f $TMP_SCP_PATH/$file ]; then
+            rm -f $TMP_SCP_PATH/$file
+        fi
+    done
+
+    if [ -d $TMP_SCP_PATH ]; then
+        cp -r $TMP_SCP_PATH/* $LOG_PATH/
+        rm -rf $TMP_SCP_PATH
+    fi
+
+    sleep 2
+fi
+
+#Clear the final result file
+rm -f $TELEMETRY_JSON_RESPONSE
+
+
+## Generate output file with pattern to match count values
+if [ ! -f $SORTED_PATTERN_CONF_FILE ]; then
+    echo "WARNING !!! Unable to locate telemetry config file $SORTED_PATTERN_CONF_FILE. Exiting !!!" >> $RTL_LOG_FILE
+else
+    # echo_t "Using telemetry pattern stored in : $SORTED_PATTERN_CONF_FILE.!!!" >> $RTL_LOG_FILE
+    defaultOutputJSON="{\"searchResult\":[{\"<remaining_keys>\":\"<remaining_values>\"}]}"
+    echo "nice -n 19 $DCA_BINARY $SORTED_PATTERN_CONF_FILE $previousLogPath" >> $RTL_LOG_FILE
+    dcaOutputJson=`nice -n 19 $DCA_BINARY $SORTED_PATTERN_CONF_FILE $previousLogPath 2>> $RTL_LOG_FILE`
+    if [ -z "$dcaOutputJson" ];
+    then
+      dcaOutputJson=$defaultOutputJSON
+    fi
+
+    echo "dcaoutputjson----!!!!!!!!!!!!----"$dcaOutputJson
+    singleEntry=true
+
+    # Get the snmp and performance values when enabled 
+    # Need to check only when SNMP is enabled in future
+    if [ "$snmpCheck" == "true" ] ; then
+      while read line
+      do
+        pattern=`echo "$line" | awk -F '<#=#>' '{print $1}'`
+        filename=`echo "$line" | awk -F '<#=#>' '{print $2}'`
+        if [ $filename == "snmp" ] || [ $filename == "SNMP" ]; then
+            retvalue=$(getSNMPUpdates $pattern)
+            header=`grep "$pattern<#=#>$filename" $MAP_PATTERN_CONF_FILE | head -n 1 | awk -F '<#=#>' '{print $1}'`
+            if $singleEntry ; then
+               tuneData="{\"$header\":\"$retvalue\"}"
+               outputJson="$outputJson$tuneData"
+               singleEntry=false
+            else
+               tuneData=",{\"$header\":\"$retvalue\"}"
+               outputJson="$outputJson$tuneData" 
+            fi                
+        fi
+       done < $SORTED_PATTERN_CONF_FILE
+     fi
+     
+
+       ## This interface is not accessible from ATOM, replace value from ARM
+       estbMac=$(getEstbMac)
+       firmwareVersion=$(getFWVersion)
+       firmwareVersion=$(echo $firmwareVersion | sed -e "s/imagename://g")
+       partnerId=$(getPartnerId)
+       accountId=$(getAccountId)
+       erouterIpv4=$(getErouterIpv4)
+       erouterIpv6=$(getErouterIpv6)
+
+       
+       if [ "$triggerType" = "1" ]; then
+          if [ "$erouterIpv4" = "null" ]; then
+              erouterIpv4="$DEFAULT_IPV4"
+          fi
+          if [ "$erouterIpv6" = "null" ]; then
+              erouterIpv6="$DEFAULT_IPV6"
+          fi
+       fi
+
+       cur_time=`date "+%Y-%m-%d %H:%M:%S"`
+     
+       if $singleEntry ; then
+            outputJson="$outputJson{\"Profile\":\"RDKB\"},{\"mac\":\"$estbMac\"},{\"erouterIpv4\":\"$erouterIpv4\"},{\"erouterIpv6\":\"$erouterIpv6\"},{\"PartnerId\":\"$partnerId\"},{\"AccountId\":\"$accountId\"},{\"Version\":\"$firmwareVersion\"},{\"Time\":\"$cur_time\"}"
+            singleEntry=false
+       else
+            outputJson="$outputJson,{\"Profile\":\"RDKB\"},{\"mac\":\"$estbMac\"},{\"erouterIpv4\":\"$erouterIpv4\"},{\"erouterIpv6\":\"$erouterIpv6\"},{\"PartnerId\":\"$partnerId\"},{\"AccountId\":\"$accountId\"},{\"Version\":\"$firmwareVersion\"},{\"Time\":\"$cur_time\"}"
+       fi
+       echo "outputjson---------------"$outputJson
+
+       remain="{\"<remaining_keys>\":\"<remaining_values>\"}"
+       outputJson=`echo "$dcaOutputJson" | sed "s/$remain/$outputJson/"`
+       echo "outputjson1---------------"$outputJson
+       echo "$outputJson" > $TELEMETRY_JSON_RESPONSE
+       sleep 2
+
+       echo "TELEMETRY_JSON_RESPONSE file is -----------"$TELEMETRY_JSON_RESPONSE
+       if [ "x$DCA_MULTI_CORE_SUPPORTED" = "xyes" ]; then
+           echo "Notify ARM to pick the updated JSON message in $TELEMETRY_JSON_RESPONSE and upload to splunk" >> $RTL_LOG_FILE
+           # Trigger inotify event on ARM to upload message to splunk
+           GetConfigFile $PEER_COMM_ID
+           if [ $triggerType -eq 2 ]; then
+               ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'notifyFlushLogs' > $TELEMETRY_INOTIFY_EVENT"  > /dev/null 2>&1
+               echo_t "notify ARM for dca execution completion" >> $RTL_LOG_FILE
+           else
+               if [ -f $TELEMETRY_PREVIOUS_LOG -a $triggerType -eq 1 ];then
+                    ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'previousLog' > $TELEMETRY_INOTIFY_EVENT"  > /dev/null 2>&1
+                    echo_t "notify ARM for dca running is for previous log" >> $RTL_LOG_FILE
+               else
+                   if [ "$bootupTelemetryBackup" = "true" -a $triggerType -eq 1 ];then
+                       ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'bootupBackup' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
+                   else
+                       ssh -I $IDLE_TIMEOUT -i $PEER_COMM_ID root@$ARM_INTERFACE_IP "/bin/echo 'splunkUpload' > $TELEMETRY_INOTIFY_EVENT" > /dev/null 2>&1
+                   fi
+               fi
+           fi
+           rm -f $PEER_COMM_ID
+       else
+           if [ $triggerType -eq 2 ]; then
+               touch $TELEMETRY_EXEC_COMPLETE
+           fi
+           if [ $triggerType -eq 1 -a -f $TELEMETRY_PREVIOUS_LOG ];
+           then
+              echo "calling splunkupload----------------------------"
+              sh /lib/rdk/dcaSplunkUpload.sh logbackup_without_upload &
+           else
+              sh /lib/rdk/dcaSplunkUpload.sh &
+           fi
+           proUpdel=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c`
+           echo "number of proUPdel:"$proUpdel
+           #proUpdel=$((proUpdel - 1))
+           uploadProto=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$proUpdel`
+           echo "Upload protocol is:"$uploadProto
+           if [ "$uploadProto" != "TFTP" ]; then
+             HTTPLOGUPLOADURL=`cat /tmp/DCMSettings.conf | grep -i "urn:settings:LogUploadSettings:RepositoryURL" | cut -d "=" -f2`
+             if [ "$HTTPLOGUPLOADURL" == "" ]; then
+                echo "No HTTP URL configured in xconf,going with internal one !!"
+                HTTPLOGUPLOADURL=$DCM_LA_SERVER_URL
+             fi
+             echo "HTTPURL:"$HTTPLOGUPLOADURL
+             sh $RDK_PATH/uploadSTBLogs.sh $HTTPLOGUPLOADURL 1 1 1 0 0 &
+           else
+             delimnr=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | tr -dc ':' |wc -c`
+             echo "number of deli:"$delimnr
+             delimnr=$((delimnr - 1))
+             TFTPIP=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d ":" -f$delimnr | cut -d '"' -f 2`
+             echo "TFTPIP:"$TFTPIP
+             sh $RDK_PATH/uploadSTBLogs.sh $TFTPIP 1 1 1 0 0 &
+           fi
+       fi
+fi
+
+if [ -f $RTL_DELTA_LOG_FILE ]; then
+    rm -f $RTL_DELTA_LOG_FILE
+fi
+
+if [ -f $TEMP_PATTERN_CONF_FILE ]; then
+    rm -f $TEMP_PATTERN_CONF_FILE
+fi
+
+if [ $triggerType -eq 2 ]; then
+   echo_t "forced DCA execution before log upload/reboot. Clearing all markers !!!" >> $RTL_LOG_FILE
+   # Forced execution before flusing of logs, so clear the markers
+   if [ -d $TELEMETRY_PATH_TEMP ]; then
+       rm -rf $TELEMETRY_PATH_TEMP
+   fi
+   rm -rf $TELEMETRY_PATH
+
+fi
+
+if [ -f $EXEC_COUNTER_FILE ]; then
+    dcaNexecCounter=`cat $EXEC_COUNTER_FILE`
+    dcaNexecCounter=`expr $dcaNexecCounter + 1`
+else
+    dcaNexecCounter=0;
+fi
+
+if [ -f $TELEMETRY_PREVIOUS_LOG ]; then
+    echo_t "dca for previous log done" >> $RTL_LOG_FILE
+    rm -f $TELEMETRY_PREVIOUS_LOG $SORTED_PATTERN_CONF_FILE
+    rm -rf $TEMP_NVRAM_LOG_PATH
+    touch $TELEMETRY_PREVIOUS_LOG_COMPLETE
+fi
+
+echo "$dcaNexecCounter" > $EXEC_COUNTER_FILE
+# PID file cleanup
+pidCleanup
diff --git a/recipes-rdkb/sysint-broadband/files/dcm-log.service b/recipes-rdkb/sysint-broadband/files/dcm-log.service
new file mode 100755
index 0000000..1dd1d90
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/dcm-log.service
@@ -0,0 +1,37 @@
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+[Unit]
+Description=DCM Log Service
+
+After=local-fs.target nvram.service previous-log-backup.service network-online.target systemd-timesyncd.service dump-log.service tr69hostif.service
+Requires=network-online.target 
+
+[Service]
+Type=oneshot
+EnvironmentFile=/etc/device.properties
+EnvironmentFile=/etc/dcm.properties
+EnvironmentFile=-/opt/dcm.properties
+ExecStartPre=/bin/sh -c '/bin/touch /rdklogs/logs/dcmscript.log'
+ExecStartPre=/bin/sh -c 'if [ "$DEVICE_TYPE" == "mediaclient" ]; then echo "Not triggered" > /opt/loguploadstatus.txt; fi'
+ExecStart=/bin/sh -c '/lib/rdk/StartDCM.sh >> /rdklogs/logs/telemetry.log &'
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/recipes-rdkb/sysint-broadband/files/getaccountid.sh b/recipes-rdkb/sysint-broadband/files/getaccountid.sh
new file mode 100755
index 0000000..44ca3cd
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/getaccountid.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+####################################################################################
+# If not stated otherwise in this file or this component's Licenses.txt file the
+# following copyright and licenses apply:
+#
+#  Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##################################################################################
+
+if [ -f /etc/os-release ] || [ -f /etc/device.properties ]; then
+        LOG_FOLDER="/rdklogs"
+else
+        LOG_FOLDER="/var/tmp"
+fi
+
+KEY_LEN="32"
+CONSOLEFILE="$LOG_FOLDER/logs/Consolelog.txt.0"
+
+echo_time()
+{
+        echo "`date +"%y%m%d-%T.%6N"` getAccountId() called from: $0 -  $1"
+}
+
+
+check_accountid()
+{
+accountId="$1"
+accountIdlen="$(echo ${#accountId})"
+checkisalnum=`echo $accountId | grep -E '^[-_0-9a-zA-Z]*$'`
+
+if [ "$accountIdlen" -lt "$KEY_LEN" ] && [[ "$checkisalnum" != "" ]] && [[ "$accountId" != "*['!'@'#'"$"%^&*()+]*" ]];  then
+     echo_time "accountId is valid and value retrieved from tr181/webpa param..." >>$CONSOLEFILE
+     echo "$accountId"
+else
+     echo_time "accountId is invalid as contains specail characters or larger than max $KEY_LEN characters..." >>$CONSOLEFILE
+     echo "Unknown"
+fi
+
+}
+
+# Function to get account_id
+getAccountId()
+{
+
+#Get AccountID set in the system via syscfg get command
+accountId=`syscfg get AccountID`
+
+#Try "dmcli" to retrieve accountId if "sysconf" returned null. It's a fallback check.
+if [ "$accountId" == "" ];then
+      accountId=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.AccountInfo.AccountID | grep string | awk '{print $5}'`
+
+      if [ "$accountId" == "" ]; then
+           echo_time "account_id is not available from syscfg.db or tr181 param, defaulting to Unknown...">>$CONSOLEFILE
+           echo "Unknown"
+      else
+           echo_time "Checking accountId is alphanumeric and not greater than $KEY_LEN characters...">>$CONSOLEFILE
+           check_accountid $accountId
+      fi
+
+else
+        echo_time "Checking accountId is alphanumeric and not greater than $KEY_LEN characters...">>$CONSOLEFILE
+        check_accountid $accountId
+fi
+}
+
diff --git a/recipes-rdkb/sysint-broadband/files/getpartnerid.sh b/recipes-rdkb/sysint-broadband/files/getpartnerid.sh
new file mode 100755
index 0000000..4a05777
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/getpartnerid.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+####################################################################################
+# If not stated otherwise in this file or this component's Licenses.txt file the
+# following copyright and licenses apply:
+#
+#  Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##################################################################################
+
+if [ -f /etc/os-release ] || [ -f /etc/device.properties ]; then
+	LOG_FOLDER="/rdklogs"
+else
+	LOG_FOLDER="/var/tmp"
+fi
+
+source /lib/rdk/t2Shared_api.sh
+
+. /etc/device.properties
+
+CONSOLEFILE="$LOG_FOLDER/logs/Consolelog.txt.0"
+
+echo_time()
+{
+	echo "`date +"%y%m%d-%T.%6N"` getPartnerId() called from: $0 -  $1"
+}
+
+# Function to get partner_id
+getPartnerId()
+{
+#Get PartnerID set in the system via syscfg get command
+partner_id=`syscfg get PartnerID`
+syscfg_err=`echo $partner_id | grep -i error`
+
+#Try "dmcli" to retrieve partner_id if "sysconf" returned null. It's a fallback check.
+if [ "$partner_id" == "" ] || [ "$syscfg_err" != "" ];then
+	partner_id=`dmcli eRT getv Device.DeviceInfo.X_RDKCENTRAL-COM_Syndication.PartnerId | grep string | awk '{print $5}'`
+
+	#Check for PartnerID in device.properties if its not set already.
+	if [ "$partner_id" == "" ];then
+		if [ -f "/etc/device.properties" ];then
+# PARTNER_ID is read from etc/device.properties file
+			partner_id=`echo $PARTNER_ID`
+				if [ "$partner_id" == "" ];then
+					echo_time "partner_id is not available from syscfg.db or tr181 param or device.properties, defaulting to comcast..">>$CONSOLEFILE
+					t2CountNotify "SYS_ERROR_PartnerId_missing_sycfg"
+					echo "comcast"
+				else
+					echo_time "partner_id is not available from syscfg.db or tr181 param, value retrieved from device.properties : $partner_id">>$CONSOLEFILE
+					echo "$partner_id"
+				fi
+		else
+			echo_time "partner_id is not available, defaulting to comcast.">>$CONSOLEFILE
+			echo "comcast"
+		fi
+	else
+		echo_time "partner_id is not available from syscfg.db, value retrieved from tr181 param : $partner_id">>$CONSOLEFILE
+		echo "$partner_id"
+	fi
+else
+	echo_time "partner_id retrieved from syscfg.db : $partner_id">>$CONSOLEFILE
+	echo "$partner_id"
+fi
+}
+
+getExperience()
+{
+    echo ""
+}
+
+case=$1
+if [ "$case" = "GetPartnerID" ]; then
+    getPartnerId
+fi
+
diff --git a/recipes-rdkb/sysint-broadband/files/interfaceCalls.sh b/recipes-rdkb/sysint-broadband/files/interfaceCalls.sh
new file mode 100755
index 0000000..05f2fd6
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/interfaceCalls.sh
@@ -0,0 +1,93 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+. /etc/include.properties
+. /etc/device.properties
+#. /etc/env_setup.sh
+
+processCheck()
+{
+   count=`ps | grep $1 | grep -v grep | wc -l`
+   if [ $count == 0 ]; then
+        echo "1"
+   else
+        echo "0"
+   fi
+}
+
+
+getMacAddress()
+{
+     ifconfig -a | grep $ESTB_INTERFACE | tr -s ' ' | cut -d ' ' -f5
+} 
+
+syncLog()
+{
+    cWD=`pwd`
+    syncPath=`find $TEMP_LOG_PATH -type l -exec ls -l {} \; | cut -d ">" -f2`
+    if [ "$syncPath" != "$LOG_PATH" ] && [ -d "$TEMP_LOG_PATH" ]; then
+         cd "$TEMP_LOG_PATH"
+         for file in `ls *.txt *.log`
+         do
+            cat $file >> $LOG_PATH/$file
+            cat /dev/null > $file
+         done
+         cd $cWD
+    else
+         echo "Sync Not needed, Same log folder"
+    fi
+}
+
+rebootFunc()
+{
+    if [ -f savepwrstate.sh ]; then
+         sh /savepwrstate.sh
+         sleep 1
+    fi
+    sync
+
+    if [ ! -f $PERSISTENT_PATH/.lightsleepKillSwitchEnable ]; then
+        syncLog
+
+        if [ -f $TEMP_LOG_PATH/error.log ]; then
+	    cat $TEMP_LOG_PATH/error.log >> $PERSISTENT_PATH/www/error.log 
+	    cat /dev/null > $TEMP_LOG_PATH/error.log
+        fi  
+
+        if [ -f $TEMP_LOG_PATH/.systime ]; then
+	    cp $TEMP_LOG_PATH/.systime $PERSISTENT_PATH/
+        fi  
+
+        if [ -f $TEMP_LOG_PATH/access.log ]; then
+	    cat $TEMP_LOG_PATH/access.log >> $PERSISTENT_PATH/www/access.log 
+	    cat /dev/null > $TEMP_LOG_PATH/access.log
+        fi  
+    fi
+
+    reboot 
+}
+
+
+# Return system uptime in seconds
+Uptime()
+{
+     cat /proc/uptime | awk '{ split($1,a,".");  print a[1]; }'
+}
+
+
diff --git a/recipes-rdkb/sysint-broadband/files/logfiles.sh b/recipes-rdkb/sysint-broadband/files/logfiles.sh
new file mode 100755
index 0000000..3d11724
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/logfiles.sh
@@ -0,0 +1,829 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+#
+
+. /etc/include.properties
+. /etc/device.properties
+
+#RDK-B LOGS
+BootTimeLog="BootTime.log"
+BootTimeLogBackup="BootTime.log.*"
+speedtestLog="speedtest.log"
+speedtestLogBackup="speedtest.log.*"
+ArmConsolelog="ArmConsolelog.txt.0"
+ArmConsolelogBackup="ArmConsolelog.txt.*"
+Consolelog="Consolelog.txt.0"
+ConsolelogBackup="Consolelog.txt.*"
+LMlog="LM.txt.0"
+LMlogBackup="LM.txt.*"
+PAMlog="PAMlog.txt.0"
+PAMlogBackup="PAMlog.txt.*"
+PARODUSlog="PARODUSlog.txt.0"
+PARODUSlogBackup="PARODUSlog.txt.*"
+PSMlog="PSMlog.txt.0"
+PSMlogBackup="PSMlog.txt.*"
+TDMlog="TDMlog.txt.0"
+TDMlogBackup="TDMlog.txt.*"
+TR69log="TR69log.txt.0"
+TR69logBackup="TR69log.txt.*"
+WEBPAlog="WEBPAlog.txt.0"
+WEBPAlogBackup="WEBPAlog.txt.*"
+WiFilog="WiFilog.txt.0"
+WiFilogBackup="WiFilog.txt.*"
+FirewallDebug="FirewallDebug.txt"
+FirewallDebugBackup="FirewallDebug.txt.*"
+MnetDebug="MnetDebug.txt"
+MnetDebugBackup="MnetDebug.txt.*"
+wifihealthlog="wifihealth.txt"
+wifihealthBackup="wifihealth.txt.*"
+CRLog="CRlog.txt.0"
+CRLogBackup="CRlog.txt.*"
+
+xreLog="receiver.log"
+cecLog="cec_log.txt"
+cecLogsBackup="cec_log.txt.*"
+xreLogsBackup="receiver.log.*"
+receiverMON="ReceiverMON.txt"
+runXreLog="runXRE_log.txt"
+runXreLogsBackup="runXRE_log.txt.*"
+greenpeakLog="greenpeak.log"
+greenpeakLogsBackup="greenpeak.log.*"
+appStatusLog="app_status.log"
+appStatusLogsBackup="app_status.log.*"
+gpInitLog="gp_init.log"
+gpInitLogsBackup="gp_init.log.*"
+#demsg Logs
+dmesgLog="messages_printk.txt"
+dmesgLogsBackup="messages_printk_bak*"
+sysLog="messages.txt"
+ntpLog="ntp.log"
+sysLogsBackup="messages.txt.*"
+ntpLogsBackup="ntp.log.*"
+sysDmesgLog="messages-dmesg.txt"
+sysDmesgLogsBackup="messages-dmesg.txt.*"
+startupDmesgLog="startup_stdout_log.txt"
+startupDmesgLogsBackup="startup_stdout_log.*"
+lighttpdErrorLog="lighttpd.error.log"
+lighttpdErrorLogsBackup="lighttpd.error.log.*"
+lighttpdAccessLog="lighttpd.access.log"
+lighttpdAccessLogsBackup="lighttpd.access.log.*"
+dcmLog="dcmscript.log"
+dcmLogsBackup="dcmscript.log.*"
+uiLog="uimgr_log.txt"
+uiLogsBackup="uimgr_log.txt.*"
+storagemgrLog="storagemgr.log"
+storagemgrLogsBackup="storagemgr.log.*"
+rf4ceLog="rf4ce_log.txt"
+rf4ceLogsBackup="rf4ce_log.txt.*"
+ctrlmLog="ctrlm_log.txt"
+ctrlmLogsBackup="ctrlm_log.txt.*"
+xDiscoveryLog="xdiscovery.log"
+xDiscoveryLogsBackup="xdiscovery.log.*"
+xDiscoveryListLog="xdiscoverylist.log"
+xDiscoveryListLogsBackup="xdiscoverylist.log.*"
+hdmiLog="hdmi_log.txt"
+rebootLog="reboot.log"
+rebootInfoLog="rebootInfo.log"
+ueiLog="uei_init.log"
+wbLog="wbdevice.log"
+swUpdateLog="swupdate.log"
+topLog="top_log.txt"
+topLogsBackup="top_log.txt.*"
+mocaLog="mocalog.txt"
+coreLog="coredump.log"
+coreDumpLog="core_log.txt"
+coreDumpLogsBackup="core_log.txt.*"
+version="version.txt"
+fusionDaleLog="fusiondale_log.txt"
+socProvisionLog="socprov.log"
+socProvisionLogsBackup="socprov.log.*"
+socProvisionCryptoLog="socprov-crypto.log"
+socProvisionCryptoLogsBackup="socprov-crypto.log.*"
+applicationsLog="applications.log"
+applicationsLogsBackup="applications.log.*"
+systemLog="system.log"
+systemLogsBackup="system.log.*"
+bootUpLog="bootlog"
+resetLog="Reset.txt"
+resetLogsBackup="Reset.txt"
+backUpDumpLog="backupCoreDumpLog.txt"
+gpLog="gp.log"
+gpLogsBackup="gp.log.*"
+diskInfoLog="diskInfo.txt"
+diskEventsLog="diskEvents.txt"
+
+rmfLog="rmfstr_log.txt"
+rmfLogsBackup="rmfstr_log.txt.*"
+podLog="pod_log.txt"
+podLogsBackup="pod_log.txt.*"
+vodLog="vodclient_log.txt"
+vodLogsBackup="vodclient_log.txt.*"
+rstreamFdLog="rstreamer_fdlist.txt"
+
+recorderLog="/opt/rec_debug.log"
+fdsLog="fds.log"
+fdsLogsBackup="fds.log.*"
+trmLog="trm.log"
+trmMgrLog="trmmgr.log"
+trmLogsBackup="trm.log.*"
+trmMgrLogsBackup="trmmgr.log.*"
+threadLog="vlthreadanalyzer_log.txt"
+threadLogsBackup="vlthreadanalyzer_log.txt.*"
+xDeviceLog="xdevice.log"
+xDeviceLogsBackup="xdevice.log.*"
+authServiceLog="authservice.log"
+cardProvisionCheckLog="card-provision-check.log"
+ipdnlLog="ipdllogfile.txt"
+diskCleanupInfoLog="disk_cleanup_info.log"
+topOsalLog="top_osal.txt"
+topOsalLogsBackup="top_osal.txt.*"
+mocaStatusLog="mocaStatus.log"
+mocaStatusLogsBackup="mocaStatus.log.*"
+mfrLog="mfrlib_log.txt"
+mfrLogsBackup="mfrlib_log.txt.*"
+mfrLogRdk="mfr_log.txt"
+mfrLogsRdkBackup="mfr_log.txt.*"
+adobeCleanupLog="cleanAdobe.log"
+
+cefLog="cef.log"
+cefLogsBackup="cef.log.*"
+diskCleanupLog="disk_cleanup.log"
+diskCleanupLog1="disk_cleanup.log"
+diskCleanupLogsBackup="disk_cleanup.log.*"
+decoderStatusLog="procStatus.log"
+decoderStatusLogsBackup="procStatus.log.*"
+recorderLog="/opt/rec_debug.log"
+psLogsBackup=ps_out.txt* 
+netsrvLog="netsrvmgr.log"
+netsrvLogsBackup="netsrvmgr.log.*"
+samhainLog="samhain.log"
+samhainLogsBackup="samhain.log.*"
+fogLog="fog.log"
+fogLogsBackup="fog.log.*"
+hddStatusLog="diskinfo.log"
+hddStatusLogsBackup="diskinfo.log.*"
+xiRecoveryLog="discoverV4Client.log"
+xiRecoveryLogsBackup="discoverV4Client.log.*"
+dropbearLog="dropbear.log"
+dropbearLogsBackup="dropbear.log.*"
+bluetoothLog="btmgrlog.txt"
+bluetoothLogBackup="btmgrlog.txt.*"
+mountLog="mount_log.txt"
+mountLogBackup="mount_log.txt.*"
+rbiDaemonLog="rbiDaemon.log"
+rbiDaemonLogsBackup="rbiDaemon.log.*"
+rfcLog="rfcscript.log"
+rfcLogsBackup="rfcscript.log.*"
+tlsLog="tlsError.log"
+tlsLogsBackup="tlsError.log.*"
+playreadycdmiLog="playreadycdmi.log"
+playreadycdmiLogsBackup="playreadycdmi.log.*"
+wpecdmiLog="wpecdmi.log"
+wpecdmiLogsBackup="wpecdmi.log.*"
+pingTelemetryLog="ping_telemetry.log"
+pingTelemetryLogsBackup="ping_telemetry.log.*"
+deviceDetailsLog="device_details.log"
+zramLog="zram.log"
+zramLogsBackup="zram.log.*"
+appmanagerLog="appmanager.log"
+appmanagerLogsBackup="appmanager.log.*"
+hwselfLog="hwselftest.log"
+hwselfLogsBackup="hwselftest.log.*"
+easPcapFile="eas.pcap"
+mocaPcapFile="moca.pcap"
+nlmonLog="nlmon.log"
+nlmonLogsBackup="nlmon.log.*"
+audiocapturemgrLogs="audiocapturemgr.log"
+
+if [ "$CONTAINER_SUPPORT" == "true" ];then
+    xreLxcLog="xre.log"
+    xreLxcLogsBackup="xre.log.*"
+    xreLxcApplicationsLog="xre-applications.log"
+    xreLxcApplicationsLogsBackup="xre-applications.log.*"
+fi
+
+if [ "$SOC" = "BRCM" ];then
+      nxSvrLog="nxserver.log"
+      nxSvrLogsBackup="nxserver.log.*"
+      procStatusLog="proc-status-logger.log"
+      procStatusLogsBackup="proc-status-logger.log.*"
+fi
+
+
+if [ "$DEVICE_TYPE" != "mediaclient" ]; then
+     riLog="ocapri_log.txt"
+     riLogsBackup="ocapri_log.txt.*"
+     riLogsBackup1="ocapri_log.txt_1"
+     mpeosmainMON="mpeos-mainMON.txt"
+     mpeosRebootLog="/opt/mpeos_reboot_log.txt"
+     cardStatusLog="card_status.log"
+     heapDmpLog="jvmheapdump.txt"
+     rfStatisticsLog="rf_statistics_log.txt"
+     ablReasonLog="ABLReason.txt"
+     ecmLog="messages-ecm.txt"
+     ecmLogsBackup="messages-ecm.txt.*"
+     pumaLog="messages-puma.txt"
+     pumaLogsBackup="messages-puma.txt.*"
+     pumaLog1="messages-ecm.txt"
+     pumaLogsBackup1="messages-ecm.txt.*"
+     xfsdmesgLog="xfs_mount_dmesg.txt"
+     snmpdLog="snmpd.log"
+     snmpdLogsBackup="snmpd.log.*"
+     upstreamStatsLog="upstream_stats.log"
+     upstreamStatsLogsBackup="upstream_stats.log.*"
+     dibblerLog="dibbler.log"
+     dibblerLogsBackup="dibbler.log.*"
+     dnsmasqLog="dnsmasq.log"
+     dnsmasqLogsBackup="dnsmasq.log.*"
+else
+     ablReasonLog="ABLReason.txt"
+     wifiTelemetryLog="wifi_telemetry.log"
+     wifiTelemetryLogBackup="wifi_telemetry.log.*"
+     tr69Log="tr69Client.log"
+     tr69AgentLog="tr69agent.log"
+     tr69HostIfLog="tr69hostif.log"
+     gatewayLog="gwSetupLogs.txt"
+     ipSetupLog="ipSetupLogs.txt"
+     tr69DownloadLog="tr69FWDnld.log"
+     tr69AgentHttpLog="tr69agent_HTTP.log"
+     tr69AgentHttpLogsBackup="tr69agent_HTTP.log.*"
+     tr69AgentSoapLog="tr69agent_SoapDebug.log"
+     tr69AgentSoapLogsBackup="tr69agent_SoapDebug.log.*"
+     webpavideoLog="webpavideo.log"
+     webpavideoLogsBackup="webpavideo.log.*"
+     xiConnectionStatusLog="xiConnectionStats.txt"
+     xiConnectionStatusLogsBackup="xiConnectionStats.txt.*"
+fi
+if [ "$WIFI_SUPPORT" == "true" ];then
+    wpaSupplicantLog="wpa_supplicant.log"
+    wpaSupplicantLogsBackup="wpa_supplicant.log.*"
+    dhcpWifiLog="dhcp-wifi.log"
+    dhcpWifiLogsBackup="dhcp-wifi.log.*"
+fi
+if [ "$DEVICE_TYPE" ==  "XHC1" ];then
+
+        streamsrvLog="stream_server_log.txt"
+        streamsrvLogsBackup="stream_server_log.txt.*"
+
+        stunnelHttpsLog="stunnel_https_log.txt"
+        stunnelHttpsLogsBackup="stunnel_https_log.txt.*"
+
+        upnpLog="upnp_log.txt"
+        upnpLogsBackup="upnp_log.txt.*"
+
+        upnpigdLog="upnpigd_log.txt"
+        upnpigdLogsBackup="upnpigd_log.txt.*"
+
+        cgiLog="cgi_log.txt"
+        cgiLogsBackup="cgi_log.txt.*"
+
+        systemLog="system_log.txt"
+        systemLogsBackup="system_log.txt.*"
+
+        eventLog="event_log.txt"
+        eventLogsBackup="event_log.txt.*"
+
+        xw3MonitorLog="oem_log.txt"
+        xw3MonitorLogsBackup="oem_log.txt.*"
+
+        sensorDLog="sensor_daemon_log.txt"
+        sensorDLogsBackup="sensor_daemon_log.txt.*"
+
+        webpaLog="webpa_log.txt"
+        webpaLogsBackup="webpa_log.txt.*"
+ 
+        xwclientLog="xwclient_log.txt"
+        xwclientLogsBackup="xwclient_log.txt.*"
+
+        xwswupdateLog="xwswupdate.log"
+        xwswupdateLogsBackup="xwswupdate.log.*"
+ 
+        userLog="user_log.txt"
+        userLogsBackup="user_log.txt.*"
+        
+        webrtcStreamingLog="webrtc_streaming_log.txt"
+        webrtcStreamingLogsBackup="webrtc_streaming_log.txt.*"
+        
+        cvrPollLog="cvrpoll_log.txt"
+        cvrPollLogsBackup="cvrpoll_log.txt.*"
+  
+        thumbnailUploadLog="thumbnail_log.txt"
+        thumbnailUploadBackupLog="thumbnail_log.txt.*"
+	 
+        metricsLog="dmesg_log.txt"
+        metricsLogsBackup="dmesg_log.txt.*"
+
+        wifiLog="wifi_log.txt"
+        wifiLogsBackup="wifi_log.txt.*"
+
+        rfcLog="rfcscript.log"
+        rfcLogsBackup="rfcscript.log.*"
+
+	overlayLog="overlay_log.txt"
+	overlayLogsBackup="overlay_log.txt.*"
+
+        xvisionLog="xvision_log.txt"
+        xvisionLogsBackup="xvision_log.txt.*"
+
+        ivaDaemonLog="iva_daemon_log.txt"
+        ivaDaemonLogsBackup="iva_daemon_log.txt.*"
+
+        evoLog="evo_log.txt"
+        evoBackupLog="evo_log.txt.*"
+
+	camstreamsrvLog="camstreamserver.log"
+        camstreamsrvLogsBackup="camstreamserver.log.*"
+
+        mongsLog="mongoose-cam-stream-server.txt"
+        mongsLogsBackup="mongoose-cam-stream-server.txt.*"
+fi
+
+if [ "$HDD_ENABLED" = "false" ]; then
+    sysLogBAK1="bak1_messages.txt"
+    sysLogBAK2="bak2_messages.txt"
+    sysLogBAK3="bak3_messages.txt"
+    logBAK1="bak1_*"
+    logBAK2="bak2_*"
+    logBAK3="bak3_*"
+fi
+
+moveFile()
+{        
+     if [[ -f $1 ]]; then mv $1 $2; fi
+}
+ 
+moveFiles()
+{
+     currentDir=`pwd`
+     cd $2
+     
+     for f in `ls $3 2>/dev/null`
+     do
+       $1 $f $4
+     done
+     
+     cd $currentDir
+}
+
+backup()
+{
+    source=$1
+    destn=$2
+    operation=$3
+    if [ "$DEVICE_TYPE" != "mediaclient" ]; then
+          if [ -f $source$riLog ] ; then $operation $source$riLog $destn; fi
+          if [ -f $mpeosRebootLog ] ; then
+               if [ "$BUILD_TYPE" = "dev" ]; then
+                    cp $mpeosRebootLog $destn
+                    mv $recorderLog $destn
+               else
+                    mv $recorderLog $destn
+                    $operation $mpeosRebootLog $destn
+               fi
+          fi
+    fi
+    if [ -f $source$xreLog ] ; then $operation $source$xreLog $destn; fi
+    if [ -f $source$cecLog ] ; then $operation $source$cecLog $destn; fi
+    if [ -f $source$wbLog ] ; then $operation $source$wbLog $destn; fi
+    if [ -f $source$sysLog ] ; then $operation $source$sysLog $destn; fi
+    if [ -f $source$ntpLog ] ; then $operation $source$ntpLog $destn; fi
+    if [ -f $source/$uiLog ] ; then $operation $source/$uiLog $destn; fi
+    if [ -f $source/$storagemgrLog ] ; then $operation $source/$storagemgrLog $destn; fi
+    if [ -f $source/$rf4ceLog ] ; then $operation $source/$rf4ceLog $destn; fi
+    if [ -f $source/$ctrlmLog ] ; then $operation $source/$ctrlmLog $destn; fi
+    if [ -f $source/$applicationsLog ] ; then $operation $source/$applicationsLog $destn; fi
+    if [ -f $source/$systemLog ] ; then $operation $source/$systemLog $destn; fi
+    if [ -f $source/$bootUpLog ] ; then $operation $source/$bootUpLog $destn; fi
+    if [ -f $source/$startupDmesgLog ] ; then $operation $source/$startupDmesgLog $destn; fi
+    if [ -f $source/$diskCleanupLog ] ; then $operation $source/$diskCleanupLog $destn; fi
+    if [ -f $source/$diskCleanupInfoLog ] ; then $operation $source/$diskCleanupInfoLog $destn; fi
+    if [ -f $source/$diskCleanupLog1 ] ; then $operation $source/$diskCleanupLog1 $destn; fi
+    if [ -f $source$sysDmesgLog ] ; then $operation $source$sysDmesgLog $destn; fi
+    if [ -f $source$coreDumpLog ] ; then $operation $source$coreDumpLog $destn; fi
+    if [ -f $source$adobeCleanupLog ] ; then $operation $source$adobeCleanupLog $destn; fi
+    if [ -f $source$bluetoothLog ] ; then $operation $source$bluetoothLog $destn; fi
+    if [ -f $source$easPcapFile ] ; then $operation $source$easPcapFile $destn; fi
+    if [ -f $source$mocaPcapFile ] ; then $operation $source$mocaPcapFile $destn; fi
+    if [ -f $source$mountLog ] ; then $operation $source$mountLog $destn; fi
+    if [ "$CONTAINER_SUPPORT" == "true" ];then
+        if [ -f $source$xreLxcLog ] ; then $operation $source$xreLxcLog $destn; fi
+        if [ -f $source/$xreLxcApplicationsLog ] ; then $operation $source/$xreLxcApplicationsLog $destn; fi
+    fi
+
+    if [ "$SOC" = "BRCM" ];then
+         if [ -f $source$nxSvrLog ] ; then $operation $source$nxSvrLog $destn; fi
+         if [ -f $source$procStatusLog ] ; then $operation $source$procStatusLog $destn; fi
+    fi
+}
+
+crashLogsBackup()
+{
+    opern=$1
+    src=$2
+    destn=$3
+
+    moveFiles $opern $src receiver.log_* $destn
+    moveFiles $opern $src ocapri_log.txt_* $destn
+    moveFiles $opern $src messages.txt_* $destn
+    moveFiles $opern $src app_status_backup.log_* $destn
+}
+
+backupAppBackupLogFiles()
+{
+     opern=$1
+     source=$2
+     destn=$3
+    
+     if [ "$DEVICE_TYPE" != "mediaclient" ]; then
+	 moveFiles $opern $source $BootTimeLogBackup $destn
+ 	 moveFiles $opern $source $speedtestLogBackup $destn
+	 moveFiles $opern $source $ArmConsolelogBackup $destn
+	 moveFiles $opern $source $ConsolelogBackup $destn
+	 moveFiles $opern $source $PAMlogBackup $destn
+	 moveFiles $opern $source $PARODUSlogBackup $destn
+	 moveFiles $opern $source $PSMlogBackup $destn
+	 moveFiles $opern $source $TDMlogBackup $destn
+	 moveFiles $opern $source $TR69logBackup $destn
+	 moveFiles $opern $source $WEBPAlogBackup $destn
+	 moveFiles $opern $source $WiFilogBackup $destn
+	 moveFiles $opern $source $FirewallDebugBackup $destn
+	 moveFiles $opern $source $MnetDebugBackup $destn
+         moveFiles $opern $source $wifihealthBackup $destn
+	 moveFiles $opern $source $CRLogBackup $destn
+	 moveFiles $opern $source $LMlogBackup $destn
+
+         moveFiles $opern $source $riLogsBackup $destn
+         moveFiles $opern $source $riLogsBackup1 $destn
+	 moveFiles $opern $source $ecmLogsBackup $destn
+         moveFiles $opern $source $pumaLogsBackup $destn
+         moveFiles $opern $source $pumaLogsBackup1 $destn
+         moveFiles $opern $source $snmpdLogsBackup $destn
+         moveFiles $opern $source $upstreamStatsLogsBackup $destn
+         moveFiles $opern $source $dibblerLogsBackup $destn
+         moveFiles $opern $source $dnsmasqLogsBackup $destn
+     else
+         moveFiles $opern $source $wifiTelemetryLogBackup $destn
+         moveFiles $opern $source $tr69AgentHttpLogsBackup $destn
+         moveFiles $opern $source $tr69AgentSoapLogsBackup $destn
+         moveFiles $opern $source $webpavideoLogsBackup $destn
+         moveFiles $opern $source $xiConnectionStatusLogsBackup $destn
+     fi
+     if [ "$WIFI_SUPPORT" == "true" ];then
+         moveFiles $opern $source $wpaSupplicantLogsBackup $destn
+         moveFiles $opern $source $dhcpWifiLogsBackup $destn
+     fi
+     if [ "$DEVICE_TYPE" ==  "XHC1" ];then
+        moveFiles $opern $source $streamsrvLogsBackup $destn
+        moveFiles $opern $source $stunnelHttpsLogsBackup $destn
+        moveFiles $opern $source $upnpLogsBackup $destn
+        moveFiles $opern $source $upnpigdLogsBackup $destn
+        moveFiles $opern $source $cgiLogsBackup $destn
+        moveFiles $opern $source $systemLogsBackup $destn
+        moveFiles $opern $source $eventLogsBackup $destn
+        moveFiles $opern $source $xw3MonitorLogsBackup $destn
+        moveFiles $opern $source $sensorDLogsBackup $destn
+        moveFiles $opern $source $webpaLogsBackup $destn
+        moveFiles $opern $source $xwclientLogsBackup $destn
+        moveFiles $opern $source $xwswupdateLogsBackup $destn
+        moveFiles $opern $source $userLogsBackup $destn
+        moveFiles $opern $source $webrtcStreamingLogsBackup $destn
+        moveFiles $opern $source $cvrPollLogsBackup $destn
+        moveFiles $opern $source $ivaDaemonLogsBackup $destn
+        moveFiles $opern $source $thumbnailUploadBackupLog $destn
+        moveFiles $opern $source $metricsLogsBackup $destn
+        moveFiles $opern $source $wifiLogsBackup $destn
+        moveFiles $opern $source $dcmLogsBackup $destn
+        moveFiles $opern $source $netsrvLogsBackup $destn
+        moveFiles $opern $source $diskCleanupLogsBackup $destn
+        moveFiles $opern $source $applicationsLogsBackup $destn
+        moveFiles $opern $source $rfcLogsBackup $destn
+        moveFiles $opern $source $overlayLogsBackup $destn
+        moveFiles $opern $source $sysLogsBackup $destn
+        moveFiles $opern $source $startupDmesgLogsBackup $destn
+        moveFiles $opern $source $sysDmesgLogsBackup $destn
+        moveFiles $opern $source $xvisionLogsBackup $destn
+        moveFiles $opern $source $evoBackupLog $destn
+	moveFiles $opern $source $camstreamsrvLogsBackup $destn
+	moveFiles $opern $source $mongsLogsBackup $destn
+     else
+     	moveFiles $opern $source $mocaStatusLogsBackup $destn
+     	moveFiles $opern $source $runXreLogsBackup $destn
+     	moveFiles $opern $source $xreLogsBackup $destn
+     	moveFiles $opern $source $cecLogsBackup $destn
+     	moveFiles $opern $source $sysLogsBackup $destn
+     	moveFiles $opern $source $ntpLogsBackup $destn
+     	moveFiles $opern $source $startupDmesgLogsBackup $destn
+     	moveFiles $opern $source $gpInitLogsBackup $destn
+     	moveFiles $opern $source $appStatusLogsBackup $destn
+     	moveFiles $opern $source $dmesgLogsBackup $destn
+     	moveFiles $opern $source $xDiscoveryLogsBackup $destn
+     	moveFiles $opern $source $xDiscoveryListLogsBackup $destn
+     	moveFiles $opern $source $uiLogsBackup $destn
+     	moveFiles $opern $source $storagemgrLogsBackup $destn
+     	moveFiles $opern $source $rf4ceLogsBackup $destn
+     	moveFiles $opern $source $ctrlmLogsBackup $destn
+     	moveFiles $opern $source $lighttpdErrorLogsBackup $destn
+     	moveFiles $opern $source $lighttpdAccessLogsBackup $destn
+     	moveFiles $opern $source $dcmLogsBackup $destn
+     	moveFiles $opern $source $greenpeakLogsBackup $destn
+     	moveFiles $opern $source $trmLogsBackup $destn
+     	moveFiles $opern $source $trmMgrLogsBackup $destn
+     	moveFiles $opern $source $rmfLogsBackup $destn
+     	moveFiles $opern $source $podLogsBackup $destn
+     	moveFiles $opern $source $vodLogsBackup $destn
+     	moveFiles $opern $source $fdsLogsBackup $destn
+     	moveFiles $opern $source $threadLogsBackup $destn
+     	moveFiles $opern $source $xDeviceLogsBackup $destn
+     	moveFiles $opern $source $coreDumpLogsBackup $destn
+     	moveFiles $opern $source $applicationsLogsBackup $destn
+     	moveFiles $opern $source $socProvisionLogsBackup $destn
+        moveFiles $opern $source $socProvisionCryptoLogsBackup $destn
+     	moveFiles $opern $source $topOsalLogsBackup $destn
+     	moveFiles $opern $source $decoderStatusLogsBackup $destn
+     	moveFiles $opern $source $mfrLogsBackup $destn
+     	moveFiles $opern $source $mfrLogsRdkBackup $destn
+     	moveFiles $opern $source $sysDmesgLogsBackup $destn
+     	moveFiles $opern $source $resetLogsBackup $destn
+     	moveFiles $opern $source $gpLogsBackup $destn
+     	moveFiles $opern $source $psLogsBackup $destn
+     	moveFiles $opern $source $cefLogsBackup $destn
+     	moveFiles $opern $source $topLogsBackup $destn
+     	moveFiles $opern $source $netsrvLogsBackup $destn
+     	moveFiles $opern $source $diskCleanupLogsBackup $destn
+     	moveFiles $opern $source $samhainLogsBackup $destn
+        moveFiles $opern $source $fogLogsBackup $destn
+     	moveFiles $opern $source $hddStatusLogsBackup $destn
+     	moveFiles $opern $source $xiRecoveryLogsBackup $destn
+     	moveFiles $opern $source $dropbearLogsBackup $destn
+     	moveFiles $opern $source $bluetoothLogBackup $destn
+     	moveFiles $opern $source $easPcapFile $destn
+     	moveFiles $opern $source $mocaPcapFile $destn
+        moveFiles $opern $source $mountLogBackup $destn
+        moveFiles $opern $source $rbiDaemonLogsBackup $destn
+        moveFiles $opern $source $rfcLogsBackup $destn
+        moveFiles $opern $source $tlsLogsBackup $destn
+        moveFiles $opern $source $playreadycdmiLogsBackup $destn
+        moveFiles $opern $source $wpecdmiLogsBackup $destn
+        moveFiles $opern $source $pingTelemetryLogsBackup $destn
+        moveFiles $opern $source $zramLogsBackup $destn
+        moveFiles $opern $source $appmanagerLogsBackup $destn
+        moveFiles $opern $source $nlmonLogsBackup $destn
+        moveFiles $opern $source $hwselfLogsBackup $destn
+     fi
+
+     if [ "$CONTAINER_SUPPORT" == "true" ];then
+         moveFiles $opern $source $xreLxcLogsBackup $destn
+         moveFiles $opern $source $xreLxcApplicationsLogsBackup $destn
+     fi
+
+     moveFiles $opern $source $systemLogsBackup $destn
+     if [ "$SOC" = "BRCM" ];then
+          moveFiles $opern $source $nxSvrLogsBackup $destn
+          moveFiles $opern $source $procStatusLogsBackup $destn
+     fi
+     # backup older cycle logs
+     if [ "$MEMORY_LIMITATION_FLAG" = "true" ]; then
+          moveFiles $opern $source $logBAK1 $destn
+          moveFiles $opern $source $logBAK2 $destn
+          moveFiles $opern $source $logBAK3 $destn
+     fi
+
+}
+
+backupSystemLogFiles()
+{
+     operation=$1
+     source=$2
+     destn=$3
+
+     if [ -f $source/$BootTimeLog ] ; then $operation $source/$BootTimeLog $destn; fi
+     if [ -f $source/$speedtestLog ] ; then $operation $source/$speedtestLog $destn; fi
+     if [ -f $source/$ArmConsolelog ] ; then $operation $source/$ArmConsolelog $destn; fi
+     if [ -f $source/$Consolelog ] ; then $operation $source/$Consolelog $destn; fi
+     if [ -f $source/$LMlog ] ; then $operation $source/$LMlog $destn; fi
+     if [ -f $source/$PAMlog ] ; then $operation $source/$PAMlog $destn; fi
+     if [ -f $source/$PARODUSlog ] ; then $operation $source/$PARODUSlog $destn; fi
+     if [ -f $source/$PSMlog ] ; then $operation $source/$PSMlog $destn; fi
+     if [ -f $source/$TDMlog ] ; then $operation $source/$TDMlog $destn; fi
+     if [ -f $source/$TR69log ] ; then $operation $source/$TR69log $destn; fi
+     if [ -f $source/$WEBPAlog ] ; then $operation $source/$WEBPAlog $destn; fi
+     if [ -f $source/$WiFilog ] ; then $operation $source/$WiFilog $destn; fi
+     if [ -f $source/$FirewallDebug ] ; then $operation $source/$FirewallDebug $destn; fi
+     if [ -f $source/$MnetDebug ] ; then $operation $source/$MnetDebug $destn; fi 
+     if [ -f $source/$wifihealthlog ] ; then $operation $source/$wifihealthlog $destn; fi
+     if [ -f $source/$CRLog ] ; then $operation $source/$CRLog $destn; fi
+
+
+     # generic Logs
+     if [ -f $source/$systemLog ] ; then $operation $source/$systemLog $destn; fi
+     if [ -f $source/$resetLog ] ; then $operation $source/$resetLog $destn; fi
+     if [ -f $source/$backUpDumpLog ] ; then $operation $source/$backUpDumpLog $destn; fi
+     if [ -f $source/$bootUpLog ] ; then $operation $source/$bootUpLog $destn; fi
+     if [ -f $source/$applicationsLog ] ; then $operation $source/$applicationsLog $destn; fi
+     if [ -f $source/$runXreLog ] ; then $operation $source/$runXreLog $destn; fi
+     if [ -f $source/$xreLog ] ; then $operation $source/$xreLog $destn; fi
+     if [ -f $source/$cecLog ] ; then $operation $source/$cecLog $destn; fi
+     if [ -f $source/$gpInitLog ] ; then $operation $source/$gpInitLog $destn; fi
+     if [ -f $source/$hdmiLog ] ; then $operation $source/$hdmiLog $destn; fi
+     if [ -f $source/$uiLog ] ; then $operation $source/$uiLog $destn; fi
+     if [ -f $source/$storagemgrLog ] ; then $operation $source/$storagemgrLog $destn; fi
+     if [ -f $source/$rf4ceLog ] ; then $operation $source/$rf4ceLog $destn; fi
+     if [ -f $source/$ctrlmLog ] ; then $operation $source/$ctrlmLog $destn; fi
+     if [ -f $source/$ipdnlLog ] ; then $operation $source/$ipdnlLog $destn; fi
+
+     if [ -f $source/$fdsLog ] ; then $operation $source/$fdsLog $destn; fi
+     if [ -f $source/$dmesgLog ] ; then $operation $source/$dmesgLog $destn; fi
+     if [ -f $source/$appStatusLog ] ; then $operation $source/$appStatusLog $destn; fi
+     if [ -f $source/$gpLog ]; then $operation $source/$gpLog $destn; fi
+     if [ -f $source/$sysLog ] ; then $operation $source/$sysLog $destn; fi
+     if [ -f $source/$ntpLog ] ; then $operation $source/$ntpLog $destn; fi
+     if [ -f $source/$wbLog ] ; then $operation $source/$wbLog $destn; fi
+     if [ -f $source/$ueiLog ] ; then $operation $source/$ueiLog $destn; fi
+     if [ -f $source/$receiverMON ] ; then $operation $source/$receiverMON $destn; fi
+     if [ -f $source/$swUpdateLog ] ; then $operation $source/$swUpdateLog $destn; fi
+     if [ -f $source/$topLog ] ; then $operation $source/$topLog $destn; fi
+     if [ -f $source/$fusionDaleLog ] ; then $operation $source/$fusionDaleLog $destn; fi
+
+     if [ -f $source/$mfrLog ] ; then $operation $source/$mfrLog $destn; fi
+     if [ -f $source/$mocaLog ] ; then $operation $source/$mocaLog $destn; fi
+     if [ -f $source/$rebootLog ] ; then $operation $source/$rebootLog $destn; fi
+     if [ -f $source/$rebootInfoLog ] ; then $operation $source/$rebootInfoLog $destn; fi
+     if [ -f $source/$xDiscoveryLog ] ; then $operation $source/$xDiscoveryLog $destn; fi
+     if [ -f $source/$xDiscoveryListLog ] ; then $operation $source/$xDiscoveryListLog $destn; fi
+
+     if [ -f $source/$socProvisionLog ] ; then $operation $source/$socProvisionLog $destn; fi
+     if [ -f $source/$socProvisionCryptoLog ] ; then $operation $source/$socProvisionCryptoLog $destn; fi
+     if [ -f $source/$lighttpdErrorLog ] ; then $operation $source/$lighttpdErrorLog $destn; fi
+     if [ -f $source/$lighttpdAccessLog ] ; then $operation $source/$lighttpdAccessLog $destn; fi
+     if [ -f $source/$dcmLog ] ; then $operation $source/$dcmLog $destn; fi
+     if [ -f $source/$coreDumpLog ] ; then $operation $source/$coreDumpLog $destn; fi
+     if [ -f $source/$mountLog ] ; then $operation $source/$mountLog $destn; fi
+     if [ -f $source/$rbiDaemonLog ] ; then $operation $source/$rbiDaemonLog $destn; fi
+     if [ -f $source/$rfcLog ] ; then $operation $source/$rfcLog $destn; fi
+     if [ -f $source/$tlsLog ] ; then $operation $source/$tlsLog $destn; fi
+     if [ -f $source/$playreadycdmiLog ] ; then $operation $source/$playreadycdmiLog $destn; fi
+     if [ -f $source/$wpecdmiLog ] ; then $operation $source/$wpecdmiLog $destn; fi
+     if [ -f $source/$pingTelemetryLog ] ; then $operation $source/$pingTelemetryLog $destn; fi
+     if [ -f $source/$deviceDetailsLog ] ; then $operation $source/$deviceDetailsLog $destn; fi
+     if [ -f $source/$zramLog ] ; then $operation $source/$zramLog $destn; fi
+     if [ -f $source/$appmanagerLog ] ; then $operation $source/$appmanagerLog $destn; fi
+     if [ -f $source/$nlmonLog ] ; then $operation $source/$nlmonLog $destn; fi
+     if [ -f $source/$hwselfLog ] ; then $operation $source/$hwselfLog $destn; fi
+     if [ "$CONTAINER_SUPPORT" == "true" ];then
+         if [ -f $source/$xreLxcApplicationsLog ] ; then $operation $source/$xreLxcApplicationsLog $destn; fi
+         if [ -f $source/$xreLxcLog ] ; then $operation $source/$xreLxcLog $destn; fi
+     fi
+
+     #Adding a work around to create core_log.txt whith restricted user privilege
+     #if linux multi user is enabled
+     if [ "$ENABLE_MULTI_USER" == "true" ] && [ ! -f /etc/os-release ] ; then
+        if [ "$BUILD_TYPE" == "prod" ] ; then
+            touch $source/$coreDumpLog
+            chown restricteduser:restrictedgroup $source/$coreDumpLog
+        else
+            if [ ! -f /opt/disable_chrootXREJail ]; then
+                touch $source/$coreDumpLog
+                chown restricteduser:restrictedgroup $source/$coreDumpLog
+            fi
+        fi
+     fi
+     #End of work around related to core_log.txt for Linux multi user support
+     if [ -f $source/$trmLog ] ; then $operation $source/$trmLog $destn; fi
+     if [ -f $source/$trmMgrLog ] ; then $operation $source/$trmMgrLog $destn; fi
+     if [ -f $source/$threadLog ] ; then $operation $source/$threadLog $destn; fi
+     if [ -f $source/$greenpeakLog ]; then $operation $source/$greenpeakLog $destn; fi
+     if [ -f $source/$startupDmesgLog ] ; then $operation $source/$startupDmesgLog $destn; fi
+     if [ -f $source/$coreLog ] ; then $operation $source/$coreLog $destn; fi
+     if [ -f $source/$xDeviceLog ] ; then $operation $source/$xDeviceLog $destn; fi
+     if [ -f $source/$rmfLog ] ; then $operation $source/$rmfLog $destn; fi
+     if [ "$DEVICE_TYPE" != "mediaclient" ]; then
+          if [ -f $source/$podLog ] ; then $operation $source/$podLog $destn; fi
+          if [ -f $source/$vodLog ] ; then $operation $source/$vodLog $destn; fi
+          if [ -f $source/$diskEventsLog ] ; then $operation $source/$diskEventsLog $destn; fi
+          if [ -f $source/$diskInfoLog ] ; then $operation $source/$diskInfoLog $destn; fi
+          if [ -f $source/$ablReasonLog ] ; then $operation $source/$ablReasonLog $destn; fi
+          if [ -f $source/$mpeosmainMON ] ; then $operation $source/$mpeosmainMON $destn; fi
+          if [ -f $source/$ecmLog ] ; then $operation $source/$ecmLog $destn; fi
+          if [ -f $source/$pumaLog ] ; then $operation $source/$pumaLog $destn; fi
+          if [ -f $source/$pumaLog1 ] ; then $operation $source/$pumaLog1 $destn; fi
+          if [ -f $source/$heapDmpLog ] ; then $operation $source/$heapDmpLog $destn; fi
+          if [ -f $source/$cardStatusLog ] ; then $operation $source/$cardStatusLog $destn; fi
+          if [ -f $source/$rfStatisticsLog ] ; then $operation $source/$rfStatisticsLog $destn; fi
+	  if [ -f $source/$riLog ] ; then $operation $source/$riLog $destn; fi
+	  if [ -f $source/$xfsdmesgLog ] ; then $operation $source/$xfsdmesgLog $destn; fi
+          if [ -f $mpeosRebootLog ] ; then 
+               if [ "$BUILD_TYPE" = "dev" ]; then
+                    cp $mpeosRebootLog $destn
+               else
+                    $operation $mpeosRebootLog $destn
+               fi
+          fi
+          if [ "$LIGHTSLEEP_ENABLE" = "true" ]; then
+               if [ -f $source/lightsleep.log ] ; then $operation $source/lightsleep.log $destn; fi
+          fi
+          if [ -f $source/$snmpdLog ] ; then $operation $source/$snmpdLog $destn; fi
+          if [ -f $source/$upstreamStatsLog ] ; then $operation $source/$upstreamStatsLog $destn; fi
+          if [ -f $source/$dibblerLog ] ; then $operation $source/$dibblerLog $destn; fi
+          if [ -f $source/$dnsmasqLog ] ; then $operation $source/$dnsmasqLog $destn; fi
+     else
+	  if [ -f $source/$wifiTelemetryLog ] ; then $operation $source/$wifiTelemetryLog $destn; fi
+	  if [ -f $source/$tr69Log ] ; then $operation $source/$tr69Log $destn; fi
+	  if [ -f $source/$tr69AgentLog ] ; then $operation $source/$tr69AgentLog $destn; fi
+	  if [ -f $source/$tr69HostIfLog ] ; then $operation $source/$tr69HostIfLog $destn; fi
+	  if [ -f $source/$tr69DownloadLog ] ; then $operation $source/$tr69DownloadLog $destn; fi
+	  if [ -f $source/$gatewayLog ] ; then $operation $source/$gatewayLog $destn; fi
+	  if [ -f $source/$ipSetupLog ] ; then $operation $source/$ipSetupLog $destn; fi
+	  if [ -f $source/$tr69AgentHttpLog ] ; then $operation $source/$tr69AgentHttpLog $destn; fi
+	  if [ -f $source/$tr69AgentSoapLog ] ; then $operation $source/$tr69AgentSoapLog $destn; fi
+          if [ -f $source/$webpavideoLog ] ; then $operation $source/$webpavideoLog $destn; fi
+          if [ -f $source/$xiConnectionStatusLog ] ; then $operation $source/$xiConnectionStatusLog $destn; fi
+     fi
+     # backup version.txt
+     if [ -f $source/$version ] ; then 
+	     $operation $source/$version $destn
+     else
+	     cp /$version $destn
+     fi
+     # backup older cycle logs
+     if [ -f $source/$rstreamFdLog ] ; then $operation $source/$rstreamFdLog $destn; fi
+     if [ -f $source/$authServiceLog ] ; then $operation $source/$authServiceLog $destn; fi
+     if [ -f $source/$cardProvisionCheckLog ] ; then $operation $source/$cardProvisionCheckLog $destn; fi
+     if [ -f $source/$diskCleanupLog ] ; then $operation $source/$diskCleanupLog $destn; fi
+     if [ -f $source/$diskCleanupInfoLog ] ; then $operation $source/$diskCleanupInfoLog $destn; fi
+     if [ -f $recorderLog ]; then mv $recorderLog $destn; fi
+     if [ -f $source/$topOsalLog ] ; then $operation $source/$topOsalLog $destn; fi
+     if [ -f $source/$mocaStatusLog ] ; then $operation $source/$mocaStatusLog $destn; fi
+     if [ -f $source/$decoderStatusLog ] ; then $operation $source/$decoderStatusLog $destn; fi
+     if [ -f $source/$mfrLogRdk ] ; then $operation $source/$mfrLogRdk $destn; fi
+     if [ -f $source/$cefLog ] ; then $operation $source/$cefLog $destn; fi
+     if [ -f $source/$diskCleanupLog1 ] ; then $operation $source/$diskCleanupLog1 $destn; fi
+     if [ -f $source/$sysDmesgLog ] ; then $operation $source/$sysDmesgLog $destn; fi
+     if [ -f $source/$samhainLog ] ; then $operation $source/$samhainLog $destn; fi
+     if [ -f $source/$fogLog ] ; then $operation $source/$fogLog $destn; fi
+     if [ -f $source/$hddStatusLog ] ; then $operation $source/$hddStatusLog $destn; fi
+     if [ -f $source/$xiRecoveryLog ] ; then $operation $source/$xiRecoveryLog $destn; fi
+     if [ -f $source/$dropbearLog ] ; then $operation $source/$dropbearLog $destn; fi
+
+     if [ "$SOC" = "BRCM" ];then
+         if [ -f $source/$nxSvrLog ] ; then $operation $source/$nxSvrLog $destn; fi
+         if [ -f $source/$procStatusLog ] ; then $operation $source/$procStatusLog $destn; fi
+     fi
+     if [ -f $source/$netsrvLog ] ; then $operation $source/$netsrvLog $destn; fi
+     if [ -f $source/$adobeCleanupLog ] ; then $operation $source/$adobeCleanupLog $destn; fi
+	  
+    if [ "$DEVICE_TYPE" ==  "XHC1" ];then
+        if [ -f $source/$streamsrvLog ] ; then $operation $source/$streamsrvLog $destn; fi
+	if [ -f $source/$stunnelHttpsLog ] ; then $operation $source/$stunnelHttpsLog $destn; fi
+	if [ -f $source/$upnpLog ] ; then $operation $source/$upnpLog $destn; fi
+        if [ -f $source/$upnpigdLog ] ; then $operation $source/$upnpigdLog $destn; fi
+	if [ -f $source/$cgiLog ] ; then $operation $source/$cgiLog $destn; fi
+	if [ -f $source/$systemLog ] ; then $operation $source/$systemLog $destn; fi
+	if [ -f $source/$eventLog ] ; then $operation $source/$eventLog $destn; fi
+	if [ -f $source/$xw3MonitorLog ] ; then $operation $source/$xw3MonitorLog $destn; fi
+        if [ -f $source/$sensorDLog ] ; then $operation $source/$sensorDLog $destn; fi
+        if [ -f $source/$webpaLog ] ; then $operation $source/$webpaLog $destn; fi
+        if [ -f $source/$xwclientLog ] ; then $operation $source/$xwclientLog $destn; fi
+        if [ -f $source/$xwswupdateLog ] ; then $operation $source/$xwswupdateLog $destn; fi
+        if [ -f $source/$userLog ] ; then $operation $source/$userLog $destn; fi
+        if [ -f $source/$webrtcStreamingLog ] ; then $operation $source/$webrtcStreamingLog $destn; fi
+	if [ -f $source/$cvrPollLog ] ; then $operation $source/$cvrPollLog $destn; fi
+	if [ -f $source/$ivaDaemonLog ] ; then $operation $source/$ivaDaemonLog $destn; fi
+	if [ -f $source/$thumbnailUploadLog ] ; then $operation $source/$thumbnailUploadLog $destn; fi
+	if [ -f $source/$metricsLog ] ; then $operation $source/$metricsLog $destn; fi
+	if [ -f $source/$wifiLog ] ; then $operation $source/$wifiLog $destn; fi
+        if [ -f $source/$overlayLog ] ; then $operation $source/$overlayLog $destn; fi
+        if [ -f $source/$xvisionLog ] ; then $operation $source/$xvisionLog $destn; fi
+        if [ -f $source/$evoLog ] ; then $operation $source/$evoLog $destn; fi
+	if [ -f $source/$camstreamsrvLog ] ; then $operation $source/$camstreamsrvLog $destn; fi
+	if [ -f $source/$mongsLog ] ; then $operation $source/$mongsLog $destn; fi
+     fi
+     if [ "$WIFI_SUPPORT" == "true" ];then
+        if [ -f $source/$wpaSupplicantLog ] ; then $operation $source/$wpaSupplicantLog $destn; fi
+        if [ -f $source/$dhcpWifiLog ] ; then $operation $source/$dhcpWifiLog $destn; fi
+     fi
+     if [ -f $source/$audiocapturemgrLogs ] ; then $operation $source/$audiocapturemgrLogs $destn; fi
+
+}
+
+logCleanup()
+{
+  echo "Done Log Backup"
+}
+
diff --git a/recipes-rdkb/sysint-broadband/files/swupdate.service b/recipes-rdkb/sysint-broadband/files/swupdate.service
new file mode 100644
index 0000000..23dc72d
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/swupdate.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Software Update Service
+After=CcspPandMSsp.service
+StartLimitIntervalSec=120
+
+[Service]
+Type=forking
+ExecStartPre=/bin/sh -c '/bin/touch /rdklogs/logs/swupdate.log'
+ExecStart=/bin/sh -c '/lib/rdk/swupdate_utility.sh 2&> /rdklogs/logs/swupdate.log &'
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
diff --git a/recipes-rdkb/sysint-broadband/files/swupdate_utility.sh b/recipes-rdkb/sysint-broadband/files/swupdate_utility.sh
new file mode 100755
index 0000000..69a11a8
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/swupdate_utility.sh
@@ -0,0 +1,186 @@
+#!/bin/bash
+. /etc/include.properties
+. /etc/device.properties
+
+#Utility Functions
+#=================
+
+check ()
+{
+ if [ $? != 0 ]; then
+    echo "FATAL: $*"
+    sleep 10
+    continue
+ fi
+}
+
+jsonparse() {
+ if [ -d $1 ]; then
+    printf "Usage 'jsonparse <parameter-name>'\n"
+    exit 1
+ fi
+ value=`cat /tmp/cloudurl.txt | json_reformat | grep -w $1 | cut -d':' -f2 | tr -d "\",\ "`
+ if [ -d $value ];then
+   echo "FATAL: JSON value not present, check /tmp/cloudurl.txt file"
+   exit 1
+ fi
+ echo $value
+}
+
+tftpDownload () {
+ mkdir -p /tmp/tftpimage
+ cd /tmp/tftpimage
+ echo "set IPtable rules for tftp !!"
+ iptables -t raw -I OUTPUT -j CT -p udp -m udp --dport 69 --helper tftp
+ echo "CloudFile: "$firmwareFilename
+ echo "CloudLocation: "$firmwareLocation
+
+ check_sum_file="${firmwareVersion}.txt"
+ echo "Checksum file to download from tftp server: $check_sum_file"
+ tftp -g  -r $check_sum_file $firmwareLocation
+ if [ ! -f $PWD/$check_sum_file ]; then
+    echo "Cloud checksum file not downloaded from TFTP: verify tftp connection($firmwareLocation)"
+    sleep 2
+    continue
+ fi
+
+ echo "Downloading $firmwareFilename..."
+ tftp -g  -r $firmwareFilename $firmwareLocation
+ if [ ! -f $PWD/$firmwareFilename ]; then
+    echo "Image itself not downloaded from TFTP: verify tftp connection($firmwareLocation)"
+    sleep 2
+    continue
+ fi
+ echo "Doing additional check: comparing checksum ..."
+ cloudcsfile_path="/tmp/tftpimage/$check_sum_file"
+ echo "checksum file to download with actual path: $cloudcsfile_path"
+ cloudcs=`cat $cloudcsfile_path | cut -f 1 -d ' '`
+ echo "cloudcs:cloud download md5sum file version: $cloudcs"
+ devcs=`md5sum /tmp/tftpimage/rdk*.tar | cut -f 1 -d " "`
+ echo "devcs:image download checksum md5sum file version: $devcs"
+
+ if [ "$devcs" != "$cloudcs" ]; then
+    echo "Mismatch in md5sum: tftp file not downloaded properly"
+    continue
+ fi
+ echo "checksum verification done: md5sum matches !!"
+ tar -xf /tmp/tftpimage/$firmwareVersion.tar -C /tmp/
+ check "Failed to untar $firmwareFilename"
+}
+
+httpDownload () {
+ mkdir -p /tmp/httpimage
+ cd /tmp/httpimage
+ echo "CloudFile: "$firmwareFilename
+ echo "CloudLocation: "$firmwareLocation
+
+ check_sum_file="${firmwareVersion}.txt"
+ echo "Checksum file to download from webserver: $check_sum_file"
+ wget http://$firmwareLocation/$check_sum_file -O $check_sum_file
+ if [ ! -f $PWD/$check_sum_file ]; then
+    echo "Cloud checksum file not downloaded from Webserver: verify connection to $firmwareLocation"
+    sleep 2
+    continue
+ fi
+
+ echo "Downloading $firmwareFilename..."
+ wget http://$firmwareLocation/$firmwareFilename -O $firmwareFilename
+ if [ ! -f $PWD/$firmwareFilename ]; then
+    echo "Image itself not downloaded from Webserver: verify connection to $firmwareLocation"
+    sleep 2
+    continue
+ fi
+ echo "Doing additional check: comparing checksum ..."
+ cloudcsfile_path="/tmp/httpimage/$check_sum_file"
+ echo "checksum file to download with actual path: $cloudcsfile_path"
+ cloudcs=`cat $cloudcsfile_path | cut -f 1 -d ' '`
+ echo "cloudcs:cloud download md5sum file version: $cloudcs"
+ devcs=`md5sum /tmp/httpimage/rdk*.tar | cut -f 1 -d " "`
+ echo "devcs:image download checksum md5sum file version: $devcs"
+
+ if [ "$devcs" != "$cloudcs" ]; then
+    echo "Mismatch in md5sum: http file not downloaded properly"
+    continue
+ fi
+ echo "checksum verification done: md5sum matches !!"
+ tar -xf /tmp/httpimage/$firmwareVersion.tar -C /tmp/
+ check "Failed to untar $firmwareFilename"
+}
+
+download_image() {
+   if [ $firmwareDownloadProtocol == "tftp" ]; then
+      tftpDownload
+   elif [ $firmwareDownloadProtocol == "http" ]; then
+      httpDownload
+   else
+      echo "Unknown protocol"
+   fi
+}
+
+echo "***Start of swupdate_utility.sh***"
+
+rebootRequired=false
+while [ 1 ]
+do
+if [ $rebootRequired == true ];then
+   echo "Reboot Pending: reboot is required before possible firmware upgrade"
+   sleep 10
+   continue
+fi
+#Getting update from cloud
+#=========================
+
+CLOUDURL=http://35.155.171.121:9092/xconf/swu/stb?eStbMac=
+erouterMac=`ifconfig $EROUTER_INTERFACE | grep HWaddr | cut -c39-55`
+CLOUD_URL=$CLOUDURL$erouterMac
+
+echo "CLOUD_URL: $CLOUD_URL"
+curl $CLOUD_URL  -o /tmp/cloudurl.txt
+if [ $? != 0 ];then
+   echo "curl failed to fetch firmware details: check internet connection"
+   sleep 10
+   continue
+fi
+
+#version check
+#=============
+
+#Comparing image versions and will upgrade if there is a mismatch
+currentVersion=`grep "^imagename" /version.txt | cut -d ':' -f2`
+
+#eg. firmwareVersion=rdkb-generic-broadband-image_default_20200608060354
+firmwareVersion=`jsonparse firmwareVersion`
+cloudfirmwareversion=$firmwareVersion
+if [ "$currentVersion" == "$cloudfirmwareversion" ]; then
+   echo "Image versions remains same !!"
+   sleep 10
+   continue
+fi
+
+echo "cloud Image version: "$cloudfirmwareversion
+echo "Current Image version: "$currentVersion
+echo "Image versions mismatches !! start upgrade"
+
+#Environment setting
+#===================
+#eg. firmwareDownloadProtocol=tftp
+firmwareDownloadProtocol=`jsonparse firmwareDownloadProtocol`
+
+#eg. firmwareFilename=rdkb-generic-broadband-image_default_20200608060354.tar
+firmwareFilename=`jsonparse firmwareFilename`
+
+#eg. firmwareLocation=192.168.1.9
+firmwareLocation=`jsonparse firmwareLocation`
+
+#eg. rebootImmediately=false
+rebootImmediately=`jsonparse rebootImmediately`
+
+download_image
+/lib/rdk/TurrisFwUpgrade.sh
+check "TurrisFwUpgrade.sh failed to flash new Image"
+
+if [ $rebootImmediately == true ]; then
+   reboot
+fi
+rebootRequired=true
+done
diff --git a/recipes-rdkb/sysint-broadband/files/uploadSTBLogs.sh b/recipes-rdkb/sysint-broadband/files/uploadSTBLogs.sh
new file mode 100755
index 0000000..545ec5f
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/uploadSTBLogs.sh
@@ -0,0 +1,478 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2018 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+
+. /etc/include.properties
+. /etc/device.properties
+
+. $RDK_PATH/utils.sh 
+. $RDK_PATH/interfaceCalls.sh
+. $RDK_PATH/utils.sh
+. $RDK_PATH/logfiles.sh
+. $RDK_PATH/commonUtils.sh
+
+if [ $# -ne 6 ]; then 
+     echo "USAGE: $0 <TFTP Server IP> <Flag (STB delay or not)> <SCP_SERVER> <UploadOnReboot> <UploadProtocol> <UploadHttpLink>"
+fi
+
+# assign the input arguments
+TFTP_SERVER=$1
+FLAG=$2
+DCM_FLAG=$3
+UploadOnReboot=$4
+UploadProtocol=$5
+UploadHttpLink=$6
+
+DCM_LOG_PATH=/upload
+
+if [ $FLAG -eq 0 ]; then
+     if [ -f $RAMDISK_PATH/.standby ]; then
+          echo "`/bin/timestamp` Exiting since box is in standby..!"
+          exit 0
+     fi
+fi
+
+# initialize the variables
+MAC=`getErouterMacAddress`
+HOST_IP=`getIPAddress`
+dt=`date "+%m-%d-%y-%I-%M%p"`
+LOG_FILE="$MAC_Logs_$dt.tgz"
+
+#MARKER_FILE=$MAC"_Logs_Marker_$dt.txt"
+VERSION="version.txt"
+# working folders
+PREV_LOG_PATH="$LOG_PATH/PreviousLogs"
+PREV_LOG_BACKUP_PATH="$LOG_PATH/PreviousLogs_backup/"
+DCM_UPLOAD_LIST="$LOG_PATH/dcm_upload"
+
+echo "Build Type: $BUILD_TYPE Log file: $LOG_FILE TFTP Server: $TFTP_SERVER Protocol: $UploadProtocol UploadHttpLink: $UploadHttpLink" >> $LOG_PATH/dcmscript.log
+
+prevUploadFlag=0
+
+if [ ! -d $PREV_LOG_PATH ]; then
+      echo "The Previous Logs folder is missing" >> $LOG_PATH/dcmscript.log
+      #if [ "true" != "$RDK_EMULATOR" ]; then
+      #	    exit 0
+      #else
+
+    	if [ ! -d $LOG_PATH ]; then mkdir -p $LOG_PATH; fi
+   	if [ ! -d $LOG_PATH/PreviousLogs ]; then mkdir -p $LOG_PATH/PreviousLogs; fi
+    	if [ ! -d $LOG_PATH/PreviousLogs_backup ]; then mkdir -p $LOG_PATH/PreviousLogs_backup; fi
+    	rm -rf $LOG_PATH/PreviousLogs_backup/*
+
+	backupSystemLogFiles mv $LOG_PATH $PREV_LOG_PATH
+        backupAppBackupLogFiles mv $LOG_PATH $PREV_LOG_PATH
+
+      #fi
+else
+     #if [ "true"  !=  "$RDK_EMULATOR" ]; then
+	#echo ""
+     #else
+
+    	rm -rf $LOG_PATH/PreviousLogs_backup/*
+	backupSystemLogFiles mv $LOG_PATH $PREV_LOG_PATH
+        backupAppBackupLogFiles mv $LOG_PATH $PREV_LOG_PATH
+     	#cp $PREV_LOG_BACKUP_PATH/* $PREV_LOG_PATH/
+     #fi
+fi
+
+backupAppLogs()                                                        
+{                                                               
+    source=$1                                                   
+    destn=$2                                                    
+    if [ -f $source$RILog ] ; then cp $source$RILog $destn; fi  
+    if [ -f $source$XRELog ] ; then cp $source$XRELog $destn; fi
+    if [ -f $source$WBLog ] ; then cp $source$WBLog $destn; fi  
+    if [ -f $source$SysLog ] ; then cp $source$SysLog $destn; fi
+}  
+renameRotatedLogs()
+{
+    logPath=$1
+    if [ -f $RDK_PATH/renameRotatedLogs.sh ]; then
+         if [ -f $logPath/ocapri_log.txt ] ; then sh $RDK_PATH/renameRotatedLogs.sh $logPath/ocapri_log.txt; fi
+         if [ -f $logPath/receiver.log ] ; then sh $RDK_PATH/renameRotatedLogs.sh $logPath/receiver.log; fi
+         if [ -f $logPath/greenpeak.log ] ; then sh $RDK_PATH/renameRotatedLogs.sh $logPath/greenpeak.log; fi
+         if [ -f $logPath/gp_init.log ] ; then sh $RDK_PATH/renameRotatedLogs.sh $logPath/gp_init.log; fi
+         if [ -f $logPath/app_status.log ] ; then sh $RDK_PATH/renameRotatedLogs.sh $logPath/app_status.log; fi
+    fi
+}
+processLogsFolder()
+{
+    srcLogPath=$1
+    destnLogPath=$2
+    backupAppLogs "$srcLogPath/" "$destnLogPath/"
+    backupSystemLogFiles "cp" $srcLogPath $destnLogPath
+    backupAppBackupLogFiles "cp" $srcLogPath $destnLogPath
+
+    if [ -f $RAMDISK_PATH/disk_log.txt ]; then cp $RAMDISK_PATH/disk_log.txt $destnLogPath ; fi
+
+    backupCount=`ls $srcLogPath/logbackup-* 2>/dev/null | wc -l`
+    if [ $backupCount -gt 0 ]; then
+ 	cp -r $srcLogPath/logbackup-* $destnLogPath
+    fi
+
+    if [ -f $srcLogPath/$rebootLog ]; then cp $srcLogPath/$rebootLog $destnLogPath; fi
+    if [ -f $srcLogPath/$ablReasonLog ]; then cp $srcLogPath/$ablReasonLog $destnLogPath; fi
+    if [ -f $srcLogPath/$ueiLog ]; then cp $srcLogPath/$ueiLog $destnLogPath; fi
+    if [ -f $PERSISTENT_PATH/sventest/p3541_all_csven_AV_health_data_trigger.tar.gz ] ; then
+        cp $PERSISTENT_PATH/sventest/p3541_all_csven_AV_health_data_trigger.tar.gz $destnLogPath
+    fi
+    if [ "$DEVICE_TYPE" != "mediaclient" ]; then
+          renameRotatedLogs $srcLogPath
+    fi
+}
+modifyFileWithTimestamp()
+{
+    srcLogPath=$1
+    ret=`ls $srcLogPath/*.txt | wc -l`
+    if [ ! $ret ]; then 
+         ret=`ls $srcLogPath/*.log | wc -l`
+         if [ ! $ret ]; then exit 1; fi
+    fi
+
+    dt=`date "+%m-%d-%y-%I-%M%p-"`
+    FILES=*.*
+    FILES1=".*-[0-9][0-9]AM-.*"
+    FILES2=".*-[0-9][0-9]PM-.*"
+
+    for f in $FILES
+    do
+        test1=0
+        test2=0
+        test3=0
+        test4=0
+
+        test1=`expr match $f $FILES1`
+        test2=`expr match $f $FILES2`
+        test3=`expr match $f $rebootLog`
+        test4=`expr match $f $ablReasonLog`
+
+        if [ $test1 -gt 0 -o $test2 -gt 0 -o $test3 -gt 0 -o $test4 -gt 0 ];  then
+            echo "`/bin/timestamp` Processing file...$f"  >> $LOG_PATH/dcmscript.log
+        else
+            mv $f $dt$f
+        fi
+    done
+    #cp /version.txt ./$dt$VERSION
+}
+
+copyAllFiles ()
+{
+	  
+		EXCLUDE="dcm PreviousLogs_backup PreviousLogs"
+		cd $LOG_PATH
+
+		for fileName in *
+		do
+			COPY_BOOLEAN=true
+			for excl in $EXCLUDE
+			do  
+				if [ $excl == $fileName ]; then
+					COPY_BOOLEAN=false
+				fi  
+			done
+	
+		if $COPY_BOOLEAN; then	
+			cp -R $fileName $DCM_LOG_PATH
+		fi
+		done
+}
+copyOptLogsFiles ()
+{
+   cd $LOG_PATH
+   cp  * $DCM_LOG_PATH >> $LOG_PATH/dcmscript.log  2>&1
+}
+ 
+HttpLogUpload()
+{
+    result=1
+    FILENAME='/tmp/httpresult.txt'
+    HTTP_CODE=/tmp/curl_httpcode
+
+    CLOUD_URL=$UploadHttpLink
+    #CLOUD_URL="$(UploadHttpLink)filename=$LOG_FILE"
+    
+    CURL_CMD="curl -w '%{http_code}\n' -F \"filename=@$1\" -o \"$FILENAME\" \"$CLOUD_URL\" --connect-timeout 10 -m 10"
+    echo URL_CMD: $CURL_CMD
+    ret= eval $CURL_CMD > $HTTP_CODE
+    http_code=$(awk -F\" '{print $1}' $HTTP_CODE)
+    if [ $http_code -eq 200 ];then
+        echo "`/timestamp` Done Uploading Logs through HTTP" >> $LOG_PATH/dcmscript.log
+        result=0
+    elif [ $http_code -eq 302 ];then
+        #Get the url from FILENAME
+        NewUrl=$(awk -F\" '{print $1}' $FILENAME)
+        
+        CURL_CMD="curl -w '%{http_code}\n' -o \"$FILENAME\" \"$NewUrl\" --connect-timeout 10 -m 10"
+        echo URL_CMD: $CURL_CMD        
+        result= eval $CURL_CMD > $HTTP_CODE
+        http_code=$(awk -F\" '{print $1}' $HTTP_CODE)
+        
+        if [ $http_code -eq 200 ];then
+            echo "`/timestamp` Done Uploading Logs through - HTTP" >> $LOG_PATH/dcmscript.log
+            result=0
+        else
+          	 echo "`/timestamp` Failed Uploading Logs through - HTTP" >> $LOG_PATH/dcmscript.log
+        fi
+    fi    
+    echo $result
+}
+
+uploadDCMLogs()
+{
+
+   cd $DCM_LOG_PATH
+   echo " Uploading Logs through DCM cron job" >> $LOG_PATH/dcmscript.log
+   modifyFileWithTimestamp $DCM_LOG_PATH >> $LOG_PATH/dcmscript.log  2>&1
+   tar -zcvf $LOG_FILE * >> $LOG_PATH/dcmscript.log  2>&1
+   sleep 60
+   echo "Uploading logs $LOG_FILE  onto $TFTP_SERVER" >> $LOG_PATH/dcmscript.log   
+   
+   retval=1
+   
+    if [ "$UploadProtocol" == "HTTP" ];then
+		retval=$(HttpLogUpload $LOG_FILE)
+	fi
+	if [ $retval -eq 1 ];then #Http upload failed
+		tftp -p -r $LOG_FILE -l $LOG_FILE $TFTP_SERVER >> $LOG_PATH/dcmscript.log 2>&1
+		echo "`/bin/timestamp` Done Uploading Logs through TFTP" >> $LOG_PATH/dcmscript.log
+		sleep 1
+	fi
+
+     rm -rf $DCM_LOG_PATH/	
+}
+uploadLogOnReboot()
+{
+	uploadLog=$1
+	echo "Sleeping for seven minutes "
+	if [ "true" != "$RDK_EMULATOR" ]; then
+	sleep 12
+	fi
+	echo "Done sleeping prev logpath "$PREV_LOG_PATH
+    ret=`ls $PREV_LOG_PATH/*.txt | wc -l`
+    if [ ! $ret ]; then 
+         ret=`ls $PREV_LOG_PATH/*.log | wc -l` 
+         if [ ! $ret ]; then exit 1; fi
+    fi
+    if [ "$HDD_ENABLED" = "true" ]; then
+        # Special processing - Permanently backup logs on box delete the logs older than 
+        # 3 days to take care of old filename
+	sleep 2
+        stat=`find /opt/logs -name "*-*-*-*-*M-" -mtime +3 -exec rm -rf {} \;`
+        # for the new filenames with suffix logbackup
+        stat=`find /opt/logs -name "*-*-*-*-*M-logbackup" -mtime +3 -exec rm -rf {} \;`
+
+        TIMESTAMP=`date "+%m-%d-%y-%I-%M%p-logbackup"`                   
+        PERM_LOG_PATH="$LOG_PATH/$TIMESTAMP"                                
+        mkdir -p $PERM_LOG_PATH                                             
+
+        processLogsFolder $PREV_LOG_PATH $PERM_LOG_PATH	
+     fi
+    echo "ckp100-------------prev log path-------------"$PREV_LOG_PATH
+    cd $PREV_LOG_PATH
+    rm $LOG_FILE
+    modifyFileWithTimestamp $PREV_LOG_PATH >> $LOG_PATH/dcmscript.log  2>&1
+
+    echo "ckp101---------------------upload log-----"$uploadLog
+    ls  -al
+    sleep 30
+	if $uploadLog; then
+            echo "ckp101--------------------------"
+	    tar -zcvf $LOG_FILE * >> $LOG_PATH/dcmscript.log  2>&1
+		echo "Uploading logs $LOG_FILE  onto $TFTP_SERVER" >> $LOG_PATH/dcmscript.log
+		sleep 60
+		#tftp -p  -r $LOG_FILE -l $LOG_FILE $TFTP_SERVER >> $LOG_PATH/dcmscript.log 2>&1
+		#sleep 1
+		#echo "`/bin/timestamp` Done Uploading Logs" >> $LOG_PATH/dcmscript.log 
+                proUpdel=`cat /tmp/DCMSettings.conf | grep -i uploadRepository:uploadProtocol | tr -dc '"' |wc -c`
+                echo "number of proUPdel2:"$proUpdel
+                #proUpdel=$((proUpdel - 1))
+                uploadProtocolla=`cat /tmp/DCMSettings.conf | grep -i urn:settings:TelemetryProfile | cut -d '"' -f$proUpdel`
+                echo "Upload protocol logupload is:"$uploadProtocolla
+                TurrisMacAddress=`ifconfig erouter0 | grep HWaddr | cut -c39-55`
+                cp $LOG_FILE $TurrisMacAddress-Logs-$LOG_FILE
+		 if [ "$uploadProtocolla" != "TFTP" ];then
+                     echo "before HTTP log upload"
+		     HTTPLOGUPLOADURL=`cat /tmp/DCMSettings.conf | grep -i "urn:settings:LogUploadSettings:RepositoryURL" | cut -d "=" -f2`
+                     if [ "$HTTPLOGUPLOADURL" == "" ]; then
+                         echo "No HTTP URL configured in xconf,going with internal one !!"
+                         HTTPLOGUPLOADURL=$DCM_LA_SERVER_URL
+                     fi
+                     echo "HTTPLOGUPLOADURL:"$HTTPLOGUPLOADURL
+                     echo "upload log file is:"$LOG_FILE
+                     CURL_CMD="curl -w '%{http_code}\n' -F filename=@$PREV_LOG_PATH/$TurrisMacAddress-Logs-$LOG_FILE '$HTTPLOGUPLOADURL' --connect-timeout 100 -m 100"
+                     #echo_t "CURL_CMD http proto log upload: $CURL_CMD" >> $DCM_LOG_FILE
+                     echo "------CURL_CMD2:"$CURL_CMD
+                     HTTP_CODE=`result= eval $CURL_CMD`
+                     http_code=$(echo $HTTP_CODE | cut -d "." -f 2)
+                     echo "http_code is :"$http_code
+                     if [ $http_code -eq 200 ] ; then
+                         echo "HTTP log upload succeded!!!!!!!!!!!!!!!!!"
+                     else
+                         loguploadRetryCount=0
+                         while [ $loguploadRetryCount -lt 2 ]
+                         do
+                             echo "Trying to upload log file..."
+                             CURL_CMD="curl -w '%{http_code}\n' -F filename=@$PREV_LOG_PATH/$TurrisMacAddress-Logs-$LOG_FILE '$HTTPLOGUPLOADURL' --connect-timeout 100 -m 100"
+                             HTTP_CODE=`result= eval $CURL_CMD`
+                             http_code_la=$(echo $HTTP_CODE | cut -d "." -f 2)
+                             echo "http_code is :"$http_code_la
+                             if [ "$http_code_la" != "200" ]; then
+                                   echo "Error in uploading log file"
+                             else
+                                   echo "logupload succeded in retry"
+                                   break
+                             fi
+                             loguploadRetryCount=`expr $loguploadRetryCount + 1`
+                         done
+                             if [ $loguploadRetryCount -eq 2]; then
+                                 echo "HTTP log upload failed!!!!!!!!!!!!!!!!!"
+                             fi
+                      fi
+                else
+                        echo "Uploading logs $LOG_FILE  onto $TFTP_SERVER" >> $LOG_PATH/dcmscript.log
+                        tftp -p  -r $TurrisMacAddress-Logs-$LOG_FILE -l $TurrisMacAddress-Logs-$LOG_FILE $TFTP_SERVER >> $LOG_PATH/dcmscript.log 2>&1
+                        ret=$?
+                        echo $ret
+                        if [ "$ret" -eq 1 ]; then
+                             tftplauploadRetryCount=0
+                             while [ "$tftplauploadRetryCount" -lt 2 ]
+                             do
+                                echo "Trying to upload logs file using tftp again..."
+                                tftp -p  -r $TurrisMacAddress-Logs-$LOG_FILE -l $TurrisMacAddress-Logs-$LOG_FILE $TFTP_SERVER >> $LOG_PATH/dcmscript.log 2>&1
+                                ret=$?
+                                if [ "$ret" -eq 1 ]; then
+                                     echo "error in uploading logs using tftp"
+                                else
+                                     echo "tftp upload in retry logs succeded"
+                                     ret=0
+                                     break
+                                fi
+                                tftplauploadRetryCount=`expr $tftplauploadRetryCount + 1`
+                             done
+                             if [ "$tftlauploadRetryCount" -eq 2 ]; then
+                                ret=1
+                                echo "TFTP log  upload failed!!!!!!!!!!!!!!!!!"
+                             else
+                                echo "TFTP log upload succeded !!!"
+                                ret=0
+                             fi
+                       fi
+                 fi
+                sleep 60
+                echo "Done Uploading Logs and removing rtl_json.txt file"
+                rm -rf $PREV_LOG_PATH/$TurrisMacAddress-Logs-$LOG_FILE
+                rm -rf $TELEMETRY_JSON_RESPONSE
+                rm -rf $PERSISTENT_PATH/*TELE*
+	fi
+	cd $PREV_LOG_PATH
+    rm -rf $PREV_LOG_PATH/$LOG_FILE
+    rm -rf  $PREV_LOG_BACKUP_PATH
+    mkdir -p $PREV_LOG_BACKUP_PATH
+	if [ "$BUILD_TYPE" = "dev" ] || [ "$HDD_ENABLED" = "false" ]; then
+	
+		echo "Moving to Previous Logs Backup Folder " >> $LOG_PATH/dcmscript.log
+		mv * $PREV_LOG_BACKUP_PATH
+	else
+		echo "`/bin/timestamp` Deleting from Previous Logs  Folder " >> $LOG_PATH/dcmscript.log
+		rm -rf *
+	fi	
+}
+#if [ "$true" != "$RDK_EMULATOR" ]; then
+#if [ -d $DCM_LOG_PATH ]; then
+ #    rm -rf $DCM_LOG_PATH/
+#fi
+#Remove *.tgz files from /opt/logs
+#if [ "true" != "$RDK_EMULATOR" ]; then
+#stat=`find $LOG_PATH -name "*.tgz" -exec rm -rf {} \;`
+
+#Remove files which have timestamp in it filename
+#for item in `ls $LOG_PATH/*-*-*-*-*M-* | grep "[0-9]*-[0-9]*-[0-9]*-[0-9]*-M*" | grep -v "logbackup"`;do
+ #   if [ -f "$item" ];then
+  #      echo "`/bin/timestamp` Removing $item" >> $LOG_PATH/dcmscript.log
+   #     rm -rf $item
+    #fi
+#done
+#fi
+#fi
+if [ $DCM_FLAG -eq 0 ] ; then 
+     echo "`/bin/timestamp`  Uploading Without DCM" >> $LOG_PATH/dcmscript.log
+	 uploadLogOnReboot true
+else 
+     if [ $FLAG -eq 1 ] ; then 
+	      if [ $UploadOnReboot -eq 1 ]; then	
+				echo "Uploading Logs with DCM UploadOnReboot set to true" >> $LOG_PATH/dcmscript.log
+				echo "call uploadLogOnReboot"
+				uploadLogOnReboot true	
+		   
+		  else 
+				echo "`/bin/timestamp` Not Uploading Logs with DCM UploadOnReboot set to false" >> $LOG_PATH/dcmscript.log
+				uploadLogOnReboot false
+				echo $PERM_LOG_PATH >> $DCM_UPLOAD_LIST
+		  fi
+		
+	 else
+	      if [ $UploadOnReboot -eq 0 ]; then  
+	             mkdir -p $DCM_LOG_PATH
+                 if [ "$HDD_ENABLED" = "true" ]; then
+                      fileUploadCount=`cat "$DCM_UPLOAD_LIST" | wc -l`
+	                  if [ $fileUploadCount -gt 0 ]; then
+	   		     	       while read line
+				           do
+					          echo $line 								
+					          cp -R $line $DCM_LOG_PATH
+		     	           done < $DCM_UPLOAD_LIST
+		 		           copyOptLogsFiles		 
+		 		           cat /dev/null > $DCM_UPLOAD_LIST		  
+		 		           uploadDCMLogs
+			          else	
+				           copyOptLogsFiles		 
+		     		       uploadDCMLogs		  
+			          fi
+                 else
+				     if [ -f $PREV_LOG_BACKUP_PATH/uploaded ]; then
+					      copyOptLogsFiles
+					      uploadDCMLogs
+				     else 
+					      cd $PREV_LOG_BACKUP_PATH
+					      foldertime=`ls *version.txt | cut -c 1-16`
+                          if [ -z $foldertime ]; then
+                               foldertime=`date +%m-%d-%y-%I-%M%p`
+                          fi
+					      TIMESTAMP=$foldertime-logbackup
+					      PERM_LOG_PATH="/mnt/memory/dcm/$TIMESTAMP" 
+					      mkdir -p $PERM_LOG_PATH 
+					      cp * $PERM_LOG_PATH
+					      copyOptLogsFiles
+					      uploadDCMLogs
+					      cd $PREV_LOG_BACKUP_PATH
+					      touch uploaded
+				     fi
+                 fi
+  
+		   else 
+                if [ "$HDD_ENABLED" = "true" ]; then
+       			     touch $DCM_INDEX
+       			     copyAllFiles
+     			     uploadDCMLogs
+                fi
+	       fi
+	   fi
+fi 
+
diff --git a/recipes-rdkb/sysint-broadband/files/utils.sh b/recipes-rdkb/sysint-broadband/files/utils.sh
new file mode 100755
index 0000000..2d83cdd
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/files/utils.sh
@@ -0,0 +1,192 @@
+#!/bin/sh
+##########################################################################
+# If not stated otherwise in this file or this component's Licenses.txt
+# file the following copyright and licenses apply:
+#
+# Copyright 2016 RDK Management
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##########################################################################
+# Scripts having common utility functions
+
+if [ -f /etc/utopia/service.d/log_env_var.sh ];then
+	source /etc/utopia/service.d/log_env_var.sh
+fi
+
+CMINTERFACE="wan0"
+WANINTERFACE="erouter0"
+
+#checkProcess()
+#{
+#  ps -ef | grep $1 | grep -v grep
+#}
+
+Timestamp()
+{
+	    date +"%Y-%m-%d %T"
+}
+
+# Set the name of the log file using SHA1
+#setLogFile()
+#{
+#    fileName=`basename $6`
+#    echo $1"_mac"$2"_dat"$3"_box"$4"_mod"$5"_"$fileName
+#}
+
+# Get the MAC address of the machine
+getMacAddressOnly()
+{
+     mac=`ifconfig $WANINTERFACE | grep HWaddr | cut -d " " -f7 | sed 's/://g'`
+     echo $mac
+}
+
+# Get the SHA1 checksum
+getSHA1()
+{
+    sha1sum $1 | cut -f1 -d" "
+
+}
+
+# IP address of the machine
+getIPAddress()
+{
+    wanIP=`ifconfig $WANINTERFACE | grep "inet addr" | grep -v inet6 | cut -f2 -d: | cut -f1 -d" "`
+    echo $wanIP
+}
+
+getCMIPAddress()
+{
+    if [ "$BOX_TYPE" = "XB6" ] || [ "$BOX_TYPE" = "TCCBR" ]; then
+       address=`dmcli eRT getv Device.X_CISCO_COM_CableModem.IPv6Address | grep string | awk '{print $5}'`
+       if [ ! "$address" ]; then
+          address=`dmcli eRT getv Device.X_CISCO_COM_CableModem.IPAddress | grep string | awk '{print $5}'`
+       fi
+    elif [ $BOX_TYPE = "XF3" ] || [ "$BOX_TYPE" = "HUB4" ]; then
+       # in PON/DSL you cant get the CM IP address, so use eRouter IP address
+       address=`ifconfig $WANINTERFACE | grep "inet addr" | grep -v inet6 | cut -f2 -d: | cut -f1 -d" "` 
+    else                           
+       address=`ifconfig -a $CMINTERFACE | grep inet6 | tr -s " " | grep -v Link | cut -d " " -f4 | cut -d "/" -f1`
+       if [ ! "$address" ]; then
+          address=`ifconfig -a $CMINTERFACE | grep inet | grep -v inet6 | tr -s " " | cut -d ":" -f2 | cut -d " " -f1`
+       fi
+    fi
+    echo $address
+
+}
+
+getErouterIPAddress()
+{
+    if [ "$BOX_TYPE" = "XB6" ] || [ "$BOX_TYPE" = "TCCBR" ]; then
+        address=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IPv6 | grep string | awk '{print $5}'`
+        if [ ! "$address" ]; then
+            address=`dmcli eRT getv Device.DeviceInfo.X_COMCAST-COM_WAN_IP | grep string | awk '{print $5}'`
+        fi
+    elif [ $BOX_TYPE = "XF3" ] || [ "$BOX_TYPE" = "HUB4" ]; then
+       # in PON/DSL you cant get the CM IP address, so use eRouter IP address
+       address=`ifconfig $WANINTERFACE | grep "inet addr" | grep -v inet6 | cut -f2 -d: | cut -f1 -d" "`
+    else
+       address=`ifconfig -a $WANINTERFACE | grep inet6 | tr -s " " | grep -v Link | cut -d " " -f4 | cut -d "/" -f1`
+       if [ ! "$address" ]; then
+          address=`ifconfig -a $WANINTERFACE | grep inet | grep -v inet6 | tr -s " " | cut -d ":" -f2 | cut -d " " -f1`
+       fi
+    fi
+    echo $address
+}
+
+processCheck()
+{
+   ps -ef | grep $1 | grep -v grep > /dev/null 2>/dev/null 
+   if [ $? -ne 0 ]; then
+         echo "1"
+   else
+         echo "0"
+   fi
+}
+
+getMacAddress()
+{
+    if [ $BOX_TYPE = "XF3" ]; then                           
+        mac=`dmcli eRT getv Device.DPoE.Mac_address | grep value | awk '{print $5}'`
+    elif [ "$BOX_TYPE" = "XB6" ] || [ "$BOX_TYPE" = "TCCBR" ];then
+        mac=`dmcli eRT getv Device.X_CISCO_COM_CableModem.MACAddress | grep value | awk '{print $5}'`
+    elif [ "$BOX_TYPE" = "XF3" ]; then
+       mac=`ifconfig $WANINTERFACE | grep HWaddr | cut -d " " -f7`
+    else                                                           
+       mac=`ifconfig $WANINTERFACE | grep HWaddr | cut -d " " -f7`
+    fi
+    echo $mac
+}
+
+## Get eSTB mac address 
+getErouterMacAddress()
+{
+    erouterMac=`ifconfig $WANINTERFACE | grep HWaddr | cut -d " " -f7`
+    echo $erouterMac
+}
+
+rebootFunc()
+{
+    #sync
+    reboot
+}
+
+# Return system uptime in seconds
+Uptime()
+{
+     cat /proc/uptime | awk '{ split($1,a,".");  print a[1]; }'
+}
+
+## Get Model No of the box
+getModel()
+{
+  if [ $BOX_TYPE = "XF3" ]; then
+     modelName=`grep ^imagename: /fss/gw/version.txt | cut -d ":" -f 2 | cut -d "_" -f 1`
+  else
+     modelName=`dmcli eRT getv Device.DeviceInfo.ModelName | grep value | awk '{print $5}'`
+     if [ "$modelName" = "" ]
+     then
+            modelName=`echo $MODEL_NUM`
+     fi
+  fi
+  echo "$modelName"
+}
+
+getFWVersion()
+{
+    # Handle imagename separator being colon or equals
+    grep imagename /version.txt | sed 's/.*[:=]//'
+}
+
+getBuildType()
+{
+    str=$(getFWVersion)
+
+    echo $str | grep -q 'VBN'
+    if [[ $? -eq 0 ]] ; then
+        echo 'vbn'
+    else
+        echo $str | grep -q 'PROD'
+        if [[ $? -eq 0 ]] ; then
+            echo 'prod'
+        else
+            echo $str | grep -q 'QA'
+            if [[ $? -eq 0 ]] ; then
+                echo 'qa'
+            else
+                echo 'dev'
+            fi
+        fi
+    fi
+}
+
+
diff --git a/recipes-rdkb/sysint-broadband/sysint-broadband.bbappend b/recipes-rdkb/sysint-broadband/sysint-broadband.bbappend
new file mode 100644
index 0000000..2a599ce
--- /dev/null
+++ b/recipes-rdkb/sysint-broadband/sysint-broadband.bbappend
@@ -0,0 +1,74 @@
+SRC_URI_append = " \
+    ${CMF_GIT_ROOT}/rdkb/devices/raspberrypi/sysint;module=.;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GIT_BRANCH};destsuffix=git/devicerpi;name=sysintdevicerpi \
+"
+SRCREV_sysintdevicerpi = "${AUTOREV}"
+SRCREV_FORMAT = "sysintgeneric_sysintdevicerpi"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+
+SRCREV_FORMAT = "${AUTOREV}"
+
+SRC_URI_remove = "${CMF_GIT_ROOT}/rdkb/devices/intel-x86-pc/emulator/sysint;module=.;protocol=${CMF_GIT_PROTOCOL};branch=${CMF_GIT_BRANCH};destsuffix=git/device;name=sysintdevice"
+
+SRC_URI += "file://TurrisFwUpgrade.sh"
+SRC_URI += "file://swupdate_utility.sh"
+SRC_URI += "file://swupdate.service"
+SRC_URI += "file://commonUtils.sh \
+            file://dcaSplunkUpload.sh \
+            file://dca_utility.sh \
+            file://interfaceCalls.sh \
+            file://DCMscript.sh \
+            file://logfiles.sh \
+            file://StartDCM.sh \
+            file://uploadSTBLogs.sh \
+            file://getaccountid.sh \
+            file://getpartnerid.sh \
+            file://utils.sh \
+            file://dcm-log.service"
+
+SYSTEMD_SERVICE_${PN} = "swupdate.service"
+SYSTEMD_SERVICE_${PN} = "dcm-log.service"
+
+do_install_append() {
+    echo "BOX_TYPE=turris" >> ${D}${sysconfdir}/device.properties
+    echo "ARM_INTERFACE=erouter0" >> ${D}${sysconfdir}/device.properties
+    install -d ${D}${base_libdir}/rdk
+    install -d ${D}${systemd_unitdir}/system
+    install -m 0755 ${WORKDIR}/TurrisFwUpgrade.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/swupdate_utility.sh ${D}${base_libdir}/rdk
+    install -m 0644 ${WORKDIR}/swupdate.service ${D}${systemd_unitdir}/system
+    echo "CLOUDURL="http://35.155.171.121:9092/xconf/swu/stb?eStbMac="" >> ${D}${sysconfdir}/include.properties
+
+    #DCM simulator Support
+    install -m 0644 ${S}/dcmlogservers.txt   ${D}/rdklogger/
+    install -m 0755 ${WORKDIR}/StartDCM.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/DCMscript.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/uploadSTBLogs.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/dcaSplunkUpload.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/dca_utility.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/interfaceCalls.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/commonUtils.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/logfiles.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/getaccountid.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/getpartnerid.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/utils.sh ${D}${base_libdir}/rdk
+    install -m 0755 ${WORKDIR}/dcm-log.service ${D}${systemd_unitdir}/system
+    echo "DCM_LOG_SERVER_URL="http://35.155.171.121:9092/loguploader/getSettings"" >> ${D}${sysconfdir}/dcm.properties
+    echo "DCM_HTTP_SERVER_URL="http://35.155.171.121/xconf/telemetry_upload.php"" >> ${D}${sysconfdir}/dcm.properties
+    echo "DCM_LA_SERVER_URL="http://35.155.171.121/xconf/logupload.php"" >> ${D}${sysconfdir}/dcm.properties
+    echo "TFTP_SERVER_IP=35.155.171.121" >> ${D}${sysconfdir}/device.properties
+    echo "MODEL_NAME=Turris" >> ${D}${sysconfdir}/device.properties
+
+    #Log Rotate Support
+    sed -i "/if \[ \! -f \/usr\/bin\/GetConfigFile \]\;then/,+4d" ${D}/rdklogger/logfiles.sh
+    sed -i "/uploadRDKBLogs.sh/a \ \t \t  \t  uploading_rdklogs" ${D}/rdklogger/rdkbLogMonitor.sh
+    sed -i "/uploadRDKBLogs.sh/d " ${D}/rdklogger/rdkbLogMonitor.sh
+    sed -i "/upload_nvram2_logs()/i uploading_rdklogs() \n { \n \ \t \t TFTP_RULE_COUNT=\`iptables -t raw -L -n | grep tftp | wc -l\` \n \ \t \t if [ \"\$TFTP_RULE_COUNT\" == 0 ] \n \t \t then \n \ \t \t \t iptables -t raw -I OUTPUT -j CT -p udp -m udp --dport 69 --helper tftp \n \ \t \t \t sleep 2 \n \ \t \t fi \n \ \t \t cd /nvram/logbackup \n \ \t \t FILENAME=\`ls *.tgz\` \n \ \t \t tftp -p -r \$FILENAME \$TFTP_SERVER_IP \n } " ${D}/rdklogger/rdkbLogMonitor.sh
+
+    install -m 0755 ${S}/devicerpi/lib/rdk/run_rm_key.sh   ${D}${base_libdir}/rdk
+}
+
+FILES_${PN} += "${systemd_unitdir}/system/swupdate.service"
+FILES_${PN} += "${systemd_unitdir}/system/dcm-log.service"
+
+RDEPENDS_${PN}_append_dunfell = " bash"
