--- /dev/null
+#
+# 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))
--- /dev/null
+#!/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
+
+}