-----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

Reply via email to