Hi All,

Hope you are all well?

I am hoping you can help with a bit of syntax I am struggling to get working in 
the intended way. (We are using Kamailio 5.5.3 and using Kemi/python.)

The scenario is in AWS where we have separate Kamailio and RTPengine instances, 
with a cluster of FreeSWITCH EC2's on private addresses only.

In the current setup, all RTP routes via the NAT gateway and back to the 
private IP of the selected FreeSWITCH (and vice versa). This works in the 
current config, but I would want this traffic not going via the NAT gateway and 
use the private address and route internally on the VPC. (These EC'2 have only 
1 network interface and that cannot be changed for this work.)

So anything between FreeSWITCH and Kamailio/RTPengine uses the private IP's for 
media, the rest use public IP's.

It is good to note that the RTPengine's are the same in each set (3 total 
RTPengine's), just using the public/private IP's based on set ID.

My first aim is to use KSR.permissions.allow_source_address() to check if the 
source address is from the FreeSWITCH cluster and set the rtpengine setID based 
on this. I have used this method for different parts of the config and it works.

I am failing at this first step it seems, as no matter what I use in the 
function (below) it defaults and uses the public IP's in SDP. (No matter if I 
use the same setID in each set)

kamailio.cfg snippet:

# ----- rtpengine params -----
modparam("rtpengine", "setid_avp", "$avp()")
# Public IP's ID 1:
modparam("rtpengine", "rtpengine_sock", "1 == udp:5.5.5.5:2223 udp:6.6.6.6:2223 
udp:7.7.7.7:2223")
# Internal IP's ID 2:
modparam("rtpengine", "rtpengine_sock", "2 == udp:10.0.0.1:2223 
udp:10.0.0.2:2223 udp:10.0.0.3:2223")

Kemi file snippet:

# RTPengine Options for different SetID
    def ksr_route_rtpengine(self, msg):
        if KSR.textops.has_body_type("application/sdp") > 0 :
# Source address is private subnet - use RTPengine set 2 (private IP's)
            if KSR.permissions.allow_source_address(400) == 1:
                KSR.rtpengine.set_rtpengine_set(2)
                KSR.rtpengine.rtpengine_manage(
                    "RTP/AVP replace-session-connection replace-origin 
port-latching ICE=remove")
            else:
# Source address is NOT private - use RTPengine set 1 (public)
                KSR.rtpengine.set_rtpengine_set(1)
                KSR.rtpengine.rtpengine_manage(
                    "RTP/AVP replace-session-connection replace-origin 
port-latching ICE=remove")
                KSR.xlog.xlog("L_INFO", "RTPengine handling Block")
        return 1


Group 400 is the private subnet of the FreeSWITCH clusters we have behind on 
private addresses and the list contains the subnet of private IP's.

Using the above, the Kamailio starts fine and understands/loads each set of 
RTPengine's and calls work with audio. but regardless of the set number used 
(even only using set 2 in both) it defaults to public IP's in the SDP. (This is 
the only place in the config where this function is defined)

My SDP from FreeSWITCH egress to Kamailio/RTPengine has private IP's in the SDP.

The only thing I do not fully understand is the setid_avp - specifically $avp() 
block and if this needs to stay empty, or be duplicated with the set ID in each 
one.

Any help would be greatly appreciated in understanding where I am going wrong 
here.

Thanks,

John.
__________________________________________________________
Kamailio - Users Mailing List - Non Commercial Discussions
To unsubscribe send an email to [email protected]
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