--- /dev/null
+#
+# Copyright (C) 2015 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:=u2pnpd
+PKG_VERSION:=0.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=https://github.com/mhei/u2pnpd/releases/download/v$(PKG_VERSION)
+PKG_MD5SUM:=a98089923d93803fa90d03a504c98b8e
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=COPYING
+
+PKG_MAINTAINER:=Michael Heimpold <mhei@heimpold.de>
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/u2pnpd
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=Announce device via UPnP on the network
+ URL:=https://github.com/mhei/u2pnpd
+ DEPENDS:=+libupnp
+endef
+
+define Package/u2pnpd/description
+ This tools announces a device via UPnP on the local network, thus it is possible
+ to find it within the network neightboorhood of a well-known OS and the user
+ can easily double-click on an icon to open the web frontend of this device without
+ knowing the IP address.
+endef
+
+define Package/u2pnpd/install
+ $(INSTALL_DIR) $(1)/usr/bin
+ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/u2pnpd $(1)/usr/bin/
+
+ $(INSTALL_DIR) $(1)/etc/init.d
+ $(INSTALL_BIN) ./files/u2pnpd.init $(1)/etc/init.d/u2pnpd
+
+ $(INSTALL_DIR) $(1)/etc/uci-defaults
+ $(INSTALL_DATA) ./files/u2pnpd.defaults $(1)/etc/uci-defaults/u2pnpd
+
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/u2pnpd.config $(1)/etc/config/u2pnpd
+endef
+
+define Package/u2pnpd/postinst
+#!/bin/sh
+[ -n "$${IPKG_INSTROOT}" ] || (. /etc/uci-defaults/u2pnpd) && rm -f /etc/uci-defaults/u2pnpd
+exit 0
+endef
+
+$(eval $(call BuildPackage,u2pnpd))
--- /dev/null
+config u2pnpd
+# option interface br-lan
+# option use_https no
+# option manufacturer 'OpenWrt'
+# option manufacturerURL 'http://www.openwrt.org/'
+# option modelDescription ''
+# option modelName 'Generic'
+# option modelNumber ''
+# option modelURL ''
+# option serialNumber ''
+# option uuid ''
--- /dev/null
+#!/bin/sh
+
+uuid=$(cat /proc/sys/kernel/random/uuid)
+
+uci -q batch <<-EOF >/dev/null
+ set u2pnpd.@u2pnpd[0].uuid=$uuid
+ commit u2pnpd
+EOF
+
+exit 0
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2015 OpenWrt.org
+
+START=50
+STOP=20
+
+SERVICE_DAEMONIZE=1
+SERVICE_PID_FILE=/var/run/u2pnpd.pid
+SERVICE_USE_PID=1
+SERVICE_WRITE_PID=1
+
+start_instance() {
+ local section="$1"
+ local enabled
+ local interface manufacturer manufacturerURL modelDescription
+ local modelName modelNumber modelURL serialNumber friendlyName
+ local uuid httpsURL
+ local i
+
+ config_get_bool enabled "$section" 'enabled' 1
+ [ "$enabled" -gt 0 ] || return 0
+
+ for i in interface httpsURL manufacturer manufacturerURL modelDescription \
+ modelName modelNumber modelURL serialNumber friendlyName uuid; do
+ config_get "$i" "$section" "$i"
+ done
+
+ [ -n "$interface" ] && SERVICE_PID_FILE="/var/run/u2pnpd.$interface.pid"
+
+ service_start /usr/bin/u2pnpd ${httpsURL:+-s} \
+ ${interface:+--interface="$interface"} \
+ ${manufacturer:+--manufacturer="$manufacturer"} \
+ ${manufacturerURL:+--manufacturerURL="$manufacturerURL"} \
+ ${modelDescription:+--modelDescription="$modelDescription"} \
+ ${modelName:+--modelName="$modelName"} \
+ ${modelNumber:+--modelNumber="$modelNumber"} \
+ ${modelURL:+--modelURL="$modelURL"} \
+ ${serialNumber:+--serialNumber="$serialNumber"} \
+ ${friendlyName:+--friendlyName="$friendlyName"} \
+ ${uuid:+--uuid="$uuid"}
+}
+
+stop_instance() {
+ local section="$1"
+ local interface
+
+ config_get interface "$section" 'interface'
+ [ -n "$interface" ] && SERVICE_PID_FILE="/var/run/u2pnpd.$interface.pid"
+
+ service_stop /usr/bin/u2pnpd
+ rm -f "$SERVICE_PID_FILE"
+}
+
+start() {
+ config_load 'u2pnpd'
+ config_foreach start_instance 'u2pnpd'
+}
+
+stop() {
+ config_load 'u2pnpd'
+ config_foreach stop_instance 'u2pnpd'
+}