#!/bin/sh
# shellcheck source=/dev/null
# shellcheck disable=SC2034

# Default config value
ENABLE=1
RESCUESVP=1
PRINCIPAL=eth0
RESCUE=ppp0
ROUTES="8.8.8.8 4.2.2.2"
CHECKFREQ=30
RETURNFREQ=120
SUCCESSCOUNT=1
TMTPINGRESP=5
INTERVPING=2
INTERVADDRT=1
COUNTADDRT=5
MAX_FAILED_PRINCIPAL=5
RESCUEROUTES=""
RESCUECHECKFREQ=30
RESCUESUCCESSCOUNT=1
RESCUETMTPINGRESP=5
RESCUEINTERVPING=2
MAX_FAILED_RESCUE=5
DELAY_REMOVE_SSH=3600
STATEFILE="$ROOTACT/usr/data/lrr/_statefailover"
STATEPRINCIPAL="$ROOTACT/usr/data/lrr/_statefailoverprincipal"
STATERESCUE="$ROOTACT/usr/data/lrr/_statefailoverrescue"

# Path pattern of the file used as reference to check if the user configuration file has been updated
CURRENT_CONF=/var/run/_current_ipfailover2.ini

# clearConfig removes the reference file
# used to check if config file has been updated
#
# $1: "main" or "rescue"
#
clearConfig()
{
    rm -f "${CURRENT_CONF}_$1" 2> /dev/null
}


# readConfig()
#
# read values from previously
# load ipfailover2.ini files
readConfig()
{

    PRINCIPAL=$(_get_ini_var "ipfailover2" "principal" "eth0")
    RESCUE=$(_get_ini_var "ipfailover2" "rescue" "ppp0")
    RESCUESVP=$(_get_ini_var "ipfailover2" "rescuesvp" 1)
    ROUTES=$(_get_ini_var "ipfailover2" "routes")
    RESCUEROUTES=$(_get_ini_var "ipfailover2" "rescueroutes")
    COUNTADDRT=$(_get_ini_var "ipfailover2" "countaddrt")
    INTERVADDRT=$(_get_ini_var "ipfailover2" "intervaddrt")
    DELAY_REMOVE_SSH=$(_get_ini_var "ipfailover2" "removessh" )

    # Bandwith constraints for principal interface
    BWC_PRINCIPAL_SECTION="bandwidthconstraint_principal:$(_get_ini_var "ipfailover2" "bandwidthconstraint_principal" 0)"

    CHECKFREQ=$(_get_ini_var "${BWC_PRINCIPAL_SECTION}" "checkfreq")
    RETURNFREQ=$(_get_ini_var "${BWC_PRINCIPAL_SECTION}" "returnfreq")
    SUCCESSCOUNT=$(_get_ini_var "${BWC_PRINCIPAL_SECTION}" "successcount")
    TMTPINGREQP=$(_get_ini_var "${BWC_PRINCIPAL_SECTION}" "tmtpingresp")
    INTERVPING=$(_get_ini_var "${BWC_PRINCIPAL_SECTION}" "intervping")
    MAX_FAILED_PRINCIPAL=$(_get_ini_var "${BWC_PRINCIPAL_SECTION}" "maxfailedprincipal")

    # Bandwith constraints for rescue interface
    BWC_RESCUE_SECTION="bandwidthconstraint_rescue:$(_get_ini_var "ipfailover2" "bandwidthconstraint_rescue" 1)"

    RESCUECHECKFREQ=$(_get_ini_var "${BWC_RESCUE_SECTION}" "rescuecheckfreq")
    RESCUESUCCESSCOUNT=$(_get_ini_var "${BWC_RESCUE_SECTION}" "rescuesuccesscount")
    RESCUETMTPINGRESP=$(_get_ini_var "${BWC_RESCUE_SECTION}" "rescuetmtpingresp")
    RESCUEINTERVPING=$(_get_ini_var "${BWC_RESCUE_SECTION}" "rescueintervping")
    MAX_FAILED_RESCUE=$(_get_ini_var "${BWC_RESCUE_SECTION}" "maxfailedrescue")

}

#
# loadConfig loads ipfailover2.ini files
# only if user config file has been updated
# Update verification is based on the timestamp
# of a reference file (CURRENT_CONF)
#
# $1: "main" or "rescue"
#
loadConfig()
{
    script="$1"

    if [ -z "$script" ] || { [ "$script" != "main" ] && [ "$script" != "rescue" ]; }; then
        Log "Wrong type of script: $script"
        return 1
    fi

    # check if the user file was changed
    # FIXME: In POSIX sh, -ot is undefined. [SC3013]
    if [ "$ROOTACT/usr/etc/lrr/ipfailover2.ini" -ot "${CURRENT_CONF}_${script}" ]; then
        return 2
    fi

    # We push nothing in the file since only its modification date is needed
    echo "" > "${CURRENT_CONF}_${script}"

    # Reload full config
    _load_conf "ipfailover2.ini"
    readConfig

    Log "Config loaded: pri: ${PRINCIPAL}, res: ${RESCUE}, svp: ${RESCUESVP}"
}

dispConfig() {
    Log "  principal: $PRINCIPAL"
    Log "  rescue: $RESCUE"
    Log "  rescuesvp: $RESCUESVP"
    Log "  routes: $ROUTES"
    Log "  rescueroutes: $RESCUEROUTES"
    Log "  countaddrt: $COUNTADDRT"
    Log "  intervaddrt: $INTERVADDRT"
    Log "  removessh: $DELAY_REMOVE_SSH"
    Log "Bandwidth constraint prinipal"
    Log "  checkfreq: $CHECKFREQ"
    Log "  returnfreq: $RETURNFREQ"
    Log "  successcount: $SUCCESSCOUNT"
    Log "  tmtpingreqp: $TMTPINGREQP"
    Log "  intervping: $INTERVPING"
    Log "  maxfailedprincipal: $MAX_FAILED_PRINCIPAL"
    Log "Bandwidth constraint rescue"
    Log "  rescuecheckfreq: $RESCUECHECKFREQ"
    Log "  rescuesuccesscount: $RESCUESUCCESSCOUNT"
    Log "  rescuetmtpingresp: $RESCUETMTPINGRESP"
    Log "  rescueintervping: $RESCUEINTERVPING"
    Log "  maxfailedrescue: $MAX_FAILED_RESCUE"

}
