[package] add uci support to etherwake, patch from Matthias Buecher (#6025)

git-svn-id: svn://svn.openwrt.org/openwrt/packages@20321 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
florian
2010-03-20 12:16:09 +00:00
parent 3a1b370296
commit f0f67928f4
3 changed files with 168 additions and 3 deletions

View File

@ -0,0 +1,28 @@
config 'etherwake' 'setup'
# possible program pathes
option 'pathes' '/usr/bin/etherwake /usr/bin/ether-wake'
# use sudo, defaults to off
option 'sudo' 'off'
# interface, defaults to 'eth0'
# -i <ifname>
option 'interface' ''
# send wake-up packet to the broadcast address, defaults to off
# -b
option 'broadcast' 'off'
config 'target'
# name for the target
option 'name' 'example'
# mac address to wake up
option 'mac' '11:22:33:44:55:66'
# password in hex without any delimiters
option 'password' 'AABBCCDDEEFF'
# wake up on system start, defaults to off
option 'wakeonboot' 'off'
# To add a new target use:
# uci add etherwake target
# uci set etherwake.@target[-1].name=example
# uci set etherwake.@target[-1].mac=11:22:33:44:55:66
# uci set etherwake.@target[-1].password=AABBCCDDEEFF
# uci set etherwake.@target[-1].wakeonboot=off

View File

@ -0,0 +1,132 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2009 OpenWrt.org
NAME='etherwake'
START=60
PROGRAM=''
start()
{
local searchlist=''
local section=''
local value=''
config_load "${NAME}"
# check for available program
config_get searchlist 'setup' 'pathes'
PROGRAM=$(search_program "${searchlist}")
[ -z "${PROGRAM}" ] && {
echo "${initscript}: No ${NAME} program installed. Check: opkg list | grep ${NAME}"
exit 1
}
# sudo
config_get_bool value 'setup' 'sudo' '0'
[ "${value}" -ne 0 ] && PROGRAM="sudo ${PROGRAM}"
# interface
config_get value 'setup' 'interface'
[ -n "${value}" ] && append PROGRAM "-i ${value}"
# broadcast
config_get_bool value 'setup' 'broadcast' '0'
[ "${value}" -ne 0 ] && append PROGRAM '-b'
# wake up targets
config_foreach etherwake_start target $*
}
etherwake_start()
{
local section="$1"
shift
local names="$*"
local value=''
local target=''
if [ -z "${names}" ]
then
# check if boot target
config_get_bool value "${section}" 'wakeonboot' '0'
[ "${value}" -eq 0 ] && return 0
# wake up target
do_etherwake "${section}"
return $?
else
# name
config_get value "${section}" 'name'
[ -z "${value}" ] && return 0
for target in ${names}
do
[ "${value}" != "${target}" ] && continue
# wake up target
do_etherwake "${section}"
return $?
done
fi
}
# execute etherwake command for target
do_etherwake()
{
local section="$1"
local value=''
local password=''
local args=''
# password
config_get value "${section}" 'password'
[ -n "${value}" ] && {
password=$(etherwake_password "${value}")
append args "-p ${password}"
}
# mac address
config_get value "${section}" 'mac'
[ -z "${value}" ] && { echo "${initscript}: Target ${section} has no MAC address"; return 1; }
append args "${value}"
# name
config_get value "${section}" 'name'
[ -z "${value}" ] && value="{section}"
# execute command
echo "${initscript}: Waking up ${value} via ${PROGRAM}${args:+ ${args}}"
${PROGRAM} ${args}
return $?
}
# find first available program from searchlist
search_program()
{
local searchlist="$1"
local test=''
local program=''
for test in ${searchlist} ; do
[ -x "${test}" ] && {
program="${test}"
break;
}
done
[ -n "${program}" ] && echo "${program}"
return
}
# prepare hex password
etherwake_password()
{
local delimiter=':'
local password=`echo "$1" | sed "s/../&${delimiter}/g"`
echo "${password%${delimiter}}"
return
}