source: packages/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh @ 20812

Last change on this file since 20812 was 20812, checked in by florian, 6 years ago

[package] do not stall rcS start because of ddns-scripts init (#7109)

File size: 2.7 KB
Line 
1# /usr/lib/dynamic_dns/dynamic_dns_functions.sh
2#
3# Written by Eric Paul Bishop, Janary 2008
4# Distributed under the terms of the GNU General Public License (GPL) version 2.0
5#
6# This script is (loosely) based on the one posted by exobyte in the forums here:
7# http://forum.openwrt.org/viewtopic.php?id=14040
8
9
10
11. /etc/functions.sh
12include /lib/network
13
14
15#loads all options for a given package and section
16#also, sets all_option_variables to a list of the variable names
17load_all_config_options()
18{
19        pkg_name="$1"
20        section_id="$2"
21
22        ALL_OPTION_VARIABLES=""
23        # this callback loads all the variables
24        # in the section_id section when we do
25        # config_load. We need to redefine
26        # the option_cb for different sections
27        # so that the active one isn't still active
28        # after we're done with it.  For reference
29        # the $1 variable is the name of the option
30        # and $2 is the name of the section
31        config_cb()
32        {
33                if [ ."$2" = ."$section_id" ]; then
34                        option_cb()
35                        {
36                                ALL_OPTION_VARIABLES="$ALL_OPTION_VARIABLES $1"
37                        }
38                else
39                        option_cb() { return 0; }
40                fi
41        }
42
43
44        config_load "$pkg_name"
45        for var in $ALL_OPTION_VARIABLES
46        do
47                config_get "$var" "$section_id" "$var"
48        done
49}
50
51
52get_current_ip()
53{
54
55        #if ip source is not defined, assume we want to get ip from wan
56        if [ "$ip_source" != "interface" ] && [ "$ip_source" != "web" ] && [ "$ip_source" != "script" ]
57        then
58                ip_source="network"
59                ip_network="wan"
60        fi
61
62        if [ "$ip_source" = "network" ]
63        then
64                if [ -z "$ip_network" ]
65                then
66                        ip_network="wan"
67                fi
68                scan_interfaces
69                config_load /var/state/network
70                config_get ip_interface $ip_network ifname
71        fi
72
73        current_ip='';
74        if [ "$ip_source" = "network" ] || [ "$ip_source" = "interface" ]
75        then
76                current_ip=$(ifconfig $ip_interface | grep -o 'inet addr:[0-9.]*' | grep -o "$ip_regex")
77        elif [ "$ip_source" = "script" ]
78        then
79                # get ip from script
80                current_ip=$($ip_script)
81        else
82                # get ip from web
83                # we check each url in order in ip_url variable, and if no ips are found we use dyndns ip checker
84                # ip is set to FIRST expression in page that matches the ip_regex regular expression
85                for addr in $ip_url
86                do
87                        if [ -z "$current_ip" ]
88                        then
89                                current_ip=$(echo $( wget -O - $addr 2>/dev/null) | grep -o "$ip_regex")
90                        fi
91                done
92
93                #here we hard-code the dyndns checkip url in case no url was specified
94                if [ -z "$current_ip" ]
95                then
96                        current_ip=$(echo $( wget -O - http://checkip.dyndns.org 2>/dev/null) | grep -o "$ip_regex")
97                fi
98        fi
99
100        echo "$current_ip"
101}
102
103
104verbose_echo()
105{
106        if [ "$verbose_mode" = 1 ]
107        then
108                echo $1
109        fi
110}
111
112start_daemon_for_all_ddns_sections()
113{
114        SECTIONS=""
115        config_cb() 
116        {
117                SECTIONS="$SECTIONS $2"
118        }
119        config_load "ddns"
120
121        for section in $SECTIONS
122        do
123                /usr/lib/ddns/dynamic_dns_updater.sh $section 0 > /dev/null 2>&1 &
124        done
125}
Note: See TracBrowser for help on using the repository browser.