Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Mar 2014 16:20:41 +0000 (UTC)
From:      Rene Ladan <rene@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r347404 - in head/net-mgmt/netmond: . files
Message-ID:  <201403071620.s27GKfZM027001@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@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@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 ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201403071620.s27GKfZM027001>