[Serusers] Missed calls with Radius + MySQL

Alan abaker at cliquecom.com
Fri Mar 17 19:13:51 CET 2006


Can the SER accounting module log missed calls through radius to mysql? Or
are missed calls only logged to a flat file? I am currently logging all
successful calls through the SER accounting module without any problems but
I would like to also have radius write the information for missed calls into
the MySQL DB as well. So far Iv'e had trouble getting it to work. Please
advise.

~Alan




Error message from Freeradius. 

rlm_sql (sql): Unsupported Acct-Status-Type = 15


The account type is specified in the RFC and "dictionary.ser" as failed:

## Acct-Status-Type Values ###
VALUE Acct-Status-Type     Start             1         # RFC2866, acc
VALUE Acct-Status-Type     Stop              2         # RFC2866, acc
VALUE Acct-Status-Type     Failed           15         # RFC2866, acc


Missed call log from debug output for response code 603 (Decline) and 486
(Busy) which I would like this information dumped to the database.


        Acct-Status-Type = Failed
        Service-Type = Sip-Session
        Sip-Response-Code = 603
        Sip-Method = 1
        User-Name = "alan at sip.host.com"
        Calling-Station-Id = "sip:alan at sip.host.com"
        Called-Station-Id = "sip:chidu at sip.host.com"
        Sip-Translated-Request-URI = "sip:chidu at 10.180.2.13:5060"
        Acct-Session-Id = "dc06f80821541776 at YWJha2Vy"
        Sip-To-Tag = "4c4efb52"
        Sip-From-Tag = "ae6a1764"
        Sip-Cseq = "1"
        NAS-Port = 5060
        Acct-Delay-Time = 0
        NAS-IP-Address = 127.0.0.1

Acct-Status-Type = Failed
        Service-Type = Sip-Session
        Sip-Response-Code = 486
        Sip-Method = 1
        User-Name = "alan at sip.host.com"
        Calling-Station-Id = "sip:alan at sip.host.com"
        Called-Station-Id = "sip:chidu at sip.host.com"
        Sip-Translated-Request-URI = "sip:chidu at 10.180.2.13:5060"
        Acct-Session-Id = "3e49f433b443d02f at YWJha2Vy"
        Sip-To-Tag = "1e237c68"
        Sip-From-Tag = "0678bd37"
        Sip-Cseq = "1"
        NAS-Port = 5060
        Acct-Delay-Time = 0
        NAS-IP-Address = 127.0.0.1



My current config is set-up as per the accounting documentation for missed
calls:


# ----------- global configuration parameters ---------------------
 
#debug=3         # debug level (cmd line: -dddddddddd)
#fork=yes
#log_stderror=no        # (cmd line: -E)
 
/* Uncomment these lines to enter debugging mode 
fork=no
log_stderror=yes
*/
 
check_via=no    # (cmd. line: -v)
dns=no           # (cmd. line: -r)
rev_dns=no      # (cmd. line: -R)
#port=5060
#children=4
fifo="/tmp/ser_fifo"
 
# -------------------------- Aliases --------------------------------
 
alias=sip.host.com
 
# ----------------------- Core Modules ------------------------------
 
loadmodule "/ser-0.9.6/lib/modules/sl.so"
loadmodule "/ser-0.9.6/lib/modules/tm.so"
loadmodule "/ser-0.9.6/lib/modules/rr.so"
loadmodule "/ser-0.9.6/lib/modules/maxfwd.so"
loadmodule "/ser-0.9.6/lib/modules/usrloc.so"
loadmodule "/ser-0.9.6/lib/modules/registrar.so"
loadmodule "/ser-0.9.6/lib/modules/textops.so"
loadmodule "/ser-0.9.6/lib/modules/xlog.so"
 
# --------------- RADIUS Authentication Module ----------------------
 
loadmodule "/ser-0.9.6/lib/modules/auth.so"
loadmodule "/ser-0.9.6/lib/modules/auth_radius.so"
 
# --------------- RADIUS Accounting Module --------------------------
 
loadmodule "/ser-0.9.6/lib/modules/acc.so"
 
 
# --------------- Nathelper Mod --------------------------------------
 
 
loadmodule "/ser-0.9.6/lib/modules/nathelper.so"
 
# ----------------- Module-specific parameters ---------------
 
 
# -- usrloc params --
 
modparam("usrloc", "db_mode",   0)
 
# --  RADIUS Authentication params --
 
modparam("auth_radius", "radius_config", "/radiusclient/radiusclient.conf")
modparam("auth_radius", "service_type", 15)
 
# --  RADIUS Accounting params --
 
modparam("acc", "radius_config", "/radiusclient/radiusclient.conf")
#modparam("acc", "service_type", 15)
modparam("acc", "radius_flag", 1)
modparam("acc", "radius_missed_flag", 3)
#modparam("acc", "failed_transactions", 1)
#modparam("acc", "report_cancels", 1)
modparam("acc", "report_ack", 1)
 
# -- Logging Params
 
#modparam("acc", "log_missed_flag", 1)
#modparam("acc", "log_level", 1)
#modparam("acc", "log_flag", 1 )
 
 
# -- rr params --
 
modparam("rr", "enable_full_lr", 1)
 
# -- NAT Helper Params --
 
modparam("nathelper", "rtpproxy_disable", 1)
 
 
 
###############################################
# Request Routing Logic
#

route{
 
# Sanity Checks
  
# Don't forward a message more than 10 times. 
# This setting is important to avoid endless loops in case of
misconfiguration
 
 
        if (!mf_process_maxfwd_header("10")) {
          sl_send_reply("483","Too Many Hops");
        break;
        };
 
# Don't except messages that are too long
 
 
        if ( msg:len > max_len ) {
        sl_send_reply("513", "Message too big");
        break;
        };
 
     if (loose_route()) {
         setflag(1);
          t_relay();
        break;
        };
 
# Authentication starts here
     
        if (uri=~"sip.host.com" || uri=~"10.180.0.32") {
          xlog("L_ERR", " method <%rm> <%fu> <%tu>\n");
           if (method=="REGISTER") {
             fix_nated_contact(); 
                if (!radius_www_authorize("")) {
                    www_challenge("", "0");
                    break;
        };
 
               save("location");
               break;
        };
 
          if (method=="INVITE" || method=="ACK" || method=="BYE" ||
method=="CANCEL") {
                setflag(1);
                setflag(3); 
                record_route();
                log(1, "INVITE received\n");
#        };
#          if (method=="BYE" || method=="CANCEL") {
#               setflag(1);
#               log(1, "BYE received\n");
#             } else {
#                log(1, "Call Hung no BYE received\n");
#                       setflag(3); 
#       };
#    
#                if (uri=~"sip:.*[@:]sip.host.com" ||
uri=~"sip:.*[@:]10.180.0.32") {
#                 log(1, "Request for host.com\n");
#         } else {
#                 log(1, "Request for other domain received\n");
#        };
# 
#       if (( method=="ACK")) {
#               setflag(3);
        };
 
        if (!lookup("location")) {
                sl_send_reply("480", "Temporarily Unavailable");
                break;
  };
 
        if (!t_relay()) {
          sl_reply_error();
  };
 
}; 
}

-------------------






More information about the sr-users mailing list