Jump to content
Калькуляторы

handler.sh или сломай себе голову Поделитесь скриптом от LanBilling'а

Здравствуйте!

Вот уже несколько месяцев тянем с этим скриптом, у кого есть нормально работающий handler.sh от ланбилла, поделитесь для IPoE.

Share this post


Link to post
Share on other sites

уже несколько месяцев тянем с этим скриптом

 

За это время уже свой скрипт написали с преферансом и поэтессами.

Share this post


Link to post
Share on other sites

За это время уже свой скрипт написали с преферансом и поэтессами.

Вот вчера начал сам писать. Пришлось. Пока некоторые проблемы с CoA, а так, думаю, на след. неделе будет готов. Если кому-то понадобится, скину.

Share this post


Link to post
Share on other sites

За это время уже свой скрипт написали с преферансом и поэтессами.

Вот вчера начал сам писать. Пришлось. Пока некоторые проблемы с CoA, а так, думаю, на след. неделе будет готов. Если кому-то понадобится, скину.

А что там писать-то

Нужные VSA подставляй да и всё. Возьми мой с форума ланбиллинга да напиши нужные СоА в нужны процедуры.

Там косяк есть один у ЛанБиллинга с этим скриптом. Не достаточно параметров передаётся при определённых действиях

 

Вот тебе мой скрипт для IPoE на основе SE100

 

 

#!/bin/bash

PARAMS="$*" # all parameters for ./handler from billing
LOG='/usr/local/billing/srvctl.log' # no comments

echo "Runing handler.sh with: $PARAMS" >> $LOG

COA_PORT='3799' # port is default
COA_SECRET='xxxxxx' # coa secret key

RADCLIENT='/usr/bin/radclient -t1 -r1 -c1 -x' # use mega-special radius client that support CoA :)
CONTEXT='ipoe'

# zeroing variables
ACTION=''
REASON=''
SESSION=''
LOGIN=''
NAS=''
IPLIST=''
SHAPE=''
OLDSHAPE=''
BNGNAME=''
SUBSCRIBER=''
GUEST=''
PASSWORD=''
OLDBLOCKED=''
BLOCKED=''

log()
{
   echo "[`date +'%d-%m-%Y %H:%M:%S'`] (${LOGIN} ${SUBSCRIBER} ${IP}) - $1" >> $LOG # log regular events
}

log_error()
{
   echo "[`date +'%d-%m-%Y %H:%M:%S'`] - $1 [$PARAMS]" >> $LOG # log error events
}

# parsing handler parameters
while [ -n "$1" ]
do
   case $1 in
   "--action")
       ACTION=$2
       ;;
   "--reason")
       REASON=$2
       ;;
   "--session")
       SESSION=$2
       ;;
   "--login")
       LOGIN=$2
       ;;
   "--nas")
       NAS=$2
       ;;
   "--ip" | "--net")
       IP=$2
       ;;
   "--shape")
       SHAPE=$2
       ;;
   "--oldshape")
       OLDSHAPE=$2
       ;;
   "--opt-bng-name")
       BNGNAME=$2
       ;;
   "--mac")
       SUBSCRIBER=$2
       ;;
   "--guest")
       GUEST=$2
       ;;
   "--password")
       PASSWORD=$2
       ;;
   "--oldblocked")
       OLDBLOCKED=$2
       ;;
   "--blocked")
       BLOCKED=$2
       ;;
   *)
       log_error "Unknown parameters: $1, $2"
       ;;
   esac

   shift 2
done

case $ACTION in
   "stop")
       if [ -z ${SUBSCRIBER} ]
       then
           log_error "SUBSCRIBER is not defined"
           exit 1
       fi

       if [ -z ${SHAPE} ]
       then
           log_error "SHAPE is not defined"
           exit 1
       fi

       if [ -z ${NAS} ]
       then
           log_error "NAS is not defined"
           exit 1
       fi

       _SUBSCRIBER=${SUBSCRIBER:0:2}
       for((i=2;i<${#SUBSCRIBER};i+=2)) 
       do 
           _SUBSCRIBER=${_SUBSCRIBER}:${SUBSCRIBER:$i:2}
       done
       SUBSCRIBER=${_SUBSCRIBER}

       if [ ${REASON} = 'changed' ]
       then
           if [ -n ${OLDSHAPE} ]
           then
               log "Changing speed ${OLDSHAPE} => ${SHAPE}"
               echo "User-name=${SUBSCRIBER}
                     Dynamic-QoS-Param=\"police-circuit-rate rate-absolute ${SHAPE}\" 
                     Dynamic-QoS-Param=\"meter-circuit-rate rate-absolute ${SHAPE}\" 
                     Dynamic-QoS-Param=\"police-circuit-burst $[sHAPE*125]\" 
                     Dynamic-QoS-Param=\"meter-circuit-burst $[sHAPE*125]\"
                     Context-Name=\"${CONTEXT}\"" | ${RADCLIENT} ${NAS}:${COA_PORT} coa ${COA_SECRET} >> ${LOG}
           fi
       elif [ ${REASON} = 'managed' ]
       then
               log "Stopping VG ${LOGIN}. Reason: managed"
               echo "Acct-Session-Id=${SESSION}
                     Forward-Policy=\"in:HTTP-REDIRECT\"
                     HTTP-Redirect-Profile-Name=\"CABINET\"
                     Context-Name=\"${CONTEXT}\"" | ${RADCLIENT} ${NAS}:${COA_PORT} coa ${COA_SECRET} >> ${LOG}
       else
           log "Logging off subscriber => ${REASON}"
           echo "User-name=${SUBSCRIBER}
                 Context-Name=\"${CONTEXT}\"" | ${RADCLIENT} ${NAS}:${COA_PORT} disconnect ${COA_SECRET} >> ${LOG}
       fi
       ;;
   "isg-stop")
       echo "1" > /dev/null
       ;;
   "quota")
       echo "1" > /dev/null
       ;;
   "start")
       if [ -z ${SESSION} ]
       then
           log_error "SESSION is not defined"
           exit 1
       fi

       if [ -z ${SHAPE} ]
       then
           log_error "SHAPE is not defined"
           exit 1
       fi

       if [ -z ${NAS} ]
       then
           log_error "NAS is not defined"
           exit 1
       fi
       log "Starting VG login: ${LOGIN}, session: ${SESSION}, shape: ${SHAPE}"
       echo "Acct-Session-Id=${SESSION}
               Dynamic-QoS-Param=\"police-circuit-rate rate-absolute ${SHAPE}\" 
               Dynamic-QoS-Param=\"meter-circuit-rate rate-absolute ${SHAPE}\" 
               Dynamic-QoS-Param=\"police-circuit-burst $[sHAPE*125]\" 
               Dynamic-QoS-Param=\"meter-circuit-burst $[sHAPE*125]\"
               Context-Name=\"${CONTEXT}\"" | ${RADCLIENT} ${NAS}:${COA_PORT} coa ${COA_SECRET} >> ${LOG}
       ;;
   "edit")
       echo "1" > /dev/null
       ;;
   "off")
       echo "1" > /dev/null
       ;;
   "on")
       if [ -z ${SESSION} ]
       then
               SESSION=`mysql -u qqq -pxxxx billbase -s -e "select session_id from sessionsradius where id=4 and vg_id=(select vg_id from vgroups where login like '${LOGIN}');"`
               if [ -z ${SESSION} ]
               then
                       log_error "SESSION is not defined"
                       exit 1
               else
                       log "VG ON: ${LOGIN}, session: ${SESSION}, shape: ${SHAPE}"
                       echo "Acct-Session-Id=${SESSION}
                               Forward-Policy=\"in:\"
                               Context-Name=\"${CONTEXT}\"" | ${RADCLIENT} ${NAS}:${COA_PORT} coa ${COA_SECRET} >> ${LOG}
               fi
       fi
       echo "1" > /dev/null
       ;;
   *)
       log_error "Unknown action $action"
       ;;
esac

 

 

Edited by ArhAngel_John

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this