etherwake: import from packages
authorPeter Wagner <tripolar@gmx.at>
Sat, 28 Jun 2014 20:54:10 +0000 (22:54 +0200)
committerPeter Wagner <tripolar@gmx.at>
Sat, 28 Jun 2014 20:54:10 +0000 (22:54 +0200)
net/etherwake/Makefile [new file with mode: 0644]
net/etherwake/files/etherwake.config [new file with mode: 0644]
net/etherwake/files/etherwake.init [new file with mode: 0644]
net/etherwake/patches/100-no_ether_hostton.patch [new file with mode: 0644]

diff --git a/net/etherwake/Makefile b/net/etherwake/Makefile
new file mode 100644 (file)
index 0000000..3a7e249
--- /dev/null
@@ -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 (file)
index 0000000..3d8e515
--- /dev/null
@@ -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 (file)
index 0000000..0504cf1
--- /dev/null
@@ -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 (file)
index 0000000..e33c06b
--- /dev/null
@@ -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;