# /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%%.*}"
|
|
}
|