<p>osmith has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/11144">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Support osmo-sip-connector with kamailio<br><br>Kamailio is a SIP server, that is relatively easy to configure, in<br>contrary to asterisk it only has one config file. The config file<br>here is based on the example config provided in the wiki:<br><br><http://osmocom.org/projects/osmo-sip-conector/wiki/Howto><br><br>To enable the osmo-sip-connector, build it, install kamailio and<br>then set SIPCON_ENABLE=true in your copy of config_2g_3g.<br><br>Change-Id: Ia5c4e9992eab390bc6d26ada7564223ff41a01b2<br>---<br>M net/config_2g3g<br>A net/tmpl_std/kamailio.cfg<br>A net/tmpl_std/osmo-sip-connector.cfg<br>M net/tmpl_std/run.sh<br>4 files changed, 462 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-dev refs/changes/44/11144/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/net/config_2g3g b/net/config_2g3g</span><br><span>index 266997f..05e82ea 100644</span><br><span>--- a/net/config_2g3g</span><br><span>+++ b/net/config_2g3g</span><br><span>@@ -30,6 +30,7 @@</span><br><span> HLR_IP="127.0.0.1"</span><br><span> </span><br><span> MSC_PC="0.23.1"</span><br><span style="color: hsl(120, 100%, 40%);">+MSC_MNCC_SOCKET="/tmp/bsc_mncc"</span><br><span> </span><br><span> AUTH=optional</span><br><span> ENCR_A5=0</span><br><span>@@ -71,3 +72,9 @@</span><br><span> SCRAMBLE2=258</span><br><span> LAC2=2${UARFCN2}</span><br><span> RAC2=22</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SIPCON_ENABLE="false"</span><br><span style="color: hsl(120, 100%, 40%);">+SIPCON_LOCAL="${PUBLIC_IP}"</span><br><span style="color: hsl(120, 100%, 40%);">+SIPCON_LOCAL_PORT="5069"</span><br><span style="color: hsl(120, 100%, 40%);">+SIPCON_REMOTE="${PUBLIC_IP}"</span><br><span style="color: hsl(120, 100%, 40%);">+SIPCON_REMOTE_PORT="5060"</span><br><span>diff --git a/net/tmpl_std/kamailio.cfg b/net/tmpl_std/kamailio.cfg</span><br><span>new file mode 100644</span><br><span>index 0000000..070ca55</span><br><span>--- /dev/null</span><br><span>+++ b/net/tmpl_std/kamailio.cfg</span><br><span>@@ -0,0 +1,418 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!KAMAILIO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#!define WITH_DEBUG</span><br><span style="color: hsl(120, 100%, 40%);">+#!define WITH_PSTN</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+####### Defined Values #########</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# - flags</span><br><span style="color: hsl(120, 100%, 40%);">+#   FLT_ - per transaction (message) flags</span><br><span style="color: hsl(120, 100%, 40%);">+# FLB_ - per branch flags</span><br><span style="color: hsl(120, 100%, 40%);">+#!define FLT_ACC 1</span><br><span style="color: hsl(120, 100%, 40%);">+#!define FLT_ACCMISSED 2</span><br><span style="color: hsl(120, 100%, 40%);">+#!define FLT_ACCFAILED 3</span><br><span style="color: hsl(120, 100%, 40%);">+#!define FLT_NATS 5</span><br><span style="color: hsl(120, 100%, 40%);">+#!define FLB_NATB 6</span><br><span style="color: hsl(120, 100%, 40%);">+#!define FLB_NATSIPPING 7</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+####### Global Parameters #########</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_DEBUG</span><br><span style="color: hsl(120, 100%, 40%);">+debug=2</span><br><span style="color: hsl(120, 100%, 40%);">+log_stderror=yes</span><br><span style="color: hsl(120, 100%, 40%);">+#!else</span><br><span style="color: hsl(120, 100%, 40%);">+debug=2</span><br><span style="color: hsl(120, 100%, 40%);">+log_stderror=no</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+memdbg=5</span><br><span style="color: hsl(120, 100%, 40%);">+memlog=5</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+log_facility=LOG_LOCAL0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+fork=yes</span><br><span style="color: hsl(120, 100%, 40%);">+children=4</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* uncomment the next line to disable TCP (default on) */</span><br><span style="color: hsl(120, 100%, 40%);">+disable_tcp=yes</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* uncomment the next line to disable the auto discovery of local aliases</span><br><span style="color: hsl(120, 100%, 40%);">+   based on reverse DNS on IPs (default on) */</span><br><span style="color: hsl(120, 100%, 40%);">+auto_aliases=no</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* add local domain aliases */</span><br><span style="color: hsl(120, 100%, 40%);">+#alias="sip.mydomain.com"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* uncomment and configure the following line if you want Kamailio to </span><br><span style="color: hsl(120, 100%, 40%);">+   bind on a specific interface/port/proto (default bind on all available) */</span><br><span style="color: hsl(120, 100%, 40%);">+listen=${SIPCON_REMOTE}:${SIPCON_REMOTE_PORT}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* port to listen to</span><br><span style="color: hsl(120, 100%, 40%);">+ * - can be specified more than once if needed to listen on many ports */</span><br><span style="color: hsl(120, 100%, 40%);">+port=${SIPCON_REMOTE_PORT}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# life time of TCP connection when there is no traffic</span><br><span style="color: hsl(120, 100%, 40%);">+# - a bit higher than registration expires to cope with UA behind NAT</span><br><span style="color: hsl(120, 100%, 40%);">+tcp_connection_lifetime=3605</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+####### Custom Parameters #########</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# These parameters can be modified runtime via RPC interface</span><br><span style="color: hsl(120, 100%, 40%);">+# - see the documentation of 'cfg_rpc' module.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Format: group.id = value 'desc' description</span><br><span style="color: hsl(120, 100%, 40%);">+# Access: $sel(cfg_get.group.id) or @cfg_get.group.id</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_PSTN</span><br><span style="color: hsl(120, 100%, 40%);">+# PSTN GW Routing</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# - pstn.gw_ip: valid IP or hostname as string value, example:</span><br><span style="color: hsl(120, 100%, 40%);">+# pstn.gw_ip = "10.0.0.101" desc "My PSTN GW Address"</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# - by default is empty to avoid misrouting</span><br><span style="color: hsl(120, 100%, 40%);">+pstn.gw_ip = "${SIPCON_LOCAL}:${SIPCON_LOCAL_PORT}" desc "osmo-sip-connector Address"</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+####### Modules Section ########</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# set paths to location of modules (to sources or installation folders)</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_SRCPATH</span><br><span style="color: hsl(120, 100%, 40%);">+mpath="modules"</span><br><span style="color: hsl(120, 100%, 40%);">+#!else</span><br><span style="color: hsl(120, 100%, 40%);">+mpath="/usr/lib/x86_64-linux-gnu/kamailio/modules/"</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# loadmodule "mi_fifo.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "kex.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "corex.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "tm.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "tmx.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "sl.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "rr.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "pv.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "maxfwd.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "usrloc.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "registrar.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "textops.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "siputils.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "xlog.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "sanity.so"</span><br><span style="color: hsl(120, 100%, 40%);">+# loadmodule "ctl.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "cfg_rpc.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "mi_rpc.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "acc.so"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_NAT</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "nathelper.so"</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "rtpproxy.so"</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_DEBUG</span><br><span style="color: hsl(120, 100%, 40%);">+loadmodule "debugger.so"</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----------------- setting module-specific parameters ---------------</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- mi_fifo params -----</span><br><span style="color: hsl(120, 100%, 40%);">+#modparam("mi_fifo", "fifo_name", "/var/run/kamailio/kamailio_fifo")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- ctl params -----</span><br><span style="color: hsl(120, 100%, 40%);">+#modparam("ctl", "binrpc", "unix:/var/run/kamailio/kamailio_ctl")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- tm params -----</span><br><span style="color: hsl(120, 100%, 40%);">+# auto-discard branches from previous serial forking leg</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("tm", "failure_reply_mode", 3)</span><br><span style="color: hsl(120, 100%, 40%);">+# default retransmission timeout: 30sec</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("tm", "fr_timer", 30000)</span><br><span style="color: hsl(120, 100%, 40%);">+# default invite retransmission timeout after 1xx: 120sec</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("tm", "fr_inv_timer", 120000)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- rr params -----</span><br><span style="color: hsl(120, 100%, 40%);">+# add value to ;lr param to cope with most of the UAs</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("rr", "enable_full_lr", 1)</span><br><span style="color: hsl(120, 100%, 40%);">+# do not append from tag to the RR (no need for this script)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("rr", "append_fromtag", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- registrar params -----</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("registrar", "method_filtering", 1)</span><br><span style="color: hsl(120, 100%, 40%);">+/* uncomment the next line to disable parallel forking via location */</span><br><span style="color: hsl(120, 100%, 40%);">+# modparam("registrar", "append_branches", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+/* uncomment the next line not to allow more than 10 contacts per AOR */</span><br><span style="color: hsl(120, 100%, 40%);">+#modparam("registrar", "max_contacts", 10)</span><br><span style="color: hsl(120, 100%, 40%);">+# max value for expires of registrations</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("registrar", "max_expires", 3600)</span><br><span style="color: hsl(120, 100%, 40%);">+# set it to 1 to enable GRUU</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("registrar", "gruu_enabled", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- acc params -----</span><br><span style="color: hsl(120, 100%, 40%);">+/* what special events should be accounted ? */</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "early_media", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "report_ack", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "report_cancels", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+/* by default ww do not adjust the direct of the sequential requests.</span><br><span style="color: hsl(120, 100%, 40%);">+   if you enable this parameter, be sure the enable "append_fromtag"</span><br><span style="color: hsl(120, 100%, 40%);">+   in "rr" module */</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "detect_direction", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+/* account triggers (flags) */</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "log_flag", FLT_ACC)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "log_missed_flag", FLT_ACCMISSED)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "log_extra", </span><br><span style="color: hsl(120, 100%, 40%);">+       "src_user=$fU;src_domain=$fd;src_ip=$si;"</span><br><span style="color: hsl(120, 100%, 40%);">+   "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd")</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("acc", "failed_transaction_flag", FLT_ACCFAILED)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_NAT</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- rtpproxy params -----</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- nathelper params -----</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("nathelper", "natping_interval", 30)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("nathelper", "ping_nated_only", 1)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("nathelper", "sipping_bflag", FLB_NATSIPPING)</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("nathelper", "sipping_from", "sip:pinger@kamailio.org")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# params needed for NAT traversal in other modules</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)")</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("usrloc", "nat_bflag", FLB_NATB)</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_DEBUG</span><br><span style="color: hsl(120, 100%, 40%);">+# ----- debugger params -----</span><br><span style="color: hsl(120, 100%, 40%);">+modparam("debugger", "cfgtrace", 0)</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+####### Routing Logic ########</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Main SIP request routing logic</span><br><span style="color: hsl(120, 100%, 40%);">+# - processing of any incoming SIP request starts with this route</span><br><span style="color: hsl(120, 100%, 40%);">+# - note: this is the same as route { ... }</span><br><span style="color: hsl(120, 100%, 40%);">+request_route {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    xlog("GOT SIP $rm from $fu: $ru\n");</span><br><span style="color: hsl(120, 100%, 40%);">+        # per request initial checks</span><br><span style="color: hsl(120, 100%, 40%);">+  route(REQINIT);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     # CANCEL processing</span><br><span style="color: hsl(120, 100%, 40%);">+   if (is_method("CANCEL")) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if (t_check_trans()) {</span><br><span style="color: hsl(120, 100%, 40%);">+                        route(RELAY);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+             exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     # handle requests within SIP dialogs</span><br><span style="color: hsl(120, 100%, 40%);">+  route(WITHINDLG);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   ### only initial requests (no To tag)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       # handle retransmissions</span><br><span style="color: hsl(120, 100%, 40%);">+      if(t_precheck_trans()) {</span><br><span style="color: hsl(120, 100%, 40%);">+              t_check_trans();</span><br><span style="color: hsl(120, 100%, 40%);">+              exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     t_check_trans();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if ("600" == $rU) {</span><br><span style="color: hsl(120, 100%, 40%);">+         route(ECHO);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if ("500" == $rU) {</span><br><span style="color: hsl(120, 100%, 40%);">+         route(TEST);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   route(PSTN);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+route[RELAY] {</span><br><span style="color: hsl(120, 100%, 40%);">+   # enable additional event routes for forwarded requests</span><br><span style="color: hsl(120, 100%, 40%);">+       # - serial forking, RTP relaying handling, a.s.o.</span><br><span style="color: hsl(120, 100%, 40%);">+     if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH");</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (is_method("INVITE|SUBSCRIBE|UPDATE")) {</span><br><span style="color: hsl(120, 100%, 40%);">+         if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY");</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (is_method("INVITE")) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE");</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!t_relay()) {</span><br><span style="color: hsl(120, 100%, 40%);">+             sl_reply_error();</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     exit;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Per SIP request initial checks</span><br><span style="color: hsl(120, 100%, 40%);">+route[REQINIT] {</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_ANTIFLOOD</span><br><span style="color: hsl(120, 100%, 40%);">+        # flood dection from same IP and traffic ban for a while</span><br><span style="color: hsl(120, 100%, 40%);">+      # be sure you exclude checking trusted peers, such as pstn gateways</span><br><span style="color: hsl(120, 100%, 40%);">+   # - local host excluded (e.g., loop to self)</span><br><span style="color: hsl(120, 100%, 40%);">+  if(src_ip!=myself) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if($sht(ipban=>$si)!=$null) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      # ip is already blocked</span><br><span style="color: hsl(120, 100%, 40%);">+                       xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                      exit;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (!pike_check_req()) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                       $sht(ipban=>$si) = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                      exit;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!mf_process_maxfwd_header("2")) {</span><br><span style="color: hsl(120, 100%, 40%);">+               sl_send_reply("483","Too Many Hops");</span><br><span style="color: hsl(120, 100%, 40%);">+             exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if(is_method("OPTIONS") && uri==myself && $rU==$null) {</span><br><span style="color: hsl(120, 100%, 40%);">+             sl_send_reply("200","Keepalive");</span><br><span style="color: hsl(120, 100%, 40%);">+         exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if(!sanity_check("1511", "7")) {</span><br><span style="color: hsl(120, 100%, 40%);">+          xlog("Malformed SIP message from $si:$sp\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Handle requests within SIP dialogs</span><br><span style="color: hsl(120, 100%, 40%);">+route[WITHINDLG] {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!has_totag()) return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   # sequential request withing a dialog should</span><br><span style="color: hsl(120, 100%, 40%);">+  # take the path determined by record-routing</span><br><span style="color: hsl(120, 100%, 40%);">+  if (loose_route()) {</span><br><span style="color: hsl(120, 100%, 40%);">+          if (is_method("BYE")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     setflag(FLT_ACC); # do accounting ...</span><br><span style="color: hsl(120, 100%, 40%);">+                 setflag(FLT_ACCFAILED); # ... even if the transaction fails</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+             else if ( is_method("ACK") ) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      # ACK is forwarded statelessy</span><br><span style="color: hsl(120, 100%, 40%);">+                 route(NATMANAGE);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             else if ( is_method("NOTIFY") ) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   # Add Record-Route for in-dialog NOTIFY as per RFC 6665.</span><br><span style="color: hsl(120, 100%, 40%);">+                      record_route();</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+             route(RELAY);</span><br><span style="color: hsl(120, 100%, 40%);">+         exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     if ( is_method("ACK") ) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if ( t_check_trans() ) {</span><br><span style="color: hsl(120, 100%, 40%);">+                      # no loose-route, but stateful ACK;</span><br><span style="color: hsl(120, 100%, 40%);">+                   # must be an ACK after a 487</span><br><span style="color: hsl(120, 100%, 40%);">+                  # or e.g. 404 from upstream server</span><br><span style="color: hsl(120, 100%, 40%);">+                    route(RELAY);</span><br><span style="color: hsl(120, 100%, 40%);">+                 exit;</span><br><span style="color: hsl(120, 100%, 40%);">+         } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      # ACK without matching transaction ... ignore and discard</span><br><span style="color: hsl(120, 100%, 40%);">+                     exit;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     sl_send_reply("404", "Not here");</span><br><span style="color: hsl(120, 100%, 40%);">+ exit;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# RTPProxy control</span><br><span style="color: hsl(120, 100%, 40%);">+route[NATMANAGE] {</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_NAT</span><br><span style="color: hsl(120, 100%, 40%);">+  if (is_request()) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if(has_totag()) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     if(check_route_param("nat=yes")) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          setbflag(FLB_NATB);</span><br><span style="color: hsl(120, 100%, 40%);">+                   }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB)))</span><br><span style="color: hsl(120, 100%, 40%);">+           return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     rtpproxy_manage("co");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (is_request()) {</span><br><span style="color: hsl(120, 100%, 40%);">+           if (!has_totag()) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   if(t_is_branch_route()) {</span><br><span style="color: hsl(120, 100%, 40%);">+                             add_rr_param(";nat=yes");</span><br><span style="color: hsl(120, 100%, 40%);">+                   }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (is_reply()) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if(isbflagset(FLB_NATB)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                    set_contact_alias();</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+    return;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# PSTN GW routing</span><br><span style="color: hsl(120, 100%, 40%);">+route[PSTN] {</span><br><span style="color: hsl(120, 100%, 40%);">+#!ifdef WITH_PSTN</span><br><span style="color: hsl(120, 100%, 40%);">+     # check if PSTN GW IP is defined</span><br><span style="color: hsl(120, 100%, 40%);">+      if (strempty($sel(cfg_get.pstn.gw_ip))) {</span><br><span style="color: hsl(120, 100%, 40%);">+             xlog("SCRIPT: PSTN rotuing enabled but pstn.gw_ip not defined\n");</span><br><span style="color: hsl(120, 100%, 40%);">+          return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   # route to PSTN dialed numbers starting with '+' or '00'</span><br><span style="color: hsl(120, 100%, 40%);">+      #     (international format)</span><br><span style="color: hsl(120, 100%, 40%);">+  # - update the condition to match your dialing rules for PSTN routing</span><br><span style="color: hsl(120, 100%, 40%);">+ #if(!($rU=~"^(\+|00)[1-9][0-9]{3,20}$"))</span><br><span style="color: hsl(120, 100%, 40%);">+    #       return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     # only local users allowed to call</span><br><span style="color: hsl(120, 100%, 40%);">+    #if(from_uri!=myself) {</span><br><span style="color: hsl(120, 100%, 40%);">+       #       sl_send_reply("403", "Not Allowed");</span><br><span style="color: hsl(120, 100%, 40%);">+      #       exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ #}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  $ru = "sip:" + $rU + "@" + $sel(cfg_get.pstn.gw_ip);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    route(RELAY);</span><br><span style="color: hsl(120, 100%, 40%);">+ exit;</span><br><span style="color: hsl(120, 100%, 40%);">+#!endif</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      return;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+route[ECHO] {</span><br><span style="color: hsl(120, 100%, 40%);">+   $ru = "sip:echo@iptel.org";</span><br><span style="color: hsl(120, 100%, 40%);">+ route(RELAY);</span><br><span style="color: hsl(120, 100%, 40%);">+ exit;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+route[TEST] {</span><br><span style="color: hsl(120, 100%, 40%);">+     $ru = "sip:music@iptel.org";</span><br><span style="color: hsl(120, 100%, 40%);">+        route(RELAY);</span><br><span style="color: hsl(120, 100%, 40%);">+ exit;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Manage outgoing branches</span><br><span style="color: hsl(120, 100%, 40%);">+branch_route[MANAGE_BRANCH] {</span><br><span style="color: hsl(120, 100%, 40%);">+ xdbg("new branch [$T_branch_idx] to $ru\n");</span><br><span style="color: hsl(120, 100%, 40%);">+        route(NATMANAGE);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Manage incoming replies</span><br><span style="color: hsl(120, 100%, 40%);">+onreply_route[MANAGE_REPLY] {</span><br><span style="color: hsl(120, 100%, 40%);">+      xdbg("incoming reply\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   if(status=~"[12][0-9][0-9]")</span><br><span style="color: hsl(120, 100%, 40%);">+                route(NATMANAGE);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Manage failure routing cases</span><br><span style="color: hsl(120, 100%, 40%);">+failure_route[MANAGE_FAILURE] {</span><br><span style="color: hsl(120, 100%, 40%);">+       route(NATMANAGE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (t_is_canceled()) {</span><br><span style="color: hsl(120, 100%, 40%);">+                exit;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/net/tmpl_std/osmo-sip-connector.cfg b/net/tmpl_std/osmo-sip-connector.cfg</span><br><span>new file mode 100644</span><br><span>index 0000000..953eccd</span><br><span>--- /dev/null</span><br><span>+++ b/net/tmpl_std/osmo-sip-connector.cfg</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+app</span><br><span style="color: hsl(120, 100%, 40%);">+mncc</span><br><span style="color: hsl(120, 100%, 40%);">+  socket-path ${MSC_MNCC_SOCKET}</span><br><span style="color: hsl(120, 100%, 40%);">+sip</span><br><span style="color: hsl(120, 100%, 40%);">+  local ${SIPCON_LOCAL} ${SIPCON_LOCAL_PORT}</span><br><span style="color: hsl(120, 100%, 40%);">+  remote ${SIPCON_REMOTE} ${SIPCON_REMOTE_PORT}</span><br><span>diff --git a/net/tmpl_std/run.sh b/net/tmpl_std/run.sh</span><br><span>index 4d45686..1d4d8d3 100755</span><br><span>--- a/net/tmpl_std/run.sh</span><br><span>+++ b/net/tmpl_std/run.sh</span><br><span>@@ -60,6 +60,24 @@</span><br><span> stp="osmo-stp"</span><br><span> bsc="LD_LIBRARY_PATH=/usr/local/lib gdb -ex run --args osmo-bsc -c osmo-bsc.cfg"</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+if [ "${SIPCON_ENABLE}" == "true" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+  sipcon="osmo-sip-connector -c osmo-sip-connector.cfg"</span><br><span style="color: hsl(120, 100%, 40%);">+  msc="$msc -M ${MSC_MNCC_SOCKET}"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  # Require kamailio (sudo because Debian won't find it otherwise)</span><br><span style="color: hsl(120, 100%, 40%);">+  kamailio="$(sudo which kamailio)"</span><br><span style="color: hsl(120, 100%, 40%);">+  if [ -z "$kamailio" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+    echo "ERROR: kamailio is not installed, but it's required for SIPCON_ENABLE."</span><br><span style="color: hsl(120, 100%, 40%);">+    echo "After installing it, make sure that it does *not* run as daemon."</span><br><span style="color: hsl(120, 100%, 40%);">+    exit 1</span><br><span style="color: hsl(120, 100%, 40%);">+  fi</span><br><span style="color: hsl(120, 100%, 40%);">+  kamailio="$kamailio -f kamailio.cfg -D -e -E"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  # Create /var/run/kamailio</span><br><span style="color: hsl(120, 100%, 40%);">+  sudo mkdir -p /var/run/kamailio</span><br><span style="color: hsl(120, 100%, 40%);">+  sudo chown -R $(id -u) /var/run/kamailio</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> sudo tcpdump -i $dev -n -w current_log/$dev.single.pcap -U not port 22 &</span><br><span> sudo tcpdump -i lo -n -w current_log/lo.single.pcap -U not port 22 &</span><br><span> </span><br><span>@@ -83,6 +101,13 @@</span><br><span> sleep .2</span><br><span> term "$bsc" BSC &</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+if [ "${SIPCON_ENABLE}" == "true" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+  sleep .2</span><br><span style="color: hsl(120, 100%, 40%);">+  term "$sipcon" SIPCON &</span><br><span style="color: hsl(120, 100%, 40%);">+  sleep .2</span><br><span style="color: hsl(120, 100%, 40%);">+  term "$kamailio" KAMAILIO &</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #ssh bts rm /tmp/bts.log /tmp/pcu.log</span><br><span> #ssh bts neels/run_remote.sh &</span><br><span> </span><br><span>@@ -90,6 +115,12 @@</span><br><span> read enter_to_close</span><br><span> echo Closing...</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+if [ "${SIPCON_ENABLE}" == "true" ]; then</span><br><span style="color: hsl(120, 100%, 40%);">+  kill %13 %14</span><br><span style="color: hsl(120, 100%, 40%);">+  killall osmo-sip-connector</span><br><span style="color: hsl(120, 100%, 40%);">+  killall kamailio</span><br><span style="color: hsl(120, 100%, 40%);">+fi</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #ssh bts neels/stop_remote.sh</span><br><span> </span><br><span> kill %1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11 %12</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11144">change 11144</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/11144"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-dev </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ia5c4e9992eab390bc6d26ada7564223ff41a01b2 </div>
<div style="display:none"> Gerrit-Change-Number: 11144 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: osmith <osmith@sysmocom.de> </div>