mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1284 lines
40 KiB
1284 lines
40 KiB
Acc Module
|
|
|
|
Jiri Kuthan
|
|
|
|
iptel.org
|
|
<jiri@iptel.org>
|
|
|
|
Bogdan-Andrei Iancu
|
|
|
|
Voice Sistem SRL
|
|
<bogdan@voice-system.ro>
|
|
|
|
Ramona-Elena Modroiu
|
|
|
|
rosdev.ro
|
|
<ramona@rosdev.ro>
|
|
|
|
Edited by
|
|
|
|
Bogdan-Andrei Iancu
|
|
|
|
Voice Sistem SRL
|
|
<bogdan@voice-system.ro>
|
|
|
|
Edited by
|
|
|
|
Sven Knoblich
|
|
|
|
1&1 Internet AG
|
|
<sven.knoblich@1und1.de>
|
|
|
|
Copyright © 2002, 2003 FhG FOKUS
|
|
|
|
Copyright © 2004, 2006 Voice Sistem SRL
|
|
|
|
Copyright © 2011 1&1 Internet AG
|
|
Revision History
|
|
Revision $Revision$ $Date$
|
|
__________________________________________________________________
|
|
|
|
Table of Contents
|
|
|
|
1. Admin Guide
|
|
|
|
1. Overview
|
|
|
|
1.1. General Example
|
|
|
|
2. Extra accounting
|
|
|
|
2.1. Overview
|
|
2.2. Definitions and syntax
|
|
2.3. How it works
|
|
|
|
3. Multi Call-Legs accounting
|
|
|
|
3.1. Overview
|
|
3.2. Configuration
|
|
3.3. Logged data
|
|
|
|
4. Call Data Record generation
|
|
|
|
4.1. Overview
|
|
4.2. CDR Extra
|
|
|
|
4.2.1. Definitions and syntax
|
|
|
|
4.3. CDR with Multi Call-Legs
|
|
|
|
4.3.1. Overview
|
|
4.3.2. Configuration
|
|
|
|
4.3.2.1. Example for a spiraled Proxy
|
|
|
|
4.3.3. Logged data
|
|
|
|
5. Dependencies
|
|
|
|
5.1. Kamailio Modules
|
|
5.2. External Libraries or Applications
|
|
|
|
6. Parameters
|
|
|
|
6.1. early_media (integer)
|
|
6.2. failed_transaction_flag (integer)
|
|
6.3. failed_filter (string)
|
|
6.4. report_ack (integer)
|
|
6.5. report_cancels (integer)
|
|
6.6. detect_direction (integer)
|
|
6.7. acc_prepare_flag (integer)
|
|
6.8. multi_leg_info (string)
|
|
6.9. log_flag (integer)
|
|
6.10. log_missed_flag (integer)
|
|
6.11. log_level (integer)
|
|
6.12. log_facility (string)
|
|
6.13. log_extra (string)
|
|
6.14. radius_config (string)
|
|
6.15. radius_flag (integer)
|
|
6.16. radius_missed_flag (integer)
|
|
6.17. service_type (integer)
|
|
6.18. radius_extra (string)
|
|
6.19. db_flag (integer)
|
|
6.20. db_missed_flag (integer)
|
|
6.21. db_table_acc (string)
|
|
6.22. db_table_missed_calls (string)
|
|
6.23. db_url (string)
|
|
6.24. acc_method_column (string)
|
|
6.25. acc_from_tag_column (string)
|
|
6.26. acc_to_tag_column (string)
|
|
6.27. acc_callid_column (string)
|
|
6.28. acc_sip_code_column (string)
|
|
6.29. acc_sip_reason_column (string)
|
|
6.30. acc_time_column (string)
|
|
6.31. db_extra (string)
|
|
6.32. db_insert_mode (integer)
|
|
6.33. diameter_flag (integer)
|
|
6.34. diameter_missed_flag (integer)
|
|
6.35. diameter_client_host (string)
|
|
6.36. diameter_client_port (int)
|
|
6.37. diameter_extra (string)
|
|
6.38. cdr_enable (integer)
|
|
6.39. cdr_start_on_confirmed (integer)
|
|
6.40. cdr_facility (integer)
|
|
6.41. cdr_extra (string)
|
|
6.42. cdr_start_id (string)
|
|
6.43. cdr_end_id (string)
|
|
6.44. cdr_duration_id (string)
|
|
|
|
7. Functions
|
|
|
|
7.1. acc_log_request(comment)
|
|
7.2. acc_db_request(comment, table)
|
|
7.3. acc_rad_request(comment)
|
|
7.4. acc_diam_request(comment)
|
|
|
|
2. Frequently Asked Questions
|
|
|
|
List of Examples
|
|
|
|
1.1. early_media example
|
|
1.2. failed_transaction_flag example
|
|
1.3. failed_filter example
|
|
1.4. report_ack example
|
|
1.5. report_cancels example
|
|
1.6. detect_direction example
|
|
1.7. acc_prepare_flag example
|
|
1.8. multi_leg_info example
|
|
1.9. log_flag example
|
|
1.10. log_missed_flag example
|
|
1.11. log_level example
|
|
1.12. log_facility example
|
|
1.13. log_extra example
|
|
1.14. radius_config example
|
|
1.15. radius_flag example
|
|
1.16. radius_missed_flag example
|
|
1.17. service_type example
|
|
1.18. radius_extra example
|
|
1.19. db_flag example
|
|
1.20. db_missed_flag example
|
|
1.21. db_table_acc example
|
|
1.22. db_table_missed_calls example
|
|
1.23. db_url example
|
|
1.24. acc_method_column example
|
|
1.25. acc_from_tag_column example
|
|
1.26. acc_to_tag_column example
|
|
1.27. acc_callid_column example
|
|
1.28. acc_sip_code_column example
|
|
1.29. acc_sip_reason_column example
|
|
1.30. acc_time_column example
|
|
1.31. db_extra example
|
|
1.32. db_insert_mode example
|
|
1.33. diameter_flag example
|
|
1.34. diameter_missed_flag example
|
|
1.35. diameter_client_host example
|
|
1.36. diameter_client_host example
|
|
1.37. diameter_extra example
|
|
1.38. cdr_enable example
|
|
1.39. cdr_start_on_confirmed example
|
|
1.40. cdr_facility example
|
|
1.41. cdr_extra example
|
|
1.42. cdr_start_id example
|
|
1.43. cdr_end_id example
|
|
1.44. cdr_duration_id example
|
|
1.45. acc_log_request usage
|
|
1.46. acc_db_request usage
|
|
1.47. acc_rad_request usage
|
|
1.48. acc_diam_request usage
|
|
|
|
Chapter 1. Admin Guide
|
|
|
|
Table of Contents
|
|
|
|
1. Overview
|
|
|
|
1.1. General Example
|
|
|
|
2. Extra accounting
|
|
|
|
2.1. Overview
|
|
2.2. Definitions and syntax
|
|
2.3. How it works
|
|
|
|
3. Multi Call-Legs accounting
|
|
|
|
3.1. Overview
|
|
3.2. Configuration
|
|
3.3. Logged data
|
|
|
|
4. Call Data Record generation
|
|
|
|
4.1. Overview
|
|
4.2. CDR Extra
|
|
|
|
4.2.1. Definitions and syntax
|
|
|
|
4.3. CDR with Multi Call-Legs
|
|
|
|
4.3.1. Overview
|
|
4.3.2. Configuration
|
|
|
|
4.3.2.1. Example for a spiraled Proxy
|
|
|
|
4.3.3. Logged data
|
|
|
|
5. Dependencies
|
|
|
|
5.1. Kamailio Modules
|
|
5.2. External Libraries or Applications
|
|
|
|
6. Parameters
|
|
|
|
6.1. early_media (integer)
|
|
6.2. failed_transaction_flag (integer)
|
|
6.3. failed_filter (string)
|
|
6.4. report_ack (integer)
|
|
6.5. report_cancels (integer)
|
|
6.6. detect_direction (integer)
|
|
6.7. acc_prepare_flag (integer)
|
|
6.8. multi_leg_info (string)
|
|
6.9. log_flag (integer)
|
|
6.10. log_missed_flag (integer)
|
|
6.11. log_level (integer)
|
|
6.12. log_facility (string)
|
|
6.13. log_extra (string)
|
|
6.14. radius_config (string)
|
|
6.15. radius_flag (integer)
|
|
6.16. radius_missed_flag (integer)
|
|
6.17. service_type (integer)
|
|
6.18. radius_extra (string)
|
|
6.19. db_flag (integer)
|
|
6.20. db_missed_flag (integer)
|
|
6.21. db_table_acc (string)
|
|
6.22. db_table_missed_calls (string)
|
|
6.23. db_url (string)
|
|
6.24. acc_method_column (string)
|
|
6.25. acc_from_tag_column (string)
|
|
6.26. acc_to_tag_column (string)
|
|
6.27. acc_callid_column (string)
|
|
6.28. acc_sip_code_column (string)
|
|
6.29. acc_sip_reason_column (string)
|
|
6.30. acc_time_column (string)
|
|
6.31. db_extra (string)
|
|
6.32. db_insert_mode (integer)
|
|
6.33. diameter_flag (integer)
|
|
6.34. diameter_missed_flag (integer)
|
|
6.35. diameter_client_host (string)
|
|
6.36. diameter_client_port (int)
|
|
6.37. diameter_extra (string)
|
|
6.38. cdr_enable (integer)
|
|
6.39. cdr_start_on_confirmed (integer)
|
|
6.40. cdr_facility (integer)
|
|
6.41. cdr_extra (string)
|
|
6.42. cdr_start_id (string)
|
|
6.43. cdr_end_id (string)
|
|
6.44. cdr_duration_id (string)
|
|
|
|
7. Functions
|
|
|
|
7.1. acc_log_request(comment)
|
|
7.2. acc_db_request(comment, table)
|
|
7.3. acc_rad_request(comment)
|
|
7.4. acc_diam_request(comment)
|
|
|
|
1. Overview
|
|
|
|
1.1. General Example
|
|
|
|
ACC module is used to account transactions information to different
|
|
backends like syslog, SQL, RADIUS and DIAMETER (beta version).
|
|
|
|
To account a transaction and to choose which set of backends to be
|
|
used, the script writer just has to set some flags (see the module
|
|
parameters section for flag definitions Section 6, "Parameters"). If
|
|
the accounting flag for a specific backend is set, the acc module will
|
|
then report on completed transaction. A typical usage of the module
|
|
takes no acc-specific script command -- the functionality binds
|
|
invisibly through transaction processing. Script writers just need to
|
|
mark the transaction for accounting with proper setflag. Even so, the
|
|
module allows the script writter to force accounting in special cases
|
|
via some script functions.
|
|
|
|
The accounting module will log by default a fixed set of attributes for
|
|
the transaction - if you customize your accounting by adding more
|
|
information to be logged, please see the next chapter about extra
|
|
accounting - Section 2, "Extra accounting".
|
|
|
|
The fixed minimal accounting information is:
|
|
* Request Method name
|
|
* From header TAG parameter
|
|
* To header TAG parameter
|
|
* Call-Id
|
|
* 3-digit Status code from final reply
|
|
* Reason phrase from final reply
|
|
* Time stamp when transaction was completed
|
|
|
|
If a value is not present in request, the empty string is accounted
|
|
instead.
|
|
|
|
Note that:
|
|
* A single INVITE may produce multiple accounting reports -- that's
|
|
due to SIP forking feature.
|
|
* All flags related to accounting need to be set in request
|
|
processing route - only the "missed-call" flag may be toggled from
|
|
other types of routes.
|
|
* If a UA fails in middle of conversation, a proxy will never find
|
|
out about it. In general, a better practice is to account from an
|
|
end-device (such as PSTN gateway), which best knows about call
|
|
status (including media status and PSTN status in case of the
|
|
gateway).
|
|
|
|
The SQL backend support is compiled in the module. For RADIUS and
|
|
DIAMETER you need to enable it by recompiling the module with properly
|
|
set defines: uncomment the RAD_ACC or DDIAM_ACC lines in
|
|
modules/acc/Makefile. To compile RADIUS support, you need to have
|
|
radiusclient-ng (only versions higher or equal to 0.5.0) installed on
|
|
your system which is available from
|
|
http://developer.berlios.de/projects/radiusclient-ng/. The radius
|
|
client needs to be configured properly. To do so, use the template at
|
|
etc/radiusclient.conf and make sure that module's radius_config
|
|
parameter points to its location. In particular, accounting secret must
|
|
match that one configured in server and proper dictionary is used (one
|
|
is available at etc/sip_dictionary). Also note that Debian
|
|
radiusclient-ng uses /var/run/radius.seq as seqfile but Kamailio Debian
|
|
init script expects /var/run/kamailio/kamailio_radius.seq, so is needed
|
|
to change it in radiusclient-ng configuration or in Kamailio Debian
|
|
init script (if not, Kamailio can't create the seq file when not
|
|
running as root). Uses along with FreeRadius (
|
|
http://www.freeradius.org/) and Radiator (
|
|
http://www.open.com.au/radiator/) servers have been reported to us.
|
|
|
|
NOTE: diameter support was developed for DISC (DIameter Server Client
|
|
project at http://developer.berlios.de/projects/disc/). This project
|
|
seems to be no longer maintained and DIAMETER specifications were
|
|
updated in the meantime. Thus, the DIAMETER part in the module is
|
|
obsolete and needs rework to be usable with opendiameter or other
|
|
DIAMETER servers.
|
|
|
|
1.1. General Example
|
|
|
|
loadmodule "modules/acc/acc.so"
|
|
modparam("acc", "log_level", 1)
|
|
modparam("acc", "log_flag", 1)
|
|
|
|
if (uri=~"sip:+40") /* calls to Romania */ {
|
|
if (!proxy_authorize("sip_domain.net" /* realm */,
|
|
"subscriber" /* table name */)) {
|
|
proxy_challenge("sip_domain.net" /* realm */, "0" /* no qop */ );
|
|
exit;
|
|
}
|
|
|
|
if (method=="INVITE" && !check_from()) {
|
|
log("from!=digest\n");
|
|
sl_send_reply("403","Forbidden");
|
|
}
|
|
|
|
setflag(1); /* set for accounting (the same value as in log_flag!)
|
|
t_relay(); /* enter stateful mode now */
|
|
};
|
|
|
|
2. Extra accounting
|
|
|
|
2.1. Overview
|
|
2.2. Definitions and syntax
|
|
2.3. How it works
|
|
|
|
2.1. Overview
|
|
|
|
Along the static default information, ACC modules allows dynamical
|
|
selection of extra information to be logged. This allows you to log any
|
|
pseudo-variable (AVPs, parts of the request, etc).
|
|
|
|
2.2. Definitions and syntax
|
|
|
|
Selection of extra information is done via xxx_extra parameters by
|
|
specifying the names of additional information you want to log. This
|
|
information is defined via pseudo-variables and may include headers,
|
|
AVPs values or other message or system values. The syntax of the
|
|
parameter is:
|
|
* xxx_extra = extra_definition (';'extra_definition)*
|
|
* extra_definition = log_name '=' pseudo_variable
|
|
|
|
The full list of supported pseudo-variables in Kamailio is available
|
|
at: http://www.kamailio.org/wiki/cookbooks/devel/pseudovariables
|
|
|
|
Note: For all the ACK processed by tm, the registered callbacks (like
|
|
acc module) will be called with the corresponding INVITE transaction
|
|
contexts as long as this is still available. This means that the ACK
|
|
callbacks will see the AVPs setup for the INVITE transaction and not
|
|
the AVPs setup before t_relay().
|
|
|
|
Via log_name you define how/where the data will be logged. Its meaning
|
|
depends of the accounting support which is used:
|
|
* LOG accounting - log_name will be just printed along with the data
|
|
in log_name=data format;
|
|
* DB accounting - log_name will be the name of the DB column where
|
|
the data will be stored.IMPORTANT: add in db acc table the columns
|
|
corresponding to each extra data;
|
|
* RADIUS accounting - log_name will be the AVP name used for packing
|
|
the data into RADIUS message. The log_name will be translated to
|
|
AVP number via the dictionary. IMPORTANT: add in RADIUS dictionary
|
|
the log_name attribute.
|
|
* DIAMETER accounting - log_name will be the AVP code used for
|
|
packing the data into DIAMETER message. The AVP code is given
|
|
directly as integer, since DIAMETER has no dictionary support yet.
|
|
IMPORTANT: log_name must be a number.
|
|
|
|
2.3. How it works
|
|
|
|
Some pseudo variables may return more than one value (like headers or
|
|
AVPs). In this case, the returned values are embedded in a single
|
|
string in a comma-separated format.
|
|
|
|
3. Multi Call-Legs accounting
|
|
|
|
3.1. Overview
|
|
3.2. Configuration
|
|
3.3. Logged data
|
|
|
|
3.1. Overview
|
|
|
|
A SIP call can have multiple legs due forwarding actions. For example
|
|
user A calls user B which forwards the call to user C. There is only
|
|
one SIP call but with 2 legs ( A to B and B to C). Accounting the legs
|
|
of a call is required for proper billing of the calls (if C is a PSTN
|
|
number and the call is billed, user B must pay for the call - as last
|
|
party modifing the call destination-, and not A - as initiator of the
|
|
call. Call forwarding on server is only one example which shows the
|
|
necessity of the having an accounting engine with multiple legs
|
|
support.
|
|
|
|
3.2. Configuration
|
|
|
|
First how it works: The idea is to have a set of AVPs and for each call
|
|
leg to store a set of values in the AVPs. The meaning of the AVP
|
|
content is stricly decided by the script writer - it can be the origin
|
|
and source of the leg, its status or any other related information. If
|
|
you have a set of 4 AVPS (AVP1, AVP2, AVP3, AVP4), then for the "A call
|
|
B and B forwards to C" example, you need to set a different set of
|
|
values for the AVPs for each leg ([A,B] and [B,C]) . The script writer
|
|
must take care and properly insert all these AVP from the script (in
|
|
proper order and with the correct type).
|
|
|
|
When the accounting information for the call will be written/sent, all
|
|
the call-leg pairs will be added (based on the found AVP sets).
|
|
|
|
By default, the multiple call-leg support is disabled - it can be
|
|
enabled just be setting the per-leg set of AVPs via the multi_leg_info
|
|
module parameter.
|
|
|
|
3.3. Logged data
|
|
|
|
For each call, all the values of the AVP set (which defines a call-leg)
|
|
will be logged. How the information will be actually logged, depends of
|
|
the data backend:
|
|
* syslog -- all leg-sets will be added to one record string as
|
|
AVP1=xxx, AVP2=xxxx ,... sets.
|
|
* database -- each pair will be separately logged (due DB data
|
|
structure constraints); several records will be written, the
|
|
difference between them being only the fields corresponding to the
|
|
call-leg info.
|
|
|
|
Note
|
|
You will need to add in your DB (all acc related tables) the colums
|
|
for call-leg info (a column for each AVP of the set).
|
|
* Radius -- all sets will be added to the same Radius accounting
|
|
message as RADIUS AVPs - for each call-leg a set of RADIUS AVPs
|
|
will be added (corresponding to the per-leg AVP set)
|
|
|
|
Note
|
|
You will need to add in your dictionary the RADIUS AVPs used in
|
|
call-leg AVP set definition.
|
|
* Diameter same as for RADIUS.
|
|
|
|
4. Call Data Record generation
|
|
|
|
4.1. Overview
|
|
4.2. CDR Extra
|
|
|
|
4.2.1. Definitions and syntax
|
|
|
|
4.3. CDR with Multi Call-Legs
|
|
|
|
4.3.1. Overview
|
|
4.3.2. Configuration
|
|
|
|
4.3.2.1. Example for a spiraled Proxy
|
|
|
|
4.3.3. Logged data
|
|
|
|
4.1. Overview
|
|
|
|
In addition to transaction-based logging, it is possible to generate
|
|
and log Call Data Records (CDRs) directly from Kamailio. Apart from a
|
|
basic set of CDR fields which are always included (covering start time,
|
|
end time, and duration), the approach allows flexible specification of
|
|
additional fields that should be taken into account using the
|
|
configuration script. This is very similar to how transaction-based
|
|
logging may be customized with the exception that CDRs rely on dialogs
|
|
instead of transactions to store relevant information during a call.
|
|
|
|
In order to set up CDR generation, you must enable the CDR switch and
|
|
load the dialog module. You probably also want to specify a set of
|
|
pseudo-variables that define more relevant CDR fields. Pseudo-variables
|
|
may be assigned arbitrarily during script execution, and the module
|
|
will make sure that the variable content will be transformed into a CDR
|
|
by the end of the dialog.
|
|
|
|
To use CDR logging in a correct manner, you should only use the
|
|
dialog-based pseudo-variables (dlg_var) from the dialog module. This
|
|
allows you to save values right from the beginning through all requests
|
|
and replies until termination of the call. While not recommended, it is
|
|
still possible to use other pseudo-variables as well. Except for
|
|
pseudo-variables valid in the call-final transaction, however,
|
|
information given will not be stored in the CDR as they cannot be
|
|
accessed by the end of the call when the CDR is logged.
|
|
|
|
Note that CDR generation does not involve any kind of database storage
|
|
(yet). In order to persist the CDRs into a database you will have to
|
|
set up an exterior process (i.e., a script living outside of Kamailio)
|
|
and implement the storage task yourself.
|
|
|
|
4.2. CDR Extra
|
|
|
|
This section is similar to the "LOG accounting" part of Section 2,
|
|
"Extra accounting".
|
|
|
|
4.2.1. Definitions and syntax
|
|
|
|
Selection of extra information is done similar to the transaction extra
|
|
Section 2.2, "Definitions and syntax".
|
|
* cdr_extra = cdr_extra_definition (';'cdr_extra_definition)*
|
|
* cdr_extra_definition = cdr_log_name '=' pseudo_variable
|
|
|
|
See also Section 6.41, "cdr_extra (string)".
|
|
|
|
The full list of supported pseudo-variables in Sip-Router is available
|
|
at: http://sip-router.org/wiki/cookbooks/pseudo-variables/devel
|
|
|
|
4.3. CDR with Multi Call-Legs
|
|
|
|
4.3.1. Overview
|
|
|
|
As mentioned in Section 3, "Multi Call-Legs accounting", a leg
|
|
represents a parallel or forwarded call. In contrast to the normal
|
|
accounting the cdr logging uses dialogs instead of transaction to log
|
|
data. This may reduce the amount of information but it also make it
|
|
possible to combine all important data in one cdr at once. A second
|
|
mechanism to process multiple data-sets into one cdr is not further
|
|
necessary.
|
|
|
|
4.3.2. Configuration
|
|
|
|
When you route messages multiple times through your proxy (e.g. to
|
|
handle "call-forwardings") you have to use detect_spirals from the
|
|
dialog modules. Otherwise the proxy can't identify and reuse existing
|
|
dialogs.
|
|
|
|
To get the correct call-forwarding-chain you have to store each cf*
|
|
with the corresponding caller and callee in a dialog based
|
|
pseudo-variable (dlg_var) (e.g. chain=B;cfa;C|C;cfnr;D). Additionally
|
|
it is necessary to store the caller and callee for each leg. All this
|
|
helps to identify the involved phone parners and forwarding chain. When
|
|
you route such calls multiple times to the same Proxy, you could store
|
|
the caller and callee within an transaction based avp and write it into
|
|
the dialog based dlg_var pv during a 200 INVITE.
|
|
|
|
4.3.2.1. Example for a spiraled Proxy
|
|
|
|
# A calls B (transaction 1)
|
|
$avp(caller)='A'
|
|
$avp(callee)='B';
|
|
$dlg_var(chain)='';
|
|
|
|
# B cfa C (transaction 2)
|
|
$avp(caller)='B'
|
|
$avp(callee)='C';
|
|
$dlg_var(chain)='B;cfu;C';
|
|
|
|
# C cfnr D (transaction 3)
|
|
$avp(caller)='C'
|
|
$avp(callee)='D';
|
|
$dlg_var(chain)=$dlg_var(chain) + "|" + "C;cfnr;D";
|
|
|
|
# C confirms call (200 reply of transaction 2)
|
|
$dlg_var(caller) = $avp(caller); #caller='B'
|
|
$dlg_var(callee) = $avp(callee); #callee='C'
|
|
|
|
4.3.3. Logged data
|
|
|
|
For each call, all dialog corresponding variables will be logged. After
|
|
a call is finished, the generated call data record information will be
|
|
logged as string (VAR1=xxx,VAR2=xxxx,...) to the syslog.
|
|
|
|
5. Dependencies
|
|
|
|
5.1. Kamailio Modules
|
|
5.2. External Libraries or Applications
|
|
|
|
5.1. Kamailio Modules
|
|
|
|
The module depends on the following modules (in the other words the
|
|
listed modules must be loaded before this module):
|
|
* tm -- Transaction Manager
|
|
* a database module -- If SQL support is used.
|
|
* rr -- Record Route, if "detect_direction" module parameter is
|
|
enabled.
|
|
* dialog -- Dialog, if "cdr_enable" module parameter is enabled.
|
|
|
|
5.2. External Libraries or Applications
|
|
|
|
The following libraries or applications must be installed before
|
|
running Kamailio with this module loaded:
|
|
* radiusclient-ng 0.5.0 or higher -- if compiled with RADIUS support.
|
|
See http://developer.berlios.de/projects/radiusclient-ng/.
|
|
|
|
6. Parameters
|
|
|
|
6.1. early_media (integer)
|
|
6.2. failed_transaction_flag (integer)
|
|
6.3. failed_filter (string)
|
|
6.4. report_ack (integer)
|
|
6.5. report_cancels (integer)
|
|
6.6. detect_direction (integer)
|
|
6.7. acc_prepare_flag (integer)
|
|
6.8. multi_leg_info (string)
|
|
6.9. log_flag (integer)
|
|
6.10. log_missed_flag (integer)
|
|
6.11. log_level (integer)
|
|
6.12. log_facility (string)
|
|
6.13. log_extra (string)
|
|
6.14. radius_config (string)
|
|
6.15. radius_flag (integer)
|
|
6.16. radius_missed_flag (integer)
|
|
6.17. service_type (integer)
|
|
6.18. radius_extra (string)
|
|
6.19. db_flag (integer)
|
|
6.20. db_missed_flag (integer)
|
|
6.21. db_table_acc (string)
|
|
6.22. db_table_missed_calls (string)
|
|
6.23. db_url (string)
|
|
6.24. acc_method_column (string)
|
|
6.25. acc_from_tag_column (string)
|
|
6.26. acc_to_tag_column (string)
|
|
6.27. acc_callid_column (string)
|
|
6.28. acc_sip_code_column (string)
|
|
6.29. acc_sip_reason_column (string)
|
|
6.30. acc_time_column (string)
|
|
6.31. db_extra (string)
|
|
6.32. db_insert_mode (integer)
|
|
6.33. diameter_flag (integer)
|
|
6.34. diameter_missed_flag (integer)
|
|
6.35. diameter_client_host (string)
|
|
6.36. diameter_client_port (int)
|
|
6.37. diameter_extra (string)
|
|
6.38. cdr_enable (integer)
|
|
6.39. cdr_start_on_confirmed (integer)
|
|
6.40. cdr_facility (integer)
|
|
6.41. cdr_extra (string)
|
|
6.42. cdr_start_id (string)
|
|
6.43. cdr_end_id (string)
|
|
6.44. cdr_duration_id (string)
|
|
|
|
6.1. early_media (integer)
|
|
|
|
Should be early media (any provisional reply with body) accounted too ?
|
|
|
|
Default value is 0 (no).
|
|
|
|
Example 1.1. early_media example
|
|
modparam("acc", "early_media", 1)
|
|
|
|
6.2. failed_transaction_flag (integer)
|
|
|
|
Per transaction flag which says if the transaction should be accounted
|
|
also in case of failure (status>=300).
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.2. failed_transaction_flag example
|
|
modparam("acc", "failed_transaction_flag", 4)
|
|
|
|
6.3. failed_filter (string)
|
|
|
|
A string of failure response codes from 300 to 999 separated by commas.
|
|
Failed transaction will not be accounted if its response code is in the
|
|
list even when failed_transaction_flag is set.
|
|
|
|
Default value is not-set (failure filtering is off).
|
|
|
|
Example 1.3. failed_filter example
|
|
modparam("acc", "failed_filter", "404,407")
|
|
|
|
6.4. report_ack (integer)
|
|
|
|
Shall acc attempt to account e2e ACKs too ? Note that this is really
|
|
only an attempt, as e2e ACKs may take a different path (unless RR
|
|
enabled) and mismatch original INVITE (e2e ACKs are a separate
|
|
transaction).
|
|
|
|
Default value is 0 (no).
|
|
|
|
Example 1.4. report_ack example
|
|
modparam("acc", "report_ack", 1)
|
|
|
|
6.5. report_cancels (integer)
|
|
|
|
By default, CANCEL reporting is disabled -- most accounting
|
|
applications wants to see INVITE's cancellation status. Turn on if you
|
|
explicitly want to account CANCEL transactions.
|
|
|
|
Default value is 0 (no).
|
|
|
|
Example 1.5. report_cancels example
|
|
modparam("acc", "report_cancels", 1)
|
|
|
|
6.6. detect_direction (integer)
|
|
|
|
Controlles the direction detection for sequential requests. If enabled
|
|
(non zero value), for sequential requests with upstream direction (from
|
|
callee to caller), the FROM and TO will be swapped (the direction will
|
|
be preserved as in the original request).
|
|
|
|
It affects all values related to TO and FROM headers (body, URI,
|
|
username, domain, TAG).
|
|
|
|
Default value is 0 (disabled).
|
|
|
|
Example 1.6. detect_direction example
|
|
modparam("acc", "detect_direction", 1)
|
|
|
|
6.7. acc_prepare_flag (integer)
|
|
|
|
Per transaction flag which says if the transaction may be accounted
|
|
later, with flags set in TM module specific routes (e.g., like
|
|
failure_route). If this flag is not set and acc or missed_call flag are
|
|
not set either in request route block, there is no way to mark the
|
|
request for transaction later. If either acc or missed_call flags are
|
|
set in request route block, it is no need to set this flag.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.7. acc_prepare_flag example
|
|
modparam("acc", "acc_prepare_flag", 5)
|
|
|
|
6.8. multi_leg_info (string)
|
|
|
|
Defines the AVP set to be used in per-call-leg accounting. See
|
|
Section 3, "Multi Call-Legs accounting" for a detailed description of
|
|
the Multi Call-Legs accounting.
|
|
|
|
If empty, the multi-leg accounting support will be disabled.
|
|
|
|
Default value is 0 (disabled).
|
|
|
|
Example 1.8. multi_leg_info example
|
|
# for syslog-based accounting, use any text you want to be printed
|
|
modparam("acc", "multi_leg_info",
|
|
"text1=$avp(src);text2=$avp(dst)")
|
|
# for mysql-based accounting, use the names of the columns
|
|
modparam("acc", "multi_leg_info",
|
|
"leg_src=$avp(src);leg_dst=$avp(dst)")
|
|
# for RADIUS-based accounting, use the names of the RADIUS AVPs
|
|
modparam("acc", "multi_leg_info",
|
|
"RAD_LEG_SRC=$avp(src);RAD_LEG_SRC=$avp(dst)")
|
|
# for DIAMETER-based accounting, use the DIAMETER AVP ID (as integer)
|
|
modparam("acc", "multi_leg_info",
|
|
"2345=$avp(src);2346=$avp(dst)")
|
|
|
|
6.9. log_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction via syslog.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.9. log_flag example
|
|
modparam("acc", "log_flag", 2)
|
|
|
|
6.10. log_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls via syslog.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.10. log_missed_flag example
|
|
modparam("acc", "log_missed_flag", 3)
|
|
|
|
6.11. log_level (integer)
|
|
|
|
Log level at which accounting messages are issued to syslog.
|
|
|
|
Default value is L_NOTICE.
|
|
|
|
Example 1.11. log_level example
|
|
modparam("acc", "log_level", 2) # Set log_level to 2
|
|
|
|
6.12. log_facility (string)
|
|
|
|
Log facility to which accounting messages are issued to syslog. This
|
|
allows to easily seperate the accounting specific logging from the
|
|
other log messages.
|
|
|
|
Default value is LOG_DAEMON.
|
|
|
|
Example 1.12. log_facility example
|
|
modparam("acc", "log_facility", "LOG_DAEMON")
|
|
|
|
6.13. log_extra (string)
|
|
|
|
Extra values to be logged. See section Section 2, "Extra accounting"
|
|
for more details.
|
|
|
|
Default value is NULL.
|
|
|
|
Example 1.13. log_extra example
|
|
modparam("acc", "log_extra", "ua=$hdr(User-Agent);uuid=$avp(i:123)")
|
|
|
|
6.14. radius_config (string)
|
|
|
|
This parameter is radius specific. Path to radius client configuration
|
|
file, set the referred config file correctly and specify there address
|
|
of server, shared secret (should equal that in
|
|
/usr/local/etc/raddb/clients for freeRadius servers) and dictionary,
|
|
see etc for an example of config file and dictionary.
|
|
|
|
If the parameter is set to empty string, the RADIUS accounting support
|
|
will be disabled (even if compiled).
|
|
|
|
Default value is "NULL".
|
|
|
|
Example 1.14. radius_config example
|
|
modparam("acc", "radius_config", "/etc/radiusclient/radiusclient.conf")
|
|
|
|
6.15. radius_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction -- RADIUS
|
|
specific.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.15. radius_flag example
|
|
modparam("acc", "radius_flag", 2)
|
|
|
|
6.16. radius_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls -- RADIUS
|
|
specific.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.16. radius_missed_flag example
|
|
modparam("acc", "radius_missed_flag", 3)
|
|
|
|
6.17. service_type (integer)
|
|
|
|
Radius service type used for accounting.
|
|
|
|
Default value is 15 (SIP).
|
|
|
|
Example 1.17. service_type example
|
|
modparam("acc", "service_type", 16)
|
|
|
|
6.18. radius_extra (string)
|
|
|
|
Extra values to be logged via RADIUS - RADIUS specific. See section
|
|
Section 2, "Extra accounting" for more details.
|
|
|
|
Default value is NULL.
|
|
|
|
Example 1.18. radius_extra example
|
|
modparam("acc", "radius_extra", "via=$hdr(Via[*]); email=$avp(s:email)")
|
|
|
|
6.19. db_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction -- database
|
|
specific.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.19. db_flag example
|
|
modparam("acc", "db_flag", 2)
|
|
|
|
6.20. db_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls -- database
|
|
specific.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.20. db_missed_flag example
|
|
modparam("acc", "db_missed_flag", 3)
|
|
|
|
6.21. db_table_acc (string)
|
|
|
|
Table name of accounting successfull calls -- database specific. It can
|
|
contain config variables that will be evaluated at runtime.
|
|
|
|
Default value is "acc"
|
|
|
|
Example 1.21. db_table_acc example
|
|
modparam("acc", "db_table_acc", "myacc_table")
|
|
modparam("acc", "db_table_acc", "acc_$time(year)_$time(mon)")
|
|
|
|
6.22. db_table_missed_calls (string)
|
|
|
|
Table name for accounting missed calls -- database specific. It can
|
|
contain config variables that will be evaluated at runtime.
|
|
|
|
Default value is "missed_calls"
|
|
|
|
Example 1.22. db_table_missed_calls example
|
|
modparam("acc", "db_table_missed_calls", "myMC_table")
|
|
|
|
6.23. db_url (string)
|
|
|
|
SQL address -- database specific. If is set to NULL or emty string, the
|
|
SQL support is disabled.
|
|
|
|
Default value is "NULL" (SQL disabled).
|
|
|
|
Example 1.23. db_url example
|
|
modparam("acc", "db_url", "mysql://user:password@localhost/openser")
|
|
|
|
6.24. acc_method_column (string)
|
|
|
|
Column name in accounting table to store the request's method name as
|
|
string.
|
|
|
|
Default value is "method".
|
|
|
|
Example 1.24. acc_method_column example
|
|
modparam("acc", "acc_method_column", "method")
|
|
|
|
6.25. acc_from_tag_column (string)
|
|
|
|
Column name in accounting table to store the From header TAG parameter.
|
|
|
|
Default value is "from_tag".
|
|
|
|
Example 1.25. acc_from_tag_column example
|
|
modparam("acc", "acc_from_tag_column", "from_tag")
|
|
|
|
6.26. acc_to_tag_column (string)
|
|
|
|
Column name in accounting table to store the To header TAG parameter.
|
|
|
|
Default value is "to_tag".
|
|
|
|
Example 1.26. acc_to_tag_column example
|
|
modparam("acc", "acc_to_tag_column", "to_tag")
|
|
|
|
6.27. acc_callid_column (string)
|
|
|
|
Column name in accounting table to store the request's Callid value.
|
|
|
|
Default value is "callid".
|
|
|
|
Example 1.27. acc_callid_column example
|
|
modparam("acc", "acc_callid_column", "callid")
|
|
|
|
6.28. acc_sip_code_column (string)
|
|
|
|
Column name in accounting table to store the final reply's numric code
|
|
value in string format.
|
|
|
|
Default value is "sip_code".
|
|
|
|
Example 1.28. acc_sip_code_column example
|
|
modparam("acc", "acc_sip_code_column", "sip_code")
|
|
|
|
6.29. acc_sip_reason_column (string)
|
|
|
|
Column name in accounting table to store the final reply's reason
|
|
phrase value.
|
|
|
|
Default value is "sip_reason".
|
|
|
|
Example 1.29. acc_sip_reason_column example
|
|
modparam("acc", "acc_sip_reason_column", "sip_reason")
|
|
|
|
6.30. acc_time_column (string)
|
|
|
|
Column name in accounting table to store the time stamp of the
|
|
transaction completion in date-time format.
|
|
|
|
Default value is "time".
|
|
|
|
Example 1.30. acc_time_column example
|
|
modparam("acc", "acc_time_column", "time")
|
|
|
|
6.31. db_extra (string)
|
|
|
|
Extra values to be logged into database - DB specific. See section
|
|
Section 2, "Extra accounting" for more details.
|
|
|
|
Default value is NULL.
|
|
|
|
Example 1.31. db_extra example
|
|
modparam("acc", "db_extra", "ct=$hdr(Content-type); email=$avp(s:email)")
|
|
|
|
6.32. db_insert_mode (integer)
|
|
|
|
If set to 1, use INSERT DELAYED to add records to accounting tables
|
|
when the DB driver has support for it. If no INSERT DELAYED support is
|
|
offered by DB driver, then standard INSERT is used.
|
|
|
|
Default value is 0 (no INSERT DELAYED).
|
|
|
|
Example 1.32. db_insert_mode example
|
|
modparam("acc", "db_insert_mode", 1)
|
|
|
|
6.33. diameter_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction -- DIAMETER
|
|
specific.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.33. diameter_flag example
|
|
modparam("acc", "diameter_flag", 2)
|
|
|
|
6.34. diameter_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls -- DIAMETER
|
|
specific.
|
|
|
|
Default value is not-set (no flag).
|
|
|
|
Example 1.34. diameter_missed_flag example
|
|
modparam("acc", "diameter_missed_flag", 3)
|
|
|
|
6.35. diameter_client_host (string)
|
|
|
|
Hostname of the machine where the DIAMETER Client is running --
|
|
DIAMETER specific.
|
|
|
|
Default value is "localhost".
|
|
|
|
Example 1.35. diameter_client_host example
|
|
modparam("acc", "diameter_client_host", "3a_server.net")
|
|
|
|
6.36. diameter_client_port (int)
|
|
|
|
Port number where the Diameter Client is listening -- DIAMETER
|
|
specific.
|
|
|
|
Default value is 3000.
|
|
|
|
Example 1.36. diameter_client_host example
|
|
modparam("acc", "diameter_client_port", 3000)
|
|
|
|
6.37. diameter_extra (string)
|
|
|
|
Extra values to be logged via DIAMETER - DIAMETER specific. See section
|
|
Section 2, "Extra accounting" for more details.
|
|
|
|
Default value is NULL.
|
|
|
|
Example 1.37. diameter_extra example
|
|
modparam("acc", "diameter_extra", "7846=$hdr(Content-type);7847=$avp(s:email)")
|
|
|
|
6.38. cdr_enable (integer)
|
|
|
|
Should CDR-based logging be enabled?
|
|
|
|
0 - off (default) 1 - on
|
|
|
|
Example 1.38. cdr_enable example
|
|
modparam("acc", "cdr_enable", 1)
|
|
|
|
6.39. cdr_start_on_confirmed (integer)
|
|
|
|
Should the start time be taken from the time when the dialog is
|
|
created, or when the dialog is confirmed?
|
|
|
|
0 - use time of dialog creation (default). 1 - use time of dialog
|
|
confirmation.
|
|
|
|
Example 1.39. cdr_start_on_confirmed example
|
|
modparam("acc", "cdr_start_on_confirmed", 1)
|
|
|
|
6.40. cdr_facility (integer)
|
|
|
|
Log facility to which CDR messages are issued to syslog. This allows to
|
|
easily seperate CDR-specific logging from the other log messages.
|
|
|
|
Default value is LOG_DAEMON.
|
|
|
|
Example 1.40. cdr_facility example
|
|
modparam("acc", "cdr_facility", "LOG_DAEMON")
|
|
|
|
6.41. cdr_extra (string)
|
|
|
|
Set of pseudo-variables defining custom CDR fields. See Section 4.2,
|
|
"CDR Extra" for more details.
|
|
|
|
Default value is NULL.
|
|
|
|
Example 1.41. cdr_extra example
|
|
modparam("acc", "cdr_extra", "c1=$dlg_var(caller);c2=$dlg_var(callee)"
|
|
|
|
6.42. cdr_start_id (string)
|
|
|
|
Modifying the start id which is used to store the start time.
|
|
|
|
Default value is 'st'
|
|
|
|
Example 1.42. cdr_start_id example
|
|
modparam("acc", "cdr_start_id", "start")
|
|
|
|
6.43. cdr_end_id (string)
|
|
|
|
Modifying the end id which is used to store the end time.
|
|
|
|
Default value is 'et'
|
|
|
|
Example 1.43. cdr_end_id example
|
|
modparam("acc", "cdr_end_id", "end")
|
|
|
|
6.44. cdr_duration_id (string)
|
|
|
|
Modifying the duration id which is used to store the duration.
|
|
|
|
Default value is 'd'
|
|
|
|
Example 1.44. cdr_duration_id example
|
|
modparam("acc", "cdr_duration_id", "start")
|
|
|
|
7. Functions
|
|
|
|
7.1. acc_log_request(comment)
|
|
7.2. acc_db_request(comment, table)
|
|
7.3. acc_rad_request(comment)
|
|
7.4. acc_diam_request(comment)
|
|
|
|
7.1. acc_log_request(comment)
|
|
|
|
acc_request reports on a request, for example, it can be used to report
|
|
on missed calls to off-line users who are replied 404 - Not Found. To
|
|
avoid multiple reports on UDP request retransmission, you would need to
|
|
embed the action in stateful processing.
|
|
|
|
Meaning of the parameters is as follows:
|
|
* comment - Comment to be appended.
|
|
|
|
This function can be used from ANY_ROUTE.
|
|
|
|
Example 1.45. acc_log_request usage
|
|
...
|
|
acc_log_request("Some comment");
|
|
...
|
|
|
|
7.2. acc_db_request(comment, table)
|
|
|
|
Like acc_log_request, acc_db_request reports on a request. The report
|
|
is sent to database at "db_url", in the table referred to in the second
|
|
action parameter.
|
|
|
|
Meaning of the parameters is as follows:
|
|
* comment - Comment to be appended.
|
|
* table - Database table to be used. It can contain config variables
|
|
that are evaluated at runtime.
|
|
|
|
This function can be used from ANY_ROUTE.
|
|
|
|
Example 1.46. acc_db_request usage
|
|
...
|
|
acc_db_request("Some comment", "SomeTable");
|
|
acc_db_request("Some comment", "acc_$time(year)_$time(mon)");
|
|
...
|
|
|
|
7.3. acc_rad_request(comment)
|
|
|
|
Like acc_log_request, acc_rad_request reports on a request. It reports
|
|
to radius server as configured in "radius_config".
|
|
|
|
Meaning of the parameters is as follows:
|
|
* comment - Comment to be appended.
|
|
|
|
This function can be used from ANY_ROUTE.
|
|
|
|
Example 1.47. acc_rad_request usage
|
|
...
|
|
acc_rad_request("Some comment");
|
|
...
|
|
|
|
7.4. acc_diam_request(comment)
|
|
|
|
Like acc_log_request, acc_diam_request reports on a request. It reports
|
|
to the configured Diameter server.
|
|
|
|
Meaning of the parameters is as follows:
|
|
* comment - Comment to be appended.
|
|
|
|
This function can be used from ANY_ROUTE.
|
|
|
|
Example 1.48. acc_diam_request usage
|
|
...
|
|
acc_diam_request("Some comment");
|
|
...
|
|
|
|
Chapter 2. Frequently Asked Questions
|
|
|
|
2.1. What happend with old log_fmt parameter
|
|
2.2. What happend with old multi_leg_enabled parameter
|
|
2.3. What happend with old src_leg_avp_id and dst_leg_avp_id parameters
|
|
2.4. Where can I find more about Kamailio?
|
|
2.5. Where can I post a question about this module?
|
|
2.6. How can I report a bug?
|
|
|
|
2.1.
|
|
|
|
What happend with old log_fmt parameter
|
|
|
|
The parameter became obsolete with the restructure of the data logged
|
|
by ACC module (refer to the Overview chapter). For similar behaviour
|
|
you can use the extra accouting (see the coresponding chapter).
|
|
|
|
2.2.
|
|
|
|
What happend with old multi_leg_enabled parameter
|
|
|
|
The parameter becaome obsolete by the addition of the new
|
|
multi_leg_info parameter. The multi-leg accouting is automatically
|
|
enabled when multi_leg_info is defined.
|
|
|
|
2.3.
|
|
|
|
What happend with old src_leg_avp_id and dst_leg_avp_id parameters
|
|
|
|
The parameter was replaced by the more generic new parameter
|
|
multi_leg_info. This allows logging (per-leg) of more information than
|
|
just dst and src.
|
|
|
|
2.4.
|
|
|
|
Where can I find more about Kamailio?
|
|
|
|
Take a look at http://www.kamailio.org/.
|
|
|
|
2.5.
|
|
|
|
Where can I post a question about this module?
|
|
|
|
First at all check if your question was already answered on one of our
|
|
mailing lists:
|
|
* User Mailing List -
|
|
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
|
|
* Developer Mailing List -
|
|
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
|
|
|
|
E-mails regarding any stable Kamailio release should be sent to
|
|
<sr-users@lists.sip-router.org> and e-mails regarding development
|
|
versions should be sent to <sr-dev@lists.sip-router.org>.
|
|
|
|
If you want to keep the mail private, send it to
|
|
<sr-users@lists.sip-router.org>.
|
|
|
|
2.6.
|
|
|
|
How can I report a bug?
|
|
|
|
Please follow the guidelines provided at:
|
|
http://sip-router.org/tracker.
|