|
|
- # /usr/lib/dynamic_dns/dynamic_dns_functions.sh
- #
- # Written by Eric Paul Bishop, Janary 2008
- # Distributed under the terms of the GNU General Public License (GPL) version 2.0
- #
- # This script is (loosely) based on the one posted by exobyte in the forums here:
- # http://forum.openwrt.org/viewtopic.php?id=14040
-
-
-
- . /lib/functions.sh
- . /lib/functions/network.sh
-
-
- #loads all options for a given package and section
- #also, sets all_option_variables to a list of the variable names
- load_all_config_options()
- {
- pkg_name="$1"
- section_id="$2"
-
- ALL_OPTION_VARIABLES=""
- # this callback loads all the variables
- # in the section_id section when we do
- # config_load. We need to redefine
- # the option_cb for different sections
- # so that the active one isn't still active
- # after we're done with it. For reference
- # the $1 variable is the name of the option
- # and $2 is the name of the section
- config_cb()
- {
- if [ ."$2" = ."$section_id" ]; then
- option_cb()
- {
- ALL_OPTION_VARIABLES="$ALL_OPTION_VARIABLES $1"
- }
- else
- option_cb() { return 0; }
- fi
- }
-
-
- config_load "$pkg_name"
- for var in $ALL_OPTION_VARIABLES
- do
- config_get "$var" "$section_id" "$var"
- done
- }
-
-
- get_current_ip()
- {
-
- #if ip source is not defined, assume we want to get ip from wan
- if [ "$ip_source" != "interface" ] && [ "$ip_source" != "web" ] && [ "$ip_source" != "script" ]
- then
- ip_source="network"
- fi
-
- if [ "$ip_source" = "network" ]
- then
- if [ -z "$ip_network" ]
- then
- ip_network="wan"
- fi
- fi
-
- current_ip='';
- if [ "$ip_source" = "network" ]
- then
- network_get_ipaddr current_ip "$ip_network" || return
- elif [ "$ip_source" = "interface" ]
- then
- current_ip=$(ifconfig $ip_interface | grep -o 'inet addr:[0-9.]*' | grep -o "$ip_regex")
- elif [ "$ip_source" = "script" ]
- then
- # get ip from script
- current_ip=$($ip_script)
- else
- # get ip from web
- # we check each url in order in ip_url variable, and if no ips are found we use dyndns ip checker
- # ip is set to FIRST expression in page that matches the ip_regex regular expression
- for addr in $ip_url
- do
- if [ -z "$current_ip" ]
- then
- current_ip=$(echo $( wget -O - $addr 2>/dev/null) | grep -o "$ip_regex")
- fi
- done
-
- #here we hard-code the dyndns checkip url in case no url was specified
- if [ -z "$current_ip" ]
- then
- current_ip=$(echo $( wget -O - http://checkip.dyndns.org 2>/dev/null) | grep -o "$ip_regex")
- fi
- fi
-
- echo "$current_ip"
- }
-
-
- verbose_echo()
- {
- if [ "$verbose_mode" = 1 ]
- then
- echo $1
- fi
- }
-
- syslog_echo()
- {
- if [ "$use_syslog" = 1 ]
- then
- echo $1|logger -t ddns-scripts-$service_id
- fi
- }
-
- start_daemon_for_all_ddns_sections()
- {
- local event_interface="$1"
-
- SECTIONS=""
- config_cb()
- {
- SECTIONS="$SECTIONS $2"
- }
- config_load "ddns"
-
- for section in $SECTIONS
- do
- local iface
- config_get iface "$section" interface "wan"
- [ -z "$event_interface" -o "$iface" = "$event_interface" ] || continue
- /usr/lib/ddns/dynamic_dns_updater.sh $section 0 > /dev/null 2>&1 &
- done
- }
-
- monotonic_time()
- {
- local uptime
- read uptime < /proc/uptime
- echo "${uptime%%.*}"
- }
|