#!/bin/sh
# Panabit򵼴ű


. /etc/PG.conf

RAMDISK="/usr/ramdisk"
FLOWEYE="${RAMDISK}/bin/floweye"
EVENTFILE=${PGETC}/log/pending_events

WORK_DIR="${RAMDISK}/tmp/quick_config"
conf_file="${WORK_DIR}/quick.conf"
stat_file="${WORK_DIR}/quick.stat"

empty_file="${DATAPATH}/config/panabit.conf"


save_ok()
{
    echo "stat=run" > ${stat_file}
    echo "msg=${1}" >> ${stat_file}
}


save_error()
{
    echo "stat=error" > ${stat_file}
    echo "msg=${1}" >> ${stat_file}
    exit 1
}


[ ! -f ${conf_file} ] && return

# 
echo "ENDCONFIG" > ${empty_file}
echo "import_config yes" >> ${EVENTFILE}

# ѯ״̬
loop=1
clear_ok=0

while [ ${loop} -le 60 ];
do
    loop=$((${loop} +1 ))

    if [ ! -f ${empty_file} ]; then
        clear_ok=1
        break;
    fi

    sleep 1
done

[ "${clear_ok}" = "0" ] && save_error "Ĭʧ"

# ȴpanaos״̬
loop=0
active=0
while [ ${loop} -le 60 ];
do
    active=`${FLOWEYE} config stat | grep "^cfgload=" | cut -d'=' -f2`
    [ "${active}" = "1" ] && break

    sleep 1
done

[ "${active}" = "0" ] && save_error "Panaosʧ"

#ȡ
save_ok "ʼ"
. ${conf_file}

case "${mode}" in
    "gateway")

        # add wan group
        ${FLOWEYE} wangroup add name=Default type=srcdst

        # part1;part2;part3
        for row in `echo ${config} | tr ";" " "`
        do
            # rtif,name,ifname,ip,mask,dhcpserver,ippool,dns1,dns2
            # proxy,name,ifname,ip,gateway
            # dhcpwan,name,ifname
            # pppoe,name,ifname,username,password
            pxy_type=`echo ${row} | cut -d"," -f1`
            name=`echo ${row} | cut -d"," -f2`
            ifname=`echo ${row} | cut -d"," -f3`

            if [ "${pxy_type}" = "rtif" ]; then
                ip=`echo ${row} | cut -d"," -f4`
                mask=`echo ${row} | cut -d"," -f5`
                dhcpserver=`echo ${row} | cut -d"," -f6`
                ippool=`echo ${row} | cut -d"," -f7`
                dns1=`echo ${row} | cut -d"," -f8`
                dns2=`echo ${row} | cut -d"," -f9`

                ${FLOWEYE} if set name=${ifname} mode=0 zone=inside
                errmsg=`${FLOWEYE} nat addrtif name=${name} ifname=${ifname} addr=${ip} mask=${mask}`
                [ $? -ne 0 ] && save_error "LAN[${name}]ʧ:${errmsg}"

                if [ "${dhcpserver}" = "1" ]; then
                    proxyid=`${FLOWEYE} nat getproxy ${name} | grep "proxyid" | cut -d"=" -f2`
                    cmdargs=" name=${name} id=${proxyid} dhcp_pool=${ippool} dns0=${dns1} dns1=${dns2}"
                    cmdargs=" ${cmdargs} leasettl=3600 dhcp_enable=1 dhcp_gateway=${ip} dhcp_mask=${mask}"
                    errmsg=`${FLOWEYE} nat setrtif ${cmdargs}`
                    [ $? -ne 0 ] && save_error "${name}DHCPʧ:${errmsg}"
                fi

            elif [ "${pxy_type}" = "proxy" ]; then
                ip=`echo ${row} | cut -d"," -f4`
                gateway=`echo ${row} | cut -d"," -f5`
                
                ${FLOWEYE} if set name=${ifname} mode=0 zone=outside
                errmsg=`${FLOWEYE} nat addproxy name=${name} ifname=${ifname} addr=${ip} gateway=${gateway}`
                [ $? -ne 0 ] && save_error "WAN[${name}]ʧ:${errmsg}"
                ${FLOWEYE} wangroup set id=1 proxy=${name} weight=1

            elif [ "${pxy_type}" = "dhcpwan" ]; then
                ${FLOWEYE} if set name=${ifname} mode=0 zone=outside
                errmsg=`${FLOWEYE} nat adddhcpwan name=${name} ifname=${ifname}`
                [ $? -ne 0 ] && save_error "DHCP-WAN[${name}]ʧ:${errmsg}"
                ${FLOWEYE} wangroup set id=1 proxy=${name} weight=1

            elif [ "${pxy_type}" = "pppoe" ]; then
                username=`echo ${row} | cut -d"," -f4`
                password=`echo ${row} | cut -d"," -f5`
                ${FLOWEYE} if set name=${ifname} mode=0 zone=outside
                errmsg=`${FLOWEYE} nat addpppoe name=${name} ifname=${ifname} username=${username} password=${password}`
                [ $? -ne 0 ] && save_error "PPPOE-WAN[${name}]ʧ:${errmsg}"
                ${FLOWEYE} wangroup set id=1 proxy=${name} weight=1
            else
                save_error "δ֪·ͣ${pxy_type}"
            fi
        done

        ${FLOWEYE} route add id=65535 action=nat-_wg.Default
        ;;

    "bridge")
        # part1;part2;part3
        for row in `echo ${config} | tr ";" " "`
        do
            # ifname,mode,zone,peer
            ifname=`echo ${row} | cut -d"," -f1`
            mode=`echo ${row} | cut -d"," -f2`
            peer=`echo ${row} | cut -d"," -f3`
            zone=`echo ${row} | cut -d"," -f4`
            
            [ "${peer}" = "" ] && continue
            ${FLOWEYE} if set name=${ifname} mode=${mode} zone=${zone} peeer=${peer}
        done
        ;;

    "bypass")
        # ip,ip,ip....
        for ip in `echo ${config} | tr "," " "`
        do
            ${FLOWEYE} table addip 0 ${ip}
        done

        for ifname in `${FLOWEYE} if list | cut -d" " -f1`
        do
            ${FLOWEYE} if set name=${ifname} mode=0 zone=inside
        done
        ;;

    *)
        save_error "ôδ֪ģʽ"
        ;;
esac

echo "stat=ok" > ${stat_file}
echo "msg=" >> ${stat_file}
