Hi, I noticed thath command core.tcp_list in kamcmd gives output that does not make sense to me: --- kamcmd> core.tcp_list { id: 1 type: TLS state: CONN_OK timeout: 3599 ref_count: 1 src_ip: 192.168.47.132 src_port: 5061 dst_ip: 10.10.235.9 dst_port: 54769 } { id: 2 type: TLS state: CONN_OK timeout: 3599 ref_count: 1 src_ip: 192.168.47.132 src_port: 32854 dst_ip: 10.10.235.9 dst_port: 5041 } ---
In my scenario I am connecting via TLS to host 192.168.47.132:5061. And host 192.168.47.132 is connecting to my proxy host 10.10.235.9:5041. pcap verifies this. Also tls.list gives similar output.
Values regarding incoming connection (id=2) makes total sense. It seems that values regarding outgoing connection (id=1) have dst_* values swapped with src_* values.
To debug, I placed this logging to tcp_main.c: --- $ git diff tcp_main.c diff --git a/tcp_main.c b/tcp_main.c index 5830c8e..3717cf6 100644 --- a/tcp_main.c +++ b/tcp_main.c @@ -1207,6 +1207,7 @@ again: } from=&my_name; /* update from with the real "from" address */ su2ip_addr(&ip, &my_name); + LM_WARN("after getsockname() my_name=%s server=%s ip=%s\n", su2a(&my_name, sizeof(my_name)), su2a(server, sizeof(*server)), ip_addr2a(&ip)); find_socket: #ifdef USE_TLS if (unlikely(type==PROTO_TLS)) @@ -1223,6 +1224,7 @@ find_socket: else *res_si=sendipv6_tcp; } *res_local_addr=*from; + LM_WARN("before return my_name=%s server=%s ip=%s\n", su2a(&my_name, sizeof(my_name)), su2a(server, sizeof(*server)), ip_addr2a(&ip)); return s; error: if (s!=-1) tcp_safe_close(s); ---
This gives following output: WARNING: <core> [tcp_main.c:1210]: tcp_do_connect(): after getsockname() my_name=192.168.47.132:5061 server=192.168.47.132:5061 ip=10.10.235.9 WARNING: <core> [tcp_main.c:1227]: tcp_do_connect(): before return my_name=192.168.47.132:5061 server=192.168.47.132:5061 ip=10.10.235.9
Are tcp endpoint values really wrong way around or did I undertand something wrong about their meaning?
I am running Kamailio 4.2.5 (x86_64/linux) 61d84c-dirty from git.