Index: utils/collectd/files/collectd.init
===================================================================
--- utils/collectd/files/collectd.init	(revision 11162)
+++ utils/collectd/files/collectd.init	(working copy)
@@ -2,8 +2,8 @@
 # Copyright (C) 2006 OpenWrt.org
 
 START=80
-BINARY="/usr/sbin/collectd"
-PIDFILE="/var/run/collectd.pid"
+BINARY="/usr/sbin/collectdmon"
+PIDFILE="/var/run/collectdmon.pid"
 DATADIR="/var/lib/collectd"
 
 start() {
Index: utils/collectd/files/collectd.conf
===================================================================
--- utils/collectd/files/collectd.conf	(revision 11162)
+++ utils/collectd/files/collectd.conf	(working copy)
@@ -1,54 +1,757 @@
 #
-# collectd(1) config for OpenWrt.
+# Config file for collectd(1).
 # Please read collectd.conf(5) for a list of options.
 # http://collectd.org/
 #
 
-# Select one of the following modes:
-# In client mode the daemon collects the data locally and sends its results
-# to one or more network addresses. This is the default mode.
-Mode Client
-# In the log mode, data is collected locally and written in
-# text files that reside in DataDir. Be careful as it could fill
-# the memory of your device with Datadir pointing to /tmp.
-#Mode Log
+##############################################################################
+# Global                                                                     #
+#----------------------------------------------------------------------------#
+# Global settings for the daemon.                                            #
+##############################################################################
 
-# Set the IP-address(es) and UDP-port(s) to send packets to. 
-# The port option is optional.
-#Server ff18::efc0:4a42 25826
-#Server 239.192.74.66 25826
+#Hostname    "localhost"
+FQDNLookup   true
+#BaseDir     "/var/lib/collectd"
+#PIDFile     "/var/run/collectd.pid"
+#PluginDir   "/usr/lib/collectd"
+TypesDB     "/usr/lib/collectd/types.db"
+#Interval     10
+#ReadThreads  5
 
-DataDir   "/var/lib/collectd"
-PIDFile   "/var/run/collectd.pid"
-PluginDir "/usr/lib/collectd"
+##############################################################################
+# Logging                                                                    #
+#----------------------------------------------------------------------------#
+# Plugins which provide logging functions should be loaded first, so log     #
+# messages generated when loading or configuring other plugins can be        #
+# accessed.                                                                  #
+##############################################################################
 
+LoadPlugin syslog
+#LoadPlugin logfile
+
+#<Plugin logfile>
+#	LogLevel info
+#	File STDOUT
+#	Timestamp true
+#</Plugin>
+
+#<Plugin syslog>
+#	LogLevel info
+#</Plugin>
+
+##############################################################################
+# LoadPlugin section                                                         #
+#----------------------------------------------------------------------------#
+# Lines beginning with a single `#' belong to plugins which have been built  #
+# but are disabled by default.                                               #
+#                                                                            #
+# Lines begnning with `##' belong to plugins which have not been built due   #
+# to missing dependencies or because they have been deactivated explicitly.  #
+##############################################################################
+
+##LoadPlugin apache
+##LoadPlugin apcups
+##LoadPlugin apple_sensors
+##LoadPlugin ascent
+##LoadPlugin battery
+##LoadPlugin bind
+##LoadPlugin conntrack
 LoadPlugin cpu
-LoadPlugin disk
-LoadPlugin df
+##LoadPlugin cpufreq
+#LoadPlugin csv
+##LoadPlugin curl
+##LoadPlugin curl_json
+##LoadPlugin dbi
+#LoadPlugin df
+#LoadPlugin disk
+##LoadPlugin dns
+##LoadPlugin email
+##LoadPlugin entropy
+#LoadPlugin exec
+##LoadPlugin filecount
+##LoadPlugin fscache
+##LoadPlugin gmond
+##LoadPlugin hddtemp
+LoadPlugin interface
+##LoadPlugin iptables
+##LoadPlugin ipmi
+##LoadPlugin ipvs
+#LoadPlugin irq
+##LoadPlugin java
+##LoadPlugin libvirt
 LoadPlugin load
-LoadPlugin memory
-#LoadPlugin ping
+##LoadPlugin madwifi
+##LoadPlugin mbmon
+##LoadPlugin memcachec
+##LoadPlugin memcached
+##LoadPlugin memory
+##LoadPlugin multimeter
+##LoadPlugin mysql
+##LoadPlugin netlink
+LoadPlugin network
+##LoadPlugin nfs
+##LoadPlugin nginx
+##LoadPlugin notify_desktop
+##LoadPlugin notify_email
+#LoadPlugin ntpd
+##LoadPlugin nut
+##LoadPlugin olsrd
+##LoadPlugin onewire
+##LoadPlugin openvpn
+##LoadPlugin oracle
+##LoadPlugin perl
+##LoadPlugin ping
+##LoadPlugin postgresql
+##LoadPlugin powerdns
 #LoadPlugin processes
-#LoadPlugin serial
-LoadPlugin traffic
-LoadPlugin wireless
+##LoadPlugin protocols
+##LoadPlugin rrdcached
+##LoadPlugin rrdtool
+##LoadPlugin sensors
+##LoadPlugin serial
+#LoadPlugin snmp
+##LoadPlugin swap
+##LoadPlugin table
+#LoadPlugin tail
+##LoadPlugin tape
+#LoadPlugin tcpconns
+##LoadPlugin teamspeak2
+##LoadPlugin ted
+##LoadPlugin thermal
+##LoadPlugin tokyotyrant
+#LoadPlugin unixsock
+##LoadPlugin uptime
+#LoadPlugin users
+##LoadPlugin uuid
+#LoadPlugin vmem
+##LoadPlugin vserver
+#LoadPlugin wireless
+##LoadPlugin write_http
+##LoadPlugin xmms
+##LoadPlugin zfs_arc
 
+##############################################################################
+# Plugin configuration                                                       #
+#----------------------------------------------------------------------------#
+# In this section configuration stubs for each plugin are provided. A desc-  #
+# ription of those options is available in the collectd.conf(5) manual page. #
+##############################################################################
+
+#<Plugin apache>
+#	URL "http://localhost/status?auto"
+#	User "www-user"
+#	Password "secret"
+#	CACert "/etc/ssl/ca.crt"
+#</Plugin>
+
+#<Plugin apcups>
+#	Host "localhost"
+#	Port "3551"
+#</Plugin>
+
+#<Plugin ascent>
+#	URL "http://localhost/ascent/status/"
+#	User "www-user"
+#	Password "secret"
+#	CACert "/etc/ssl/ca.crt"
+#</Plugin>
+
+#<Plugin "bind">
+#  URL "http://localhost:8053/"
+#  OpCodes         true
+#  QTypes          true
+#
+#  ServerStats     true
+#  ZoneMaintStats  true
+#  ResolverStats   false
+#  MemoryStats     true
+#
+#  <View "_default">
+#    QTypes        true
+#    ResolverStats true
+#    CacheRRSets   true
+#
+#    Zone "127.in-addr.arpa/IN"
+#  </View>
+#</Plugin>
+
+#<Plugin csv>
+#	DataDir "/var/lib/collectd/csv"
+#	StoreRates false
+#</Plugin>
+
+#<Plugin curl>
+#  <Page "stock_quotes">
+#    URL "http://finance.google.com/finance?q=NYSE%3AAMD"
+#    User "foo"
+#    Password "bar"
+#    <Match>
+#      Regex "<span +class=\"pr\"[^>]*> *([0-9]*\\.[0-9]+) *</span>"
+#      DSType "GaugeAverage"
+#      Type "stock_value"
+#      Instance "AMD"
+#    </Match>
+#  </Page>
+#</Plugin>
+
+#<Plugin curl_json>
+## See: http://wiki.apache.org/couchdb/Runtime_Statistics
+#  <URL "http://localhost:5984/_stats">
+#    Instance "httpd"
+#    <Key "httpd/requests/count">
+#      Type "http_requests"
+#    </Key>
+#
+#    <Key "httpd_request_methods/*/count">
+#      Type "http_request_methods"
+#    </Key>
+#
+#    <Key "httpd_status_codes/*/count">
+#      Type "http_response_codes"
+#    </Key>
+#  </URL>
+## Database status metrics:
+#  <URL "http://localhost:5984/_all_dbs">
+#    Instance "dbs"
+#    <Key "*/doc_count">
+#      Type "gauge"
+#    </Key>
+#    <Key "*/doc_del_count">
+#      Type "counter"
+#    </Key>
+#    <Key "*/disk_size">
+#      Type "bytes"
+#    </Key>
+#  </URL>
+#</Plugin>
+
+#<Plugin dbi>
+#	<Query "num_of_customers">
+#		Statement "SELECT 'customers' AS c_key, COUNT(*) AS c_value FROM customers_tbl"
+#		<Result>
+#			Type "gauge"
+#			InstancesFrom "c_key"
+#			ValuesFrom "c_value"
+#		</Result>
+#	</Query>
+#	<Database "customers_db">
+#		Driver "mysql"
+#		DriverOption "host" "localhost"
+#		DriverOption "username" "collectd"
+#		DriverOption "password" "AeXohy0O"
+#		DriverOption "dbname" "custdb0"
+#		#SelectDB "custdb0"
+#		Query "num_of_customers"
+#		#Query "..."
+#	</Database>
+#</Plugin>
+
 #<Plugin df>
-#	FSType tmpfs
+#	Device "/dev/hda1"
+#	Device "192.168.0.2:/mnt/nfs"
+#	MountPoint "/home"
+#	FSType "ext3"
+#	IgnoreSelected false
+#	ReportByDevice false
+#</Plugin>
+
+#<Plugin disk>
+#	Disk "/^[hs]d[a-f][0-9]?$/"
+#	IgnoreSelected false
+#</Plugin>
+
+#<Plugin dns>
+#	Interface "eth0"
+#	IgnoreSource "192.168.0.1"
+#	SelectNumericQueryTypes true
+#</Plugin>
+
+#<Plugin email>
+#	SocketFile "/var/run/collectd-email"
+#	SocketGroup "collectd"
+#	SocketPerms "0770"
+#	MaxConns 5
+#</Plugin>
+
+#<Plugin exec>
+#	Exec "user:group" "/path/to/exec"
+#	NotificationExec "user:group" "/path/to/exec"
+#</Plugin>
+
+#<Plugin filecount>
+#	<Directory "/path/to/dir">
+#		Instance "foodir"
+#		Name "*.conf"
+#		MTime "-5m"
+#		Size "+10k"
+#		Recursive true
+#	</Directory>
+#</Plugin>
+
+#<Plugin "gmond">
+#  MCReceiveFrom "239.2.11.71" "8649"
+#  <Metric "swap_total">
+#    Type "swap"
+#    TypeInstance "total"
+#    DataSource "value"
+#  </Metric>
+#  <Metric "swap_free">
+#    Type "swap"
+#    TypeInstance "free"
+#    DataSource "value"
+#  </Metric>
+#</Plugin>
+
+#<Plugin hddtemp>
+#  Host "127.0.0.1"
+#  Port "7634"
+#
+#  #----------------------------------------------------------------#
+#  # `TranslateDevicename' enables backwards compatibility behavior #
+#  # and is enabled by default. Setting this option to `false' is   #
+#  # highly recommended.                                            #
+#  #----------------------------------------------------------------#
+#  TranslateDevicename false
+#</Plugin>
+
+#<Plugin interface>
+#	Interface "eth0"
+#	IgnoreSelected false
+#</Plugin>
+
+#<Plugin ipmi>
+#	Sensor "some_sensor"
+#	Sensor "another_one"
+#	IgnoreSelected false
+#	NotifySensorAdd false
+#	NotifySensorRemove true
+#	NotifySensorNotPresent false
+#</Plugin>
+
+#<Plugin iptables>
+#	Chain table chain
+#</Plugin>
+
+#<Plugin irq>
+#	Irq 7
+#	Irq 8
+#	Irq 9
 #	IgnoreSelected true
 #</Plugin>
 
+#<Plugin "java">
+#	JVMArg "-verbose:jni"
+#	JVMArg "-Djava.class.path=/usr/share/collectd/java"
+#
+#	LoadPlugin "org.collectd.java.Foobar"
+#	<Plugin "org.collectd.java.Foobar">
+#	  # To be parsed by the plugin
+#	</Plugin>
+#</Plugin>
+
+#<Plugin libvirt>
+#	Connection "xen:///"
+#	RefreshInterval 60
+#	Domain "name"
+#	BlockDevice "name:device"
+#	InterfaceDevice "name:device"
+#	IgnoreSelected false
+#	HostnameFormat name
+#</Plugin>
+
+#<Plugin madwifi>
+#	Interface "wlan0"
+#	IgnoreSelected false
+#	Source "SysFS"
+#	WatchSet "None"
+#	WatchAdd "node_octets"
+#	WatchAdd "node_rssi"
+#	WatchAdd "is_rx_acl"
+#	WatchAdd "is_scan_active"
+#</Plugin>
+
+#<Plugin mbmon>
+#	Host "127.0.0.1"
+#	Port "411"
+#</Plugin>
+
+#<Plugin memcachec>
+#	<Page "plugin_instance">
+#		Server "localhost"
+#		Key "page_key"
+#		<Match>
+#			Regex "(\\d+) bytes sent"
+#			DSType CounterAdd
+#			Type "ipt_octets"
+#			Instance "type_instance"
+#		</Match>
+#	</Page>
+#</Plugin>
+
+#<Plugin memcached>
+#	Host "127.0.0.1"
+#	Port "11211"
+#</Plugin>
+
+#<Plugin mysql>
+#	<Database db_name>
+#		Host "database.serv.er"
+#		User "db_user"
+#		Password "secret"
+#		Database "db_name"
+#		MasterStats true
+#	</Database>
+#
+#	<Database db_name2>
+#		Host "localhost"
+#		Socket "/var/run/mysql/mysqld.sock"
+#		SlaveStats true
+#		SlaveNotifications true
+#	</Database>
+#</Plugin>
+
+#<Plugin netlink>
+#	Interface "All"
+#	VerboseInterface "All"
+#	QDisc "eth0" "pfifo_fast-1:0"
+#	Class "ppp0" "htb-1:10"
+#	Filter "ppp0" "u32-1:0"
+#	IgnoreSelected false
+#</Plugin>
+
+<Plugin network>
+	Server "ff18::efc0:4a42" "25826"
+	Server "239.192.74.66" "25826"
+#	Listen "ff18::efc0:4a42" "25826"
+#	Listen "239.192.74.66" "25826"
+#	TimeToLive "128"
+#	Forward false
+#	CacheFlush 1800
+</Plugin>
+
+#<Plugin nginx>
+#	URL "http://localhost/status?auto"
+#	User "www-user"
+#	Password "secret"
+#	CACert "/etc/ssl/ca.crt"
+#</Plugin>
+
+#<Plugin notify_desktop>
+#	OkayTimeout 1000
+#	WarningTimeout 5000
+#	FailureTimeout 0
+#</Plugin>
+
+#<Plugin notify_email>
+#       SMTPServer "localhost"
+#	SMTPPort 25
+#	SMTPUser "my-username"
+#	SMTPPassword "my-password"
+#	From "collectd@main0server.com"
+#	# <WARNING/FAILURE/OK> on <hostname>. beware! do not use not more than two %s in this string!!!
+#	Subject "Aaaaaa!! %s on %s!!!!!"
+#	Recipient "email1@domain1.net"
+#	Recipient "email2@domain2.com"
+#</Plugin>
+
+#<Plugin ntpd>
+#	Host "localhost"
+#	Port 123
+#	ReverseLookups false
+#</Plugin>
+
+#<Plugin nut>
+#	UPS "upsname@hostname:port"
+#</Plugin>
+
+#<Plugin olsrd>
+#	Host "127.0.0.1"
+#	Port "2006"
+#	CollectLinks "Summary"
+#	CollectRoutes "Summary"
+#	CollectTopology "Summary"
+#</Plugin>
+
+#<Plugin onewire>
+#	Device "-s localhost:4304"
+#	Sensor "F10FCA000800"
+#	IgnoreSelected false
+#</Plugin>
+
+#<Plugin openvpn>
+#	StatusFile "/etc/openvpn/openvpn-status.log"
+#</Plugin>
+
+#<Plugin oracle>
+#  <Query "out_of_stock">
+#    Statement "SELECT category, COUNT(*) AS value FROM products WHERE in_stock = 0 GROUP BY category"
+#    <Result>
+#      Type "gauge"
+#      InstancesFrom "category"
+#      ValuesFrom "value"
+#    </Result>
+#  </Query>
+#  <Database "product_information">
+#    ConnectID "db01"
+#    Username "oracle"
+#    Password "secret"
+#    Query "out_of_stock"
+#  </Database>
+#</Plugin>
+
+#<Plugin perl>
+#	IncludeDir "/my/include/path"
+#	BaseName "Collectd::Plugin"
+#	EnableDebugger ""
+#	LoadPlugin foo
+#
+#	<Plugin foo>
+#		Foo "Bar"
+#		Qux "Baz"
+#	</Plugin>
+#</Plugin>
+
 #<Plugin ping>
-#	Host host.foo.bar
+#	Host "host.foo.bar"
+#	TTL 255
 #</Plugin>
 
+#<Plugin postgresql>
+#	<Query magic>
+#		Statement "SELECT magic FROM wizard WHERE host = $1;"
+#		Param hostname
+#		<Result>
+#			Type gauge
+#			InstancePrefix "magic"
+#			ValuesFrom magic
+#		</Result>
+#	</Query>
+#	<Query rt36_tickets>
+#		Statement "SELECT COUNT(type) AS count, type \
+#		                  FROM (SELECT CASE \
+#		                               WHEN resolved = 'epoch' THEN 'open' \
+#		                               ELSE 'resolved' END AS type \
+#		                               FROM tickets) type \
+#		                  GROUP BY type;"
+#		<Result>
+#			Type counter
+#			InstancePrefix "rt36_tickets"
+#			InstancesFrom "type"
+#			ValuesFrom "count"
+#		</Result>
+#	</Query>
+#	<Database foo>
+#		Host "hostname"
+#		Port "5432"
+#		User "username"
+#		Password "secret"
+#		SSLMode "prefer"
+#		KRBSrvName "kerberos_service_name"
+#		Query magic
+#	</Database>
+#	<Database bar>
+#		Service "service_name"
+#		Query backend # predefined
+#		Query rt36_tickets
+#	</Database>
+#</Plugin>
+
+#<Plugin powerdns>
+#  <Server "server_name">
+#    Collect "latency"
+#    Collect "udp-answers" "udp-queries"
+#    Socket "/var/run/pdns.controlsocket"
+#  </Server>
+#  <Recursor "recursor_name">
+#    Collect "questions"
+#    Collect "cache-hits" "cache-misses"
+#    Socket "/var/run/pdns_recursor.controlsocket"
+#  </Recursor>
+#  LocalSocket "/opt/collectd/var/run/collectd-powerdns"
+#</Plugin>
+
 #<Plugin processes>
-#	Process name
+#	Process "name"
 #</Plugin>
 
-#<Plugin traffic>
-#	Interface lo
-#	Interface imq0
-#	Interface wifi
-#	IgnoreSelected true
+#<Plugin protocols>
+#	Value "/^Tcp:/"
+#	IgnoreSelected false
 #</Plugin>
+
+#<Plugin rrdcached>
+#	DaemonAddress "unix:/tmp/rrdcached.sock"
+#	DataDir "/var/lib/collectd/rrd"
+#	CreateFiles true
+#	CollectStatistics true
+#</Plugin>
+
+#<Plugin rrdtool>
+#	DataDir "/var/lib/collectd/rrd"
+#	CacheTimeout 120
+#	CacheFlush   900
+#</Plugin>
+
+#<Plugin sensors>
+#	Sensor "it8712-isa-0290/temperature-temp1"
+#	Sensor "it8712-isa-0290/fanspeed-fan3"
+#	Sensor "it8712-isa-0290/voltage-in8"
+#	IgnoreSelected false
+#</Plugin>
+
+#<Plugin snmp>
+#   <Data "powerplus_voltge_input">
+#       Type "voltage"
+#       Table false
+#       Instance "input_line1"
+#       Values "SNMPv2-SMI::enterprises.6050.5.4.1.1.2.1"
+#   </Data>
+#   <Data "hr_users">
+#       Type "users"
+#       Table false
+#       Instance ""
+#       Values "HOST-RESOURCES-MIB::hrSystemNumUsers.0"
+#   </Data>
+#   <Data "std_traffic">
+#       Type "if_octets"
+#       Table true
+#       Instance "IF-MIB::ifDescr"
+#       Values "IF-MIB::ifInOctets" "IF-MIB::ifOutOctets"
+#   </Data>
+#
+#   <Host "some.switch.mydomain.org">
+#       Address "192.168.0.2"
+#       Version 1
+#       Community "community_string"
+#       Collect "std_traffic"
+#       Interval 120
+#   </Host>
+#   <Host "some.server.mydomain.org">
+#       Address "192.168.0.42"
+#       Version 2
+#       Community "another_string"
+#       Collect "std_traffic" "hr_users"
+#   </Host>
+#   <Host "some.ups.mydomain.org">
+#       Address "192.168.0.3"
+#       Version 1
+#       Community "more_communities"
+#       Collect "powerplus_voltge_input"
+#       Interval 300
+#   </Host>
+#</Plugin>
+
+#<Plugin "table">
+#	<Table "/proc/slabinfo">
+#		Instance "slabinfo"
+#		Separator " "
+#		<Result>
+#			Type gauge
+#			InstancePrefix "active_objs"
+#			InstancesFrom 0
+#			ValuesFrom 1
+#		</Result>
+#		<Result>
+#			Type gauge
+#			InstancePrefix "objperslab"
+#			InstancesFrom 0
+#			ValuesFrom 4
+#		</Result>
+#	</Table>
+#</Plugin>
+
+#<Plugin "tail">
+#  <File "/var/log/exim4/mainlog">
+#    Instance "exim"
+#    <Match>
+#      Regex "S=([1-9][0-9]*)"
+#      DSType "CounterAdd"
+#      Type "ipt_bytes"
+#      Instance "total"
+#    </Match>
+#    <Match>
+#      Regex "\\<R=local_user\\>"
+#      DSType "CounterInc"
+#      Type "counter"
+#      Instance "local_user"
+#    </Match>
+#  </File>
+#</Plugin>
+
+#<Plugin tcpconns>
+#	ListeningPorts false
+#	LocalPort "25"
+#	RemotePort "25"
+#</Plugin>
+
+#<Plugin teamspeak2>
+#	Host "127.0.0.1"
+#	Port "51234"
+#	Server "8767"
+#</Plugin>
+
+#<Plugin ted>
+#	Device "/dev/ttyUSB0"
+#	Retries 0
+#</Plugin>
+
+#<Plugin thermal>
+#	ForceUseProcfs false
+#	Device "THRM"
+#	IgnoreSelected false
+#</Plugin>
+
+#<Plugin tokyotyrant>
+#	Host "localhost"
+#	Port "1978"
+#</Plugin>
+
+#<Plugin unixsock>
+#	SocketFile "/var/run/collectd-unixsock"
+#	SocketGroup "collectd"
+#	SocketPerms "0660"
+#</Plugin>
+
+#<Plugin uuid>
+#	UUIDFile "/etc/uuid"
+#</Plugin>
+
+#<Plugin vmem>
+#	Verbose false
+#</Plugin>
+
+#<Plugin write_http>
+#	<URL "http://example.com/collectd-post">
+#		User "collectd"
+#		Password "weCh3ik0"
+#	</URL>
+#</Plugin>
+
+##############################################################################
+# Filter configuration                                                       #
+#----------------------------------------------------------------------------#
+# The following configures collectd's filtering mechanism. Before changing   #
+# anything in this section, please read the `FILTER CONFIGURATION' section   #
+# in the collectd.conf(5) manual page.                                       #
+##############################################################################
+
+# Load required matches:
+##LoadPlugin match_empty_counter
+##LoadPlugin match_regex
+##LoadPlugin match_value
+##LoadPlugin match_timediff
+
+# Load required targets:
+##LoadPlugin target_notification
+##LoadPlugin target_replace
+##LoadPlugin target_set
+
+#----------------------------------------------------------------------------#
+# The following block demonstrates the default behavior if no filtering is   #
+# configured at all: All values will be sent to all available write plugins. #
+#----------------------------------------------------------------------------#
+
+#<Chain "PostCache">
+#  Target "write"
+#</Chain>
Index: utils/collectd/patches/001-Interface-option-for-network-plugin.patch
===================================================================
--- utils/collectd/patches/001-Interface-option-for-network-plugin.patch	(revision 0)
+++ utils/collectd/patches/001-Interface-option-for-network-plugin.patch	(revision 0)
@@ -0,0 +1,184 @@
+---
+ src/collectd.conf.pod |    7 ++++
+ src/network.c         |   93 +++++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 98 insertions(+), 2 deletions(-)
+
+diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod
+index 3a6f9a2..d8ad4ab 100644
+--- a/src/collectd.conf.pod
++++ b/src/collectd.conf.pod
+@@ -2438,6 +2438,13 @@ multicast, and IPv4 and IPv6 packets. The default is to not change this value.
+ That means that multicast packets will be sent with a TTL of C<1> (one) on most
+ operating systems.
+ 
++=item B<Interface> I<Interface name>
++
++Set the outgoing or incoming interface for multicast packets. This applies
++at least to IPv6 packets and if possible to IPv4. If it is not applicable or
++defined, the default behaviour is to let the kernel choose the appropriate
++interface.
++
+ =item B<MaxPacketSize> I<1024-65535>
+ 
+ Set the maximum size for datagrams received over the network. Packets larger
+diff --git a/src/network.c b/src/network.c
+index 8615753..b6e21b9 100644
+--- a/src/network.c
++++ b/src/network.c
+@@ -52,6 +52,9 @@
+ #if HAVE_POLL_H
+ # include <poll.h>
+ #endif
++#if HAVE_NET_IF_H
++# include <net/if.h>
++#endif
+ 
+ #if HAVE_LIBGCRYPT
+ # include <gcrypt.h>
+@@ -254,6 +257,7 @@ typedef struct receive_list_entry_s receive_list_entry_t;
+  * Private variables
+  */
+ static int network_config_ttl = 0;
++static int network_config_interface_idx = 0;
+ static size_t network_config_packet_size = 1024;
+ static int network_config_forward = 0;
+ static int network_config_stats = 0;
+@@ -1583,6 +1587,64 @@ static int network_set_ttl (const sockent_t *se, const struct addrinfo *ai)
+ 	return (0);
+ } /* int network_set_ttl */
+ 
++static int network_set_interface (const sockent_t *se, const struct addrinfo *ai) /* {{{ */
++{
++	DEBUG ("network plugin: network_set_interface: interface index = %i;",
++			network_config_interface_idx);
++
++        assert (se->type == SOCKENT_TYPE_CLIENT);
++
++	if (ai->ai_family == AF_INET)
++	{
++		struct sockaddr_in *addr = (struct sockaddr_in *) ai->ai_addr;
++#if KERNEL_LINUX
++		struct ip_mreqn mreq;
++#else
++		struct ip_mreq mreq;
++#endif
++
++		if (! IN_MULTICAST (ntohl (addr->sin_addr.s_addr)))
++			return (0);
++
++		mreq.imr_multiaddr.s_addr = addr->sin_addr.s_addr;
++#if KERNEL_LINUX
++		mreq.imr_address.s_addr = ntohl (INADDR_ANY);
++		mreq.imr_ifindex = network_config_interface_idx;
++#else
++		mreq.imr_interface.s_addr = ntohl (INADDR_ANY);
++#endif
++
++		if (setsockopt (se->data.client.fd, IPPROTO_IP, IP_MULTICAST_IF,
++					&mreq, sizeof (mreq)) == -1)
++		{
++			char errbuf[1024];
++			ERROR ("setsockopt: %s",
++					sstrerror (errno, errbuf, sizeof (errbuf)));
++			return (-1);
++		}
++	}
++	else if (ai->ai_family == AF_INET6)
++	{
++		struct sockaddr_in6 *addr = (struct sockaddr_in6 *) ai->ai_addr;
++
++		if (! IN6_IS_ADDR_MULTICAST (&addr->sin6_addr))
++			return (0);
++
++		if (setsockopt (se->data.client.fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
++					&network_config_interface_idx,
++					sizeof (network_config_interface_idx)) == -1)
++		{
++			char errbuf[1024];
++			ERROR ("setsockopt: %s",
++					sstrerror (errno, errbuf,
++						sizeof (errbuf)));
++			return (-1);
++		}
++	}
++
++	return (0);
++} /* }}} network_set_interface */
++
+ static int network_bind_socket (int fd, const struct addrinfo *ai)
+ {
+ 	int loop = 0;
+@@ -1612,12 +1674,21 @@ static int network_bind_socket (int fd, const struct addrinfo *ai)
+ 		struct sockaddr_in *addr = (struct sockaddr_in *) ai->ai_addr;
+ 		if (IN_MULTICAST (ntohl (addr->sin_addr.s_addr)))
+ 		{
++#if KERNEL_LINUX
++			struct ip_mreqn mreq;
++#else
+ 			struct ip_mreq mreq;
++#endif
+ 
+ 			DEBUG ("fd = %i; IPv4 multicast address found", fd);
+ 
+ 			mreq.imr_multiaddr.s_addr = addr->sin_addr.s_addr;
+-			mreq.imr_interface.s_addr = htonl (INADDR_ANY);
++#if KERNEL_LINUX
++			mreq.imr_address.s_addr = ntohl (INADDR_ANY);
++			mreq.imr_ifindex = network_config_interface_idx;
++#else
++			mreq.imr_interface.s_addr = ntohl (INADDR_ANY);
++#endif
+ 
+ 			if (setsockopt (fd, IPPROTO_IP, IP_MULTICAST_LOOP,
+ 						&loop, sizeof (loop)) == -1)
+@@ -1663,7 +1734,7 @@ static int network_bind_socket (int fd, const struct addrinfo *ai)
+ 			 * single interface; programs running on
+ 			 * multihomed hosts may need to join the same
+ 			 * group on more than one interface.*/
+-			mreq.ipv6mr_interface = 0;
++			mreq.ipv6mr_interface = network_config_interface_idx;
+ 
+ 			if (setsockopt (fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP,
+ 						&loop, sizeof (loop)) == -1)
+@@ -1890,6 +1961,7 @@ static int sockent_open (sockent_t *se) /* {{{ */
+ 			se->data.client.addrlen = ai_ptr->ai_addrlen;
+ 
+ 			network_set_ttl (se, ai_ptr);
++			network_set_interface (se, ai_ptr);
+ 
+ 			/* We don't open more than one write-socket per
+ 			 * node/service pair.. */
+@@ -2601,6 +2673,21 @@ static int network_config_set_ttl (const oconfig_item_t *ci) /* {{{ */
+   return (0);
+ } /* }}} int network_config_set_ttl */
+ 
++static int network_config_set_interface (const oconfig_item_t *ci) /* {{{ */
++{
++  if ((ci->values_num != 1)
++      || (ci->values[0].type != OCONFIG_TYPE_STRING))
++  {
++    WARNING ("network plugin: The `Interface' config option needs exactly "
++        "one string argument.");
++    return (-1);
++  }
++
++  network_config_interface_idx = if_nametoindex (ci->values[0].value.string);
++
++  return (0);
++} /* }}} int network_config_set_interface */
++
+ static int network_config_set_buffer_size (const oconfig_item_t *ci) /* {{{ */
+ {
+   int tmp;
+@@ -2842,6 +2929,8 @@ static int network_config (oconfig_item_t *ci) /* {{{ */
+       network_config_add_server (child);
+     else if (strcasecmp ("TimeToLive", child->key) == 0)
+       network_config_set_ttl (child);
++    else if (strcasecmp ("Interface", child->key) == 0)
++      network_config_set_interface (child);
+     else if (strcasecmp ("MaxPacketSize", child->key) == 0)
+       network_config_set_buffer_size (child);
+     else if (strcasecmp ("Forward", child->key) == 0)
+-- 
+1.6.3.3
+
Index: utils/collectd/patches/002-remove-wordexp.patch
===================================================================
--- utils/collectd/patches/002-remove-wordexp.patch	(revision 0)
+++ utils/collectd/patches/002-remove-wordexp.patch	(working copy)
@@ -0,0 +1,12 @@
+diff -upr collectd-4.9.1.orig/configure collectd-4.9.1/configure
+--- collectd-4.9.1.orig/configure	2010-03-03 19:27:17.000000000 +0100
++++ collectd-4.9.1/configure	2010-03-03 19:30:52.000000000 +0100
+@@ -14909,7 +14909,7 @@ fi
+ done
+ 
+ 
+-for ac_header in pwd.h grp.h sys/un.h ctype.h limits.h xfs/xqm.h fs_info.h fshelp.h paths.h mntent.h mnttab.h sys/fstyp.h sys/fs_types.h sys/mntent.h sys/mnttab.h sys/statfs.h sys/statvfs.h sys/vfs.h sys/vfstab.h kvm.h wordexp.h
++for ac_header in pwd.h grp.h sys/un.h ctype.h limits.h xfs/xqm.h fs_info.h fshelp.h paths.h mntent.h mnttab.h sys/fstyp.h sys/fs_types.h sys/mntent.h sys/mnttab.h sys/statfs.h sys/statvfs.h sys/vfs.h sys/vfstab.h kvm.h
+ do :
+   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
Index: utils/collectd/Makefile
===================================================================
--- utils/collectd/Makefile	(revision 11162)
+++ utils/collectd/Makefile	(working copy)
@@ -9,22 +9,27 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=collectd
-PKG_VERSION:=4.2.0
-PKG_RELEASE:=2
+#PKG_VERSION:=4.9.1
+PKG_VERSION:=4.8.3
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://collectd.org/files/
-PKG_MD5SUM:=ed1f41f86ad61bd7096ee5386ab33fd0
+# for 4.9.1
+# PKG_MD5SUM:=5753496651c8c84afaea1fe290876bfc
+PKG_MD5SUM:=34e47c23515b52247d8af57e294396a8
 
-PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
-PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+PKG_FIXUP=libtool
+#PKG_BUILD_DEPENDS:=+libxml2 +libnetsnmp +libcurl +librrd1
+PKG_BUILD_DEPENDS:=+libxml2
 
 include $(INCLUDE_DIR)/package.mk
+#include $(INCLUDE_DIR)/kernel.mk
+-include $(TOPDIR)/collectd-config
 
-define Package/collectd
+define Package/collectd/common_info
   SECTION:=utils
   CATEGORY:=Utilities
-  DEPENDS=+libgcc +libpthread
   TITLE:=Lightweight system statistics collection daemon
   URL:=http://verplant.org/collectd/
 endef
@@ -34,58 +39,334 @@
 	and provides mechanismns to store the values in a variety of ways.
 endef
 
+define Package/collectd
+        $(call Package/collectd/common_info)
+        DEPENDS:=+libgcc +libpthread
+        MENU:=1
+endef
+
+
+#
+# output plugins
+#
+define Package/collectd-mod-csv
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - csv output plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-email
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - email output plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-logfile
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - logfile output plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-network
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - network input/output plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-syslog
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - syslog output plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-unixsock
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - unix socket output plugin
+        DEPENDS:=collectd
+endef
+
+
+#
+# input plugins
+#
+define Package/collectd-mod-apache
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - apache status input plugin
+        DEPENDS:=collectd +libcurl
+endef
+
+define Package/collectd-mod-apcups
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - apcups status input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-ascent
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - ascent status input plugin
+        DEPENDS:=collectd +libcurl +libxml2
+endef
+
+define Package/collectd-mod-cpu
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - cpu input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-df
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - disk space input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-disk
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - disk usage/timing input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-dns
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - dns traffic input plugin
+        DEPENDS:=collectd +libpcap
+endef
+
+define Package/collectd-mod-exec
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - process exec input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-interface
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - network interfaces input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-iptables
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - iptables status input plugin
+        DEPENDS:=collectd +iptables
+endef
+
+define Package/collectd-mod-irq
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - interrupt usage input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-load
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - system load input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-madwifi
+	$(call Package/collectd/common_info)
+	TITLE:=collectd - madwifi plugin
+	DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-memory
+	$(call Package/collectd/common_info)
+	TITLE:=collectd - memory usage plugin
+	DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-netlink
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - netlink input plugin (uses iproute2)
+        DEPENDS:=collectd +ip
+endef
+
+define Package/collectd-mod-nginx
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - nginx status input plugin
+        DEPENDS:=collectd +libcurl
+endef
+
+define Package/collectd-mod-ntpd
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - ntp daemon status input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-nut
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - UPS monitoring input plugin
+        DEPENDS:=collectd @BROKEN
+endef
+
+define Package/collectd-mod-olsrd
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - olsrd status plugin
+        DEPENDS:=collectd +olsrd
+endef
+
+define Package/collectd-mod-ping
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - ping status input plugin
+        DEPENDS:=collectd +liboping
+endef
+
+define Package/collectd-mod-powerdns
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - powerdns server status input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-processes
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - process status plugin
+        DEPENDS:=collectd
+endef
+
+
+define Package/collectd-mod-rrdtool
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - rrdtool 1.0.x output plugin
+        DEPENDS:=collectd +librrd1
+endef
+
+define Package/collectd-mod-sensors
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - lm_sensors input plugin
+        DEPENDS:=collectd +libsensors @BROKEN
+endef
+
+define Package/collectd-mod-snmp
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - snmp input plugin
+        DEPENDS:=collectd +libnetsnmp
+endef
+
+define Package/collectd-mod-tail
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - tail input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-teamspeak2
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - teamspeak2 input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-tcpconns
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - tcp connection tracking input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-users
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - user login status input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-vmem
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - virtual memory usage input plugin
+        DEPENDS:=collectd
+endef
+
+define Package/collectd-mod-wireless
+        $(call Package/collectd/common_info)
+        TITLE:=collectd - wireless status input plugin
+        DEPENDS:=collectd
+endef
+
+
 define Package/collectd/conffiles 
 /etc/collectd.conf 
 endef
 
-CONFIGURE_ARGS += \
+define Build/Configure
+	$(call Build/Configure/Default, $(PKG_CONFIGURE_OPTS), $(PKG_CONFIGURE_VARS))
+endef
+
+define Build/Compile
+	-$(MAKE) -C $(PKG_BUILD_DIR) clean
+	$(call Build/Compile/Default, $(MAKE_FLAGS))
+endef
+
+
+#
+# Build PKG_CONFIGURE_OPTS
+#
+
+EXTRA_LDFLAGS+=-lm
+
+# common configure args
+PKG_CONFIGURE_OPTS:= \
+	--prefix=$(STAGING_DIR) \
 	--disable-debug \
 	--enable-daemon \
 	--enable-getifaddrs \
-	--disable-apache \
-	--disable-apcups \
-	--disable-apple_sensors \
-	--disable-battery \
-	--enable-cpu \
-	--disable-cpufreq \
-	--enable-disk \
-	--enable-df \
-	--disable-dns \
-	--disable-email \
-	--disable-quota \
-	--disable-hddtemp \
-	--enable-load \
-	--disable-mbmon \
-	--enable-memory \
-	--disable-multimeter \
-	--disable-mysql \
-	--disable-nfs \
-	--disable-ntpd \
-	--enable-ping \
-	--enable-processes \
-	--disable-sensors \
-	--enable-serial \
-	--disable-swap \
-	--disable-tape \
-	--enable-traffic \
-	--disable-users \
-	--disable-vserver \
-	--enable-wireless \
-	--with-nan-emulation
+	--disable-all-plugins \
+	--with-nan-emulation \
+	--with-fp-layout=nothing
 
-MAKE_FLAGS += \
+PKG_CONFIGURE_VARS+= \
+	CPPFLAGS="-I$(STAGING_DIR)/usr/include/libxml2 $$$$CPPFLAGS $(FPIC)" \
+	KERNEL_DIR="$(LINUX_DIR)"
+
+MAKE_FLAGS+= \
+	LDFLAGS="$(EXTRA_LDFLAGS)" \
 	DESTDIR="$(PKG_INSTALL_DIR)" \
 	all install
 
+# list of selectable plugins
+selectable_plugins := cpu csv df disk exec interface irq load \
+			logfile network ntpd processes snmp \
+			syslog tail tcpconns unixsock users vmem wireless rrdtool
+
+# makro to enable / disable plugin
+define enable_plugin
+	ifneq ($$(CONFIG_PACKAGE_collectd-mod-$(1)),)
+		PKG_CONFIGURE_OPTS += --enable-$(1)
+		Package/collectd-mod-$(1)/install= \
+			$(INSTALL_DIR) $$(1)/usr/lib/collectd ; \
+			$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/collectd/$(1).so $$(1)/usr/lib/collectd/
+	else
+		PKG_CONFIGURE_OPTS += --disable-$(1)
+	endif
+endef
+
+# build args for permanently disabled plugins
+PKG_CONFIGURE_OPTS += $(foreach plugin,$(disabled_plugins),--disable-$(plugin))
+
+# build args for selectable plugins
+$(foreach plugin,$(selectable_plugins),$(eval $(call enable_plugin,$(plugin))))
+
+# exception: mod-netlink needs iproute2
+ifneq ($(CONFIG_PACKAGE_collectd-mod-netlink),)
+	PKG_CONFIGURE_OPTS += --with-libnetlink=$(wildcard $(BUILD_DIR)/iproute2-*)
+endif
+
+# exception: mod-rrdtool(1) needs rrdtool
+ifneq ($(CONFIG_PACKAGE_collectd-mod-rrdtool),)
+	PKG_CONFIGURE_OPTS += --with-rrdtool=$(wildcard $(BUILD_DIR)/rrdtool-1.0.*)
+	TARGET_LDFLAGS := -L$(wildcard $(BUILD_DIR)/rrdtool-1.0.*)/src/.libs -lz $(TARGET_LDFLAGS)
+endif
+
 define Package/collectd/install
 	$(INSTALL_DIR) $(1)/usr/sbin
-	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/collectd $(1)/usr/sbin/
+	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/collectd{,mon} $(1)/usr/sbin/
 	$(INSTALL_DIR) $(1)/usr/lib/collectd
-	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/collectd/*.so $(1)/usr/lib/collectd/
+	$(INSTALL_CONF) $(PKG_INSTALL_DIR)/usr/share/collectd/types.db $(1)/usr/lib/collectd/
 	$(INSTALL_DIR) $(1)/etc
 	$(INSTALL_CONF) ./files/collectd.conf $(1)/etc/
 	$(INSTALL_DIR) $(1)/etc/init.d
 	$(INSTALL_BIN) ./files/collectd.init $(1)/etc/init.d/collectd
 endef
 
+define build_plugin
+	ifneq ($$(CONFIG_PACKAGE_collectd-mod-$(1)),)
+		$(eval $(call BuildPackage,collectd-mod-$(1)))
+	endif
+endef
+
+
 $(eval $(call BuildPackage,collectd))
+$(foreach plugin,$(selectable_plugins),$(eval $(call build_plugin,$(plugin))))
