### Description
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...
q - q value of contact (integer 0-1000). It overrides q value given in contact header and default_q parameter. Used in save().
#### Reproduction
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"); } } ```
#### Debugging Data
``` # 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
#### Log Messages
No errors logged while saving contact.
#### SIP Traffic
I could show the Register messages of CPE with q= attribute and without, but I don't think this contributes to solving the issue.
### Possible Solutions
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
### Additional Information
``` # 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-