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.
384 lines
11 KiB
384 lines
11 KiB
1. Acc Module
|
|
|
|
Jiri Kuthan
|
|
|
|
iptel.org
|
|
<jiri@iptel.org>
|
|
|
|
Copyright © 2002, 2003 FhG FOKUS
|
|
__________________________________________________________________
|
|
|
|
1.1. Overview
|
|
1.2. Dependencies
|
|
1.3. Parameters
|
|
|
|
1.3.1. log_level (integer)
|
|
1.3.2. log_fmt (string)
|
|
1.3.3. early_media (integer)
|
|
1.3.4. failed_transactions (integer)
|
|
1.3.5. log_flag (integer)
|
|
1.3.6. log_missed_flag (integer)
|
|
1.3.7. report_ack (integer)
|
|
1.3.8. report_cancels (integer)
|
|
1.3.9. radius_config (string)
|
|
1.3.10. service_type (integer)
|
|
1.3.11. radius_flag (integer)
|
|
1.3.12. radius_missed_flag (integer)
|
|
1.3.13. db_url (string)
|
|
1.3.14. db_flag (integer)
|
|
1.3.15. db_missed_flag (integer)
|
|
1.3.16. diameter_flag (integer)
|
|
1.3.17. diameter_missed_flag (integer)
|
|
1.3.18. diameter_client_host (string)
|
|
1.3.19. diameter_client_port (int)
|
|
|
|
1.4. Functions
|
|
|
|
1.4.1. acc_log_request(comment)
|
|
1.4.2. acc_db_request(comment, table)
|
|
1.4.3. acc_rad_request(comment)
|
|
1.4.4. acc_diam_request(comment)
|
|
|
|
1.1. Overview
|
|
|
|
acc module is used to report on transactions to syslog, SQL and RADIUS.
|
|
|
|
To report on a transaction using syslog, use "setflag" to mark a
|
|
transaction you are interested in with a flag, load accounting module
|
|
and set its "log_flag" to the same flag number. The acc module will
|
|
then report on completed transaction to syslog. 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.
|
|
|
|
What is printed depends on module's "log_fmt" parameter. It's a string
|
|
with characters specifying which parts of request should be printed:
|
|
* c = Call-Id
|
|
* d = To tag (Dst)
|
|
* f = From
|
|
* i = Inbound Request-URI
|
|
* m = Method
|
|
* o = Outbound Request-URI
|
|
* r = fRom
|
|
* s = Status
|
|
* t = To
|
|
* u = digest Username
|
|
* p = username Part of inbound Request-URI
|
|
|
|
If a value is not present in request, "n/a" is accounted instead.
|
|
|
|
Note
|
|
|
|
* A single INVITE may produce multiple accounting reports -- that's
|
|
due to SIP forking feature
|
|
* Subsequent ACKs and other requests do not hit the server and can't
|
|
be accounted unless record-routing is enforced. The ACKs assert
|
|
very little useful information anyway and reporting on INVITE's 200
|
|
makes most accounting scenarios happy.
|
|
* There is no session accounting -- ser maintains no sessions. If one
|
|
needs to correlate INVITEs with BYEs for example for purpose of
|
|
billing, then it is better done in the entity which collects
|
|
accounting information. Otherwise, SIP server would have to become
|
|
sessions-stateful, which would very badly impact its scalability.
|
|
* If a UA fails in middle of conversation, a proxy will never learn
|
|
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).
|
|
|
|
Support for SQL and RADIUS works analogously. You need to enable it by
|
|
recompiling the module with properly set defines. Uncomment the SQL_ACC
|
|
and RAD_ACC lines in modules/acc/Makefile. To compile SQL support, you
|
|
need to have mysqlclient package on your system. To compile RADIUS
|
|
support, you need to have radiusclient installed on your system
|
|
(version 0.5.0 or higher is required) 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 in
|
|
sip_router/etc/radiusclient.conf and make sure that module's
|
|
radius_config parameter points to its location. Uses along with
|
|
FreeRADIUS and Radiator servers have been reported to us.
|
|
|
|
Both mysql and radius libraries must be dynamically linkable. You need
|
|
to configure your OS so that SER, when started, will find them.
|
|
Typically, you do so by manipulating LD_LIBRARY_PATH environment
|
|
variable or configuring ld.so.
|
|
|
|
Example 1. General Example
|
|
loadmodule "modules/acc/acc.so"
|
|
modparam("acc", "log_level", 1)
|
|
modparam("acc", "log_flag", 1)
|
|
|
|
if (uri=~"sip:+49") /* calls to Germany */ {
|
|
if (!proxy_authorize("iptel.org" /* realm */,
|
|
"subscriber" /* table name */)) {
|
|
proxy_challenge("iptel.org" /* realm */, "0" /* no qop */ );
|
|
break;
|
|
}
|
|
|
|
if (method=="INVITE" & !check_from()) {
|
|
log("from!=digest\n");
|
|
sl_send_reply("403","Forbidden");
|
|
break;
|
|
}
|
|
|
|
setflag(1); /* set for accounting (the same value as in log_flag!)
|
|
t_relay(); /* enter stateful mode now */
|
|
};
|
|
|
|
1.2. Dependencies
|
|
|
|
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 (mysql,postgres,dbtext). If compiled with
|
|
database support.
|
|
|
|
1.3. Parameters
|
|
|
|
1.3.1. log_level (integer)
|
|
|
|
Log level at which accounting messages are issued to syslog.
|
|
|
|
Default value is L_NOTICE.
|
|
|
|
Example 2. log_level example
|
|
modparam("acc", "log_level", 2) # Set log_level to 2
|
|
|
|
1.3.2. log_fmt (string)
|
|
|
|
Defines what parts of header fields will be printed to syslog, see
|
|
"overview" for list of accepted values.
|
|
|
|
Default value is "miocfs".
|
|
|
|
Example 3. log_fmt example
|
|
modparam("acc", "log_fmt", "mfs")
|
|
|
|
1.3.3. early_media (integer)
|
|
|
|
Should be early media (183) accounted too ?
|
|
|
|
Default value is 0 (no).
|
|
|
|
Example 4. early_media example
|
|
modparam("acc", "early_media", 1)
|
|
|
|
1.3.4. failed_transactions (integer)
|
|
|
|
This parameter controls whether failed transactions (with final reply
|
|
>= 300) should be accounted too.
|
|
|
|
Default value is 0 (no).
|
|
|
|
Example 5. failed_transactions example
|
|
modparam("acc", "failed_transactions", 1)
|
|
|
|
1.3.5. log_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction.
|
|
|
|
Default value is 1.
|
|
|
|
Example 6. log_flag example
|
|
modparam("acc", "log_flag", 2)
|
|
|
|
1.3.6. log_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls.
|
|
|
|
Default value is 2.
|
|
|
|
Example 7. log_missed_flag example
|
|
modparam("acc", "log_missed_flag", 3)
|
|
|
|
1.3.7. 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 1 (yes).
|
|
|
|
Example 8. report_ack example
|
|
modparam("acc", "report_ack", 0)
|
|
|
|
1.3.8. report_cancels (integer)
|
|
|
|
By default, CANCEL reporting is disabled -- most accounting
|
|
applications are happy to see INVITE's cancellation status. Turn on if
|
|
you explicitly want to account CANCEL transactions.
|
|
|
|
Default value is 0 (no).
|
|
|
|
Example 9. report_cancels example
|
|
modparam("acc", "report_cancels", 1)
|
|
|
|
1.3.9. 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.
|
|
|
|
Default value is “/usr/local/etc/radiusclient/radiusclient.conf”.
|
|
|
|
Example 10. radius_config example
|
|
modparam("acc", "radius_config", "/etc/radiusclient/radiusclient.conf")
|
|
|
|
1.3.10. service_type (integer)
|
|
|
|
Radius service type used for accounting.
|
|
|
|
Default value is 15 (SIP).
|
|
|
|
Example 11. service_type example
|
|
modparam("acc", "service_type", 16)
|
|
|
|
1.3.11. radius_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction -- RADIUS
|
|
specific.
|
|
|
|
Default value is 1.
|
|
|
|
Example 12. radius_flag example
|
|
modparam("acc", "radius_flag", 2)
|
|
|
|
1.3.12. radius_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls -- RADIUS
|
|
specific.
|
|
|
|
Default value is 2.
|
|
|
|
Example 13. radius_missed_flag example
|
|
modparam("acc", "radius_missed_flag", 3)
|
|
|
|
1.3.13. db_url (string)
|
|
|
|
SQL address -- database specific.
|
|
|
|
Default value is "mysql://ser:heslo@localhost/ser"
|
|
|
|
Example 14. db_url example
|
|
modparam("acc", "db_url", "mysql://user:password@localhost/ser")
|
|
|
|
1.3.14. db_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction -- database
|
|
specific.
|
|
|
|
Default value is 1.
|
|
|
|
Example 15. db_flag example
|
|
modparam("acc", "db_flag", 2)
|
|
|
|
1.3.15. db_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls -- database
|
|
specific.
|
|
|
|
Default value is 2.
|
|
|
|
Example 16. db_missed_flag example
|
|
modparam("acc", "db_missed_flag", 3)
|
|
|
|
1.3.16. diameter_flag (integer)
|
|
|
|
Request flag which needs to be set to account a transaction -- DIAMETER
|
|
specific.
|
|
|
|
Default value is 1.
|
|
|
|
Example 17. diameter_flag example
|
|
modparam("acc", "diameter_flag", 2)
|
|
|
|
1.3.17. diameter_missed_flag (integer)
|
|
|
|
Request flag which needs to be set to account missed calls -- DIAMETER
|
|
specific.
|
|
|
|
Default value is 2.
|
|
|
|
Example 18. diameter_missed_flag example
|
|
modparam("acc", "diameter_missed_flag", 3)
|
|
|
|
1.3.18. diameter_client_host (string)
|
|
|
|
Hostname of the machine where the DIAMETER Client is running --
|
|
DIAMETER specific.
|
|
|
|
Default value is "localhost".
|
|
|
|
Example 19. diameter_client_host example
|
|
modparam("acc", "diameter_client_host", "iptel.org")
|
|
|
|
1.3.19. diameter_client_port (int)
|
|
|
|
Port number where the Diameter Client is listening -- DIAMETER
|
|
specific.
|
|
|
|
Default value is 3000.
|
|
|
|
Example 20. diameter_client_host example
|
|
modparam("acc", "diameter_client_port", 3000)
|
|
|
|
1.4. Functions
|
|
|
|
1.4.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. 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.
|
|
|
|
Example 21. acc_log_request usage
|
|
...
|
|
acc_log_request("Some comment");
|
|
...
|
|
|
|
1.4.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.
|
|
|
|
Example 22. acc_db_request usage
|
|
...
|
|
acc_log_request("Some comment", "Some table");
|
|
...
|
|
|
|
1.4.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.
|
|
|
|
Example 23. acc_rad_request usage
|
|
...
|
|
acc_rad_request("Some comment");
|
|
...
|
|
|
|
1.4.4. acc_diam_request(comment)
|
|
|
|
Like acc_log_request, acc_diam_request reports on a request. It reports
|
|
to Diameter server.
|
|
|
|
Meaning of the parameters is as follows:
|
|
* comment - Comment to be appended.
|
|
|
|
Example 24. acc_diam_request usage
|
|
...
|
|
acc_diam_request("Some comment");
|
|
...
|