diff --git a/net/hsflowd/Makefile b/net/hsflowd/Makefile new file mode 100644 index 000000000..c6750cdb9 --- /dev/null +++ b/net/hsflowd/Makefile @@ -0,0 +1,72 @@ +# +# Copyright (C) 2012 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/kernel.mk + +PKG_NAME:=hsflowd +PKG_RELEASE:=1 +PKG_SOURCE_URL:=@SF/host-sflow +PKG_VERSION:=1.20 +PKG_MD5SUM:=0bfc0b05fbab27a80557c5efb5e66693 + +PKG_SOURCE:=hsflowd-$(PKG_VERSION).tar.gz + +include $(INCLUDE_DIR)/package.mk + +define Package/hsflowd + SECTION:=net + CATEGORY:=Base system + TITLE:=Host sFlow export agent + URL:=http://host-sflow.sourceforge.net/ +endef + +define Package/sflowovsd + SECTION:=net + CATEGORY:=Base system + DEPENDS:=+hsflowd + TITLE:=Host sFlow Open vSwitch agent + URL:=http://host-sflow.sourceforge.net/ +endef + + +define Package/hsflowd/description + The Host sFlow agent exports server performance metrics using the sFlow + protocol. The agent is intended to provide scalable, multi-vendor, + multi-OS performance monitoring with minimal impact on the systems being + monitored. +endef + +define Package/sflowovsd/description + The Host sFlow agent can automatically configure the sFlow settings in + the Open vSwitch. +endef + +MAKE_VARS += \ + LIBVIRT=no \ + XEN_DDK=no \ + DEBIAN=no \ + PLATFORM=Linux \ + OPT="$(TARGET_CFLAGS) -std=c99" + +define Package/hsflowd/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d $(1)/etc/config + $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/Linux/hsflowd $(1)/usr/sbin + $(INSTALL_BIN) ./files/hsflowd.init $(1)/etc/init.d/hsflowd + $(INSTALL_CONF) ./files/hsflowd.config $(1)/etc/config/hsflowd + +endef + +define Package/sflowovsd/install + $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/init.d + $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/Linux/sflowovsd $(1)/usr/sbin + $(INSTALL_BIN) ./files/sflowovsd.init $(1)/etc/init.d/sflowovsd +endef + +$(eval $(call BuildPackage,hsflowd)) +$(eval $(call BuildPackage,sflowovsd)) + diff --git a/net/hsflowd/files/hsflowd.config b/net/hsflowd/files/hsflowd.config new file mode 100644 index 000000000..77262f877 --- /dev/null +++ b/net/hsflowd/files/hsflowd.config @@ -0,0 +1,11 @@ +config hsflowd config + option enabled '0' + option dnssd '0' + option polling '30' + option sampling '512' + option uuid '' + +config collector + option ip '192.168.123.123' + option port '6343' + diff --git a/net/hsflowd/files/hsflowd.init b/net/hsflowd/files/hsflowd.init new file mode 100644 index 000000000..721282613 --- /dev/null +++ b/net/hsflowd/files/hsflowd.init @@ -0,0 +1,72 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2012 OpenWrt.org + +START=50 + +SERVICE_USE_PID=1 + +start() { + config_load hsflowd + local args agent conffile dnssd polling sampling uuid + + getcollectors() { + echo " collector {" >> $tmpconf + + config_get ip "$1" ip + [ -n "$ip" ] && echo " ip=${ip}" >> $tmpconf + config_get port "$1" port + [ -n "$port" ] && echo " udpport=${port}" >> $tmpconf + + echo " }" >> $tmpconf + } + + config_get agent config agent_iface "br-lan" + config_get conffile config config_file + config_get_bool dnssd config dnssd 1 + config_get polling config polling 30 + config_get sampling config sampling 512 + config_get uuid config uuid + + [ -z "$uuid" ] && { + uuid="$(cat /proc/sys/kernel/random/uuid)" + uci set hsflowd.config.uuid=$uuid + uci commit hsflowd + } + + args="" + append args "-u $uuid" + + if [ -n "$conffile" ]; then + append args "-f $conffile" + else + tmpconf="/var/etc/hsflowd.conf" + append args "-f $tmpconf" + mkdir -p /var/etc + + echo "sFlow {" > $tmpconf + echo " agent=${agent}" >> $tmpconf + + if [ "$dnssd" -eq 1 ]; then + echo " DNSSD=on" >> $tmpconf + else + echo " DNSSD=off" >> $tmpconf + echo " polling=${polling}" >> $tmpconf + echo " sampling=${sampling}" >> $tmpconf + + config_foreach getcollectors collector + fi + + echo "}" >> $tmpconf + + fi + + + service_start /usr/sbin/hsflowd $args +} + +stop() { + service_stop /usr/sbin/hsflowd + + pid_file="/var/run/hsflowd.pid" + [ -f "$pid_file" ] && rm -f "$pid_file" +} diff --git a/net/hsflowd/files/sflowovsd.init b/net/hsflowd/files/sflowovsd.init new file mode 100644 index 000000000..ab9bac983 --- /dev/null +++ b/net/hsflowd/files/sflowovsd.init @@ -0,0 +1,17 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2012 OpenWrt.org + +START=50 + +SERVICE_USE_PID=1 + +start() { + service_start /usr/sbin/sflowovsd -f /var/run/hsflowd.auto +} + +stop() { + service_stop /usr/sbin/sflowovsd + + pid_file="/var/run/sflowovsd.pid" + [ -f "$pid_file" ] && rm -f "$pid_file" +} diff --git a/net/hsflowd/patches/100-crosscompile.patch b/net/hsflowd/patches/100-crosscompile.patch new file mode 100644 index 000000000..b67718243 --- /dev/null +++ b/net/hsflowd/patches/100-crosscompile.patch @@ -0,0 +1,91 @@ +--- a/src/Linux/Makefile ++++ b/src/Linux/Makefile +@@ -74,7 +74,7 @@ HEADERS= hsflowd.h hsflowtokens.h sflowo + SFLOWDIR=../sflow + + #CC= g++ +-CC= gcc -std=gnu99 ++CC?= gcc -std=gnu99 + + OPT_FULL = -O3 -DNDEBUG + OPT_DEBUG = -g -ggdb +--- a/src/sflow/Makefile ++++ b/src/sflow/Makefile +@@ -3,7 +3,7 @@ + + HEADERS= sflow_api.h sflow.h Makefile + +-OPT = -O3 -DNDEBUG ++OPT ?= -O3 -DNDEBUG + #OPT = -g -ggdb -O2 + #OPT= -g -ggdb + +@@ -12,7 +12,7 @@ LDFLAGS= + + #CC= g++ + #CC= gcc -std=c99 +-CC= gcc ++CC?= gcc + + OBJS= sflow_agent.o \ + sflow_sampler.o \ +@@ -20,8 +20,8 @@ OBJS= sflow_agent.o \ + sflow_receiver.o + + libsflow.a: $(OBJS) +- ar cru $@ $(OBJS) +- ranlib $@ ++ $(AR) cru $@ $(OBJS) ++ $(RANLIB) $@ + + all: libsflow.a + +--- a/Makefile ++++ b/Makefile +@@ -11,32 +11,32 @@ all: $(PROG) + + $(PROG): + cd src/sflow; $(MAKE) +- PLATFORM=`uname`; \ ++ PLATFORM?=`uname`; \ + MYVER=`./getVersion`; \ + MYREL=`./getRelease`; \ + cd src/$$PLATFORM; $(MAKE) VERSION=$$MYVER RELEASE=$$MYREL + + clean: + cd src/sflow; $(MAKE) clean +- PLATFORM=`uname`; \ ++ PLATFORM?=`uname`; \ + MYVER=`./getVersion`; \ + MYREL=`./getRelease`; \ + cd src/$$PLATFORM; $(MAKE) VERSION=$$MYVER RELEASE=$$MYREL clean + + install: +- PLATFORM=`uname`; \ ++ PLATFORM?=`uname`; \ + MYVER=`./getVersion`; \ + MYREL=`./getRelease`; \ + cd src/$$PLATFORM; $(MAKE) VERSION=$$MYVER RELEASE=$$MYREL install + + schedule: +- PLATFORM=`uname`; \ ++ PLATFORM?=`uname`; \ + MYVER=`./getVersion`; \ + MYREL=`./getRelease`; \ + cd src/$$PLATFORM; $(MAKE) VERSION=$$MYVER RELEASE=$$MYREL schedule + + rpm: +- PLATFORM=`uname`; \ ++ PLATFORM?=`uname`; \ + MYVER=`./getVersion`; \ + MYREL=`./getRelease`; \ + MYSRCDIR=$(RPM_SOURCES_DIR)/$(PROG)-$$MYVER; \ +@@ -46,7 +46,7 @@ rpm: + rpmbuild -ba $(PROG).spec + + deb: $(PROG) +- PLATFORM=`uname`; \ ++ PLATFORM?=`uname`; \ + MYARCH=`uname -m`; \ + MYVER=`./getVersion`; \ + MYREL=`./getRelease`; \ diff --git a/net/hsflowd/patches/200-uclibc-compat.patch b/net/hsflowd/patches/200-uclibc-compat.patch new file mode 100644 index 000000000..5492daaf9 --- /dev/null +++ b/net/hsflowd/patches/200-uclibc-compat.patch @@ -0,0 +1,55 @@ +--- a/src/Linux/hsflowd.c ++++ b/src/Linux/hsflowd.c +@@ -1408,13 +1408,12 @@ extern "C" { + signal(SIGXFSZ, SIG_DFL); + + // ask for the backtrace pointers +- size_t siz = backtrace(backtracePtrs, HSP_NUM_BACKTRACE_PTRS); ++ size_t siz = 0; + + if(f_crash == NULL) { + f_crash = stderr; + } + +- backtrace_symbols_fd(backtracePtrs, siz, fileno(f_crash)); + fflush(f_crash); + // Do something useful with siginfo_t + if (sig == SIGSEGV) { +@@ -2005,7 +2004,6 @@ extern "C" { + if(debug) { + myLog(LOG_INFO, "initAgent suceeded"); + // print some stats to help us size HSP_RLIMIT_MEMLOCK etc. +- malloc_stats(); + } + + if(sp->dropPriv) { +--- a/src/Linux/hsflowd.h ++++ b/src/Linux/hsflowd.h +@@ -34,9 +34,7 @@ extern "C" { + #include // for UINT_MAX + + // for signal backtrace +-#include + #include +-#include + + #include // for va_start() + #include "util.h" +--- a/src/Linux/util.c ++++ b/src/Linux/util.c +@@ -39,7 +39,6 @@ extern "C" { + void *mem = SYS_CALLOC(1, bytes); + if(mem == NULL) { + myLog(LOG_ERR, "calloc() failed : %s", strerror(errno)); +- if(debug) malloc_stats(); + exit(EXIT_FAILURE); + } + return mem; +@@ -51,7 +50,6 @@ extern "C" { + void *mem = SYS_REALLOC(ptr, bytes); + if(mem == NULL) { + myLog(LOG_ERR, "realloc() failed : %s", strerror(errno)); +- if(debug) malloc_stats(); + exit(EXIT_FAILURE); + } + return mem; diff --git a/net/hsflowd/patches/300-config_files_path.patch b/net/hsflowd/patches/300-config_files_path.patch new file mode 100644 index 000000000..fe85a8eb8 --- /dev/null +++ b/net/hsflowd/patches/300-config_files_path.patch @@ -0,0 +1,16 @@ +diff -Nurb a/src/Linux/hsflowd.h b/src/Linux/hsflowd.h +--- a/src/Linux/hsflowd.h 2012-03-01 18:16:09.000000000 +0100 ++++ b/src/Linux/hsflowd.h 2012-03-18 18:56:58.689852282 +0100 +@@ -72,9 +72,9 @@ + #define HSP_DAEMON_NAME "hsflowd" + #define HSP_DEFAULT_PIDFILE "/var/run/hsflowd.pid" + #define HSP_DEFAULT_CONFIGFILE "/etc/hsflowd.conf" +-#define HSP_DEFAULT_OUTPUTFILE "/etc/hsflowd.auto" +-#define HSP_DEFAULT_VMSTORE_FILE "/etc/hsflowd.data" +-#define HSP_DEFAULT_CRASH_FILE "/etc/hsflowd.crash" ++#define HSP_DEFAULT_OUTPUTFILE "/var/run/hsflowd.auto" ++#define HSP_DEFAULT_VMSTORE_FILE "/var/run/hsflowd.data" ++#define HSP_DEFAULT_CRASH_FILE "/var/run/hsflowd.crash" + + /* Numbering to avoid clash. See http://www.sflow.org/developers/dsindexnumbers.php */ + #define HSP_DEFAULT_PHYSICAL_DSINDEX 1 diff --git a/net/hsflowd/patches/400-sflowovsd_assert.patch b/net/hsflowd/patches/400-sflowovsd_assert.patch new file mode 100644 index 000000000..dec63b122 --- /dev/null +++ b/net/hsflowd/patches/400-sflowovsd_assert.patch @@ -0,0 +1,12 @@ +diff -Nurb a/src/Linux/Makefile b/src/Linux/Makefile +--- a/src/Linux/Makefile 2011-09-07 01:15:22.000000000 +0200 ++++ b/src/Linux/Makefile 2012-03-21 01:55:40.468569332 +0100 +@@ -97,7 +97,7 @@ + + SFLOWOVS_OBJS=sflowovsd.o util.o + +-CFLAGS+= -I. -I$(SFLOWDIR) $(OPT) -Wall -D_GNU_SOURCE -DHSP_VERSION=$(VERSION) -DUTHEAP ++CFLAGS+= -I. -I$(SFLOWDIR) $(OPT) -Wall -D_GNU_SOURCE -DHSP_VERSION=$(VERSION) + LIBS+= $(SFLOWDIR)/libsflow.a -lresolv -lpthread + + #### BUILD ####