diff --git a/alfred/Config.in b/alfred/Config.in new file mode 100644 index 0000000..fd664ca --- /dev/null +++ b/alfred/Config.in @@ -0,0 +1,7 @@ + +config PACKAGE_ALFRED_VIS + bool "enable vis server for alfred" + depends on PACKAGE_alfred + default y + + diff --git a/alfred/Makefile b/alfred/Makefile new file mode 100644 index 0000000..db9c71f --- /dev/null +++ b/alfred/Makefile @@ -0,0 +1,79 @@ +# +# Copyright (C) 2013 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +# +# The latest alfred git hash in PKG_REV can be obtained from http://git.open-mesh.org/alfred.git +# +PKG_NAME:=alfred +PKG_VERSION:=2013.3.0 +PKG_RELEASE:=0 +PKG_MD5SUM:=018ef6262cdd11e900af31d71a864b13 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=http://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION) + +include $(INCLUDE_DIR)/package.mk + +init-y := alfred + +define Package/alfred + URL:=http://www.open-mesh.org/ + SECTION:=net + CATEGORY:=Network + TITLE:=A.L.F.R.E.D. - Almighty Lightweight Fact Remote Exchange Daemon + DEPENDS:= +libc +IPV6:kmod-ipv6 +librt +endef + +define Package/alfred/description +alfred is a user space daemon for distributing arbitrary local information over +the mesh/network in a decentralized fashion. This data can be anything which +appears to be useful - originally designed to replace the batman-adv +visualization (vis), you may distribute hostnames, phone books, administration +information, DNS information, the local weather forecast ... + +alfred runs as daemon in the background of the system. A user may insert +information by using the alfred binary on the command line, or use special +programs to communicate with alfred (done via unix sockets). alfred then takes +care of distributing the local information to other alfred servers on other +nodes. This is done via IPv6 link-local multicast, and does not require any +configuration. A user can request data from alfred, and will receive the +information available from all alfred servers in the network. +endef + +define Package/alfred/conffiles +/etc/config/alfred +endef + +define Package/alfred/config + source "$(SOURCE)/Config.in" +endef + +MAKE_ALFRED_FLAGS=\ + CONFIG_ALFRED_VIS=$(if $(CONFIG_PACKAGE_ALFRED_VIS),y,n) + +TARGET_CFLAGS += -ffunction-sections -fdata-sections -flto +TARGET_LDFLAGS += -Wl,--gc-sections -fuse-linker-plugin + +define Build/Compile + CFLAGS="$(TARGET_CPPFLAGS) $(TARGET_CFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + $(MAKE) -C $(PKG_BUILD_DIR) $(MAKE_FLAGS) $(MAKE_ALFRED_FLAGS) all +endef + +define Package/alfred/install + $(INSTALL_DIR) $(1)/usr/sbin + cp -fpR $(PKG_BUILD_DIR)/alfred $(1)/usr/sbin/ + [ "x$(CONFIG_PACKAGE_ALFRED_VIS)" == "xy" ] && cp -fpR $(PKG_BUILD_DIR)/vis/vis $(1)/usr/sbin/ ; true + $(INSTALL_DIR) $(1)/etc/init.d + $(INSTALL_BIN) ./files/alfred.init $(1)/etc/init.d/alfred + $(INSTALL_DIR) $(1)/etc/config + $(INSTALL_DATA) ./files/alfred.config $(1)/etc/config/alfred +endef + +$(eval $(call BuildPackage,alfred)) diff --git a/alfred/files/alfred.config b/alfred/files/alfred.config new file mode 100644 index 0000000..b8fa9b2 --- /dev/null +++ b/alfred/files/alfred.config @@ -0,0 +1,7 @@ +config 'alfred' 'alfred' + option interface 'br-lan' + option mode 'master' + option batmanif 'bat0' + option start_vis '1' +# REMOVE THIS LINE TO ENABLE ALFRED + option disabled '1' diff --git a/alfred/files/alfred.init b/alfred/files/alfred.init new file mode 100755 index 0000000..56818d8 --- /dev/null +++ b/alfred/files/alfred.init @@ -0,0 +1,81 @@ +#!/bin/sh /etc/rc.common + +# +# Copyright (C) 2013 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +START=99 +STOP=99 +alfred_args="" +vis_args="" +pid_file_alfred="/var/run/alfred.pid" +pid_file_vis="/var/run/vis.pid" +enable=0 +vis_enable=0 +SERVICE_DAEMONIZE=1 +SERVICE_WRITE_PID=1 + +alfred_start() +{ + local args="" + local section="$1" + local disabled interface mode batmanif + + # check if section is disabled + config_get_bool disabled "$section" disabled 0 + [ $disabled = 0 ] || return 1 + + args="" + + config_get interface "$section" interface + append args "-i $interface" + + config_get mode "$section" mode + [ "$mode" = "master" ] && append args "-m" + + config_get batmanif "$section" batmanif + append args "-b $batmanif" + + append alfred_args "$args" + enable=1 + + config_get_bool start_vis "$section" start_vis 0 + if [ "$start_vis" = 1 ] && [ -x /usr/sbin/vis ]; then + vis_enable=1 + append vis_args "-i $batmanif -s" + fi + + return 0 +} + +start() +{ + config_load "alfred" + config_foreach alfred_start alfred + + if [ "$enable" = "0" ]; then + exit 0 + fi + echo "${initscript}: starting alfred" + SERVICE_PID_FILE="$pid_file_alfred" + service_start /usr/sbin/alfred ${alfred_args} + + if [ "$vis_enable" = "0" ]; then + exit 0 + fi + echo "${initscript}: starting vis" + SERVICE_PID_FILE="$pid_file_vis" + service_start /usr/sbin/vis ${vis_args} +} + +stop() +{ + SERVICE_PID_FILE="$pid_file_alfred" + service_stop /usr/sbin/alfred + SERVICE_PID_FILE="$pid_file_vis" + [ -x /usr/sbin/vis ] && service_stop /usr/sbin/vis + +}