[Add meta-cmf-filogic sdk cmf for rdkb development]
[Description]
Add meta-cmf-filogic sdk cmf for rdkb development
1. rdkb base on dunfell rdkb-next (> 2022q1)
2. cmf is mostly from meta-turris implementation
3. some 64bit support are port from rp4-64 cmf
4. arm64/arm 32bit bsp both can run on rdkb
[Release-log]
N/A
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