Module: sip-router
Branch: master
Commit: 9b1c23481551ef74b6efeb0118c1119470a08826
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=9b1c234…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Wed Jan 9 20:09:39 2013 +0100
siptrace(k) Add RPC command for turning on/off
Copying the functionality of the existing MI command.
Also, setting the value of the trace_flag to 0 by default, as
documented in the documentation.
---
modules_k/siptrace/README | 59 ++++++++++++++++++--------
modules_k/siptrace/doc/siptrace_admin.xml | 44 ++++++++++++++++----
modules_k/siptrace/siptrace.c | 64 ++++++++++++++++++++++++++++-
3 files changed, 139 insertions(+), 28 deletions(-)
diff --git a/modules_k/siptrace/README b/modules_k/siptrace/README
index a35a9ce..910ced7 100644
--- a/modules_k/siptrace/README
+++ b/modules_k/siptrace/README
@@ -23,7 +23,7 @@ Daniel-Constantin Mierla
Table of Contents
- 1. Admin Guide
+ 1. SIPtrace Admin Guide
1. Overview
2. Dependencies
@@ -58,8 +58,12 @@ Daniel-Constantin Mierla
5.1. sip_trace
- 6. Database setup
- 7. Known issues
+ 6. RPC Commands
+
+ 6.1. siptrace.status param
+
+ 7. Database setup
+ 8. Known issues
List of Examples
@@ -81,7 +85,7 @@ Daniel-Constantin Mierla
1.16. Set trace_delayed parameter
1.17. sip_trace() usage
-Chapter 1. Admin Guide
+Chapter 1. SIPtrace Admin Guide
Table of Contents
@@ -118,25 +122,29 @@ Chapter 1. Admin Guide
5.1. sip_trace
- 6. Database setup
- 7. Known issues
+ 6. RPC Commands
+
+ 6.1. siptrace.status param
+
+ 7. Database setup
+ 8. Known issues
1. Overview
- Offer a possibility to store incoming/outgoing SIP messages in database
- and/or duplicate to the capturing server (homer encapsulation protocol
- or plain sip mode)
+ Offer a possibility to store incoming and outgoing SIP messages in a
+ database and/or duplicate to the capturing server (using the Homer
+ encapsulation protocol or plain SIP mode)
There are two ways of storing information.
* by calling explicitely the sip_trace() method in Kamailio
configuration file. In this case the original message is processed.
* by setting the flag equal with the value of 'trace_flag' (e.g.,
- setflag(__trace_flag__)) parameter of the module. In this case,
- the\ message sent forward is processed. The logging mechanism is
- based on TM/SL callbacks, so only messages processed with TM/SL are
+ setflag(__trace_flag__)) parameter of the module. In this case, the
+ message sent forward is processed. The logging mechanism is based
+ on TM/SL callbacks, so only messages processed with TM/SL are
logged.
- The tracing can be turned on/off using fifo commad.
+ The tracing can be turned on/off using Kamailio mi or RPC commands.
kamctl fifo sip_trace on
@@ -150,7 +158,7 @@ Chapter 1. Admin Guide
2.1. Kamailio Modules
The following modules must be loaded before this module:
- * database module - mysql, postrgress, dbtext, unixodbc...
+ * database module - Mysql, Postgres, dbtext, unixODBC...
* tm and sl modules - optional, only if you want to trace messages
forwarded by these modules.
@@ -400,7 +408,7 @@ modparam("siptrace", "trace_delayed", 1)
4.1. sip_trace()
-4.1. sip_trace()
+4.1. sip_trace()
Store current processed SIP message in database. It is stored in the
form prior applying chages made to it.
@@ -417,7 +425,7 @@ sip_trace();
5.1. sip_trace
-5.1. sip_trace
+5.1. sip_trace
Name: sip_trace
@@ -434,7 +442,22 @@ sip_trace();
trace_mode
_empty_line_
-6. Database setup
+6. RPC Commands
+
+ 6.1. siptrace.status param
+
+6.1. siptrace.status param
+
+ Name: siptrace.status
+
+ Parameters:
+ * on or off: turns on/off SIP message tracing.. Possible values are:
+ + on
+ + off
+ * "check" does not change siptrace status, just reports the current
+ status.
+
+7. Database setup
Before running Kamailio with siptrace, you have to setup the database
tables where the module will store the data. For that, if the table
@@ -444,7 +467,7 @@ sip_trace();
You can also find the complete database documentation on the project
webpage, http://www.kamailio.org/docs/db-tables/kamailio-db-devel.html.
-7. Known issues
+8. Known issues
Stateless forwarded messages (forward()) are not logged if you set the
flag, use sip_trace().
diff --git a/modules_k/siptrace/doc/siptrace_admin.xml b/modules_k/siptrace/doc/siptrace_admin.xml
index 0d1e064..df22003 100644
--- a/modules_k/siptrace/doc/siptrace_admin.xml
+++ b/modules_k/siptrace/doc/siptrace_admin.xml
@@ -11,14 +11,14 @@
<chapter>
- <title>&adminguide;</title>
+ <title>SIPtrace &adminguide;</title>
<section>
<title>Overview</title>
<para>
- Offer a possibility to store incoming/outgoing SIP messages in database
- and/or duplicate to the capturing server (homer encapsulation protocol
- or plain sip mode)
+ Offer a possibility to store incoming and outgoing SIP messages in a database
+ and/or duplicate to the capturing server (using the Homer encapsulation protocol
+ or plain SIP mode)
</para>
<para>
There are two ways of storing information.
@@ -32,7 +32,7 @@
<listitem>
<para>
by setting the flag equal with the value of 'trace_flag' (e.g.,
- setflag(__trace_flag__)) parameter of the module. In this case, the\
+ setflag(__trace_flag__)) parameter of the module. In this case, the
message sent forward is processed. The logging mechanism is based on
TM/SL callbacks, so only messages processed with TM/SL are logged.
</para>
@@ -41,7 +41,7 @@
</para>
<para>
- The tracing can be turned on/off using fifo commad.
+ The tracing can be turned on/off using Kamailio mi or RPC commands.
</para>
<para>
&ctltool; fifo sip_trace on
@@ -59,8 +59,8 @@
<itemizedlist>
<listitem>
<para>
- <emphasis>database module</emphasis> - mysql, postrgress,
- dbtext, unixodbc...
+ <emphasis>database module</emphasis> - Mysql, Postgres,
+ dbtext, unixODBC...
</para>
</listitem>
<listitem>
@@ -515,7 +515,35 @@ sip_trace();
_empty_line_
</programlisting>
</section>
+ </section><!-- MI Commands -->
+ <section>
+ <title>RPC Commands</title>
+ <section>
+ <title>
+ <function moreinfo="none">siptrace.status param</function>
+ </title>
+ <para>
+
+ </para>
+ <para>
+ Name: <emphasis>siptrace.status</emphasis>
+ </para>
+ <para>Parameters: </para>
+ <itemizedlist>
+ <listitem><para>on or off: turns on/off SIP message tracing..
+ Possible values are:</para>
+ <itemizedlist>
+ <listitem><para>on</para></listitem>
+ <listitem><para>off</para></listitem>
+ </itemizedlist>
+ </listitem>
+ <listitem><para><quote>check</quote> does not change
+ siptrace status, just reports the current status.</para>
+ </listitem>
+ </itemizedlist>
+
</section>
+ </section><!-- RPC commands -->
<section>
<title>Database setup</title>
diff --git a/modules_k/siptrace/siptrace.c b/modules_k/siptrace/siptrace.c
index 0d36ba1..6785655 100644
--- a/modules_k/siptrace/siptrace.c
+++ b/modules_k/siptrace/siptrace.c
@@ -41,6 +41,8 @@
#include "../../mem/mem.h"
#include "../../mem/shm_mem.h"
#include "../../lib/kmi/mi.h"
+#include "../../rpc.h"
+#include "../../rpc_lookup.h"
#include "../../lib/srdb1/db.h"
#include "../../parser/parse_content.h"
#include "../../parser/parse_from.h"
@@ -86,6 +88,7 @@ sl_api_t slb;
/* module function prototypes */
static int mod_init(void);
+static int siptrace_init_rpc(void);
static int child_init(int rank);
static void destroy(void);
static int sip_trace(struct sip_msg*, char*, char*);
@@ -124,8 +127,8 @@ static str time_us_column = str_init("time_us"); /* 10 */
#define XHEADERS_BUFSIZE 512
-int trace_flag = -1;
-int trace_on = 0;
+int trace_flag = 0;
+=nt trace_on = 0;
int trace_sl_acks = 1;
int trace_to_database = 1;
@@ -265,6 +268,11 @@ static int mod_init(void)
LM_ERR("failed to register MI commands\n");
return -1;
}
+ if(siptrace_init_rpc() != 0)
+ {
+ LM_ERR("failed to register RPC commands\n");
+ return -1;
+ }
db_url.len = strlen(db_url.s);
siptrace_table.len = strlen(siptrace_table.s);
@@ -1765,3 +1773,55 @@ static int pipport2su (char *pipport, union sockaddr_union *tmp_su, unsigned int
error:
return -1;
}
+
+static void siptrace_rpc_status (rpc_t* rpc, void* c) {
+ str status = {0, 0};
+
+ if (rpc->scan(c, "S", &status) < 1) {
+ rpc->fault(c, 500, "Not enough parameters (on, off or check)");
+ return;
+ }
+
+ if(trace_on_flag==NULL) {
+ rpc->fault(c, 500, "Internal error");
+ return;
+ }
+
+ if (strncasecmp(status.s, "on", strlen("on")) == 0) {
+ *trace_on_flag = 1;
+ rpc->printf(c, "Enabled");
+ return;
+ }
+ if (strncasecmp(status.s, "off", strlen("off")) == 0) {
+ *trace_on_flag = 0;
+ rpc->printf(c, "Disabled");
+ return;
+ }
+ if (strncasecmp(status.s, "check", strlen("check")) == 0) {
+ rpc->printf(c, *trace_on_flag ? "Enabled" : "Disabled");
+ return;
+ }
+ rpc->fault(c, 500, "Bad parameter (on, off or check)");
+ return;
+}
+
+static const char* siptrace_status_doc[2] = {
+ "Get status or turn on/off siptrace. Parameters: on, off or check.",
+ 0
+};
+
+rpc_export_t siptrace_rpc[] = {
+ {"siptrace.status", siptrace_rpc_status, siptrace_status_doc, 0},
+ {0, 0, 0, 0}
+};
+
+static int siptrace_init_rpc(void)
+{
+ if (rpc_register_array(siptrace_rpc)!=0)
+ {
+ LM_ERR("failed to register RPC commands\n");
+ return -1;
+ }
+ return 0;
+}
+
Module: sip-router
Branch: master
Commit: 9af31f9c44cc35a4cbe74accf79513c7272ec93c
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=9af31f9…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Wed Jan 9 19:50:12 2013 +0100
sipcapture Small cleanup in docs
---
modules/sipcapture/README | 28 +++++++++++++-------------
modules/sipcapture/doc/sipcapture_admin.xml | 14 +++++++-----
2 files changed, 22 insertions(+), 20 deletions(-)
diff --git a/modules/sipcapture/README b/modules/sipcapture/README
index d83d88d..024466f 100644
--- a/modules/sipcapture/README
+++ b/modules/sipcapture/README
@@ -52,7 +52,7 @@ Alexandr Dubovikov
5.1. sipcapture.status param
6. Database setup
- 7. Limitation
+ 7. Limitations
List of Examples
@@ -109,7 +109,7 @@ Chapter 1. Admin Guide
5.1. sipcapture.status param
6. Database setup
- 7. Limitation
+ 7. Limitations
1. Overview
@@ -394,18 +394,18 @@ modparam("sipcapture", "capture_node", "homer03")
6. Database setup
- Before running Kamailio with sipcapture, you have to setup the database
- tables where the module will store the data. For that, if the table
- were not created by the installation script or you choose to install
- everything by yourself you can use the sipcapture_create.sql, SQL
- script in the sql folder of sipcapture module as template. You can also
- find the complete database documentation on the project webpage,
+ Before running Kamailio with the sipcapture module, you have to setup
+ the database tables where the module will store the data. For that, if
+ the table were not created by the installation script or you choose to
+ install everything by yourself you can use the sipcapture_create.sql,
+ SQL script in the sql folder of sipcapture module as template. You can
+ also find the complete database documentation on the project webpage,
http://www.kamailio.org/docs/db-tables/kamailio-db-devel.html.
-7. Limitation
+7. Limitations
- 1. Only one capturing mode on RAW socket is supported: IPIP or
- monitoring/mirroring port. Don't activate both at the same time. 2. By
- default MySQL doesn't support INSERT DELAYED for partitioning table.
- You can patch MySQL (http://bugs.mysql.com/bug.php?id=50393) 3.
- Mirroring port capturing works only on Linux.
+ * 1. Only one capturing mode on RAW socket is supported: IPIP or
+ monitoring/mirroring port. Don't activate both at the same time.
+ * 2. By default MySQL doesn't support INSERT DELAYED for partitioning
+ table. You can patch MySQL (http://bugs.mysql.com/bug.php?id=50393)
+ * 3. Mirroring port capturing works only on Linux.
diff --git a/modules/sipcapture/doc/sipcapture_admin.xml b/modules/sipcapture/doc/sipcapture_admin.xml
index e1be9b7..ba64f1c 100644
--- a/modules/sipcapture/doc/sipcapture_admin.xml
+++ b/modules/sipcapture/doc/sipcapture_admin.xml
@@ -458,7 +458,7 @@ modparam("sipcapture", "capture_node", "homer03")
<section>
<title>Database setup</title>
<para>
- Before running &kamailio; with sipcapture, you have to setup the database
+ Before running &kamailio; with the sipcapture module, you have to setup the database
tables where the module will store the data. For that, if the table were not
created by the installation script or you choose to install everything by
yourself you can use the sipcapture_create.sql, <acronym>SQL</acronym> script
@@ -467,16 +467,18 @@ modparam("sipcapture", "capture_node", "homer03")
</para>
</section>
<section>
- <title>Limitation</title>
- <para>
-
+ <title>Limitations</title>
+ <itemizedlist>
+ <listitem>
1. Only one capturing mode on RAW socket is supported: IPIP or monitoring/mirroring port.
Don't activate both at the same time.
+ </listitem><listitem>
2. By default MySQL doesn't support INSERT DELAYED for partitioning table. You can patch MySQL
(http://bugs.mysql.com/bug.php?id=50393)
+ </listitem><listitem>
3. Mirroring port capturing works only on Linux.
-
- </para>
+ </listitem>
+ </itemizedlist>
</section>
</chapter>
While learning how to create RPC commands in Kamailio, I've came up with a few generic syntax questions that I would like YOUR input on.
When listing an object and reaching a value that's not set, should we print a string saying [NOT DEFINED] or something like that - or just nothing. Noticed that usrloc prints a message while I did not in htable, just the header and no value.
In most cases we deliver a response in a data structure, but in some cases we just print a one-line message as a response, like "on" or "denied". I am beginning to think that's not a good solution, but have used it in permissions and now in sipcapture. As I'm a copycat I must have gotten it from some other module, but can't remember which one.
So the questions are:
- when a data field in an object is empty - should we print a message or simply just leave it empty?
- should all answers be contained in a structure or is one-line text messages ok?
It is irritating developing clients where the server has variations in the syntax, so we want to define a policy here - or just refer me to an existing policy document that I have failed to find, remember or parse :-)
And no, it's not to late to change these bugs - if they are bugs - in git HEAD.
/O
Module: sip-router
Branch: master
Commit: 875c5e71cf1ac077f17eb15030ce8cfb0d299e89
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=875c5e7…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Wed Jan 9 15:29:48 2013 +0100
usrloc(k) Reveal existing rpc command in README
---
modules_k/usrloc/README | 99 +++++++++++++++++++-------------
modules_k/usrloc/doc/usrloc_admin.xml | 18 ++++++
2 files changed, 77 insertions(+), 40 deletions(-)
diff --git a/modules_k/usrloc/README b/modules_k/usrloc/README
index 77d1f83..b764fe1 100644
--- a/modules_k/usrloc/README
+++ b/modules_k/usrloc/README
@@ -78,12 +78,16 @@ Bogdan-Andrei Iancu
5.5. ul_add
5.6. ul_show_contact
- 6. Statistics
+ 6. RPC Commands
- 6.1. users
- 6.2. contacts
- 6.3. expires
- 6.4. registered_users
+ 6.1. ul.dump
+
+ 7. Statistics
+
+ 7.1. users
+ 7.2. contacts
+ 7.3. expires
+ 7.4. registered_users
2. Developer Guide
@@ -200,12 +204,16 @@ Chapter 1. Admin Guide
5.5. ul_add
5.6. ul_show_contact
- 6. Statistics
+ 6. RPC Commands
+
+ 6.1. ul.dump
- 6.1. users
- 6.2. contacts
- 6.3. expires
- 6.4. registered_users
+ 7. Statistics
+
+ 7.1. users
+ 7.2. contacts
+ 7.3. expires
+ 7.4. registered_users
1. Overview
@@ -730,7 +738,7 @@ modparam("usrloc", "xavp_contact", "ulattrs")
5.5. ul_add
5.6. ul_show_contact
-5.1. ul_rm
+5.1. ul_rm
Deletes an entire AOR record (including its contacts).
@@ -739,7 +747,7 @@ modparam("usrloc", "xavp_contact", "ulattrs")
* AOR - user AOR in username[@domain] format (domain must be supplied
only if use_domain option is on).
-5.2. ul_rm_contact
+5.2. ul_rm_contact
Deletes a contact from an AOR record.
@@ -749,7 +757,7 @@ modparam("usrloc", "xavp_contact", "ulattrs")
only if use_domain option is on).
* contact - exact contact to be removed
-5.3. ul_dump
+5.3. ul_dump
Dumps the entire content of the USRLOC in memory cache
@@ -758,11 +766,11 @@ modparam("usrloc", "xavp_contact", "ulattrs")
"brief", a brief dump will be done (only AOR and contacts, with no
other details)
-5.4. ul_flush
+5.4. ul_flush
Triggers the flush of USRLOC memory cache into DB.
-5.5. ul_add
+5.5. ul_add
Adds a new contact for an user AOR.
@@ -778,7 +786,7 @@ modparam("usrloc", "xavp_contact", "ulattrs")
* cflags - per branch flags of the contact
* methods - mask with supported requests of the contact
-5.6. ul_show_contact
+5.6. ul_show_contact
Dumps the contacts of an user AOR.
@@ -787,33 +795,44 @@ modparam("usrloc", "xavp_contact", "ulattrs")
* AOR - user AOR in username[@domain] format (domain must be supplied
only if use_domain option is on).
-6. Statistics
+6. RPC Commands
+
+ 6.1. ul.dump
+
+6.1. ul.dump
+
+ Dumps the content of the location table
+
+ Parameters:
+ * None.
+
+7. Statistics
- 6.1. users
- 6.2. contacts
- 6.3. expires
- 6.4. registered_users
+ 7.1. users
+ 7.2. contacts
+ 7.3. expires
+ 7.4. registered_users
Exported statistics are listed in the next sections.
-6.1. users
+7.1. users
Number of AOR existing in the USRLOC memory cache for that domain - can
not be resetted; this statistic will be register for each used domain
(Ex: location).
-6.2. contacts
+7.2. contacts
Number of contacts existing in the USRLOC memory cache for that domain
- can not be resetted; this statistic will be register for each used
domain (Ex: location).
-6.3. expires
+7.3. expires
Total number of expired contacts for that domain - can be resetted;
this statistic will be register for each used domain (Ex: location).
-6.4. registered_users
+7.4. registered_users
Total number of AOR existing in the USRLOC memory cache for all domains
- can not be resetted.
@@ -866,7 +885,7 @@ Chapter 2. Developer Guide
1.14. ul_register_ulcb(type ,callback, param)
1.15. ul_get_num_users()
-1.1. ul_register_domain(name)
+1.1. ul_register_domain(name)
The function registers a new domain. Domain is just another name for
table used in registrar. The function is called from fixups in
@@ -881,7 +900,7 @@ Chapter 2. Developer Guide
* const char* name - Name of the domain (also called table) to be
registered.
-1.2. ul_insert_urecord(domain, aor, rec)
+1.2. ul_insert_urecord(domain, aor, rec)
The function creates a new record structure and inserts it in the
specified domain. The record is structure that contains all the
@@ -896,7 +915,7 @@ Chapter 2. Developer Guide
* urecord_t** rec - The newly created record structure.
-1.3. ul_delete_urecord(domain, aor)
+1.3. ul_delete_urecord(domain, aor)
The function deletes all the contacts bound with the given Address Of
Record.
@@ -908,7 +927,7 @@ Chapter 2. Developer Guide
* str* aor - Address of record (aka username) of the record, that
should be deleted.
-1.4. ul_get_urecord(domain, aor)
+1.4. ul_get_urecord(domain, aor)
The function returns pointer to record with given Address of Record.
@@ -918,7 +937,7 @@ Chapter 2. Developer Guide
* str* aor - Address of Record of request record.
-1.5. ul_lock_udomain(domain)
+1.5. ul_lock_udomain(domain)
The function lock the specified domain, it means, that no other
processes will be able to access during the time. This prevents race
@@ -929,14 +948,14 @@ Chapter 2. Developer Guide
Meaning of the parameters is as follows:
* udomain_t* domain - Domain to be locked.
-1.6. ul_unlock_udomain(domain)
+1.6. ul_unlock_udomain(domain)
Unlock the specified domain previously locked by ul_lock_udomain.
Meaning of the parameters is as follows:
* udomain_t* domain - Domain to be unlocked.
-1.7. ul_release_urecord(record)
+1.7. ul_release_urecord(record)
Do some sanity checks - if all contacts have been removed, delete the
entire record structure.
@@ -944,7 +963,7 @@ Chapter 2. Developer Guide
Meaning of the parameters is as follows:
* urecord_t* record - Record to be released.
-1.8. ul_insert_ucontact(record, contact, expires, q, callid, cseq, flags,
+1.8. ul_insert_ucontact(record, contact, expires, q, callid, cseq, flags,
cont, ua, sock)
The function inserts a new contact in the given record with specified
@@ -965,7 +984,7 @@ cont, ua, sock)
* struct socket_info *sock - socket on which the REGISTER message was
received on.
-1.9. ul_delete_ucontact (record, contact)
+1.9. ul_delete_ucontact (record, contact)
The function deletes given contact from record.
@@ -975,7 +994,7 @@ cont, ua, sock)
* ucontact_t* contact - Contact to be deleted.
-1.10. ul_get_ucontact(record, contact)
+1.10. ul_get_ucontact(record, contact)
The function tries to find contact with given Contact URI and returns
pointer to structure representing the contact.
@@ -985,7 +1004,7 @@ cont, ua, sock)
* str_t* contact - URI of the request contact.
-1.11. ul_get_all_ucontacts (buf, len, flags)
+1.11. ul_get_all_ucontacts (buf, len, flags)
The function retrieves all contacts of all registered users and returns
them in the caller-supplied buffer. If the buffer is too small, the
@@ -1006,7 +1025,7 @@ cont, ua, sock)
* unsigned int flags - Flags that must be set.
-1.12. ul_update_ucontact(contact, expires, q, callid, cseq, set, res, ua,
+1.12. ul_update_ucontact(contact, expires, q, callid, cseq, set, res, ua,
sock)
The function updates contact with new values.
@@ -1025,7 +1044,7 @@ sock)
* struct socket_info *sock - socket on which the REGISTER message was
received on.
-1.13. ul_bind_ursloc( api )
+1.13. ul_bind_ursloc( api )
The function imports all functions that are exported by the USRLOC
module. Overs for other modules which want to user the internal USRLOC
@@ -1034,7 +1053,7 @@ sock)
Meaning of the parameters is as follows:
* usrloc_api_t* api - USRLOC API
-1.14. ul_register_ulcb(type ,callback, param)
+1.14. ul_register_ulcb(type ,callback, param)
The function register with USRLOC a callback function to be called when
some event occures inside USRLOC.
@@ -1047,6 +1066,6 @@ sock)
* void *param - some parameter to be passed to the callback each time
when it is called.
-1.15. ul_get_num_users()
+1.15. ul_get_num_users()
The function loops through all domains summing up the number of users.
diff --git a/modules_k/usrloc/doc/usrloc_admin.xml b/modules_k/usrloc/doc/usrloc_admin.xml
index 86c25cc..6143ea6 100644
--- a/modules_k/usrloc/doc/usrloc_admin.xml
+++ b/modules_k/usrloc/doc/usrloc_admin.xml
@@ -994,7 +994,25 @@ modparam("usrloc", "xavp_contact", "ulattrs")
</itemizedlist>
</section>
+ </section><!-- MI commands -->
+ <section>
+ <title>RPC Commands</title>
+
+ <section>
+ <title>
+ <function moreinfo="none">ul.dump</function>
+ </title>
+ <para>
+ Dumps the content of the location table
+ </para>
+ <para>Parameters: </para>
+ <itemizedlist>
+ <listitem><para>
+ None.
+ </para></listitem>
+ </itemizedlist>
</section>
+ </section><!-- RPC commands -->
<section>