123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383 |
- 1. Acc Module
- Jiri Kuthan
- iptel.org
- <[email protected]>
- 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");
- ...
|