[packages] ddns-scripts: add an option to specify the used interface - default to...
[openwrt/svn-archive/archive.git] / net / ddns-scripts / files / usr / lib / ddns / dynamic_dns_functions.sh
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
12 include /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
17 load_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
52 get_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 fi
60
61 if [ "$ip_source" = "network" ]
62 then
63 if [ -z "$ip_network" ]
64 then
65 ip_network="wan"
66 fi
67 scan_interfaces
68 config_load /var/state/network
69 config_get ip_interface $ip_network ifname
70 fi
71
72 current_ip='';
73 if [ "$ip_source" = "network" ] || [ "$ip_source" = "interface" ]
74 then
75 current_ip=$(ifconfig $ip_interface | grep -o 'inet addr:[0-9.]*' | grep -o "$ip_regex")
76 elif [ "$ip_source" = "script" ]
77 then
78 # get ip from script
79 current_ip=$($ip_script)
80 else
81 # get ip from web
82 # we check each url in order in ip_url variable, and if no ips are found we use dyndns ip checker
83 # ip is set to FIRST expression in page that matches the ip_regex regular expression
84 for addr in $ip_url
85 do
86 if [ -z "$current_ip" ]
87 then
88 current_ip=$(echo $( wget -O - $addr 2>/dev/null) | grep -o "$ip_regex")
89 fi
90 done
91
92 #here we hard-code the dyndns checkip url in case no url was specified
93 if [ -z "$current_ip" ]
94 then
95 current_ip=$(echo $( wget -O - http://checkip.dyndns.org 2>/dev/null) | grep -o "$ip_regex")
96 fi
97 fi
98
99 echo "$current_ip"
100 }
101
102
103 verbose_echo()
104 {
105 if [ "$verbose_mode" = 1 ]
106 then
107 echo $1
108 fi
109 }
110
111 start_daemon_for_all_ddns_sections()
112 {
113 local event_interface="$1"
114
115 SECTIONS=""
116 config_cb()
117 {
118 SECTIONS="$SECTIONS $2"
119 }
120 config_load "ddns"
121
122 for section in $SECTIONS
123 do
124 local iface
125 config_get iface "$section" interface "wan"
126 [ "$iface" = "$event_interface" ] || continue
127 /usr/lib/ddns/dynamic_dns_updater.sh $section 0 > /dev/null 2>&1 &
128 done
129 }
130
131 monotonic_time()
132 {
133 local uptime
134 read uptime < /proc/uptime
135 echo "${uptime%%.*}"
136 }