@ -0,0 +1,54 @@ | |||
# | |||
# Copyright (C) 2007-2011 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:=3 | |||
PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz | |||
PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/e/etherwake | |||
PKG_MD5SUM:=628e8b2a28d47f262e4c26c989402a59 | |||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).orig | |||
include $(INCLUDE_DIR)/package.mk | |||
define Package/etherwake | |||
SECTION:=net | |||
CATEGORY:=Network | |||
TITLE:=WoL client for magic packets via ethernet frames | |||
URL:=http://ftp.debian.org/debian/pool/main/e/etherwake | |||
endef | |||
define Package/etherwake/description | |||
You can wake up WOL compliant Computers which have been powered down to | |||
sleep mode or start WOL compliant Computers with a BIOS feature. | |||
WOL is an abbreviation for Wake-on-LAN. It is a standard that allows you | |||
to turn on a computer from another location over a network connection. | |||
ether-wake also supports WOL passwords. | |||
endef | |||
define Build/Compile | |||
$(TARGET_CC) $(TARGET_CFLAGS) -D__UCLIBC__ $(PKG_BUILD_DIR)/ether-wake.c -o $(PKG_BUILD_DIR)/etherwake | |||
endef | |||
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 | |||
define Package/etherwake/conffiles | |||
/etc/config/etherwake | |||
endef | |||
$(eval $(call BuildPackage,etherwake)) |
@ -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 |
@ -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 | |||
} |
@ -0,0 +1,37 @@ | |||
--- etherwake-1.09.orig/ether-wake.c 2005-07-10 20:44:25.000000000 +0200 | |||
+++ etherwake-1.09.orig.no_ether_hostton/ether-wake.c 2007-04-29 19:03:41.000000000 +0200 | |||
@@ -15,7 +15,11 @@ | |||
" an optional password appended.\n" | |||
"\n" | |||
" The single required parameter is the Ethernet MAC (station) address\n" | |||
+#if !defined(__UCLIBC__) | |||
" of the machine to wake or a host ID with known NSS 'ethers' entry.\n" | |||
+#else | |||
+" of the machine to wake.\n" | |||
+#endif | |||
" The MAC address may be found with the 'arp' program while the target\n" | |||
" machine is awake.\n" | |||
"\n" | |||
@@ -289,16 +293,22 @@ | |||
if (debug) | |||
fprintf(stderr, "The target station address is %s.\n", | |||
ether_ntoa(eaddr)); | |||
+#if !defined(__UCLIBC__) | |||
} else if (ether_hostton(hostid, eaddr) == 0) { | |||
if (debug) | |||
fprintf(stderr, "Station address for hostname %s is %s.\n", | |||
hostid, ether_ntoa(eaddr)); | |||
+#endif | |||
} else { | |||
(void)fprintf(stderr, | |||
"ether-wake: The Magic Packet host address must be " | |||
"specified as\n" | |||
+#if !defined(__UCLIBC__) | |||
" - a station address, 00:11:22:33:44:55, or\n" | |||
" - a hostname with a known 'ethers' entry.\n"); | |||
+#else | |||
+ " - a station address, 00:11:22:33:44:55\n"); | |||
+#endif | |||
return -1; | |||
} | |||
return 0; |