issue with dialup.conf
Tyller D
tyllerd at gmail.com
Mon Feb 7 07:48:27 CET 2011
Hi
The main reason I am doing it this way to send the correct attributes per
location.
Hopefully this explains whats happening.
perl.pl
.....
if ( $device =~ /^nomadix/i ) {
if ($DATABANK != '') {
if ( $DATABANK le 0 ) {
$RAD_REPLY{'Reply-Message'} =
"You have no more Data Left";
return RLM_MODULE_REJECT;
}else {
return RLM_MODULE_REJECT;
$RAD_REPLY{'Nomadix-MaxBytesDown'} =
"$DATABANK";
}
.....
if ( $device =~ /^mikrotik/i ) {
if ($DATABANK != '') {
if ( $DATABANK <= 0 ) {
$RAD_REPLY{'Reply-Message'} =
"You have no more Data Left";
return RLM_MODULE_REJECT;
}else {
$RAD_REPLY{'Mikrotik-Xmit-Limit'} =
"$DATABANK";
}
exctract from radcheck:
+------+----------+--------------------+----+----------+
| id | username | attribute | op | value |
+------+----------+--------------------+----+----------+
| 3069 | Joe | databank | := | 52428800 |
| 3068 | Joe | Cleartext-Password | := | Joe123 |
| 3070 | Joe | Auth-Type | := | Perl |
+------+----------+--------------------+----+----------+
stop query
accounting_stop_query = " \
UPDATE radacct,radcheck SET \
radacct.acctstoptime = '%S', \
radacct.acctsessiontime = '%{Acct-Session-Time}', \
radacct.acctinputoctets = '%{%{Acct-Input-Gigawords}:-0}' <<
32 | \
'%{%{Acct-Input-Octets}:-0}', \
radacct.acctoutputoctets = '%{%{Acct-Output-Gigawords}:-0}'
<< 32 | \
'%{%{Acct-Output-Octets}:-0}', \
radacct.acctterminatecause = '%{Acct-Terminate-Cause}', \
radcheck.value = radcheck.value - '%{Acct-Output-Octets}' -
'%{Acct-Input-Octets}', \
radacct.acctstopdelay = '%{%{Acct-Delay-Time}:-0}', \
radacct.connectinfo_stop = '%{Connect-Info}' \
WHERE radacct.acctsessionid = '%{Acct-Session-Id}' \
AND radcheck.username = '%{SQL-User-Name}' \
AND radcheck.attribute = 'databank' \
AND radacct.username = '%{SQL-User-Name}' \
AND radacct.nasipaddress = '%{NAS-IP-Address}'"
accounting_stop_query_alt = " \
UPDATE radacct,radcheck SET \
radacct.acctstoptime = '%S', \
radacct.acctsessiontime = '%{Acct-Session-Time}', \
radacct.acctinputoctets = '%{%{Acct-Input-Gigawords}:-0}' <<
32 | \
'%{%{Acct-Input-Octets}:-0}', \
radacct.acctoutputoctets = '%{%{Acct-Output-Gigawords}:-0}'
<< 32 | \
'%{%{Acct-Output-Octets}:-0}', \
radacct.acctterminatecause = '%{Acct-Terminate-Cause}', \
radacct.acctstopdelay = '%{%{Acct-Delay-Time}:-0}', \
radacct.connectinfo_stop = '%{Connect-Info}', \
radcheck.value = radcheck.value - '%{Acct-Output-Octets}' -
'%{Acct-Input-Octets}' \
WHERE radacct.acctsessionid = '%{Acct-Session-Id}' \
AND radacct.username = '%{SQL-User-Name}' \
AND radacct.nasipaddress = '%{NAS-IP-Address}' \
AND radcheck.username = '%{SQL-User-Name}' \
AND radcheck.attribute = 'databank'"
So the thoery is this, user tries to login, we check the NAS device , check
the databank and get the values and send the reply-attribute that suits the
gateway (else fail). when the user sends the stop query we re-update the the
databank value in the radcheck table.
so the value for databank in the radcheck table should always be equal to
databank - sum(acctoutputoctest + acctinputoctets)
but it not always exectuting stop request correctly because
mysql> select sum(acctinputoctets + acctoutputoctets) from radacct where
username='scotty';
+-----------------------------------------+
| sum(acctinputoctets + acctoutputoctets) |
+-----------------------------------------+
| 1840263628 |
+-----------------------------------------+
mysql> select value from radcheck where username='scotty' and
attribute='databank';
+------------+
| value |
+------------+
| -302340151 |
+------------+
Do you guys see where I have made an error?
On Mon, Feb 7, 2011 at 12:56 AM, Fajar A. Nugraha <list at fajar.net> wrote:
> On Mon, Feb 7, 2011 at 1:08 AM, Tyller D <tyllerd at gmail.com> wrote:
> > Hi
> >
> > I will try run the queries manually and see what happens.
> >
> > rlm_sqlcounter is cool, but this should work right?
>
> The idea looks good.
>
> However, since you're trying to reimplement what's already available,
> you might have a hard time trying to get everything right. For
> example, what happens when a user exceeds their quota? Your setup
> would accept the user while sending a negative quota (which might or
> might not work).
>
> On my implmentation, I use rlm_sqlcounter, but I changed the way it
> gets the numbers. I didn't like the way it does a sum() on radacct
> every time a user logs in (one of the reasons were I want to delete
> old entries from my radacct table), so I created an additional table
> to record total usage, and update it using sql trigger. So instead of
> having to examine thousands of rows when a user logs in, now the db
> simply has to examine one row, plus update that row when a user logs
> out. This way I can still make use of rlm_sqlcounter without having to
> reinvent the whole logic behind it.
>
> --
> Fajar
> -
> List info/subscribe/unsubscribe? See
> http://www.freeradius.org/list/users.html
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freeradius.org/pipermail/freeradius-users/attachments/20110207/de5fb2bf/attachment.html>
More information about the Freeradius-Users
mailing list