Hi Alan, We have both pppoe and hotspot services. If the user reaches the max data limit we are applying fup limit by sending a coa update. But with pppoe coa is not working. So we implemented the following logic. If the user exceeded the limit, then we will check whether its pppoe or hotspot. If it is pppoe we are sending disconnect. update control { #sum of the AcctInputOctets+AcctOutputOctets for this month.(From the first day of the current month to till date) Tmp-Integer-0 := "%{sql:SELECT (SUM(acctinputoctets)+SUM(acctoutputoctets)) AS Total FROM radacct where radacct.username='%{User-Name}'}" #Value of Max-Data from the radgroupcheck for the group of the user Tmp-Integer-1 := "%{sql: SELECT radgroupcheck.value FROM radusergroup INNER JOIN radgroupcheck ON radusergroup.groupname = radgroupcheck.groupname WHERE radusergroup.username='%{User-Name}' AND radgroupcheck.attribute='Max-Data'}" Tmp-String-1 := "%{sql: SELECT radgroupcheck.value FROM radusergroup INNER JOIN radgroupcheck ON radusergroup.groupname = radgroupcheck.groupname WHERE radusergroup.username='%{User-Name}' AND radgroupcheck.attribute='Mikrotik-Rate-Limit'}" Tmp-String-3 = "%{sql:select calledstationid from radacct where acctsessionid='%{Acct-Session-Id}'}" } if ("%{control:Tmp-Integer-0}" > "%{control:Tmp-Integer-1}") { #Added these to update COA for hotspot and disconnect for PPPOE if ("%{control:Tmp-String-3}" == "hotspot1"){ update coa { User-Name = "%{User-Name}" Acct-Session-Id = "%{Acct-Session-Id}" NAS-IP-Address = "%{NAS-IP-Address}" Framed-IP-Address = "%{Framed-IP-Address}" Mikrotik-Rate-Limit = "%{control:Tmp-String-1}" } } else { echo "Acct-Session-Id=\"%{Acct-Session-Id}\"" > /tmp/\"%{User-Name}\".txt echo "User-Name=\"%{User-Name}\"" >> /tmp/\"%{User-Name}\".txt echo "NAS-IP-Address=\"%{Framed-IP-Address}\"" >> /tmp/\"%{User-Name}\".txt Secret= `grep "%{NAS-IP-Address}" /usr/local/etc/raddb/clients.conf -b2 | grep secret |awk '{print $4}' ` cat "/tmp/\"%{User-Name}\".txt" | radclient -x "%{NAS-IP-Address}":3799 disconnect "$Secret" } } But when running radiusd -XXX its giving the following error. Wed Sep 16 12:14:04 2015 : Error: /usr/local/etc/raddb/sites-enabled/default[623]: Expecting section start brace '{' after "echo Acct-Session-Id="%{Acct-Session-Id}"" Wed Sep 16 12:14:04 2015 : Error: Errors reading or parsing /usr/local/etc/raddb/radiusd.conf Please help Regards, Randeep
Hi Randeep, You can't do like this. You need to mention exec script in mods-enabled/exec and mention the script path in that file. example exec test { wait = no input_pairs = request shell_escape = yes output = none timeout = 10 program: /root/testing.sh } On Wed, Sep 16, 2015 at 12:15 PM, Randeep <randeep123@gmail.com> wrote:
Hi Alan,
We have both pppoe and hotspot services. If the user reaches the max data limit we are applying fup limit by sending a coa update.
But with pppoe coa is not working. So we implemented the following logic.
If the user exceeded the limit, then we will check whether its pppoe or hotspot. If it is pppoe we are sending disconnect.
update control { #sum of the AcctInputOctets+AcctOutputOctets for this month.(From the first day of the current month to till date) Tmp-Integer-0 := "%{sql:SELECT (SUM(acctinputoctets)+SUM(acctoutputoctets)) AS Total FROM radacct where radacct.username='%{User-Name}'}" #Value of Max-Data from the radgroupcheck for the group of the user Tmp-Integer-1 := "%{sql: SELECT radgroupcheck.value FROM radusergroup INNER JOIN radgroupcheck ON radusergroup.groupname = radgroupcheck.groupname WHERE radusergroup.username='%{User-Name}' AND radgroupcheck.attribute='Max-Data'}" Tmp-String-1 := "%{sql: SELECT radgroupcheck.value FROM radusergroup INNER JOIN radgroupcheck ON radusergroup.groupname = radgroupcheck.groupname WHERE radusergroup.username='%{User-Name}' AND radgroupcheck.attribute='Mikrotik-Rate-Limit'}" Tmp-String-3 = "%{sql:select calledstationid from radacct where acctsessionid='%{Acct-Session-Id}'}" } if ("%{control:Tmp-Integer-0}" > "%{control:Tmp-Integer-1}") { #Added these to update COA for hotspot and disconnect for PPPOE if ("%{control:Tmp-String-3}" == "hotspot1"){ update coa { User-Name = "%{User-Name}" Acct-Session-Id = "%{Acct-Session-Id}" NAS-IP-Address = "%{NAS-IP-Address}" Framed-IP-Address = "%{Framed-IP-Address}" Mikrotik-Rate-Limit = "%{control:Tmp-String-1}" } } else { echo "Acct-Session-Id=\"%{Acct-Session-Id}\"" > /tmp/\"%{User-Name}\".txt echo "User-Name=\"%{User-Name}\"" >> /tmp/\"%{User-Name}\".txt echo "NAS-IP-Address=\"%{Framed-IP-Address}\"" >> /tmp/\"%{User-Name}\".txt Secret= `grep "%{NAS-IP-Address}" /usr/local/etc/raddb/clients.conf -b2 | grep secret |awk '{print $4}' ` cat "/tmp/\"%{User-Name}\".txt" | radclient -x "%{NAS-IP-Address}":3799 disconnect "$Secret" } }
But when running radiusd -XXX its giving the following error. Wed Sep 16 12:14:04 2015 : Error: /usr/local/etc/raddb/sites-enabled/default[623]: Expecting section start brace '{' after "echo Acct-Session-Id="%{Acct-Session-Id}"" Wed Sep 16 12:14:04 2015 : Error: Errors reading or parsing /usr/local/etc/raddb/radiusd.conf
Please help
Regards, Randeep - List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
Thanks. It working now.
Hi all,
But I'm having a serious issue here.
The script is executing when the accounting request comes. So it is
executing in every 5minute. So every five minute the user is disconnected.
I want to send the disconnect packet only once, when the max limit crosses
the first time.
How can I prevent this executing again and again.
Regards,
Randeep
On Wed, Sep 16, 2015 at 4:33 PM, J@g@dee5h <djfueese@gmail.com> wrote:
> Hi Randeep,
>
> You can't do like this. You need to mention exec script in
> mods-enabled/exec and mention the script path in that file.
>
> example
>
> exec test {
> wait = no
> input_pairs = request
> shell_escape = yes
> output = none
> timeout = 10
> program: /root/testing.sh
> }
>
>
> On Wed, Sep 16, 2015 at 12:15 PM, Randeep <randeep123@gmail.com> wrote:
>
> > Hi Alan,
> >
> > We have both pppoe and hotspot services. If the user reaches the max data
> > limit we are applying fup limit by sending a coa update.
> >
> > But with pppoe coa is not working. So we implemented the following
> logic.
> >
> > If the user exceeded the limit, then we will check whether its pppoe or
> > hotspot. If it is pppoe we are sending disconnect.
> >
> > update control {
> > #sum of the AcctInputOctets+AcctOutputOctets for this month.(From
> > the first day of the current month to till date)
> > Tmp-Integer-0 := "%{sql:SELECT
> > (SUM(acctinputoctets)+SUM(acctoutputoctets)) AS Total FROM radacct where
> > radacct.username='%{User-Name}'}"
> > #Value of Max-Data from the radgroupcheck for the group of the
> user
> > Tmp-Integer-1 := "%{sql: SELECT radgroupcheck.value FROM
> > radusergroup INNER JOIN radgroupcheck ON radusergroup.groupname =
> > radgroupcheck.groupname WHERE radusergroup.username='%{User-Name}' AND
> > radgroupcheck.attribute='Max-Data'}"
> > Tmp-String-1 := "%{sql: SELECT radgroupcheck.value FROM
> > radusergroup INNER JOIN radgroupcheck ON radusergroup.groupname =
> > radgroupcheck.groupname WHERE radusergroup.username='%{User-Name}' AND
> > radgroupcheck.attribute='Mikrotik-Rate-Limit'}"
> > Tmp-String-3 = "%{sql:select calledstationid from radacct where
> > acctsessionid='%{Acct-Session-Id}'}"
> > }
> > if ("%{control:Tmp-Integer-0}" > "%{control:Tmp-Integer-1}") {
> > #Added these to update COA for hotspot and disconnect for PPPOE
> > if ("%{control:Tmp-String-3}" == "hotspot1"){
> > update coa {
> > User-Name = "%{User-Name}"
> > Acct-Session-Id = "%{Acct-Session-Id}"
> > NAS-IP-Address = "%{NAS-IP-Address}"
> > Framed-IP-Address = "%{Framed-IP-Address}"
> > Mikrotik-Rate-Limit = "%{control:Tmp-String-1}"
> > }
> > }
> > else {
> > echo "Acct-Session-Id=\"%{Acct-Session-Id}\"" >
> > /tmp/\"%{User-Name}\".txt
> > echo "User-Name=\"%{User-Name}\"" >> /tmp/\"%{User-Name}\".txt
> > echo "NAS-IP-Address=\"%{Framed-IP-Address}\"" >>
> > /tmp/\"%{User-Name}\".txt
> > Secret= `grep "%{NAS-IP-Address}" /usr/local/etc/raddb/clients.conf
> -b2
> > | grep secret |awk '{print $4}' `
> > cat "/tmp/\"%{User-Name}\".txt" | radclient -x
> "%{NAS-IP-Address}":3799
> > disconnect "$Secret"
> > }
> > }
> >
> > But when running radiusd -XXX its giving the following error.
> > Wed Sep 16 12:14:04 2015 : Error:
> > /usr/local/etc/raddb/sites-enabled/default[623]: Expecting section start
> > brace '{' after "echo Acct-Session-Id="%{Acct-Session-Id}""
> > Wed Sep 16 12:14:04 2015 : Error: Errors reading or parsing
> > /usr/local/etc/raddb/radiusd.conf
> >
> > Please help
> >
> > Regards,
> > Randeep
> > -
> > List info/subscribe/unsubscribe? See
> > http://www.freeradius.org/list/users.html
> -
> List info/subscribe/unsubscribe? See
> http://www.freeradius.org/list/users.html
--
Randeep
Mob: +919447831699[kerala]
Mob: +919880050349[B'lore]
http://twitter.com/Randeeppr
http://in.linkedin.com/in/randeeppr
[image: --]
Randeep Raman
[image: http://]about.me/Randeeppr
<http://about.me/Randeeppr>
participants (2)
-
J@g@dee5h -
Randeep