Перейти к содержимому
Калькуляторы

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Вот вчера начал сам писать. Пришлось. Пока некоторые проблемы с 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

 

 

Изменено пользователем ArhAngel_John

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.