Hi Henning,

yes as soon as I solve it I will try to give you a config and a sipp script that shows you the issue. It seems its in the function  build_req_buf_from_sip_req (modules/tm/msg_translator.c)  that if you have a flag in the message that says FL_TCP_MTU_FB and your message is larger than a given MTU for UDP that you can define in the core config it will change you to TCP even if you have used t_relay_to_udp  so I am trying to find out why my message has that flag and what's the value of that MTU parameter etc.

I just explain it here so that in the future someone else has the problem kamilio all of a sudden deciding TCP when it should have been UDP, maybe its because of this flag, config parameter and crazy behavior (if I would have used t_relay maybe not so crazy but I used t_relay_to_udp explicitly... so quite crazy that instead of returning an error or something it tries TCP).

Best regards

alberto

El 08/03/2024 a las 11:38, Henning Westerholt escribió:
Hello,

this sound indeed strange, as this is used from many people without any 
problems. Its not expected to use C programming to alter the message transport 
for relaying.

If you can reproduce and minimize the problem towards a small test cfg and a 
test message, it would be great if you could open an issue in our tracker.

Cheers,

Henning

-----Original Message-----
From: Alberto Diez via sr-users <sr-users@lists.kamailio.org>
Sent: Freitag, 8. März 2024 10:28
To: sr-users@lists.kamailio.org
Cc: Alberto Diez <alberto-li...@mobileplots.com>
Subject: [SR-Users] Re: from TCP to UDP and Kamailio doing it wrong

thanks Alex. Sadly in my case the Request-URI does not contain a transport
parameter.

So the call to prepare_new_uac() function is deciding based on another
parameter (don't know which, was trying to avoid investigating that because
the function is a pain and not commented). I think its quite counter-intuitive,
and for me a bug, that you call t_relay_to_udp and Kamailio tries to connect
over TCP....  Same if its dispatcher module asking to dispatch to UDP and
t_relay decides TCP (because it calls this same function at the end) etc.

By the way I also tried forcing the socket from the config file to be the UDP
one, and nothing. Prior to calling prepare_new_uac the socket is the UDP one,
but after calling that function it has changed the socket to a TCP one.

Would be great if anyone has a hint what could be going on and why
prepare_new_uac changes the socket and based on what param

Best regards

alberto

El 07/03/2024 a las 21:44, Alex Balashov via sr-users escribió:
If you just strip the incoming ;transport=tcp attribute, I think all should be
well when t_relay() consumes the modified RURI.
On 7 Mar 2024, at 12:48, Alberto Diez via sr-users <sr-
us...@lists.kamailio.org> wrote:
Hi Sergiu,
yes I am pretty sure something is going wrong.
I do have kamailio listening udp sockets and also the dispatcher is on UDP
doing SIP OPTIONS over UDP all the time without any problem.
I have not tried forcing the socket I tried to find out why kamailio is trying 
to
use TCP with the targets even when I use t_relay_to_udp and that's how I
ended up finding that function which claims not to do something if next_hop
is 0 but doing it nevertheless (which I guess is something going wrong in
general in Kamailio not in particular in my setup).
I will try forcing the socket, but that crazy tm module function
rewrites the socket was already given as a destination (yes I already
checked that in the C code before!) Best regards alberto El
07/03/2024 a las 17:43, Sergiu Pojoga escribió:
You must be doing something essentially wrong if it came down to
checking C functions for something as trivial as transport conversion..
Are you sure you have a UDP listening socket?
kamcmd corex.list_sockets

Result of:
kamcmd dispatcher.list

Have you tried forcing the send socket?
https://www.kamailio.org/wiki/cookbooks/devel/pseudovariables#fs_-_f
orced_send_socket

Cheers

On Thu, Mar 7, 2024 at 11:27 AM Alberto Diez via sr-users <sr-
us...@lists.kamailio.org> wrote:
Hi kamailio community,

I have an issue with a Kamailio 5.7. It's listening both in TCP and
UDP.  In my scenario requests arrive from devices on TCP, but I want
to forward to the next hops on UDP.  I am avoiding using any type of
DNS resolution; since I am always forwarding to predefined next hops
I am using the dispatcher module (defined with the IP addresses and
transport=udp) or I wrote config files using t_relay_to_udp or
t_relay_to with a udp:  followed by IP address. I never set up FQDNS
only IP addresses and in all of them I explicitly mention UDP.

In all of these scenarios I have tried Kamailio insists in trying to
use TCP  with the next hop and failing because the next_hop is only
UDP. I guess because the message arrived using TCP Kamilio does that
but I find the behavior very confusing.

I nailed down that in my situation its the tm module function
prepare_new_uac (in  file src/modules/tm/t_fwd.c line 119) being the
one that missbehaves. The documentation of the function says literraly :

"* t->uac[branch].request.dst will be filled if next_hop !=0 with the result
    * of the DNS resolution (next_hop, fproto and fsocket).
    * If next_hop is 0 all the dst members except the send_flags are read-
only
    * (send_flags it's updated) and are supposed to be pre-filled."

I found out that even when next_hop is 0  the function changes the
t->uac[branch].request.dst  proto, socket etc.  its there that the
kamailio takes the wrong decision, until that function is called
within add_auc,  the destination proto or the fproto etc is always 1
(UDP) which is what I am trying to force from the config file or the
dispatcher definition (I tried both ways).  But after calling that
function then it comes as a 2 (TCP)

The problematic function is a monster of 500 lines and I would like
to avoid having to understand it. Since I think the scenario is not
so unusual I just want to ask if maybe I am missing something that I
should do to avoid the Kamailio to select TCP and in order to have
the tm module respecting my preference for UDP (either with
dispatcher module and the transport param or with t_relay_to or
t_relay_to_udp  I don't care the way).

Any hints are welcome.

Best regards

alberto

__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions To
unsubscribe send an email to sr-users-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the
sender!
Edit mailing list options or unsubscribe:
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions To
unsubscribe send an email to sr-users-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the
sender!
Edit mailing list options or unsubscribe:
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions To unsubscribe
send an email to sr-users-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the
sender!
Edit mailing list options or unsubscribe:
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to sr-users-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!
Edit mailing list options or unsubscribe:

Reply via email to