aboutsummaryrefslogtreecommitdiff
path: root/net/etherwake
diff options
context:
space:
mode:
authorPeter Wagner <tripolar@gmx.at>2014-06-28 22:54:10 +0200
committerPeter Wagner <tripolar@gmx.at>2014-06-28 22:54:10 +0200
commitbf2764512198b668a4f587576e5768af7f3ab3a6 (patch)
tree4e1b6f212a791a04482d8474a432c7a7ed4a35c4 /net/etherwake
parentf5e6eced6e1088b54dc3dce838d64583af54b73e (diff)
etherwake: import from packages
Diffstat (limited to 'net/etherwake')
-rw-r--r--net/etherwake/Makefile54
-rw-r--r--net/etherwake/files/etherwake.config28
-rw-r--r--net/etherwake/files/etherwake.init132
-rw-r--r--net/etherwake/patches/100-no_ether_hostton.patch37
4 files changed, 251 insertions, 0 deletions
diff --git a/net/etherwake/Makefile b/net/etherwake/Makefile
new file mode 100644
index 000000000..3a7e249c3
--- /dev/null
+++ b/net/etherwake/Makefile
@@ -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))
diff --git a/net/etherwake/files/etherwake.config b/net/etherwake/files/etherwake.config
new file mode 100644
index 000000000..3d8e5158c
--- /dev/null
+++ b/net/etherwake/files/etherwake.config
@@ -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
diff --git a/net/etherwake/files/etherwake.init b/net/etherwake/files/etherwake.init
new file mode 100644
index 000000000..0504cf1c0
--- /dev/null
+++ b/net/etherwake/files/etherwake.init
@@ -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
+}
diff --git a/net/etherwake/patches/100-no_ether_hostton.patch b/net/etherwake/patches/100-no_ether_hostton.patch
new file mode 100644
index 000000000..e33c06b11
--- /dev/null
+++ b/net/etherwake/patches/100-no_ether_hostton.patch
@@ -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;