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