[patchteam] Add two new packages, hsflowd and sflowovsd - Signed-off-by: Stijn Tintel...
authordingo <dingo@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 21 Mar 2012 12:36:52 +0000 (12:36 +0000)
committerdingo <dingo@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Wed, 21 Mar 2012 12:36:52 +0000 (12:36 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/packages@31051 3c298f89-4303-0410-b956-a3cf2f4a3e73

net/hsflowd/Makefile [new file with mode: 0644]
net/hsflowd/files/hsflowd.config [new file with mode: 0644]
net/hsflowd/files/hsflowd.init [new file with mode: 0644]
net/hsflowd/files/sflowovsd.init [new file with mode: 0644]
net/hsflowd/patches/100-crosscompile.patch [new file with mode: 0644]
net/hsflowd/patches/200-uclibc-compat.patch [new file with mode: 0644]
net/hsflowd/patches/300-config_files_path.patch [new file with mode: 0644]
net/hsflowd/patches/400-sflowovsd_assert.patch [new file with mode: 0644]

diff --git a/net/hsflowd/Makefile b/net/hsflowd/Makefile
new file mode 100644 (file)
index 0000000..c6750cd
--- /dev/null
@@ -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 (file)
index 0000000..77262f8
--- /dev/null
@@ -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 (file)
index 0000000..7212826
--- /dev/null
@@ -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 (file)
index 0000000..ab9bac9
--- /dev/null
@@ -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 (file)
index 0000000..b677182
--- /dev/null
@@ -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 (file)
index 0000000..5492daa
--- /dev/null
@@ -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 <limits.h> // for UINT_MAX
+ // for signal backtrace
+-#include <execinfo.h>
+ #include <signal.h>
+-#include <ucontext.h>
+ #include <stdarg.h> // 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 (file)
index 0000000..fe85a8e
--- /dev/null
@@ -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 (file)
index 0000000..dec63b1
--- /dev/null
@@ -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 ####