[Feature][ZK-65][mtklog] ftp log to soc

           Affected branch: unknown
           Affected module: unknown
           Is it affected on both ZXIC and MTK: MTK
           Self-test: Yes
           Doc Update: No

Change-Id: I0c0974df391c7aaa9dbac1bc727fd467b7ffbe9a
diff --git a/IC_src/mtk/packages/apps/lynq-log-transfer/lynq_inner_log_transfer.sh b/IC_src/mtk/packages/apps/lynq-log-transfer/lynq_inner_log_transfer.sh
new file mode 100755
index 0000000..3b2b5a5
--- /dev/null
+++ b/IC_src/mtk/packages/apps/lynq-log-transfer/lynq_inner_log_transfer.sh
@@ -0,0 +1,762 @@
+#!/bin/bash
+#set -x
+#set -e
+
+ERROR_PARAM=1
+ERROR_FTP_SERVER_PING_NOT_OK=2
+ERROR_FTP_TRANSFER_FAIL=3
+ERROR_INNER_ERROR=4
+
+
+ERROR_IS_IN_TRANSFER_LOG=20
+
+ERROR_IS_IN_TRANSFER_SYS_LOG=$((ERROR_IS_IN_TRANSFER_LOG+0))
+ERROR_IS_IN_TRANSFER_REMAIN_SYS_LOG=$((ERROR_IS_IN_TRANSFER_LOG+1))
+ERROR_IS_IN_WAIT_TRRANSFER_REMAIN_SYS_LOG=$((ERROR_IS_IN_TRANSFER_LOG+2))
+
+ERROR_IS_IN_TRANSFER_MTK_LOG=$((ERROR_IS_IN_TRANSFER_LOG+5))
+ERROR_IS_IN_TRANSFER_REMAIN_MTK_LOG=$((ERROR_IS_IN_TRANSFER_LOG+6))
+ERROR_IS_IN_WAIT_TRRANSFER_REMAIN_MTK_LOG=$((ERROR_IS_IN_TRANSFER_LOG+7))
+
+
+ERROR_IS_IN_TRANSFER_DBG_LOG=$((ERROR_IS_IN_TRANSFER_LOG+10))
+ERROR_IS_IN_TRANSFER_REMAIN_DBG_LOG=$((ERROR_IS_IN_TRANSFER_LOG+11))
+ERROR_IS_IN_WAIT_TRRANSFER_REMAIN_DBG_LOG=$((ERROR_IS_IN_TRANSFER_LOG+12))
+
+
+DEBUG_FILE_PATH=/var/log/
+DEBUG_FILE_NAME=syslog.log
+DEBUG_FILE_BACKUP_NAME=log_transfer_debug_0.log
+DEBUG_FILE="${DEBUG_FILE_PATH}${DEBUG_FILE_NAME}"
+DEBUG_FILE_BACKUP="${DEBUG_FILE_PATH}${DEBUG_FILE_BACKUP_NAME}"
+
+if [ ! -d ${DEBUG_FILE_PATH} ]; then                    
+	mkdir -p ${DEBUG_FILE_PATH}
+fi    
+
+SYS_LOG_PATH="/var/log/"
+MTK_LOG_PATH="/var/log/mtklog/"
+TMP_LOG_PATH="/tmp/log_transfer_tmp/"
+MTK_LOG_BUFF_PATH="${TMP_LOG_PATH}mtklog_buffer/"
+MTK_LOG_MOUNT_PATH="${TMP_LOG_PATH}mtklog"
+CONTROL_FILE_PATH="${TMP_LOG_PATH}control/"
+LOG_IS_IN_TRANSFER=(
+     "${CONTROL_FILE_PATH}is_in_transfer_sys_log"
+     "${CONTROL_FILE_PATH}is_in_transfer_mtk_log"
+     "${CONTROL_FILE_PATH}is_in_transfer_dbg_log"
+    )
+WAIT_TRANSFER_REMAIN_LOG=(      
+      "${CONTROL_FILE_PATH}is_in_transfer_remain_sys_log"
+      "${CONTROL_FILE_PATH}is_in_transfer_remain_mtk_log"
+      "${CONTROL_FILE_PATH}is_in_transfer_remain_dbg_log"
+    )
+	
+TARGET_DIR=(      
+      "lynq/log/lynq_log_1"
+      "lynq/log/lynq_log_2"
+      "None"
+    )
+	
+target_dir=""
+
+	
+function is_in_debug()
+{
+    if [ -e "${LOG_IS_IN_TRANSFER[2]}" ] || [ -e "${WAIT_TRANSFER_REMAIN_LOG[2]}" ] 
+	then 
+        return 1
+    else
+        return 0
+    fi
+}
+
+
+log_print=(
+    "sys log"
+    "mtk log"
+    "dbg log"
+)
+
+loop_time=(
+    5
+    1
+    10
+)
+
+transfer_log_tag=(
+    0
+    0
+    0
+)
+
+LOG_PREFIX=(
+    "archive_log"
+    "MDLog"
+    ""
+)
+log_prefix=""
+
+#unit 0.1M
+SINGLE_FILE_SIZE=(
+    21
+    100
+    0
+)
+single_file_size=10
+
+#unit M
+INIT_LOG_MAX_SIZE=(
+    1000
+    3000
+    0
+)
+log_num_max=0
+LOG_DEL=$(($log_num_max/2))
+
+
+Q_CUR_NUM_UCI=(
+    "lynq_uci.lynq_log.log_1_cur_trf_num"
+    "lynq_uci.lynq_log.log_2_cur_trf_num"
+    ""
+)
+q_cur_num_uci=""
+
+Q_MAX_SIZE_UCI=(
+    "lynq_uci.lynq_log.log_1_max_size"
+    "lynq_uci.lynq_log.log_2_max_size"
+    ""
+)
+q_max_size_uci=""
+
+
+
+TAR_CMD="gzip"
+TAR_ARG=" -f"
+TAR_EXT="gz"
+
+UP_LOAD_POSTFIX=(
+    $TAR_EXT
+    "muxz"
+    ""
+)
+q_max_size_uci=""
+
+
+if [ ! -d ${CONTROL_FILE_PATH} ]; then                    
+    mkdir -p ${CONTROL_FILE_PATH}
+fi
+
+function clear_relative_tag()
+{      
+    length=${#transfer_log_tag[@]}
+   
+    for ((i=0;i<$length;i++))
+    do
+        if [ ${transfer_log_tag[$i]} -eq 1 ]; then                       
+            if [ $i -eq 0 ]; then              
+                rm -rf $SYS_LOG_PATH$log_prefix*                    
+            elif [ $i -eq 1 ]; then
+                echo 7 | emdlogger_ctrl        
+                rm -rf $MTK_LOG_PATH*
+                if [ -d ${MTK_LOG_BUFF_PATH} ]; then                    
+                    rm -rf ${MTK_LOG_BUFF_PATH}
+                fi   
+            fi
+        
+            if [ -e ${LOG_IS_IN_TRANSFER[$i]} ]; then        
+                rm -rf ${LOG_IS_IN_TRANSFER[$i]}
+            fi
+        
+            if [ -e ${WAIT_TRANSFER_REMAIN_LOG[$i]} ]; then
+                rm -rf ${WAIT_TRANSFER_REMAIN_LOG[$i]}         
+            fi                  
+        fi            
+    done     
+}
+
+function clear_relative_tag_when_exit()
+{
+    if [ $1 -eq $ERROR_FTP_TRANSFER_FAIL ]; then               
+       clear_relative_tag
+    fi          
+}
+
+function show_relative_tag()
+{    
+    length=${#LOG_IS_IN_TRANSFER[@]}
+   
+    for ((i=0;i<$length;i++))
+    do
+        if [ -e ${LOG_IS_IN_TRANSFER[$i]} ]; then                
+            echo_debug_info "now in transfer ${log_print[$i]}"        
+        else
+            echo_debug_info "now not in transfer ${log_print[$i]}"        
+        fi
+        
+        if [ -e ${WAIT_TRANSFER_REMAIN_LOG[$i]} ]; then                
+            echo_debug_info "now in transfer reamain ${log_print[$i]}"     
+        else
+            echo_debug_info "now not in transfer remain ${log_print[$i]}"         
+        fi    
+    done
+        
+    
+    if [ -d ${MTK_LOG_PATH} ]; then                
+        echo_debug_info "$MTK_LOG_PATH exists"        
+    else
+        echo_debug_info "$MTK_LOG_PATH not exists"        
+    fi    
+}
+
+function rotate_debug_file()
+{
+    filesize=`ls -l $DEBUG_FILE | awk '{ print $5 }'`
+    maxsize=1000000
+    if [ $filesize -gt $maxsize ]; then
+        mv $DEBUG_FILE $DEBUG_FILE_BACKUP
+        echo ""> $DEBUG_FILE
+    fi
+}
+
+currentTime=`date "+%Y%m%d_%H%M%S"`
+add_time_info=""
+function add_time_to_info()     
+{
+    currentTime=`date "+%Y%m%d_%H%M%S"`
+    add_time_info="${currentTime}$1"    
+}
+
+add_time_and_prefix_info=""
+function add_time_and_prefix_to_info()
+{
+    add_time_to_info "$1"
+    add_time_and_prefix_info="${2}${add_time_info}"
+}
+
+
+DBG_INFO_PREFIX="lynq_log_transfer "
+function echo_debug_info()
+{
+    echo $1
+    is_in_debug 	
+    if [ $? -eq 1 ]; then
+        add_time_and_prefix_to_info " $1" $DBG_INFO_PREFIX
+        echo $add_time_and_prefix_info >> $DEBUG_FILE        
+#       rotate_debug_file        
+    fi    
+}
+
+function print_usage()
+{   
+    echo "Usage : lynq-log-transfer 0 | 1 | 2 | 3 | 101 | 102 | 103 " >&2
+	echo "0 : Init, param like this: 0 config_id" >&2
+    echo "1 : Start Transfer syslog, param like this: 1 192.168.10.10 21 username passwword" >&2
+    echo "2 : Start Transfer mtklog,  param like this: 2 192.168.10.10 21 username passwword" >&2
+    echo "3 : Start debug and Transfer debug log,  param like this: 3" >&2
+    echo "101 : Stop transfer sys log, param like this: 101" >&2
+    echo "102 : Stop transfer mtk log, param like this: 102" >&2
+    echo "103 : Stop debug and stop transfer debug log, param like this: 103" >&2    
+    echo " ">&2
+    echo " ">&2
+}
+
+function print_exit_info()
+{
+    case "$1" in
+      0)
+        echo_debug_info "normal exit" 
+      ;;
+      $ERROR_PARAM)
+	    print_usage
+        echo_debug_info "param error"
+        ;;
+      $ERROR_FTP_SERVER_PING_NOT_OK)
+        echo_debug_info "ftp server ping not ok"
+        ;;  
+      $ERROR_FTP_TRANSFER_FAIL)
+        echo_debug_info "ftp transfer error"      
+        ;; 
+      $ERROR_INNER_ERROR)
+        echo_debug_info "inner error"
+        ;;
+      $ERROR_IS_IN_TRANSFER_SYS_LOG)
+        echo_debug_info "is still in transfering sys log"
+        ;;    
+      $ERROR_IS_IN_TRANSFER_REMAIN_SYS_LOG)  
+        echo_debug_info "is still in transfering remain sys log"
+        ;;  
+      $ERROR_IS_IN_WAIT_TRRANSFER_REMAIN_SYS_LOG)
+        echo_debug_info "is still waitting transfer remain sys log"
+        ;;       
+      $ERROR_IS_IN_TRANSFER_MTK_LOG)
+        echo_debug_info "is still in transfering mtk log"
+        ;;    
+      $ERROR_IS_IN_TRANSFER_REMAIN_MTK_LOG)  
+        echo_debug_info "is still in transfering remain mtk log"
+        ;;  
+      $ERROR_IS_IN_WAIT_TRRANSFER_REMAIN_MTK_LOG)
+        echo_debug_info "is still waitting transfer remain mtk log"
+        ;;           
+       $ERROR_IS_IN_TRANSFER_DBG_LOG)
+        echo_debug_info "is still in transfering dbg log"
+        ;;    
+      $ERROR_IS_IN_TRANSFER_REMAIN_DBG_LOG)  
+        echo_debug_info "is still in transfering remain dbg log"
+        ;;  
+      $ERROR_IS_IN_WAIT_TRRANSFER_REMAIN_DBG_LOG)
+        echo_debug_info "is still waitting transfer remain dbg log"
+        ;;           
+      *)
+        echo_debug_info "other error"
+        ;;
+    esac       
+}
+
+ftp_server="192.168.125.111/"
+ftp_user_name="abc"
+ftp_password="abc"
+ftp_port="21"
+
+function ftp_transfer_file_then_delete()
+{
+    new_file_name=$1
+    if [ $2 -eq 1 ]; then
+      ${TAR_CMD} ${TAR_ARG} $new_file_name
+      new_file_name=$new_file_name.$TAR_EXT
+    fi        
+       
+    curl ftp://$ftp_server:$ftp_port/$target_dir/ -u "${ftp_user_name}:${ftp_password}" -T $new_file_name 1>/dev/null
+    ret=$?
+    rm -rf $new_file_name
+    return $ret
+}
+
+function ftp_cp_file_after_add_tag()
+{    
+    if [ -e ${1} ]; then
+        add_time_and_prefix_to_info $1 $2    
+        cp $1 $add_time_and_prefix_info    
+        ftp_transfer_file_then_delete $add_time_and_prefix_info 1    
+        return $?
+    fi
+}
+
+CUR_LOG_NUM=0
+function save_cur_log_num_to_uci()
+{
+    if [ ! -z $q_cur_num_uci ]; then    
+        uci set ${q_cur_num_uci}=${CUR_LOG_NUM}
+    fi
+}
+
+function exit_process()
+{    
+    print_exit_info $1 
+    clear_relative_tag_when_exit  $1 
+    save_cur_log_num_to_uci
+    exit $1
+}
+
+
+SYS_LOG_FILES=(
+    "syslog.log.9"
+    "syslog.log.8"
+    "syslog.log.7"
+    "syslog.log.6"
+    "syslog.log.5"
+    "syslog.log.4"
+    "syslog.log.3"
+    "syslog.log.2"
+    "syslog.log.1"
+    "syslog.log.0"
+)
+
+SYSLOG_INDEX=(0 1 2 3 4 5 6 7 8 9)
+
+#SYS_LOG_FILE_COMMON_PREFIX="archive_log"
+
+function do_cur_log_num_plus()
+{
+    ((CUR_LOG_NUM++))
+    if [ $CUR_LOG_NUM -gt $log_index_max ]; then
+        CUR_LOG_NUM=0
+    fi
+}
+
+function ftp_delete_file()
+{
+   q_cmd="DELE $target_dir/$1"
+   curl -u $ftp_user_name:$ftp_password ftp://$ftp_server:$ftp_port  -Q "$q_cmd" 1>/dev/null
+
+}
+
+function get_del_num()
+{	
+    if [ $1 -lt $((${2}/2)) ]; then
+        LOG_DEL=$((${1}+${2}/2))
+    else
+	LOG_DEL=$((${1}-${2}/2))
+    fi
+}
+
+function do_sys_log_transfer()
+{
+    cd ${SYS_LOG_PATH}     
+    EXIST_SYS_LONG_NUM=0
+    for SYS_LOG_FILE in ${SYS_LOG_FILES[@]} $1; do        
+        if [ -e "${SYS_LOG_PATH}/${SYS_LOG_FILE}" ]; then            
+            mv ${SYS_LOG_FILE} ${log_prefix}_${CUR_LOG_NUM}
+            SYSLOG_INDEX[$EXIST_SYS_LONG_NUM]=${CUR_LOG_NUM}
+            ((EXIST_SYS_LONG_NUM++))        
+            do_cur_log_num_plus                            
+        fi
+    done    
+    
+    for j in `seq 0 $(($EXIST_SYS_LONG_NUM-1))`
+    do          
+         ${TAR_CMD} ${TAR_ARG} ${log_prefix}_${SYSLOG_INDEX[$j]}         
+    done
+        
+    for j in `seq 0 $(($EXIST_SYS_LONG_NUM-1))`
+    do  
+        get_del_num ${SYSLOG_INDEX[$j]} $log_num_max
+        ftp_delete_file ${log_prefix}_${LOG_DEL}.$TAR_EXT
+        ftp_transfer_file_then_delete ${log_prefix}_${SYSLOG_INDEX[$j]}.$TAR_EXT    0    
+        if [ $? -ne 0 ]; then
+             echo_debug_info "ftp error code is $?"
+             exit_process $ERROR_FTP_TRANSFER_FAIL        
+        fi              
+    done
+}    
+
+function do_backup_mtk_log()
+{
+    cd $MTK_LOG_BUFF_PATH
+    for muxzfile in *."$1"; do       
+        get_del_num $CUR_LOG_NUM $log_num_max
+        ftp_delete_file ${log_prefix}_${LOG_DEL}.muxz	
+        ftp_transfer_file_then_delete $muxzfile 0
+        if [ $? -ne 0 ]; then
+            exit_process $ERROR_FTP_TRANSFER_FAIL        
+        fi                   
+    done 
+    cd -
+}
+
+function do_mtk_log_transfer()
+{        
+    cd $MTK_LOG_PATH
+    while true
+    do
+        file_name=$(find -name \*"$1" | xargs ls -lthr | head -1 | awk '{print $9}')        
+        if [ -n "$file_name" ]; then        		   
+            mv $file_name $MTK_LOG_BUFF_PATH${log_prefix}_${CUR_LOG_NUM}.muxz             
+            do_backup_mtk_log "muxz"   
+            do_cur_log_num_plus
+        else
+            break;
+        fi    
+    done
+}
+
+function do_dbg_log_transfer()
+{   
+    if [ $ftp_server = "127.0.0.1" ]; then
+        return 
+    fi       
+    
+    cd $DEBUG_FILE_PATH
+    
+    ftp_cp_file_after_add_tag $1 "debug_" 
+    if [ $? -eq 0 ]; then
+        rm -rf $1
+    fi   
+}
+
+function send_remain_log()
+{
+    if [ $1 -eq 0 ]; then        
+        do_sys_log_transfer "syslog.log"
+        echo "" > ${SYS_LOG_PATH}/syslog.log 
+    elif [ $1 -eq 1 ]; 
+    then
+        do_mtk_log_transfer "muxz"
+        do_mtk_log_transfer "muxz.tmp"   
+    elif [ $1 -eq 2 ]; 
+    then        
+        do_dbg_log_transfer $DEBUG_FILE_BACKUP_NAME
+        do_dbg_log_transfer $DEBUG_FILE_NAME
+    fi    
+}
+
+
+
+function do_log_transfer()
+{
+    if [ $1 -eq 0 ]; then        
+        do_sys_log_transfer
+    elif [ $1 -eq 1 ]; 
+    then
+        do_mtk_log_transfer "muxz"
+    elif [ $1 -eq 2 ]; 
+    then
+        do_dbg_log_transfer $DEBUG_FILE_BACKUP_NAME
+    fi
+}
+
+function do_loop()
+{     
+    echo_debug_info "start transfer ${log_print[$1]}"        
+
+    while [ -e "${LOG_IS_IN_TRANSFER[$1]}" ]
+    do             
+        do_log_transfer $1
+        sleep $2      
+    done
+    echo_debug_info "start remain ${log_print[$1]} transfer"
+    send_remain_log $1 
+    echo_debug_info "stop ${log_print[$1]} transfer"
+    if [ -e ${WAIT_TRANSFER_REMAIN_LOG[$1]} ]; then
+        rm ${WAIT_TRANSFER_REMAIN_LOG[$1]}
+    fi      
+    clear_relative_tag
+}
+
+
+
+function wait_transfer_remain_log()
+{
+    second=0
+    while [ -e "${WAIT_TRANSFER_REMAIN_LOG[$1]}"  -a $second -lt 60 ]
+    do    
+        sleep 1
+        ((second=second+1))
+    done
+}
+
+function stop_log_transfer()
+{
+    if [ -e ${LOG_IS_IN_TRANSFER[$1]} ]; then
+        touch ${WAIT_TRANSFER_REMAIN_LOG[$1]}                    
+        rm ${LOG_IS_IN_TRANSFER[$1]}   
+        echo_debug_info "${log_print[$1]} transfer stoping "
+        wait_transfer_remain_log $1
+        if [ -e ${WAIT_TRANSFER_REMAIN_LOG[$1]} ]; then
+            rm ${WAIT_TRANSFER_REMAIN_LOG[$1]}         
+        fi      
+    fi
+}
+
+function sever_should_ok()
+{
+  ping -c 2 $1
+
+  if [ $? -ne 0 ]; then 
+      exit_process $ERROR_FTP_SERVER_PING_NOT_OK
+  fi  
+}
+
+function get_ftp_param()
+{
+    if [ $1 -gt 4 ]; then
+        ftp_server=$2
+        sever_should_ok $ftp_server        
+        ftp_port=$3
+        ftp_user_name=$4
+        ftp_password=$5                            
+    else
+        echo_debug_info "para num $1 error"
+        exit_process $ERROR_PARAM
+    fi      
+}
+
+function delete_beyond_log()
+{
+	post_fix=${UP_LOAD_POSTFIX[$1]}	 
+	
+	for j in `seq $2 $3`
+	do 
+		ftp_delete_file ${log_prefix}_${j}.${post_fix}
+	done
+}
+
+function get_init_cur_log_num()
+{
+    q_cur_num_uci=${Q_CUR_NUM_UCI[$1]}	
+        
+    if [ ! -z $q_cur_num_uci ]; then
+        q_uci_value=`uci get $q_cur_num_uci`
+        if [ -z $q_uci_value ];
+        then
+            uci set ${q_cur_num_uci}=${CUR_LOG_NUM}
+        else
+            CUR_LOG_NUM=$(($q_uci_value))
+        fi	
+        if [ $CUR_LOG_NUM -gt $log_index_max ]; then
+		    delete_beyond_log $1 $log_index_max  $(($CUR_LOG_NUM-1))
+            CUR_LOG_NUM=$log_index_max
+            uci set ${q_cur_num_uci}=${CUR_LOG_NUM}
+        fi
+    fi	
+}
+
+function get_single_file_size()
+{
+    single_file_size=${SINGLE_FILE_SIZE[$1]}  		
+	 
+    if [ $1 -eq 1 ]; then
+		q_uci_value=`uci get mdlog.property.md_log_size`
+		if [ ! -z $q_uci_value ];
+		then
+		    single_file_size=$(($(($q_uci_value))*10))			
+		fi
+    fi			
+}
+
+function get_init_max_log_num()
+{
+    init_log_max_size=${INIT_LOG_MAX_SIZE[$1]}    		
+    q_max_size_uci=${Q_MAX_SIZE_UCI[$1]}	
+	
+	get_single_file_size $1
+        
+    if [ ! -z $q_max_size_uci ]; then
+        q_uci_value=`uci get $q_max_size_uci`
+        if [ -z $q_uci_value ];
+        then
+            uci set ${q_max_size_uci}=$init_log_max_size
+            log_num_max=$(($init_log_max_size*20/single_file_size))
+        else
+            log_num_max=$(($(($q_uci_value))*20/single_file_size))
+        fi	
+    fi
+    log_index_max=$(($log_num_max-1)) 	
+}
+
+function loop_prepare()
+{
+    if [ $1 -eq 1 ]; then
+        echo 6 | emdlogger_ctrl
+        if [ $? -ne 0 ]; then 
+            echo_debug_info "start mtk log fail"
+            exit_process $ERROR_INNER_ERROR              
+        fi
+        if [ ! -d ${MTK_LOG_BUFF_PATH} ]; then                    
+            mkdir -p ${MTK_LOG_BUFF_PATH}
+        fi      
+    fi     
+    target_dir=${TARGET_DIR[$1]}	
+    log_prefix=${LOG_PREFIX[$1]}   
+
+	
+    get_init_max_log_num $1
+    get_init_cur_log_num $1
+	
+    if [ ! -z $target_dir ]; then
+        # 3 times for guarrantee
+        curl -u $ftp_user_name:$ftp_password -XPWD -p -e ftp://$ftp_server:$ftp_port/$target_dir --ftp-create-dirs ftp://$ftp_server:$ftp_port/$target_dir/ 1>/dev/null
+        curl -u $ftp_user_name:$ftp_password -XPWD -p -e ftp://$ftp_server:$ftp_port/$target_dir --ftp-create-dirs ftp://$ftp_server:$ftp_port/$target_dir/ 1>/dev/null	
+        curl -u $ftp_user_name:$ftp_password -XPWD -p -e ftp://$ftp_server:$ftp_port/$target_dir --ftp-create-dirs ftp://$ftp_server:$ftp_port/$target_dir/ 1>/dev/null
+    fi
+}
+
+
+function trigger_log_transfer()
+{
+    index=$((${1}-1))
+    if [ -e ${LOG_IS_IN_TRANSFER[$index]} ]; then                
+        exit_process $((ERROR_IS_IN_TRANSFER_LOG+${index}*5 ))
+    fi
+    if [ -e ${WAIT_TRANSFER_REMAIN_LOG[$index]} ]; then                
+        exit_process $((ERROR_IS_IN_TRANSFER_LOG+${index}*5+1))    
+    fi
+    
+    if [ $index -ne 2 ]; then
+	    get_ftp_param $# $2 $3 $4 $5        
+        transfer_log_tag[$index]=1
+        loop_prepare $index
+    fi		
+
+    
+    
+    touch ${LOG_IS_IN_TRANSFER[${index}]}
+    
+    echo_debug_info "transfer ${log_print[$index]}"     
+    
+    if [ $index -eq 2 ]; then    
+        echo_debug_info "log transfer param_num $# param $* start"    
+        show_relative_tag
+        return 
+    fi    
+
+    do_loop ${index} ${loop_time[$index]}           
+}
+
+function stop_log_transfer_ui()
+{
+    index=$((${1}-101))
+    if [ -e ${WAIT_TRANSFER_REMAIN_LOG[$index]} ]; then                
+        exit_process $((ERROR_IS_IN_TRANSFER_LOG+${index}*5+2 ))
+    fi          
+    
+    if [ $index -eq 1 ]; then
+        echo 7 | emdlogger_ctrl
+    elif [ $index -eq 2 ]; then
+        show_relative_tag
+        echo_debug_info "log transfer param_num $# param $* complete" 
+        rm ${LOG_IS_IN_TRANSFER[$index]}   
+        return 
+    fi
+    
+    stop_log_transfer  $index
+}
+
+function init_md_log()
+{
+    if [ ! -d $MTK_LOG_MOUNT_PATH ];
+    then 
+        echo_debug_info "init md log start"
+        mkdir -p $MTK_LOG_MOUNT_PATH
+        echo 7 | emdlogger_ctrl
+        rm -rf $MTK_LOG_PATH*
+        mount -o bind $MTK_LOG_MOUNT_PATH $MTK_LOG_PATH
+        rm -rf $MTK_LOG_PATH*
+        uci set mdlog.property.md_cyclic_size='36'
+        uci set mdlog.property.md_log_size=$((${SINGLE_FILE_SIZE[1]}/10))
+        uci commit
+        killall emdlogger1	
+        echo_debug_info "init md log end"
+    fi		
+}
+
+function init_log_transfer_ui()
+{
+    index=$2
+    if [ $index -eq 1 ]; then
+        #Æô¶¯debug
+        trigger_log_transfer 3  
+        init_md_log
+    fi	
+}
+
+echo_debug_info "log transfer param_num $# param $* start"
+
+case "$1" in  
+  [1-3])  
+    trigger_log_transfer "$@"
+    ;;
+  101|102|103)     
+    stop_log_transfer_ui "$@"
+    ;;    
+  0)
+    init_log_transfer_ui "$@"
+	;;
+  *)    
+    exit_process $ERROR_PARAM
+    ;;
+esac
+
+echo_debug_info "log transfer param_num $# param $* complete"
+exit_process 0      
+            
+           
\ No newline at end of file
diff --git a/IC_src/mtk/packages/apps/lynq-log-transfer/lynq_log_transfer.c b/IC_src/mtk/packages/apps/lynq-log-transfer/lynq_log_transfer.c
new file mode 100755
index 0000000..2ab19c5
--- /dev/null
+++ b/IC_src/mtk/packages/apps/lynq-log-transfer/lynq_log_transfer.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <strings.h>
+#include<stdlib.h>
+
+#define CMD_BUFFER_SIZE  256
+static char printBuf[CMD_BUFFER_SIZE];
+static char tempPrintBuf[CMD_BUFFER_SIZE];  
+#define removeLastChar          printBuf[strlen(printBuf)-1] = 0
+#define clearPrintBuf           printBuf[0] = 0
+#define appendPrintBuf(x...)    snprintf(tempPrintBuf, CMD_BUFFER_SIZE, x); \
+                                  snprintf(printBuf, CMD_BUFFER_SIZE, "%s", tempPrintBuf)
+
+#define BUF_LEN 256
+int main(int argc, const char *argv[])
+{
+    int status;
+    int ret;    
+ 
+    clearPrintBuf;    
+    
+    appendPrintBuf("%s%s",printBuf,"/usr/bin/lynq_inner_log_transfer.sh ");  
+
+    for(int i=1;i < argc; i++)
+    {
+        appendPrintBuf("%s%s",printBuf,argv[i]);
+        appendPrintBuf("%s%s",printBuf," ");
+    }   
+    removeLastChar;
+	
+    status = system(printBuf);  
+
+    printf("status is %d",status);
+    
+    if (-1 == status)  
+    {          
+        ret= -1;
+    }  
+    else  
+    {     
+       
+        if (WIFEXITED(status))  
+        {  
+            
+            ret = WEXITSTATUS(status);           
+        }  
+        else  
+        {  
+            ret= -2;        
+        }  
+    }  
+        
+    exit(ret);  
+
+}
diff --git a/IC_src/mtk/packages/apps/lynq-log-transfer/makefile b/IC_src/mtk/packages/apps/lynq-log-transfer/makefile
new file mode 100755
index 0000000..2ee7d60
--- /dev/null
+++ b/IC_src/mtk/packages/apps/lynq-log-transfer/makefile
@@ -0,0 +1,48 @@
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+                -g -Os \
+                -flto \
+                -fpermissive \
+                -fPIC \
+
+
+
+LOCAL_CFLAGS += -DLYNQ_SW_INSIDE_VERSION=\"$(LYNQ_CONFIG_VERSION)\"
+LOCAL_CFLAGS += -DLYNQ_SW_VERSION=\"$(LYNQ_CONFIG_SW_VERSION)\"
+
+LOCAL_PATH   = .
+
+LOCAL_C_INCLUDES = \
+  -I. \
+  -I$(ROOT)$(includedir)/logger \
+  -I$(ROOT)$(includedir)/liblog \
+
+
+
+
+LOCAL_LIBS := \
+    -L. \
+    -ldl \
+    -lpthread \
+    -llynq-log \
+    -lssl \
+    -llynq-uci \
+
+SOURCES = $(wildcard *.c)
+
+EXECUTABLE = lynq-log-transfer
+
+OBJECTS=$(SOURCES:.c=.o)
+all: $(EXECUTABLE)
+
+$(EXECUTABLE): $(OBJECTS)
+	$(CXX) $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o : %.c
+	$(CC) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+.PHONY: clean
+clean:
+	$(RM) $(OBJECTS) $(EXECUTABLE)