[Users] Multiple Sockets + Multiple Processors: Any known issues?

Bogdan-Andrei Iancu bogdan at voice-system.ro
Wed Jun 28 17:09:17 CEST 2006


Hi Carsten,

I would say maybe the requests are not sent from the proper interfaces( 
Ex: sending from the public interface requests to the local proxies). 
Please check this with tcpump.

when you have multiple interface, there are two options:
    - do the interface selection manually via the force_send_socket()
    - let the kernel to choose the appropriate interface based on the 
destination address. For this you need to enable the proxy option 
mhomed. See
       http://openser.org/dokuwiki/doku.php?id=openser_core_cookbook#mhomed

regards,
bogdan

Carsten Bock wrote:

> Hi Everybody,
>
> I have some problems with a System which has several network 
> interfaces and multiple network interfaces. The system basically 
> receives requests on the public socket/ip and sends them, via the 
> private socket to some proxies, which "do the work". It's a kind of 
> load-balancer based on OpenSER 1.0.1 and the Dispatcher Module from 
> 1.1 / CVS.
> Everything works fine, but sometimes i see some ICMP Messages 
> (Destination not reachable / Port not reachable) on this 
> "loadbalancer"; as a response to requests from the Proxies to the 
> loadbalancer. Has anybody seen this issue before? Any ideas, what's 
> wrong? Any known issues? Are there any known problems with multiple 
> interfaces? Any known issues with more than one processor? I've copied 
> my configuration below, any thing in capital letters are Parameters 
> from my M4 file...
> The system is not really on high load, has 64 children and should 
> easily handle the load... (Dual Intel Xeon at 2.80GHz, 1 Gig of Ram)
> Any help would be appreciated...
>
> Thanks in advance,
>
> Carsten
>
> debug=3 # debug level (cmd line: -dddddddddd)
> fork=yes
> log_stderror=no # (cmd line: -E)
>
> children=CHILD_PROCS
> check_via=yes
> dns=off
> rev_dns=off
> listen=DISPATCHER_EXTERNAL_IP
> listen=DISPATCHER_INTERNAL_IP
> port=5060
> sip_warning=0
> disable_core_dump=yes
>
> # Use the FIFO
> fifo="/tmp/openser_fifo"
>
> # for more info: sip_router -h
>
> # ------------------ module loading ----------------------------------
>
> loadmodule "/lib/openser/modules/maxfwd.so"
> loadmodule "/lib/openser/modules/sl.so"
> loadmodule "/lib/openser/modules/tm.so"
> loadmodule "/lib/openser/modules/xlog.so"
> loadmodule "/lib/openser/modules/dispatcher.so"
> loadmodule "/lib/openser/modules/textops.so"
> loadmodule "/lib/openser/modules/rr.so"
>
> loadmodule "/lib/openser/modules/mccs_dispatcher.so"
>
> # ----------------- setting module-specific parameters ---------------
> # TM Module: Timeout for a request with no provisional Answers
> modparam("tm", "fr_timer", PROXY_TIMEOUT)
> # No double Record-Route; we do it manually
> modparam("rr", "enable_double_rr", 0)
> # Dispatcher: Forward Register Requests
> modparam("dispatcher", "list_file", "/etc/openser/dispatcher.list")
> # Dispatcher: Enable Failover-Support
> modparam("dispatcher", "flags", 2)
>
> route {
> ################################################################################################################## 
>
> # ï¿1/2berprï¿1/2fung auf zuviele Forwards.
> ############################################################################################################### 
>
> if (!mf_process_maxfwd_header("10")) {
> sl_send_reply("483","To Many Hops");
> drop();
> return;
> };
>
> ################################################################################################################## 
>
> # Loose-Routing (RFC3261)
> ############################################################################################################### 
>
> # Record-Route-Header entfernen
> if (loose_route()) {
> if(uri=~"sip:.*[@]INTERNAL_IP_REGEX") {
> # Send via the internal Interface:
> force_send_socket(DISPATCHER_INTERNAL_IP:5060);
> } else {
> # Send via the external Interface:
> force_send_socket(DISPATCHER_EXTERNAL_IP:5060);
> }
> if (!t_relay()) {
> sl_reply_error();
> }
> return;
> }
>
> ################################################################################################################## 
>
> # Record-Route, damit alle Nachrichten ï¿1/2ber diesen SIP-Proxy laufen
> ############################################################################################################### 
>
> if (method == "INVITE") record_route();
>
> ################################################################################################################## 
>
> # Relay requests from the Gateways
> ############################################################################################################### 
>
> if (OTHER_PROXY_QUERY) {
> if (uri != myself) {
> # Send via the external Interface:
> force_send_socket(DISPATCHER_EXTERNAL_IP:5060);
>
> # Und das Paket entsprechend weiterleiten
> if (!t_relay_to_udp("MCCS_GLOBAL_DISPATCHER_PRIMARY", 
> "MCCS_GLOBAL_DISPATCHER_PRIMARY_PORT")) {
> log(1, "Not possible to relay to Dispatcher\n");
> # Fehler melden
> sl_reply_error();
> }
> return;
> } else {
> # Anfrage fï¿1/2r ein PSTN-Out-Gateway
> if (uri=~"sip:mg_out_.*") {
> # "mg_out_" entfernen
> strip(7);
> # PSTN-Out Mediagateway wï¿1/2hlen (Round-Robin)
> ds_select_domain("2", "4");
> # Send via the external Interface:
> force_send_socket(DISPATCHER_EXTERNAL_IP:5060);
> # Anfrage fï¿1/2r einen Mediaserver
> } else if (uri=~"sip:media_.*") {
> # "media_" entfernen
> strip(6);
> # Mediaserver wï¿1/2hlen (Round-Robin)
> ds_select_domain("3", "4");
> # Send via the internal Interface:
> force_send_socket(DISPATCHER_INTERNAL_IP:5060);
> } else {
> sl_send_reply("503", "Service not available");
> drop();
> return;
> }
>
> # On Failure: Choose next Proxy
> t_on_failure("1");
>
> # Relay to the Proxy
> if (!t_relay()) {
> sl_reply_error();
> }
> return;
> }
> }
>
> ################################################################################################################## 
>
> # Routing zu den SIP-Proxys
> ############################################################################################################### 
>
>
> # Send via the internal Interface:
> force_send_socket(DISPATCHER_INTERNAL_IP:5060);
>
> # Proxy wï¿1/2hlen (Round-Robin, SIP-Proxies)
> ds_select_domain("1", "4");
>
> # On Failure: Choose next Proxy
> t_on_failure("1");
>
> # Relay to the Proxy
> if (!t_relay()) {
> sl_reply_error();
> }
>
> return;
> }
>
> failure_route[1] {
> # Choose another gateway
> if (t_check_status("408") && t_local_replied("all")) {
> if (ds_next_domain()) {
> # On Failure: Choose next Proxy
> t_on_failure("1");
> # Relay to Proxy
> t_relay();
> } else {
> t_reply("503", "Service not available");
> return;
> }
> }
> }
>
>
>
> _______________________________________________
> Users mailing list
> Users at openser.org
> http://openser.org/cgi-bin/mailman/listinfo/users
>
>





More information about the Users mailing list