svn commit: r347404 - in head/net-mgmt/netmond: . files
Rene Ladan
rene at FreeBSD.org
Fri Mar 7 16:20:43 UTC 2014
Author: rene
Date: Fri Mar 7 16:20:41 2014
New Revision: 347404
URL: http://svnweb.freebsd.org/changeset/ports/347404
QAT: https://qat.redports.org/buildarchive/r347404/
Log:
Bring net-mgmt/netmond back into shape.
From PR submitter:
- Fix build (partially)
- Clean up patches
- Unexpire
- Mark jobs unsafe
- Bump PORTREVISION
From myself:
- Stage support, introduce pkg-plist
- Use option helpers
- Convert patch site for documentation into an optional distribution file
PR: ports/186654
Submitted by: Vsevolod Volkov <vvv at colocall.net>
Added:
head/net-mgmt/netmond/pkg-plist (contents, props changed)
Deleted:
head/net-mgmt/netmond/files/patch-Makefile.in
head/net-mgmt/netmond/files/patch-dns.c
head/net-mgmt/netmond/files/patch-event.c
head/net-mgmt/netmond/files/patch-netmon.h
head/net-mgmt/netmond/files/patch-netmond.c
head/net-mgmt/netmond/files/patch-netstate.c
head/net-mgmt/netmond/files/patch-parseconf.y
head/net-mgmt/netmond/files/patch-ping.c
head/net-mgmt/netmond/files/patch-radius.c
head/net-mgmt/netmond/files/patch-reconfig.c
head/net-mgmt/netmond/files/patch-regex.c
head/net-mgmt/netmond/files/patch-regex.h
head/net-mgmt/netmond/files/patch-router.c
head/net-mgmt/netmond/files/patch-scanconf.l
head/net-mgmt/netmond/files/patch-session.c
head/net-mgmt/netmond/files/patch-snmp.c
head/net-mgmt/netmond/files/patch-tacacs.c
head/net-mgmt/netmond/files/patch-tcp.c
head/net-mgmt/netmond/files/patch-trap.c
head/net-mgmt/netmond/files/patch-udp.c
head/net-mgmt/netmond/files/patch-util.c
head/net-mgmt/netmond/files/patch-variables.c
head/net-mgmt/netmond/files/pipe.c
Modified:
head/net-mgmt/netmond/Makefile
head/net-mgmt/netmond/distinfo
head/net-mgmt/netmond/files/patch-AA
Modified: head/net-mgmt/netmond/Makefile
==============================================================================
--- head/net-mgmt/netmond/Makefile Fri Mar 7 15:59:54 2014 (r347403)
+++ head/net-mgmt/netmond/Makefile Fri Mar 7 16:20:41 2014 (r347404)
@@ -3,78 +3,51 @@
PORTNAME= netmond
PORTVERSION= 2.2b6
-PORTREVISION= 5
+PORTREVISION= 6
CATEGORIES= net-mgmt
-MASTER_SITES= http://freebsd.unixfreunde.de/sources/ \
- ftp://ftp.risp.ru/pub/RinetSoftware/
-DISTNAME= netmond-2.2-b6
+MASTER_SITES= http://freebsd.unixfreunde.de/sources/:daemon \
+ ftp://ftp.risp.ru/pub/RinetSoftware/:daemon \
+ http://vfom.narod.ru/download/:docs
EXTRACT_SUFX= .tgz
-
-PATCH_SITES= http://freebsd.unixfreunde.de/sources/ \
- http://vfom.narod.ru/download/
-PATCH_VERSION= 1
-PATCHFILES= ${DISTNAME}.patch${PATCH_VERSION}${EXTRACT_SUFX} ${DISTNAME}.docs${EXTRACT_SUFX}
+DISTFILES= ${PORTNAME}-2.2-b6${EXTRACT_SUFX}:daemon
+EXTRACT_ONLY= ${PORTNAME}-2.2-b6${EXTRACT_SUFX}
MAINTAINER= ports at FreeBSD.org
COMMENT= Netmond - IP network monitoring daemon
+WRKSRC= ${WRKDIR}/${PORTNAME}-2.2-b6
+
USERS= netmon
GROUPS= ${USERS}
-BROKEN= Does not patch
-DEPRECATED= Broken for more than 6 month
-EXPIRATION_DATE= 2014-02-27
-
-#MK_IFGRAPH= yes
-PATCHDIR= ${WRKDIR}/patches
-
GNU_CONFIGURE= yes
+DISABLE_MAKE_JOBS=yes
USES= bison
CFLAGS+= -Wno-return-type
-BINOWN= root
-BINGRP= netmon
-BINMODE= 0550
-
-PLIST_FILES= sbin/netmond sbin/netmond_watchdog sbin/netmondctl \
- etc/netmond.conf.sample
USE_RC_SUBR= netmond
SUB_FILES+= pkg-message netmond_watchdog netmondctl
-PORTDOCS= README README.ru CHANGES README.port.eng README.port.ru index.html netmond.css en/ ru/
+PORTDOCS= README README.ru CHANGES README.port.eng README.port.ru index.html netmond.css en/* ru/*
OPTIONS_DEFINE= DOCS GD
+OPTIONS_SUB= yes
-NO_STAGE= yes
-.include <bsd.port.options.mk>
+GD_LIB_DEPENDS= libgd.so:${PORTSDIR}/graphics/gd
+GD_CONFIGURE_OFF= --without-ifgraph
-.if ${PORT_OPTIONS:MGD}
-LIB_DEPENDS= gd:${PORTSDIR}/graphics/gd
-PLIST_FILES+= sbin/ifgraph
-.else
-CONFIGURE_ARGS= --without-ifgraph
-.endif
+DOCS_DISTFILES= ${PORTNAME}-2.2-b6.docs${EXTRACT_SUFX}:docs
-post-extract:
- ${MKDIR} ${PATCHDIR}
- ${TAR} -zxf ${DISTDIR}/${DISTNAME}.patch${PATCH_VERSION}${EXTRACT_SUFX} -C ${PATCHDIR}
- ${CP} ${PATCHDIR}/pipe.c ${WRKSRC}
+.include <bsd.port.options.mk>
do-install:
- ${INSTALL_PROGRAM} ${WRKSRC}/netmond ${PREFIX}/sbin/netmond
-.if defined(MK_IFGRAPH)
- ${INSTALL_PROGRAM} ${WRKSRC}/ifgraph ${PREFIX}/sbin/ifgraph
-.endif
- ${INSTALL_SCRIPT} ${WRKDIR}/netmond_watchdog ${PREFIX}/sbin/netmond_watchdog
- ${INSTALL_SCRIPT} ${WRKDIR}/netmondctl ${PREFIX}/sbin/netmondctl
- ${INSTALL_DATA} ${WRKSRC}/netmon.conf.sample ${PREFIX}/etc/netmond.conf.sample
- ${CHMOD} u+s ${PREFIX}/sbin/netmond
-.if ${PORT_OPTIONS:MDOCS}
- @${MKDIR} ${DOCSDIR}
- ${CHMOD} 755 ${DOCSDIR}
- ${TAR} -zxf ${DISTDIR}/${DISTNAME}.docs${EXTRACT_SUFX} -C ${DOCSDIR}
+ ${INSTALL_PROGRAM} ${WRKSRC}/netmond ${STAGEDIR}${PREFIX}/sbin/netmond
+.if ${PORT_OPTIONS:MGD}
+ ${INSTALL_PROGRAM} ${WRKSRC}/ifgraph ${STAGEDIR}${PREFIX}/sbin/ifgraph
.endif
-
-post-install:
- ${CAT} ${PKGMESSAGE}
+ ${INSTALL_SCRIPT} ${WRKDIR}/netmond_watchdog ${STAGEDIR}${PREFIX}/sbin/netmond_watchdog
+ ${INSTALL_SCRIPT} ${WRKDIR}/netmondctl ${STAGEDIR}${PREFIX}/sbin/netmondctl
+ ${INSTALL_DATA} ${WRKSRC}/netmon.conf.sample ${STAGEDIR}${PREFIX}/etc/netmond.conf.sample
+ @${MKDIR} ${STAGEDIR}${DOCSDIR}
+ ${TAR} -zxf ${DISTDIR}/${PORTNAME}-2.2-b6.docs${EXTRACT_SUFX} -C ${STAGEDIR}${DOCSDIR}
.include <bsd.port.mk>
Modified: head/net-mgmt/netmond/distinfo
==============================================================================
--- head/net-mgmt/netmond/distinfo Fri Mar 7 15:59:54 2014 (r347403)
+++ head/net-mgmt/netmond/distinfo Fri Mar 7 16:20:41 2014 (r347404)
@@ -1,6 +1,4 @@
SHA256 (netmond-2.2-b6.tgz) = 2b31096f731e347b65ce2c2a11f1ce70af0d8d7a9ff0c49edf4b3c3b65d0befd
SIZE (netmond-2.2-b6.tgz) = 264500
-SHA256 (netmond-2.2-b6.patch1.tgz) = 0fa7aae8dcfce5ba735af2ec0dfd3fc7a7d4e991cf2dc331ed6714e3ad9d08e5
-SIZE (netmond-2.2-b6.patch1.tgz) = 18574
SHA256 (netmond-2.2-b6.docs.tgz) = 4cdad1003455c99ee1d3067a4db7a01f1db11247d2d5fe683c384f6d05ed79e8
SIZE (netmond-2.2-b6.docs.tgz) = 110692
Modified: head/net-mgmt/netmond/files/patch-AA
==============================================================================
--- head/net-mgmt/netmond/files/patch-AA Fri Mar 7 15:59:54 2014 (r347403)
+++ head/net-mgmt/netmond/files/patch-AA Fri Mar 7 16:20:41 2014 (r347404)
@@ -1,5 +1,5 @@
---- Makefile.in.orig Tue Nov 14 17:37:41 2006
-+++ Makefile.in Tue Nov 14 17:37:41 2006
+--- Makefile.in.orig Tue Jul 20 19:28:20 2004
++++ Makefile.in Thu Nov 2 13:35:27 2006
@@ -47,7 +47,7 @@
NETMOND_C = netmond.c netstate.c event.c session.c mib.c snmp.c router.c \
@@ -9,8 +9,8 @@
NETMOND_Y = calc.y parseconf.y
NETMOND_L = scanconf.l
NETMOND_G = version.c
---- dns.c.orig Tue Nov 14 17:37:41 2006
-+++ dns.c Tue Nov 14 17:37:41 2006
+--- dns.c.orig Mon Aug 25 18:19:04 2003
++++ dns.c Thu Nov 2 13:35:27 2006
@@ -149,6 +149,8 @@
{
SESSION *sd = method->sd;
@@ -63,8 +63,8 @@
{ 0, 0 }, /* no parameters used */
/* Non-initialized data */
---- event.c.orig Tue Nov 14 17:37:41 2006
-+++ event.c Tue Nov 14 17:37:41 2006
+--- event.c.orig Thu Feb 27 17:42:32 2003
++++ event.c Tue Nov 14 17:40:52 2006
@@ -288,7 +288,7 @@
#ifdef HAVE_PTHREAD
pthread_mutex_lock(&localtime_lock);
@@ -74,8 +74,8 @@
defect = tm->tm_sec + 60 * tm->tm_min + 3600 * tm->tm_hour + off;
#ifdef HAVE_PTHREAD
pthread_mutex_unlock(&localtime_lock);
---- netmon.h.orig Tue Nov 14 17:37:41 2006
-+++ netmon.h Tue Nov 14 17:37:41 2006
+--- netmon.h.orig Tue Aug 26 10:00:38 2003
++++ netmon.h Thu Dec 28 13:31:06 2006
@@ -14,6 +14,9 @@
#include <sys/socket.h>
#include <sys/time.h>
@@ -98,16 +98,21 @@
#define DEFAULT_WATCHDOG 600 /* 10 min */
#define POLLING_MIN 30 /* 30 sec */
-@@ -90,6 +96,8 @@
+@@ -88,9 +94,13 @@
+ typedef struct timeval TIMEVAL;
+ typedef unsigned long oid;
++#define STATE_UNKNOWN 0
#define STATE_UP 1
#define STATE_DOWN 2
+#define STATE_DEGRADED 3
+#define STATE_WARNING 4
#define BGP_ESTABLISHED 6
++#define ENV_NORMAL 1
#define ENV_NOTPRESENT 5
-@@ -111,6 +119,9 @@
+ #define OBJ_STATE 0
+@@ -111,6 +121,9 @@
#define TYPE_ENVFAN 9
#define TYPE_ENVPS 10
@@ -117,7 +122,31 @@
struct object_ent;
struct method_ent;
-@@ -385,13 +396,14 @@
+@@ -250,6 +263,7 @@
+
+ int state; /* current operational status (UP/DOWN/...) */
+ int prev_state; /* previous operational status */
++ int ignore_state; /* if =1, ignore this interface while parent object state evaluating */
+ TIMEVAL last_request; /* last time interface requested */
+ TIMEVAL prev_request; /* previous time interface requested */
+ TIMEVAL last_reply; /* last time interface reply */
+@@ -294,6 +308,7 @@
+ int asn; /* AS number */
+ char *descr; /* AS description */
+ char *datadir; /* directory where store data */
++ int ignore_state; /* if =1, ignore this AS while parent object state evaluating */
+ SAVE *save_list; /* list of save methods */
+ GROUP_REF *ns_acl; /* netstate client access list */
+
+@@ -325,6 +340,7 @@
+ int type; /* type of gauge: TYPE_ENVTEMP, etc */
+ char *descr; /* env mon description */
+ char *datadir; /* directory where store data */
++ int ignore_state; /* if =1, ignore this ENV while parent object state evaluating */
+ SAVE *save_list; /* list of save methods */
+ GROUP_REF *ns_acl; /* netstate client access list */
+
+@@ -385,13 +401,14 @@
struct method_ent *method; /* session method */
int sock; /* socket file descriptor */
struct sockaddr peer; /* address of peer */
@@ -133,7 +162,7 @@
/* returned values */
int data_int; /* data length or chat-script matchs */
char *data_ptr; /* pointer to resulting data if any */
-@@ -428,6 +440,8 @@
+@@ -428,6 +445,8 @@
u_short rport; /* remote port number, 0=unused */
int timeout; /* number of seconds until first timeout */
int retries; /* number of retries before timeout */
@@ -142,7 +171,7 @@
union {
struct ping_param {
short send; /* ICMP echo request packets to send */
-@@ -530,7 +544,9 @@
+@@ -530,7 +549,9 @@
char *descr; /* object description */
char *datadir; /* directory where store data */
char *address; /* domain name or dotted IP address */
@@ -152,17 +181,18 @@
int polling; /* polling period in seconds */
int saving; /* saving period in seconds */
int sync; /* polling counter to synchronize saving */
-@@ -544,6 +560,9 @@
+@@ -544,6 +565,10 @@
int state; /* current operational status (UP/DOWN/...) */
int prev_state; /* previous operational status */
++ int ignore_state; /* if =1, ignore this obj while parent object state evaluating */
+ int mths_ok; /* count of Ok finished methods */
+ int mths_fail; /* count of Failed methods */
+ int smths_fail; /* count of Failed services methods */
TIMEVAL last_request; /* last time method requested */
TIMEVAL prev_request; /* previous time method requested */
TIMEVAL last_reply; /* last time method reply */
-@@ -574,7 +593,14 @@
+@@ -574,17 +599,29 @@
typedef struct config_ent {
char *rootdir; /* default work directory */
@@ -177,7 +207,8 @@
int polling; /* default polling interval in seconds */
int saving; /* default saving interval in seconds */
int timeout; /* default timeout in seconds */
-@@ -582,9 +608,13 @@
+ int retries; /* default number of retries */
++ int compatibility_flag; /* */
int enable_traps; /* enable SNMP traps */
int source_traps; /* match src-addr and agent-addr of traps */
@@ -191,7 +222,15 @@
int ns_timo; /* client timeout in seconds */
GROUP_REF *ns_acl; /* netstate client access list */
-@@ -733,6 +763,19 @@
+@@ -616,6 +653,7 @@
+ extern int netstate_sock;
+ extern int Cflag;
+ extern int syslog_initialized;
++extern int compatibility_flag;
+
+ /*
+ * Function prototypes
+@@ -733,6 +771,19 @@
void tcp_start __P((METHOD *));
void tcp_stop __P((METHOD *));
int match_expect __P((SESSION *, CHATSCRIPT *, char *));
@@ -211,9 +250,18 @@
/* udp.c */
int udp_init __P((OBJECT *, METHOD *));
---- netmond.c.orig Tue Nov 14 17:37:41 2006
-+++ netmond.c Tue Nov 14 17:37:41 2006
-@@ -79,7 +79,6 @@
+--- netmond.c.orig Tue Jul 20 17:57:19 2004
++++ netmond.c Thu Dec 28 13:31:06 2006
+@@ -62,6 +62,8 @@
+ pid_t mypid; /* my self PID */
+ int syslog_initialized; /* syslog ready to use */
+ int syslog_facility; /* current syslog facility */
++int compatibility_flag = 1; /* version backward compatibility flag.
++ default - work like previous version */
+
+ #ifdef HAVE_PTHREAD
+ pthread_t main_thr;
+@@ -79,7 +81,6 @@
static int reconfig_pending;
static int watchdog_timeout;
static int watchdog_pending;
@@ -221,7 +269,7 @@
static struct sighandler_ent {
int sig;
int flags;
-@@ -254,8 +253,7 @@
+@@ -254,8 +255,7 @@
/*
* Make pid file.
*/
@@ -231,7 +279,17 @@
if ((fp = fopen(buf, "w")) != NULL) {
fprintf(fp, "%d\n", (int)mypid);
fclose(fp);
-@@ -626,6 +624,11 @@
+@@ -380,7 +380,8 @@
+ #ifdef HAVE_PTHREAD
+ reconfig_pending = 0;
+ #else
+- reconfig_pending = -1;
++ // reconfig_pending = -1;
++ reconfig_pending = 0;
+ #endif
+ }
+ }
+@@ -626,73 +627,159 @@
TIMEVAL tv;
VARIABLE *var;
OBJECT *service;
@@ -240,41 +298,41 @@
+ BGP_PEER *bgp_peer;
+ ENV_MON *env;
+ ENV_GAUGE *gauge;
++ char *buf;
++ ssize_t buf_len;
/* current timestamp */
gettimeofday(&tv, NULL);
-@@ -638,19 +641,38 @@
- /*
- * Method list aborted or Start Trap received.
- */
-+ object->mths_fail++;
-+ } else {
-+ object->mths_ok++;
-+ }
-+ if (method->next) {
-+ /*
-+ * Advance to next object method.
-+ */
-+ method = method->next;
-+ (*method->start)(method);
-+ return;
-+ }
-+
-+// report(LOG_ERR, "method_finished: '%s' ok=%d f=%d sf=%d",object->name,object->mths_ok,object->mths_fail);
-+ /*
-+ * Method list done.
-+ */
-+
-+ object->prev_reply = object->last_reply;
-+ object->last_reply = tv; /* last reply timestamp */
-
+-
+ /* save method diagnostic */
+- if (method && diag && (var = get_var(object->var_list, method->name)) != NULL)
+- str2var(var, diag);
+-
+- if (!method || !ok) {
+- /*
+- * Method list aborted or Start Trap received.
+- */
+-
- /* update object operational status */
- object->prev_state = object->state;
-+ /* update object operational status */
-+ object->prev_state = object->state;
-+ if ( object->mths_ok == 0 ) {
++ if (method && diag && (var = get_var(object->var_list, method->name)) != NULL) {
++ str2var(var, diag);
++ /* save method return value */
++ buf_len = strlen(method->name)+4;
++ buf = malloc(buf_len);
++ if ( buf ) {
++ snprintf(buf,buf_len,"%s.ok",method->name);
++ if ((var = get_var(object->var_list, buf)) != NULL)
++ set_var(var, INTEGER, &ok, sizeof(ok));
++ free(buf);
++ } else {
++ report(LOG_ERR, "method_finished(%s!):.ok malloc: %m", object->name,method->name);
++ }
++ }
++ if ( compatibility_flag ) {
++ if (!method || !ok) {
object->state = STATE_DOWN;
-
+-
if (object->state != object->prev_state)
object->last_change = tv;
-
@@ -285,8 +343,20 @@
-
/* stop anything here */
object_stop(object);
+-
+ for (service = object->service; service; service = service->next)
+ object_stop(service);
-@@ -670,29 +692,48 @@
+ set_none_state(object);
+-
+ save_object_state(object);
+-
+ /* stop data saving on the object */
+ remove_event(save_object_data, object);
+-
+ /* keep touching the object if required */
+ if (object->polling > 0) {
+ tv.tv_sec += object->polling / 2;
add_event(&tv, start_method_list, object);
}
return;
@@ -297,68 +367,129 @@
- * Advance to next object method.
- */
-
-- method = method->next;
-- (*method->start)(method);
-- return;
++ }
++ if (method->next) {
++ method = method->next;
++ (*method->start)(method);
++ return;
++ }
++ object->prev_reply = object->last_reply;
++ object->last_reply = tv; /* last reply timestamp */
++
++ /* update object operational status */
++ object->prev_state = object->state;
++ object->state = STATE_UP;
++
++ } else {
++ if (!method || !ok) {
++ object->mths_fail++;
++ } else {
++ object->mths_ok++;
++ }
++ if (method && method->next) {
++ /* Advance to next object method. */
+ method = method->next;
+ (*method->start)(method);
+ return;
- }
--
++ }
++ /* Method list done. */
++ object->prev_reply = object->last_reply;
++ object->last_reply = tv; /* last reply timestamp */
++
++ /* update object operational status */
++ object->prev_state = object->state;
++ if ( object->mths_ok == 0 ) {
++ object->state = STATE_DOWN;
+
- /*
- * Method list done.
- */
--
++ if (object->state != object->prev_state)
++ object->last_change = tv;
++#ifdef DEBUG
++ if (object->prev_state != STATE_DOWN)
++ dprintf(("object \"%s\" change state to DOWN\n", object->name));
++#endif
++ /* stop anything here */
++ object_stop(object);
+
- object->prev_reply = object->last_reply;
- object->last_reply = tv; /* last reply timestamp */
--
++ for (service = object->service; service; service = service->next)
++ object_stop(service);
+
- /* update object operational status */
- object->prev_state = object->state;
- object->state = STATE_UP;
--
-+ } else {
-+ if ( object->mths_fail ) {
-+ object->state = STATE_DEGRADED;
++ set_none_state(object);
++
++ save_object_state(object);
++
++ /* stop data saving on the object */
++ remove_event(save_object_data, object);
+
++ /* keep touching the object if required */
++ if (object->polling > 0) {
++ tv.tv_sec += object->polling / 2;
++ add_event(&tv, start_method_list, object);
++ }
++ return;
+ } else {
-+ object->state = STATE_UP;
-+ for (service = object->service; service; service = service->next) {
-+ if (service->state != STATE_UP) {
-+ object->state = STATE_WARNING;
-+ break;
++ if ( object->mths_fail ) {
++ object->state = STATE_DEGRADED;
++ } else {
++ object->state = STATE_UP;
++ for (service = object->service; service; service = service->next) {
++ if (!service->ignore_state && service->state != STATE_UP) {
++ object->state = STATE_WARNING;
++ break;
++ }
+ }
-+ }
-+ for (interface = object->interface; interface; interface = interface->next) {
-+ if (interface->state != STATE_UP) {
++ for (interface = object->interface; interface; interface = interface->next) {
++ if (!interface->ignore_state && interface->state != STATE_UP) {
+ object->state = STATE_WARNING;
+ break;
+ }
-+ }
-+ for ( bgp = object->bgp; bgp; bgp = bgp->next) {
-+ for ( bgp_peer = bgp->peer; bgp_peer; bgp_peer=bgp_peer->next) {
++ }
++ for ( bgp = object->bgp; bgp; bgp = bgp->next) {
++ if (bgp->ignore_state ) continue;
++ for ( bgp_peer = bgp->peer; bgp_peer; bgp_peer=bgp_peer->next) {
+ if ( bgp_peer->state != BGP_ESTABLISHED){
+ object->state = STATE_WARNING;
+ break;
+ }
-+ }
++ }
+ if (object->state == STATE_WARNING)
+ break;
-+ }
-+ for (env = object->env; env; env = env->next) {
-+ for( gauge = env->gauge; gauge; gauge=gauge->next) {
-+ if (gauge->state != STATE_UP) {
-+ object->state = STATE_WARNING;
-+ break;
-+ }
++ }
++ for (env = object->env; env; env = env->next) {
++ if (env->ignore_state ) continue;
++ for( gauge = env->gauge; gauge; gauge=gauge->next) {
++ if (gauge->state != ENV_NORMAL && gauge->state != ENV_NOTPRESENT ) {
++ object->state = STATE_WARNING;
++ break;
++ }
++ }
++ if (object->state == STATE_WARNING)
++ break;
+ }
-+ if (object->state == STATE_WARNING)
-+ break;
-+ }
++ }
+ }
++ object->mths_ok = 0;
++ object->mths_fail = 0;
++ object->smths_fail = 0;
+ }
-+ object->mths_ok = 0;
-+ object->mths_fail = 0;
-+ object->smths_fail = 0;
if (object->state != object->prev_state)
object->last_change = tv;
-@@ -831,6 +872,20 @@
+@@ -827,10 +914,25 @@
+ /* child would be terminated by signals */
+ sigprocmask(SIG_SETMASK, NULL, &sigmask);
+ sigprocmask(SIG_UNBLOCK, &sigmask, NULL);
+-
++ close(netstate_sock);
++
/* make session leader to be able killpg() latter */
setsid();
@@ -379,7 +510,7 @@
execve(file, av, environ);
report(LOG_ERR, "execve %s: %m", file);
_exit(127);
-@@ -928,8 +983,7 @@
+@@ -928,8 +1030,7 @@
#endif
{
char pidfile[100];
@@ -389,8 +520,8 @@
(void)unlink(pidfile);
report(LOG_CRIT, "aborted by signal %d", sig);
} else report(LOG_INFO, "interrupted by signal %d", sig);
---- netstate.c.orig Tue Nov 14 17:37:41 2006
-+++ netstate.c Tue Nov 14 17:37:41 2006
+--- netstate.c.orig Tue Aug 26 10:54:09 2003
++++ netstate.c Thu Nov 2 13:35:27 2006
@@ -128,7 +128,7 @@
memset(&sin, 0, sizeof(sin));
sin.sin_family = AF_INET;
@@ -427,17 +558,25 @@
next = input;
if ((cp = my_strsep(&next, " ")) == NULL) {
bad_input++;
---- parseconf.y.orig Tue Nov 14 17:37:41 2006
-+++ parseconf.y Tue Nov 14 17:37:41 2006
+--- parseconf.y.orig Tue Aug 26 10:53:30 2003
++++ parseconf.y Thu Dec 28 13:31:06 2006
@@ -13,6 +13,7 @@
#endif
#include <sys/types.h>
-+#include <limits.h>
++#include <sys/limits.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
-@@ -197,11 +198,36 @@
+@@ -117,6 +118,7 @@
+ first_save = NULL;
+
+ global_var_list = 0;
++ config.compatibility_flag = 1;
+ }
+
+ static char *
+@@ -197,11 +199,37 @@
BGP_AS *bgp;
ENV_MON *env;
char *cp, buf[1024];
@@ -448,6 +587,7 @@
report(LOG_ERR, "%s: rootdir unspecified", config_file);
return NULL;
}
++ compatibility_flag = config.compatibility_flag;
+ if (!config.srcaddress)
+ bzero(&config.ip_srcaddr, sizeof(struct in_addr));
+ if (!config.ns_address)
@@ -474,7 +614,7 @@
if (config.polling) {
if (!config.timeout)
config.timeout = TIMEOUT_DEFAULT;
-@@ -273,6 +299,7 @@
+@@ -273,6 +301,7 @@
for (service = target->service; service; service = service->next) {
service->ip_addr = target->ip_addr;
@@ -482,7 +622,42 @@
service->parent = target;
(void)strcpy(cp, "/");
-@@ -901,7 +928,9 @@
+@@ -329,6 +358,8 @@
+ METHOD *method;
+ CHATSCRIPT *cs;
+ REFERENCE *ref;
++ char *buf;
++ ssize_t buf_len;
+
+ /* sanity check */
+ if (!chain || !item) {
+@@ -362,6 +393,16 @@
+ yyerror("Out of memory");
+ return 0;
+ }
++ buf_len = strlen(method->name)+4 ;
++ buf = malloc( buf_len );
++ if (buf)
++ snprintf(buf,buf_len,"%s.ok",method->name);
++ if (!buf || !add_var(&curr->var_list, buf)) {
++ yyerror("Out of memory");
++ return 0;
++ }
++ free(buf);
++
+ /* bind variable references */
+ for (cs = method->chatscript; cs; cs = cs->next) {
+ for (ref = cs->var_ref; ref; ref = ref->next) {
+@@ -854,7 +895,7 @@
+ }
+ /* check for duplicates */
+ for (curr = *chain; curr; curr = curr->next) {
+- if (!strcasecmp(curr->name, item->name)) {
++ if ( chain == &first_save && !strcasecmp(curr->name, item->name)) {
+ yyerror("save name \"%s\" duplicated", item->name);
+ return 0;
+ }
+@@ -901,7 +942,9 @@
char *argument;
{
METHOD *new;
@@ -493,7 +668,7 @@
if ((new = (METHOD *)malloc(sizeof(METHOD))) == NULL) {
yyerror("Out of memory");
return NULL;
-@@ -915,10 +944,24 @@
+@@ -915,10 +958,24 @@
yyerror("Out of memory");
return 0;
}
@@ -520,7 +695,7 @@
if (new->chatscript) {
new->chatscript = dup_chatscript(new->name, new->argument, new->chatscript);
if (!new->chatscript) return NULL;
-@@ -1342,6 +1385,9 @@
+@@ -1342,11 +1399,15 @@
/* Lexical analyzer return values */
%token TOKEN_ROOTDIR
@@ -530,7 +705,13 @@
%token TOKEN_TIMEFMT
%token TOKEN_POLLING
%token TOKEN_SAVING
-@@ -1354,6 +1400,7 @@
+ %token TOKEN_TIMEOUT
+ %token TOKEN_RETRIES
++%token TOKEN_OMULSTATES
+
+ %token TOKEN_GROUP
+ %token TOKEN_PERMIT
+@@ -1354,6 +1415,7 @@
%token TOKEN_NETSTATE
%token TOKEN_PORT
@@ -538,7 +719,7 @@
%token TOKEN_SAVE
%token TOKEN_FILE
-@@ -1365,6 +1412,7 @@
+@@ -1365,6 +1427,7 @@
%token TOKEN_OBJECT
%token TOKEN_ADDRESS
@@ -546,7 +727,7 @@
%token TOKEN_DESCRIPTION
%token TOKEN_SERVICE
%token TOKEN_INTERFACE
-@@ -1398,6 +1446,7 @@
+@@ -1398,11 +1461,13 @@
%token TOKEN_V2
%token TOKEN_TRAP
@@ -554,7 +735,22 @@
%token TOKEN_SOURCECHECK
%token TOKEN_COMMUNITY
%token TOKEN_ENTERPRISE
-@@ -1442,6 +1491,60 @@
+ %token TOKEN_SPECIFIC
+ %token TRAP_GENERIC
++%token TOKEN_IGNORESTATE
+
+ %token <number> TOKEN_NUMBER
+ %token <string> TOKEN_STRING
+@@ -1410,7 +1475,7 @@
+ %token <string> VAR_OID
+
+ %type <number> optional_number
+-%type <string> optional_string quoted_string legal_string multiline_string
++%type <string> optional_string quoted_string legal_string multiline_string optional_multiline_string
+ %type <save> get_save
+ %type <method> get_method
+ %type <trap> get_trap
+@@ -1442,6 +1507,60 @@
YYABORT;
}
}
@@ -615,7 +811,18 @@
| TOKEN_TIMEFMT quoted_string
{
if (config.timefmt) {
-@@ -1531,6 +1634,17 @@
+@@ -1485,6 +1604,10 @@
+ }
+ config.retries = $2;
+ }
++ | TOKEN_OMULSTATES
++ {
++ config.compatibility_flag = 0;
++ }
+ | TOKEN_NETSTATE '{' netstate_config '}'
+ {
+ if (!config.ns_port) {
+@@ -1531,6 +1654,17 @@
{
config.source_traps = 1;
}
@@ -633,7 +840,7 @@
| TOKEN_TRAP legal_string '{' trap_config '}'
{
trap.name = $2;
-@@ -1556,6 +1670,13 @@
+@@ -1556,6 +1690,13 @@
yyerror("object address unspecified");
YYABORT;
}
@@ -647,7 +854,7 @@
/* if ((object.interface || object.ifgroup ||
object.bgp || object.env) &&
!find_method(object.method_list, "ROUTER")) {
-@@ -1637,6 +1758,17 @@
+@@ -1637,6 +1778,17 @@
YYABORT;
}
}
@@ -665,7 +872,16 @@
| TOKEN_PERMIT quoted_string
{
/* for backward compatibility */
-@@ -1763,6 +1895,19 @@
+@@ -1701,7 +1853,7 @@
+ }
+ save.state = $2;
+ }
+- | TOKEN_WHEN multiline_string TOKEN_NUMBER optional_string
++ | TOKEN_WHEN multiline_string TOKEN_NUMBER optional_multiline_string
+ {
+ if (save.when) {
+ yyerror("save when condition duplicated");
+@@ -1763,6 +1915,19 @@
method.start = echo_start;
method.stop = echo_stop;
}
@@ -685,11 +901,11 @@
| TOKEN_PORT TOKEN_NUMBER
{
if (method.protocol &&
-@@ -1808,12 +1953,30 @@
+@@ -1808,12 +1973,30 @@
}
}
}
-+ | TOKEN_WHEN multiline_string TOKEN_NUMBER optional_string
++ | TOKEN_WHEN multiline_string TOKEN_NUMBER optional_multiline_string
+ {
+ method.protocol = WHEN_PROTO;
+ if (method.when) {
@@ -716,7 +932,7 @@
if ($2 < 1 || $2 > POLLING_MIN) {
yyerror("invalid timeout value (min 1 max %d sec.)",
POLLING_MIN);
-@@ -1827,6 +1990,10 @@
+@@ -1827,6 +2010,10 @@
yyerror("retries statement duplicated");
YYABORT;
}
@@ -727,7 +943,7 @@
if ($2 < 1 || $2 > POLLING_MIN) {
yyerror("invalid retries number (min 1 max %d)",
POLLING_MIN);
-@@ -1838,7 +2005,8 @@
+@@ -1838,7 +2025,8 @@
{
if (method.protocol &&
method.protocol != IPPROTO_TCP &&
@@ -737,7 +953,7 @@
yyerror("no suitable method protocol");
YYABORT;
}
-@@ -2095,6 +2263,18 @@
+@@ -2095,6 +2283,18 @@
}
object.address = $2;
}
@@ -756,7 +972,7 @@
| TOKEN_POLLING TOKEN_NUMBER
{
if (object.polling) {
-@@ -2241,7 +2421,7 @@
+@@ -2241,7 +2441,7 @@
}
| TOKEN_INTERFACE TOKEN_NUMBER
{
@@ -765,7 +981,7 @@
yyerror("interface index out of range");
YYABORT;
}
-@@ -2252,7 +2432,7 @@
+@@ -2252,7 +2452,7 @@
}
| TOKEN_INTERFACE TOKEN_NUMBER '{' interface_config '}'
{
@@ -774,9 +990,76 @@
yyerror("interface index out of range");
YYABORT;
}
---- ping.c.orig Tue Nov 14 17:37:41 2006
-+++ ping.c Tue Nov 14 17:37:41 2006
-@@ -368,6 +368,7 @@
+@@ -2473,6 +2673,10 @@
+ YYABORT;
+ }
+ }
++ | TOKEN_IGNORESTATE
++ {
++ subobject.ignore_state = 1;
++ }
+ ;
+
+ interface_config: /* empty */
+@@ -2530,6 +2734,10 @@
+ YYABORT;
+ }
+ }
++ | TOKEN_IGNORESTATE
++ {
++ interface.ignore_state = 1;
++ }
+ ;
+
+ bgp_config: /* empty */
+@@ -2580,6 +2788,10 @@
+ }
+ free($2);
+ }
++ | TOKEN_IGNORESTATE
++ {
++ bgp_as.ignore_state = 1;
++ }
+ ;
+
+ env_config: /* empty */
+@@ -2629,6 +2841,10 @@
+ YYABORT;
+ }
+ }
++ | TOKEN_IGNORESTATE
++ {
++ env_mon.ignore_state = 1;
++ }
+ ;
+
+ get_save: legal_string optional_string
+@@ -2918,6 +3134,12 @@
+ $$ = NULL;
+ }
+ | quoted_string
++ ;
++optional_multiline_string:
++ {
++ $$ = NULL;
++ }
++ | multiline_string
+ ;
+
+ %%
+--- ping.c.orig Fri Aug 22 11:07:53 2003
++++ ping.c Thu Dec 28 13:31:06 2006
+@@ -352,7 +352,8 @@
+ dprintf(("check_netpath(%s)\n", target->name));
+
+ for (nexthop = target->nexthop; nexthop; nexthop = nexthop->next) {
+- if ((nexthop->target && nexthop->target->state != STATE_UP) ||
++ if ((nexthop->target && nexthop->target->state == STATE_UNKNOWN) ||
++ (nexthop->target && nexthop->target->state == STATE_DOWN) ||
+ (nexthop->interface && nexthop->interface->state != STATE_UP))
+ return 0;
+ }
+@@ -368,6 +369,7 @@
u_char buf[MAX_PACKETSZ];
struct ip *ip;
struct icmp *icmp;
@@ -784,7 +1067,7 @@
struct sockaddr_in *to = (struct sockaddr_in *)&sd->peer;
int header_len = sizeof(struct ip);
int total_len = method->rport ? method->rport : MIN_PACKETSZ;
-@@ -400,7 +401,7 @@
+@@ -400,7 +402,7 @@
#endif
ip->ip_ttl = IPDEFTTL;
ip->ip_p = IPPROTO_ICMP;
@@ -793,7 +1076,7 @@
ip->ip_dst = to->sin_addr;
if (rr_opt) { /* IP Option: Record Route */
-@@ -423,6 +424,7 @@
+@@ -423,6 +425,7 @@
memcpy(icmp->icmp_data, &sd->buf, sizeof(TIMEVAL *));
icmp->icmp_cksum = in_cksum((u_short *)icmp, total_len - header_len);
@@ -801,7 +1084,7 @@
#ifdef NO_ICMP_ERRORS
total_len = send(sd->sock, (char *)buf, total_len, 0);
#else
-@@ -600,6 +602,8 @@
+@@ -600,6 +603,8 @@
{
SESSION *sd = method->sd;
int tmpval;
@@ -810,7 +1093,7 @@
/* sanity check */
if (!sd) return;
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-ports-all
mailing list