[sr-dev] git:master: New Option: "x" for automatic bridging between IPv4 and IPv6.

Ovidiu Sas osas at voipembedded.com
Thu Nov 1 22:10:31 CET 2012


If I understand the commit correctly, this is just a shortcut for "ie"
and "ei" in offer/answer functions and it should be documented as a
shortcut, not as a bridging between IPv4 and IPv6.  The flag can be
used for bridging public IPv4 and private IPv4.
As an example, IPv4 to IPv6 bridging can be used along with a second
example of bridging public to private.
I think it will make the documentation more clear.

If x is used in rtpproxy_manage(), will it work properly?


Regards,
Ovidiu Sas

On Mon, Sep 17, 2012 at 11:29 AM,  <admin at sip-router.org> wrote:
> Module: sip-router
> Branch: master
> Commit: 2750e03d4977d4a8f59ca0d2d0f59e1caec96b2d
> URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=2750e03d4977d4a8f59ca0d2d0f59e1caec96b2d
>
> Author: Carsten Bock <carsten at ng-voice.com>
> Committer: Carsten Bock <carsten at ng-voice.com>
> Date:   Mon Sep 17 17:25:38 2012 +0200
>
> New Option: "x" for automatic bridging between IPv4 and IPv6.
> Based on the following assumption: "i" is the IPv4 interface
> and "e" is the IPv6 interface on the RTPProxy (tested with both
> RTPProxy and Sipwise's ngcp-mediaproxy-ng).
>
> Mechanism is as follows:
> - IP in SDP is IPv4: Do bridging "ie"
> - IP in SDP is IPv6: Do bridging "ei"
>
> Not a big deal, but makes the configuration much more easier.
>
> ---
>
>  modules/rtpproxy/doc/rtpproxy.xml       |    8 ++++++++
>  modules/rtpproxy/doc/rtpproxy_admin.xml |    7 +++++++
>  modules/rtpproxy/rtpproxy.c             |   22 +++++++++++++++++++++-
>  3 files changed, 36 insertions(+), 1 deletions(-)
>
> diff --git a/modules/rtpproxy/doc/rtpproxy.xml b/modules/rtpproxy/doc/rtpproxy.xml
> index d5a15ee..741a4d9 100644
> --- a/modules/rtpproxy/doc/rtpproxy.xml
> +++ b/modules/rtpproxy/doc/rtpproxy.xml
> @@ -57,6 +57,14 @@
>                         <email>osas at voipembedded.com</email>
>                 </address>
>                 </editor>
> +               <editor>
> +               <firstname>Carsten</firstname>
> +               <surname>Bock</surname>
> +               <affiliation><orgname>ng-voice GmbH</orgname></affiliation>
> +               <address>
> +                       <email>carsten at ng-voice.com</email>
> +               </address>
> +               </editor>
>         </authorgroup>
>         <copyright>
>                 <year>2003-2008</year>
> diff --git a/modules/rtpproxy/doc/rtpproxy_admin.xml b/modules/rtpproxy/doc/rtpproxy_admin.xml
> index a245d73..d6a9dc5 100644
> --- a/modules/rtpproxy/doc/rtpproxy_admin.xml
> +++ b/modules/rtpproxy/doc/rtpproxy_admin.xml
> @@ -344,6 +344,13 @@ rtpproxy_offer();
>                                 the 'w' flag for clients behind NAT! See also above notes!
>                                 </para></listitem>
>                                 <listitem><para>
> +                               <emphasis>x</emphasis> - this flag will do automatic bridging between IPv4 on the
> +                               "internal network" and IPv6 on the "external network". The distinction is done by
> +                               the given IP in the SDP, e.g. a IPv4 Address will always call "ie" to the RTPProxy
> +                               (IPv4(i) to IPv6(e)) and an IPv6Address will always call "ei" to the RTPProxy (IPv6(e)
> +                               to IPv4(i)).
> +                               </para></listitem>
> +                               <listitem><para>
>                                 <emphasis>f</emphasis> - instructs rtpproxy to ignore marks
>                                 inserted by another rtpproxy in transit to indicate that the
>                                 session is already goes through another proxy. Allows creating
> diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c
> index 9a0fd14..59e7092 100644
> --- a/modules/rtpproxy/rtpproxy.c
> +++ b/modules/rtpproxy/rtpproxy.c
> @@ -1993,6 +1993,7 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
>                 {NULL, 0},      /* Timeout-Socket */
>         };
>         int iovec_param_count;
> +       int autobridge_ipv4v6;
>
>         char *c1p, *c2p, *bodylimit, *o1p;
>         char itoabuf_buf[20];
> @@ -2012,7 +2013,7 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
>                 LM_ERR("out of pkg memory\n");
>                 FORCE_RTP_PROXY_RET (-1);
>         }
> -       flookup = force = real = orgip = commip = via = 0;
> +       flookup = force = real = orgip = commip = via = autobridge_ipv4v6 = 0;
>         for (cp = str1; cp != NULL && *cp != '\0'; cp++) {
>                 switch (*cp) {
>                 case '1':
> @@ -2076,6 +2077,11 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
>                         orgip = 1;
>                         break;
>
> +               case 'x':
> +               case 'X':
> +                       autobridge_ipv4v6 = 1;
> +                       break;
> +
>                 case 'w':
>                 case 'W':
>                         if (append_opts(&opts, 'S') == -1) {
> @@ -2253,6 +2259,12 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
>                         }
>                         /* XXX must compare address families in all addresses */
>                         if (pf == AF_INET6) {
> +                               if (autobridge_ipv4v6 != 0) {
> +                                       if ((append_opts(&opts, 'E') == -1) && (append_opts(&opts, 'I') == -1))  {
> +                                               LM_ERR("out of pkg memory\n");
> +                                               FORCE_RTP_PROXY_RET (-1);
> +                                       }
> +                               }
>                                 if (append_opts(&opts, '6') == -1) {
>                                         LM_ERR("out of pkg memory\n");
>                                         FORCE_RTP_PROXY_RET (-1);
> @@ -2260,7 +2272,15 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
>                                 /* We need to update the pointers and the length here, it has changed. */
>                                 v[1].iov_base = opts.s.s;
>                                 v[1].iov_len = opts.oidx;
> +                       } else {
> +                               if (autobridge_ipv4v6 != 0) {
> +                                       if ((append_opts(&opts, 'I') == -1) && (append_opts(&opts, 'E') == -1))  {
> +                                               LM_ERR("out of pkg memory\n");
> +                                               FORCE_RTP_PROXY_RET (-1);
> +                                       }
> +                               }
>                         }
> +
>                         STR2IOVEC(newip, v[9]);
>                         STR2IOVEC(oldport, v[11]);
>  #ifdef EXTRA_DEBUG
>



More information about the sr-dev mailing list