#! /bin/sh
#
# Copyright (c) 2024-2024 Huawei Technologies Co., Ltd.
# All rights reserved.

#成功状态
STATUS_DONE="[OK]"
#失败状态
STATUS_FAILED="[FAILED]"
#运行状态
STATUS_RUNNING="[RUNNING]"
#未运行状态
STAUS_UNUSED="[UNUSED]"

export LD_LIBRARY_PATH=$INSTALL_DIR:$LD_LIBRARY_PATH
export LBC_DRIVER_DIR="/usr/lib/modules/pangea_lbc_driver/target"

cd ${LBC_DRIVER_DIR}
echo "cur dir:$(pwd), start pangea lbc driver..."

function insmod_ko()
{
    #先检查文件是否存在
    mod_name=$1
    if [ ! -f ${mod_name} ];then
        echo -e "Can not find ${mod_name} ...                           ${STATUS_FAILED}"
        return 1
    fi

    echo "insmod $@"
    insmod "$@"

    if [ $? -ne 0 ];then
        echo "insmod ${mod_name} fail ...                           ${STATUS_FAILED}"
        return 1
    else
        echo "insmod ${mod_name} succ ...                           ${STATUS_DONE}"
        return 0
    fi
}

function rmmod_ko()
{
    mod_name=$1

    ret=$(lsmod | cut -f1 -d' ' | grep -w "${mod_name}" -c)
    if [ ${ret} -le 0 ]; then
        echo "${mod_name} isn't exist before rmmoding ${mod_name}"
        return 0
    fi

    echo "rmmod ${mod_name}"
    rmmod ${mod_name}
    if [ $? -ne 0 ];then
        echo "rmmod ${mod_name} fail ...                           ${STATUS_FAILED}"
        return 1
    else
        echo "rmmod ${mod_name} succ ...                           ${STATUS_DONE}"
        return 0
    fi
}

function remove_kernel()
{
    echo "remove pangea lbc kernel ...                           ${STATUS_RUNNING}"
    rmmod_ko pangea_lbc.ko
    if [ $? -ne 0 ];then
        echo "rmmod_ko failed"
        return 1
    fi
    echo "remove pangea lbc kernel ...                           ${STATUS_DONE}"

    return 0
}

function insmod_kernel()
{
    echo "insmod pangea lbc kernel ...                           ${STATUS_RUNNING}"

    insmod_ko pangea_lbc.ko
    if [ $? -ne 0 ];then
        echo "insmod_ko failed"
        return 1
    fi
    echo "insmod pangea lbc kernel ...                           ${STATUS_DONE}"

    return 0
}

function lbc_service_start()
{
    echo -e "start pangea lbc service ...                           ${STATUS_RUNNING}"

    remove_kernel
    if [ $? -ne 0 ];then
        echo -e "Notice: remove pangea lbc kernel ...                           ${STATUS_FAILED}"
        exit 1
    fi

    insmod_kernel
    if [ $? -ne 0 ];then
        echo -e "Notice: insmod pangea lbc kernel ...                           ${STATUS_FAILED}"
        exit 1
    fi
}

function lbc_service_stop()
{
    echo -e "stop pangea lbc service ...                           ${STATUS_DONE}"
    remove_kernel
    if [ $? -ne 0 ];then
        echo -e "Notice: remove pangea lbc kernel ...                           ${STATUS_FAILED}"
        exit 1
    fi
}

function lbc_service_status()
{
    echo -e "pangea lbc service status ...                           ${STATUS_RUNNING}"
}

case "$1" in
    start)
        lbc_service_start
        ;;
    stop)
        lbc_service_stop
        ;;
    status)
        lbc_service_status
        ;;
    *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        ;;
esac
