I don't know if this is a bug, or if I missing some config requirements. I mentioned the issue on the sr-user but did not get any comment.
In case serial (or combined serial/parallel) branching is wished, the q value from the registered contact is considered to define the order in which a call is serial branched.
If a CPE registers without q value, the value can be defined by:
modparam("registrar", "default_q", 500)
If a CPE registers with a q value, the client provided value is not being overridden by the default_q setting.
In order to force the order there is a need to override the q value provided by a CPE.
According to the Manual this is possible:
modparam("registrar", "xavp_cfg", "reg")
https://www.kamailio.org/docs/modules/devel/modules/registrar.html#registrar.p.xavp_cfg
q - q value of contact (integer 0-1000). It overrides q value given in contact header and default_q parameter. Used in save().
Actual config:
modparam("registrar", "method_filtering", 1)
modparam("registrar", "max_contacts", 10)
modparam("registrar", "max_expires", 3600)
modparam("registrar", "gruu_enabled", 0)
modparam("registrar", "retry_after", 30)
modparam("registrar", "xavp_cfg", "reg")
modparam("registrar", "default_q", 600)
modparam("registrar", "use_path", 1)
modparam("registrar", "path_mode", 1)
modparam("registrar", "path_check_local", 0)
route[REGISTRAR] {
# Create an AOR based on the auth_username for the location service.
$var(saveuri) = "sip:" + $aU + "@" + $rd;
$xavp(reg=>q) = 450;
$var(result) = save("location","0x00","$var(saveuri)");
if ($var(result) == -2) {
xlog("L_ERR", "$cfg(route): Too many contacts for $var(saveuri)\n");
sl_reply_error();
}
if ($var(result) == -1) {
xlog("L_ERR", "$cfg(route): Error saving location $var(saveuri)\n");
sl_reply_error();
}
if ($var(result) == 1) {
xlog("L_INFO", "$cfg(route): Contact $var(saveuri) inserted\n");
}
if ($var(result) == 2) {
if ($avp(debug) > 0) {
xlog("L_INFO", "$cfg(route): Contact $var(saveuri) updated\n");
}
}
if ($var(result) == 3) {
xlog("L_INFO", "$cfg(route): Contact $var(saveuri) deleted\n");
}
if ($var(result) == 4) {
xlog("L_INFO", "$cfg(route): Contact $var(saveuri) returned\n");
}
}
# kamctl ul show | json_pp | grep "Q"
"Q" : 0.6,
"Q" : 0.6,
"Q" : 0.6,
"Q" : 0.5,
"Q" : 0.6,
"Q" : 0.6,
"Q" : 0.6,
CPE providing a q value (0.5 in this case for CPE 4) are not overriden.
CPE providing no q value are inserted with default_q value.
Expectation: $xavp(reg=>q) = 450 should cause all CPE to register with Q: 0.45
No errors logged while saving contact.
I could show the Register messages of CPE with q= attribute and without, but I don't think this contributes to solving the issue.
I attempted some other notations like:
$xavp(reg>q)
or
$xavp(reg[0]=>q)
none worked.
I also noted some time ago that setting: $xavp(reg=>max_contacts) also does not work
# kamailio -v
version: kamailio 5.7.6 (x86_64/linux)
flags: USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MMAP, PKG_MALLOC, MEM_JOIN_FREE, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLOCKLIST, HAVE_RESOLV_RES, TLS_PTHREAD_MUTEX_SHARED
ADAPTIVE_WAIT_LOOPS 1024, MAX_RECV_BUFFER_SIZE 262144, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: unknown
compiled with gcc 11.4.0
Distributor ID: Ubuntu
Description: Ubuntu 22.04.4 LTS
Release: 22.04
Codename: jammy
Any help / hints appreciated!
-BenoƮt-
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.