[OpenSIPS-Users] mid_registrar work arround

volga629 at networklab.ca volga629 at networklab.ca
Fri Aug 24 12:52:26 EDT 2018


Hello Ben,
Thank you, that works. I though as final soultion some think like this, 
not sure if possibe do in more optimized way.

route[SET_SOURCE_IP] {
        $var(i) = 0;
        while($var(i) < $(var(ip_lst){csv.count})) {
                if($Ri==$(var(ip_lst){csv.value,$var(i)})) {
                    #xlog("L_INFO", "Testing SHV ~> 
$(var(ip_lst){csv.value,$var(i)})");
                    $var(src_ip) = $(var(ip_lst){csv.value,$var(i)});
                    $var(i) = $var(i) + 1;
        }
        return;
}

route[RELAY] {
        route(RTP_MANAGE);
        if(isflagset(FLAG_FROM_PEER)) {
                $var(ip_lst) = $shv(vip_lan_lst);
                route(SET_SOURCE_IP);
                $var(src_socket) = "udp" + ":" + $var(src_ip) + ":" + 
"5060";
                force_send_socket($var(src_socket));
        } else {
                $var(ip_lst) = $shv(vip_wan_lst);
                route(SET_SOURCE_IP);
                $var(src_socket) = "udp" + ":" + $var(src_ip) + ":" + 
"5060";
                force_send_socket($var(src_socket));
        }
        t_relay();
}

volga629

On Fri, Aug 24, 2018 at 11:28 AM, Ben Newlin <Ben.Newlin at genesys.com> 
wrote:
> Volga,
> 
> You are trying to use the csv transformation but your data is not 
> comma-separated. You are using semi-colons. I think you are trying to 
> remove the semi-colons with the regex and replace them with commas? 
> I'm not sure what the value of that is, since you could just use 
> commas to begin with. But even if you had to do it that way, you 
> would need the regex to do the substitution *before* trying to access 
> it as a csv. But as I said, easier is to just use commas to begin 
> with.
> 
> #### Cfgutils
> loadmodule "cfgutils.so"
> modparam("cfgutils", "shvset",
> "vip_lan_lst=s:192.168.10.10,192.168.10.11,192.168.10.12")
> modparam("cfgutils", "shvset",
> "vip_wan_lst=s:209.234.43.2,209.234.43.3,209.234.43.4")
> 
> $var(i) = 0;
> while($var(i) < $(shv(vip_lan_lst){csv.count})) {
>   xlog("L_INFO", "Testing SHV ~>
>   $(shv(vip_lan_lst){csv.value,$var(i)})");
>   $var(i) = $var(i) + 1;
> }
> 
> Ben Newlin
> 
> On 8/24/18, 9:53 AM, "Users on behalf of volga629 at networklab.ca" 
> <users-bounces at lists.opensips.org on behalf of 
> volga629 at networklab.ca> wrote:
> 
>     Hello Ben,
>     I tried this.
> 
>     #### Cfgutils
>     loadmodule "cfgutils.so"
>     modparam("cfgutils", "shvset",
>     "vip_lan_lst=s:192.168.10.10;192.168.10.11;192.168.10.12")
>     modparam("cfgutils", "shvset",
>     "vip_wan_lst=s:209.234.43.2;209.234.43.3;209.234.43.4")
> 
> 
>             $avp(arr) = $shv(vip_lan_lst);
>             $var(i) = 0;
>             while($var(i) < $(avp(arr){csv.count})) {
>                     xlog("L_INFO", "Testing SHV ~>
>     $(avp(arr){csv.value,$var(i)}{re.subst,/;/,/})");
>                     $var(i) = $var(i) + 1;
>             }
> 
>     but it not working output should print each ip in xlog.
> 
> 
> 
>     volga629
> 
>     On Fri, Aug 24, 2018 at 9:46 AM, Ben Newlin 
> <Ben.Newlin at genesys.com>
>     wrote:
>     > Volga,
>     >
>     > I had recommended using individual variables, but if you want 
> to use
>     > a list that will work. I would recommend using transformations 
> [1] to
>     > manipulate the list. Depending on what you choose as your 
> separator
>     > you can use the csv transformations (","), or the string select
>     > transformation (any other separator). Technically the parameter 
> list
>     > transformation may work but I wouldn't recommend it as it is
>     > implemented for a SIP parameter list which does have some 
> reserved
>     > characters! This got me very recently. (
>     >
>     > For shared variables you define them in the modules section of 
> your
>     > config file [2], but they can be changed via MI commands, using
>     > whatever MI method you would like. I use the opensipsctl script 
> with
>     > the UDP datagram module [3].
>     >
>     > [1] http://www.opensips.org/Documentation/Script-Tran-2-4
>     > [2]
>     > 
> http://www.opensips.org/html/docs/modules/2.4.x/cfgutils.html#idp5923408
>     > [3] 
> http://www.opensips.org/html/docs/modules/2.4.x/mi_datagram.html
>     >
>     > Ben Newlin
>     >
>     > On 8/21/18, 10:20 PM, "Users on behalf of 
> volga629 at networklab.ca"
>     > <users-bounces at lists.opensips.org on behalf of
>     > volga629 at networklab.ca> wrote:
>     >
>     >     Hello  Ben,
>     >     All what I am trying is introduce $shv(lan_lst) for lan 
> vips and
>     >     $shv(wan_lst) for wan vips, originaly you idea. My issue is 
> how
>     > get
>     >     define the list and how to get through all ips in list as 
> example
>     > for
>     >     filter
>     >
>     >     if($Ri==$shv(lan_lst) && $avp(DLG_dir)=="topbx") {
>     >
>     >     volga629
>     >
>     >
>     >     On Tue, Aug 21, 2018 at 12:46 PM, Ben Newlin
>     > <Ben.Newlin at genesys.com>
>     >     wrote:
>     >     > Volga,
>     >     >
>     >     > I'm still not sure I fully understand, but it sounds like 
> all
>     > you
>     >     > really need is a mapping LAN<->WAN for each set of IPs?
>     >     >
>     >     > So in the scenario you outlined, when node 1 receives a 
> packet
>     > on the
>     >     > LAN interface that was previously on node 2 you want it 
> to send
>     > out
>     >     > the WAN for node 2. But if it receives on LAN from node 
> 1, it
>     > should
>     >     > send out WAN for node 1. Is this correct?
>     >     >
>     >     > Ben Newlin
>     >     >
>     >     > On 8/21/18, 11:39 AM, "volga629 at networklab.ca"
>     >     > <volga629 at networklab.ca> wrote:
>     >     >
>     >     >     Example right now we have on each node one vip for 
> LAN and
>     > one
>     >     > vip for
>     >     >     WAN.
>     >     >     When failover happened node 1 will hold LAN and WAN 
> vips of
>     > node
>     >     > 2. If
>     >     >     on node 2 was active registrations they will be 
> relocated
>     > to node
>     >     > 1 and
>     >     >     source ip will be vip's node 2.
>     >     >     The question how to define all the vips internal and
>     > external
>     >     > variables
>     >     >     like VIP-INT list internal and VIP-EXT list so will be
>     > possible
>     >     >     dynamically use it in script.
>     >     >
>     >     >
>     >     >     volga629
>     >     >
>     >     >
>     >     >
>     >     >     On Tue, Aug 21, 2018 at 12:19 PM, 
> volga629 at networklab.ca
>     > wrote:
>     >     >     > Hello Ben,
>     >     >     > The script bellow is to find the way define vips in
>     > variable so
>     >     >  if
>     >     >     > failover happends on keepalived script can process
>     > traffic and
>     >     > set
>     >     >     > proper vips (source ip)
>     >     >     >
>     >     >     > volga629.
>     >     >     >
>     >     >     > On Tue, Aug 14, 2018 at 4:38 PM, Ben Newlin
>     >     > <Ben.Newlin at genesys.com>
>     >     >     > wrote:
>     >     >     >> Volga,
>     >     >     >>
>     >     >     >> I must be misunderstanding. If you are able to 
> determine
>     > the
>     >     > correct
>     >     >     >> receiving interface in OpenSIPS and you are using 
> the
>     > Path
>     >     > header
>     >     >     >> to communicate that to the next hop destination, 
> I'm
>     > not sure
>     >     > I'm
>     >     >     >> clear on what the issue is you are still trying to
>     > solve?
>     >     >     >>
>     >     >     >> Ben Newlin
>     >     >     >>
>     >     >     >> On 8/14/18, 2:32 PM, "Users on behalf of
>     >     > volga629 at networklab.ca"
>     >     >     >> <users-bounces at lists.opensips.org on behalf of
>     >     >     >> volga629 at networklab.ca> wrote:
>     >     >     >>
>     >     >     >>     Hello Ben,
>     >     >     >>     Yes, I create logic like this
>     >     >     >>
>     >     >     >>             if(!has_totag() && 
> is_method("INVITE")) {
>     >     >     >>                     create_dialog();
>     >     >     >>
>     >     >     >>                     if($Ri== vip1 ip addr) {
>     >     >     >>                             
> set_dlg_sharing_tag("vip1");
>     >     >     >>                             $avp(vip) = "vip1 ip 
> addr";
>     >     >     >>                     } else if($Ri== vip2 ip addr) {
>     >     >     >>                             
> set_dlg_sharing_tag("vip2");
>     >     >     >>                             $avp(vip) = "vip2 ip 
> addr";
>     >     >     >>                     } else if($Ri == vip3 ip addr) 
> {
>     >     >     >>                             
> set_dlg_sharing_tag("vip3");
>     >     >     >>                             $avp(vip) = "vip3 ip 
> addr";
>     >     >     >>                     }
>     >     >     >>             }
>     >     >     >>
>     >     >     >>     not sure if this correct approach. In theory
>     > $avp(vip) can
>     >     > be
>     >     >     >> used for
>     >     >     >>     rtpengine or other operation require correct 
> ip in
>     > body,
>     >     > but
>     >     >     >> issue that
>     >     >     >>     call flow, because INVITE come from external
>     > interface
>     >     > first
>     >     >     >> then it
>     >     >     >>     forwarded to LAN via dipatcher.
>     >     >     >>
>     >     >     >>
>     >     >     >>     volg629
>     >     >     >>
>     >     >     >>
>     >     >     >>     On Tue, Aug 14, 2018 at 2:51 PM, Ben Newlin
>     >     >     >> <Ben.Newlin at genesys.com>
>     >     >     >>     wrote:
>     >     >     >>     > Volga,
>     >     >     >>     >
>     >     >     >>     > Sorry, I didn't fully understand your 
> scenario.
>     > Even
>     >     > though
>     >     >     >> you said
>     >     >     >>     > it was active/active, I was assuming an
>     > active/standby
>     >     >     >> scenario where
>     >     >     >>     > only 1 IP would be active on a box at a 
> time. I
>     > don't
>     >     > think
>     >     >     >> this
>     >     >     >>     > approach would work for the scenario you are
>     > describing.
>     >     >     >>     >
>     >     >     >>     > Is there some reason you can't have each box
>     > listen on
>     >     > all 3
>     >     >     >> IPs all
>     >     >     >>     > the time? Then from within the script you 
> can use
>     > $Ri
>     >     > [1] to
>     >     >     >>     > determine which interface received the 
> message.
>     >     >     >>     >
>     >     >     >>     > [1] -
>     >     >     >>
>     > http://www.opensips.org/Documentation/Script-CoreVar-2-3#toc77
>     >     >     >>     >
>     >     >     >>     > Ben Newlin
>     >     >     >>     >
>     >     >     >>     > On 8/14/18, 1:39 PM, "Users on behalf of
>     >     >     >> volga629 at networklab.ca"
>     >     >     >>     > <users-bounces at lists.opensips.org on behalf 
> of
>     >     >     >>     > volga629 at networklab.ca> wrote:
>     >     >     >>     >
>     >     >     >>     >     Hello Ben,
>     >     >     >>     >     Do you mean for this
>     >     >     >>     >
>     >     >     >>     >     modparam("cfgutils", "varset", 
> "init=i:1")
>     >     >     >>     >     modparam("cfgutils", "varset",
>     >     >     >>     > "gw=s:sip:11.11.11.11;transport=tcp")
>     >     >     >>     >
>     >     >     >>     >     or this
>     >     >     >>     >
>     >     >     >>     >     modparam("cfgutils", "shvset", 
> "debug=i:1")
>     >     >     >>     >     modparam("cfgutils", "shvset",
>     >     > "pstngw=s:sip:10.10.10.10")
>     >     >     >>     >
>     >     >     >>     >     in my case will be something like
>     >     >     >>     >
>     >     >     >>     >
>     >     >     >>     >     modparam("cfgutils", "shvset",
>     >     > "vip1=s:192.168.10.100")
>     >     >     >>     >     modparam("cfgutils", "shvset",
>     >     > "vip2=s:192.168.10.101")
>     >     >     >>     >     modparam("cfgutils", "shvset",
>     >     > "vip3=s:192.168.10.102")
>     >     >     >>     >
>     >     >     >>     >     If vip relocated to antother node 
> meaning on
>     > live
>     >     > node 1
>     >     >     >> will be
>     >     >     >>     > two
>     >     >     >>     >     vip's ( example node 3 fail then it 
> relocate ip
>     >     > address to
>     >     >     >> node 1)
>     >     >     >>     >     How I can determine which  vip ip address
>     > should be
>     >     > in use.
>     >     >     >>     >
>     >     >     >>     >     volg629
>     >     >     >>     >
>     >     >     >>     >
>     >     >     >>     >     On Thu, Aug 2, 2018 at 9:44 PM, Ben 
> Newlin
>     >     >     >>     > <Ben.Newlin at genesys.com>
>     >     >     >>     >     wrote:
>     >     >     >>     >     > M4 will process the file before 
> OpenSIPS
>     > runs and
>     >     > will
>     >     >     >> not be
>     >     >     >>     >     > changeable at runtime. It sounds like 
> that
>     > will
>     >     > not work
>     >     >     >> for
>     >     >     >>     > you if I
>     >     >     >>     >     > am understanding properly.
>     >     >     >>     >     >
>     >     >     >>     >     > My first thought would be to use the 
> shared
>     >     > variables
>     >     >     >> from
>     >     >     >>     > CFGUTILS
>     >     >     >>     >     > [1]. They can be accessed from inside 
> the
>     > script,
>     >     > but
>     >     >     >> can also
>     >     >     >>     > be set
>     >     >     >>     >     > via MI. So when your monitor detects a
>     > failure and
>     >     >     >> switches the
>     >     >     >>     > IPs,
>     >     >     >>     >     > it could also use MI to change the 
> value of
>     > the
>     >     > variable
>     >     >     >> in
>     >     >     >>     > OpenSIPS
>     >     >     >>     >     > for future use.
>     >     >     >>     >     >
>     >     >     >>     >     > As a side note to OpenSIPS devs, it 
> appears
>     > this
>     >     > module
>     >     >     >> was
>     >     >     >>     > missed
>     >     >     >>     >     > when the Module Index page [2] was
>     > redesigned as I
>     >     > can't
>     >     >     >> find it
>     >     >     >>     >     > there for 2.x, but the direct links to 
> the
>     > 2.x
>     >     > versions
>     >     >     >> still
>     >     >     >>     > work.
>     >     >     >>     >     >
>     >     >     >>     >     > [1]
>     >     >     >>     >
>     >     > 
> http://www.opensips.org/html/docs/modules/2.4.x/cfgutils.html
>     >     >     >>     >     > [2]
>     >     > http://www.opensips.org/Documentation/Modules-2-4
>     >     >     >>     >     >
>     >     >     >>     >     > Ben Newlin
>     >     >     >>     >     >
>     >     >     >>     >     > On 8/2/18, 5:56 PM, "Users on behalf of
>     >     >     >> volga629 at networklab.ca"
>     >     >     >>     >     > <users-bounces at lists.opensips.org on 
> behalf
>     > of
>     >     >     >>     >     > volga629 at networklab.ca> wrote:
>     >     >     >>     >     >
>     >     >     >>     >     >     Hello Liviu,
>     >     >     >>     >     >     Yes, that correct.  Right now each 
> node
>     > in
>     >     > cluster
>     >     >     >> have own
>     >     >     >>     > vip
>     >     >     >>     >     > from
>     >     >     >>     >     >     keepalived on LAN side.
>     >     >     >>     >     >     The issue how to specify correct 
> vip in
>     > case of
>     >     >     >> failover,
>     >     >     >>     > so if
>     >     >     >>     >     > node 2
>     >     >     >>     >     >     fail and node 2 vip was relocated 
> to
>     > node 1.
>     >     > All
>     >     >     >> sessions
>     >     >     >>     > should
>     >     >     >>     >     > be
>     >     >     >>     >     >     process on node 1 and
>     >     >     >>     >     >     append_hf("Path:
>     >     >     >>     > <sip:$fU at MAIN_VIP:5060;transport=udp>\r\n");
>     >     >     >>     >     > should
>     >     >     >>     >     >     have correct ip's.  Same with 
> rtpengine
>     > offer
>     >     >     >>     >     >     rtpengine_offer("replace-origin
>     >     >     >> replace-session-connection
>     >     >     >>     >     >     in-iface=external 
> out-iface=internal
>     >     >     >>     >     > media-address=$avp(media_addr)
>     >     >     >>     >     >     RTP/AVP ICE=remove") where need 
> introduce
>     >     >     >> media-address to
>     >     >     >>     > specify
>     >     >     >>     >     >     correct vip ip.
>     >     >     >>     >     >     Can you exapand on m4 ? I never 
> used the
>     >     > templating.
>     >     >     >>     >     >     Might db avp  to predefine  cluster
>     > nodes vip
>     >     > ip,
>     >     >     >> not sure.
>     >     >     >>     >     >
>     >     >     >>     >     >
>     >     >     >>     >     >     volga629
>     >     >     >>     >     >
>     >     >     >>     >     >
>     >     >     >>     >     >
>     >     >     >>     >     >     On Thu, Aug 2, 2018 at 10:50 AM, 
> Liviu
>     > Chircu
>     >     >     >>     > <liviu at opensips.org>
>     >     >     >>     >     >     wrote:
>     >     >     >>     >     >     > Hi Volga,
>     >     >     >>     >     >     >
>     >     >     >>     >     >     > If I understood your problem
>     > correctly, one
>     >     > idea
>     >     >     >> would be
>     >     >     >>     > to
>     >     >     >>     >     > use m4
>     >     >     >>     >     >     > over opensips.cfg and define a
>     > different
>     >     > MAIN_VIP
>     >     >     >>     > variable for
>     >     >     >>     >     > each
>     >     >     >>     >     >     > of your three servers:
>     >     >     >>     >     >     >
>     >     >     >>     >     >     > append_hf("Path:
>     >     >     >>     > <sip:$fU at MAIN_VIP:5060;transport=udp>\r\n");
>     >     >     >>     >     >     >  Liviu Chircu
>     >     >     >>     >     >     > OpenSIPS Developer
>     >     >     >>     >     >     > http://www.opensips-solutions.com
>     >     >     >>     >     >     > On 09.07.2018 07:34,
>     > volga629 at networklab.ca
>     >     > wrote:
>     >     >     >>     >     >     >> Hello Everyone,
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >> I have work around on this issue
>     >     >     >>     >     >     >> # Work arround for github issue 
> #1109
>     >     >     >>     >     >     >> append_hf("Path: <sip:$fU at listen
>     >     >     >>     > ip:5060;transport=udp>\r\n"
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >> Right now we use 3 node cluster 
> with
>     > 3 vips
>     >     > in
>     >     >     >>     > active/active
>     >     >     >>     >     > mode
>     >     >     >>     >     >     >> I need some idea how to 
> determine path
>     >     > header
>     >     >     >> listen ip
>     >     >     >>     >     > address from
>     >     >     >>     >     >     >> 3 vips.
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >> volga629
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >>
>     >     >     >>     >     >     >>
>     >     > _______________________________________________
>     >     >     >>     >     >     >> Users mailing list
>     >     >     >>     >     >     >> Users at lists.opensips.org
>     >     >     >>     >     >     >>
>     >     >     >> 
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >     >>     >     >     >
>     >     >     >>     >     >
>     >     >     >>     >     >
>     >     >     >>     >     >
>     > _______________________________________________
>     >     >     >>     >     >     Users mailing list
>     >     >     >>     >     >     Users at lists.opensips.org
>     >     >     >>     >     >
>     >     >     >> 
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >     >>     >     >
>     >     >     >>     >     >
>     >     >     >>     >     >
>     > _______________________________________________
>     >     >     >>     >     > Users mailing list
>     >     >     >>     >     > Users at lists.opensips.org
>     >     >     >>     >     >
>     >     > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >     >>     >
>     >     >     >>     >
>     >     >     >>     >     
> _______________________________________________
>     >     >     >>     >     Users mailing list
>     >     >     >>     >     Users at lists.opensips.org
>     >     >     >>     >
>     >     > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >     >>     >
>     >     >     >>     >
>     >     >     >>     > 
> _______________________________________________
>     >     >     >>     > Users mailing list
>     >     >     >>     > Users at lists.opensips.org
>     >     >     >>     >
>     > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >     >>
>     >     >     >>
>     >     >     >>     _______________________________________________
>     >     >     >>     Users mailing list
>     >     >     >>     Users at lists.opensips.org
>     >     >     >>
>     > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >     >>
>     >     >     >>
>     >     >     >> _______________________________________________
>     >     >     >> Users mailing list
>     >     >     >> Users at lists.opensips.org
>     >     >     >> 
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >     >
>     >     >     >
>     >     >     > _______________________________________________
>     >     >     > Users mailing list
>     >     >     > Users at lists.opensips.org
>     >     >     > 
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >
>     >     >
>     >     >     _______________________________________________
>     >     >     Users mailing list
>     >     >     Users at lists.opensips.org
>     >     >     
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >     >
>     >     >
>     >     > _______________________________________________
>     >     > Users mailing list
>     >     > Users at lists.opensips.org
>     >     > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >
>     >
>     >     _______________________________________________
>     >     Users mailing list
>     >     Users at lists.opensips.org
>     >     http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>     >
>     >
>     > _______________________________________________
>     > Users mailing list
>     > Users at lists.opensips.org
>     > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> 
> 
>     _______________________________________________
>     Users mailing list
>     Users at lists.opensips.org
>     http://lists.opensips.org/cgi-bin/mailman/listinfo/users
> 
> 
> _______________________________________________
> Users mailing list
> Users at lists.opensips.org
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users




More information about the Users mailing list