*
***********************************************************************/
static char const RCSID[] =
-"$Id: radius.c,v 1.12 2002/07/24 20:13:12 dfs Exp $";
+"$Id: radius.c,v 1.14 2002/09/01 08:56:01 kad Exp $";
#include "pppd.h"
#include "chap.h"
static int radius_init(char *msg);
static int get_client_port(char *ifname);
static int radius_allowed_address(u_int32_t addr);
+static void radius_acct_interim(void *);
#ifdef MPPE
static int radius_setmppekeys(VALUE_PAIR *vp, REQUEST_INFO *req_info,
chap_state *);
char config_file[MAXPATHLEN];
char session_id[MAXSESSIONID + 1];
time_t start_time;
+ int acct_interim_interval;
SERVER *authserver; /* Authentication server to use */
SERVER *acctserver; /* Accounting server to use */
};
break;
case PW_OCTETS_DIRECTION:
/* Session traffic limit direction check */
- maxoctets_dir = ( vp->lvalue > 4 ) 0 : vp->lvalue ;
+ maxoctets_dir = ( vp->lvalue > 4 ) ? 0 : vp->lvalue ;
+ break;
+#endif
+ case PW_ACCT_INTERIM_INTERVAL:
+ /* Send accounting updates every few seconds */
+ rstate.acct_interim_interval = vp->lvalue;
+ /* RFC says it MUST NOT be less than 60 seconds */
+ /* We use "0" to signify not sending updates */
+ if (rstate.acct_interim_interval &&
+ rstate.acct_interim_interval < 60) {
+ rstate.acct_interim_interval = 60;
+ }
break;
-#endif
case PW_FRAMED_IP_ADDRESS:
/* seting up remote IP addresses */
remote = vp->lvalue;
"Accounting START failed for %s", rstate.user);
} else {
rstate.accounting_started = 1;
+ /* Kick off periodic accounting reports */
+ if (rstate.acct_interim_interval) {
+ TIMEOUT(radius_acct_interim, NULL, rstate.acct_interim_interval);
+ }
}
}
* Sends an interim accounting message to the RADIUS server
***********************************************************************/
static void
-radius_acct_interim(void)
+radius_acct_interim(void *ignored)
{
UINT4 av_type;
VALUE_PAIR *send = NULL;
"Interim accounting failed for %s", rstate.user);
}
rc_avpair_free(send);
+
+ /* Schedule another one */
+ TIMEOUT(radius_acct_interim, NULL, rstate.acct_interim_interval);
}
/**********************************************************************