On Wed, Mar 21, 2012 at 8:28 AM, Stijn Tintel <st...@linux-ipv6.be> wrote:
> This patch adds two new packages from the Host sFlow project [1]:
>
> * hsflowd:
>  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.
>
> * sflowovsd:
>  The Host sFlow agent can automatically configure the sFlow settings in
>  the Open vSwitch.
>

Committed revision 31051


> Thanks to jow, who wrote the initial Makefile, cross-compilation and
> uClibc patches.
>
> [1] http://host-sflow.sourceforge.net/about.php
>
> Signed-off-by: Stijn Tintel <st...@linux-ipv6.be>
> ---
>  net/hsflowd/Makefile                            |   72 ++++++++++++++++++
>  net/hsflowd/files/hsflowd.config                |   11 +++
>  net/hsflowd/files/hsflowd.init                  |   72 ++++++++++++++++++
>  net/hsflowd/files/sflowovsd.init                |   17 ++++
>  net/hsflowd/patches/100-crosscompile.patch      |   91 
> +++++++++++++++++++++++
>  net/hsflowd/patches/200-uclibc-compat.patch     |   55 ++++++++++++++
>  net/hsflowd/patches/300-config_files_path.patch |   16 ++++
>  net/hsflowd/patches/400-sflowovsd_assert.patch  |   12 +++
>  8 files changed, 346 insertions(+), 0 deletions(-)
>  create mode 100644 net/hsflowd/Makefile
>  create mode 100644 net/hsflowd/files/hsflowd.config
>  create mode 100755 net/hsflowd/files/hsflowd.init
>  create mode 100755 net/hsflowd/files/sflowovsd.init
>  create mode 100644 net/hsflowd/patches/100-crosscompile.patch
>  create mode 100644 net/hsflowd/patches/200-uclibc-compat.patch
>  create mode 100644 net/hsflowd/patches/300-config_files_path.patch
>  create mode 100644 net/hsflowd/patches/400-sflowovsd_assert.patch
>
> diff --git a/net/hsflowd/Makefile b/net/hsflowd/Makefile
> new file mode 100644
> index 0000000..c6750cd
> --- /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 0000000..77262f8
> --- /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 100755
> index 0000000..7212826
> --- /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 100755
> index 0000000..ab9bac9
> --- /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 0000000..b677182
> --- /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 0000000..5492daa
> --- /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 <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
> index 0000000..fe85a8e
> --- /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 0000000..dec63b1
> --- /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 ####
> --
> 1.7.3.4
>
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to