-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 After several discussions and some more documentation reading I finished my etherwake uci support. The patch is splitted in two files, one for the new package files (config, init.d) and the makefile. The patches are meant to be applied to a clean version of the trunk.
Please ignore any previous patch for (combined) uci support, that I sent to this mail three weeks ago (2009-07-26). Description: Adds uci support to etherwake. A setup section allows to define default parameters when using etherwake via the init script. The init script, when enabled, wakes up targets on boot. For this the option 'wakeonboot' must be "on" or "1" for the target. All defined targets can be waked up manually and separately, by calling the init script with start plus the name of the target(s). Signed-off-by: Matthias Buecher <m...@maddes.net> -----BEGIN PGP SIGNATURE----- Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkqEB+AACgkQUXXT+9wZdbUyAwCg+KHD/ETQ6mxXY07mPVER8LE6 lS4AoKHeZiw2ynl4GiTchDxXo4za1Ve5 =RVcO -----END PGP SIGNATURE-----
Index: net/etherwake/files/etherwake.init =================================================================== --- net/etherwake/files/etherwake.init (revision 0) +++ net/etherwake/files/etherwake.init (revision 0) @@ -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 +} Index: net/etherwake/files/etherwake.config =================================================================== --- net/etherwake/files/etherwake.config (revision 0) +++ net/etherwake/files/etherwake.config (revision 0) @@ -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 etherwa...@target[-1].name=example +# uci set etherwa...@target[-1].mac=11:22:33:44:55:66 +# uci set etherwa...@target[-1].password=aabbccddeeff +# uci set etherwa...@target[-1].wakeonboot=off
Index: net/etherwake/Makefile =================================================================== --- net/etherwake/Makefile (revision 17244) +++ net/etherwake/Makefile (working copy) @@ -1,14 +1,15 @@ # -# Copyright (C) 2007 OpenWrt.org +# Copyright (C) 2007-2009 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. +# include $(TOPDIR)/rules.mk PKG_NAME:=etherwake PKG_VERSION:=1.09 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/e/etherwake @@ -21,7 +22,7 @@ define Package/etherwake SECTION:=net CATEGORY:=Network - TITLE:=A little tool to send magic Wake-on-LAN packets + TITLE:=WoL client for magic packets via ethernet frames URL:=http://ftp.debian.org/debian/pool/main/e/etherwake endef @@ -40,6 +41,10 @@ define Package/etherwake/install $(INSTALL_DIR) $(1)/usr/bin $(INSTALL_BIN) $(PKG_BUILD_DIR)/etherwake $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DATA) files/$(PKG_NAME).config $(1)/etc/config/$(PKG_NAME) + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME) endef $(eval $(call BuildPackage,etherwake))
-----BEGIN PGP SIGNATURE----- Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEABECAAYFAkqEB+AACgkQUXXT+9wZdbWH4QCfWi7T6vSBRaZkeWLE/hvWLDFa M1cAn3wLhcT3kvXidrODua0WlZaHnT2d =0lRu -----END PGP SIGNATURE-----
-----BEGIN PGP SIGNATURE----- Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEABECAAYFAkqEB+AACgkQUXXT+9wZdbXxCgCgwI7A1uuyLDKpSpc++1DhVpBG BSwAnR3PVVAgnDBC2rHoLtz3jYOwNFY+ =pooS -----END PGP SIGNATURE-----
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel