|
|
- #!/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
- }
|