From f2342460e98a1abff5d94b39b1d6f6b28ae88316 Mon Sep 17 00:00:00 2001
From: nico <nico@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Wed, 16 Nov 2011 09:44:31 +0000
Subject: [PATCH] packages/mini_snmpd: use new service functions, various
 changes:  * changes 'disks' & 'interfaces' options to list  * default
 'enabled' to false  * mark '/etc/config/mini_snmpd' as a config file

git-svn-id: svn://svn.openwrt.org/openwrt/packages@29182 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 net/mini_snmpd/Makefile                |  6 +++-
 net/mini_snmpd/files/mini_snmpd.config | 18 +++++++---
 net/mini_snmpd/files/mini_snmpd.init   | 46 ++++++++++++++++++++------
 3 files changed, 53 insertions(+), 17 deletions(-)

diff --git a/net/mini_snmpd/Makefile b/net/mini_snmpd/Makefile
index 846ac579b..a6182a3fa 100644
--- a/net/mini_snmpd/Makefile
+++ b/net/mini_snmpd/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=mini_snmpd
 PKG_VERSION:=1.2b
-PKG_RELEASE:=4
+PKG_RELEASE:=5
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=http://members.aon.at/linuxfreak/linux/
@@ -54,4 +54,8 @@ define Package/mini-snmpd/install
 	$(INSTALL_BIN) ./files/mini_snmpd.init $(1)/etc/init.d/mini_snmpd
 endef
 
+define Package/mini-snmpd/conffiles
+/etc/config/mini_snmpd
+endef
+
 $(eval $(call BuildPackage,mini-snmpd))
diff --git a/net/mini_snmpd/files/mini_snmpd.config b/net/mini_snmpd/files/mini_snmpd.config
index 43ab93141..e41bdc957 100644
--- a/net/mini_snmpd/files/mini_snmpd.config
+++ b/net/mini_snmpd/files/mini_snmpd.config
@@ -1,8 +1,16 @@
 config mini_snmpd
-	option enabled 1
+	option enabled 0
 	option ipv6 0
-	option community public
-	option location ''
+	option community 'public'
 	option contact ''
-	option disks '/tmp,/jffs'
-	option interfaces 'lo,br-lan,eth0.1,eth1' # Max 4
+	option location ''
+
+	# enable basic disk usage statistics on specified mountpoint
+	list disks '/jffs'
+	list disks '/tmp'
+
+	# enable basic network statistics on specified interface
+	# 4 interfaces maximum, as named in /etc/config/network
+	list interfaces 'loopback'
+	list interfaces 'lan'
+	list interfaces 'wan'
diff --git a/net/mini_snmpd/files/mini_snmpd.init b/net/mini_snmpd/files/mini_snmpd.init
index cc051c0bd..fe57fbbbf 100644
--- a/net/mini_snmpd/files/mini_snmpd.init
+++ b/net/mini_snmpd/files/mini_snmpd.init
@@ -1,10 +1,23 @@
 #!/bin/sh /etc/rc.common
-# Copyright (C) 2009 OpenWrt.org
+# Copyright (C) 2009-2011 OpenWrt.org
 
-NAME=mini_snmpd
-PROG=/usr/bin/$NAME
 START=50
 
+SERVICE_DAEMONIZE=1
+SERVICE_WRITE_PID=1
+
+append_disk() {
+	local disk="$1"
+	append disks "$disk" ','
+}
+
+append_interface() {
+	local name="$1"
+	local interface
+	config_get interface "$name" 'ifname'
+	append interfaces "$interface" ','
+}
+
 append_string() {
 	local section="$1"
 	local option="$2"
@@ -14,28 +27,39 @@ append_string() {
 	[ -n "$_val" ] && append args "$3 $_val"
 }
 
-mini_snmpd_config() {
+start_instance() {
 	local cfg="$1"
-	args=""
+	local args=""
+	local disks=""
+	local interfaces=""
+	local ipv6
 
 	append_string "$cfg" community "-c"
 	append_string "$cfg" location "-L"
 	append_string "$cfg" contact "-C"
-	append_string "$cfg" disks "-d"
-	append_string "$cfg" interfaces "-i"
 
 	config_get_bool ipv6 "$cfg" "ipv6" '0'
 	[ "$ipv6" -gt 0 ] && append args "-6"
 
 	config_get_bool enabled "$cfg" "enabled" '1'
-	[ "$enabled" -gt 0 ] && $PROG $args &
+	[ "$enabled" -gt 0 ] || return 1
+
+	config_list_foreach "$section" 'disks' append_disk
+	args="${args}${disks:+ -d $disks}"
+
+	config_list_foreach "$section" 'interfaces' append_interface
+	args="${args}${interfaces:+ -i $interfaces}"
+
+	service_start /usr/bin/mini_snmpd $args
 }
 
 start() {
-	config_load mini_snmpd
-	config_foreach mini_snmpd_config mini_snmpd
+	include /lib/network
+	scan_interfaces
+	config_load 'mini_snmpd'
+	config_foreach start_instance 'mini_snmpd'
 }
 
 stop() {
-	killall mini_snmpd
+	service_stop /usr/bin/mini_snmpd
 }