rtpproxy: add iface translation to init 385/head
authorSebastian Kemper <sebastian_ml@gmx.net>
Mon, 5 Nov 2018 19:59:29 +0000 (20:59 +0100)
committerSebastian Kemper <sebastian_ml@gmx.net>
Mon, 5 Nov 2018 19:59:31 +0000 (20:59 +0100)
rtpproxy expects IPs as parameters. Lots of OpenWrt devices use
connections where the IP is dynamically assigned. This commit adds shell
functions to convert an iface like 'wan' to an IP address before adding
the parameter to the rtpproxy command line.

Explanation is provided in /etc/config/rtpproxy. Some whitespace issues
were also fixed.

Signed-off-by: Sebastian Kemper <sebastian_ml@gmx.net>
net/rtpproxy/Makefile
net/rtpproxy/files/rtpproxy.config
net/rtpproxy/files/rtpproxy.init

index fdebd1d30d8d10171ab9ddde57d311fdf180fd55..49b337944741ec708b5e7826a010f47a03b2e16f 100644 (file)
@@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=rtpproxy
 PKG_VERSION:=2.1.0-20170914
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_SOURCE_PROTO:=git
 PKG_SOURCE_URL:=https://github.com/sippy/rtpproxy.git
index 760a3c356d055bcbe522f567db249410a755a79f..afcf1b2f1067548e376caa71355c1f11a95d262a 100644 (file)
@@ -1,18 +1,22 @@
 config rtpproxy global
        option enabled 0                                                # 0 - disabled, 1 - enabled
 
-config instance 'site1'                
-        option socket 'udp:127.0.0.1:7723'                             # socket
+config instance 'site1'
+       option socket 'udp:127.0.0.1:7723'                              # socket
        option ipaddr '127.0.0.1'                                       # IPv4 address
        option ip6addr '2001:0db8:0000:0000:0000:0000:1428:57ab'        # IPv6 address
        option user 'nobody'                                            # userid to run rtpproxy instance from
        option log_level 'INFO'                                         # DBUG, INFO, WARN, ERR or CRIT
        option opts ''                                                  # additional options for rtpproxy instance
-                                      
-config instance 'site2'               
-        option socket 'udp:127.0.0.1:7724'
-       option ipaddr '192.168.1.1'
-       option log_level 'DBUG'
+
+config instance 'site2'
+       option socket 'udp:127.0.0.1:7724'
+       option ipaddr 'lan/wan'                                         # Bridge mode. 'lan' and 'wan' will be
+       option user 'nobody'                                            # translated to IPv4 addresses by init
+       option log_level 'DBUG'                                         # script. Handy if using dynamic IPs. Can
+       option opts ''                                                  # also be used with single interfaces.
+                                                                       # Translation for both 'ipaddr' and
+                                                                       # 'ip6addr' supported.
 
 config rtpproxy 'hotplug'
        #option interface 'wan'                                         # uncomment to enable hotplug
index ac93721b507c40b6f7b571428151b094cb418337..f71ec6af52593e5b5fb479a2eb7fd34c55d7a244 100644 (file)
@@ -28,6 +28,48 @@ run_instance() {
        $LOGGER instance $2 has started
 }
 
+check_ip() {
+       local tmp_addr
+
+       if [ "$1" = "ipaddr" ]; then
+               network_get_ipaddr tmp_addr "$2" || tmp_addr="$2"
+       else
+               network_get_ipaddr6 tmp_addr "$2" || tmp_addr="$2"
+       fi
+
+       echo "$tmp_addr"
+}
+
+check_ipaddr() {
+       local value="$1"
+       local type="$2"
+       local param="$3"
+       local one two
+
+       [ -z "$value" ] && {
+               $LOG_ERR empty $type entry
+               exit 1
+       }
+
+       # Bail if more than 1 slash.
+       [ $(echo "$value" | awk -F "/" '{print NF-1}') -gt 1 ] && {
+               $LOG_ERR init script does not understand $type entry \""$value"\"
+               exit 1
+       }
+
+       IFS="/" read one two << EOF
+$value
+EOF
+
+       one="$(check_ip "$type" "$one")"
+       if [ -n "$two" ]; then
+               two="$(check_ip "$type" "$two")"
+               rtpproxy_options=$rtpproxy_options" $param $one/$two"
+       else
+               rtpproxy_options=$rtpproxy_options" $param $one"
+       fi
+}
+
 check_param() {
        local param="$1"
        local value="$2"
@@ -62,13 +104,14 @@ handle_instance() {
        config_get log_level    "$site" log_level
 
        check_param "-s" "$socket"
-       check_param "-l" "$ipaddr"
-       check_param "-6" "$ip6addr"
        check_param "-u" "$user"        "nobody"
        check_param "-d" "$log_level"   "DBUG"
 
        check_special_param "$opts"
 
+       [ -n "$ipaddr" ]        && check_ipaddr "$ipaddr"       ipaddr  '-l'
+       [ -n "$ip6addr" ]       && check_ipaddr "$ip6addr"      ip6addr '-6'
+
        run_instance "$rtpproxy_options" "$site"
 }
 
@@ -80,6 +123,7 @@ start_service() {
        config_get_bool enabled global enabled 0
 
        if [ "$enabled" -eq 1 ]; then
+               . /lib/functions/network.sh
                config_foreach handle_instance instance
        else
                $LOG_ERR service not enabled