Jump to content

Recommended Posts

Posted

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

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

  • 2 weeks later...
Posted (edited)

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

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

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.