Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > c0394d3068b44395994f031447c8052d > files > 20

net-snmp-5.3.2.2-7.el5_4.2.src.rpm

Add support for icmpMsgStatsTable

Written-By: c_varun@users.sourceforge.net http://sourceforge.net/tracker/index.php?func=detail&aid=1735608&group_id=12694&atid=312694
Modified-By: Jan Safranek <jsafrane@redhat.com>
             http://sourceforge.net/tracker/index.php?func=detail&aid=1783447&group_id=12694&atid=312694
Reviewed-By: Radek Vokal <rvokal@redhat.com?

--- orig/agent/mibgroup/mibII/icmp.c	2007-08-27 12:00:10.000000000 +0200
+++ net-snmp-5.3.1/agent/mibgroup/mibII/icmp.c	2007-08-27 16:01:48.000000000 +0200
@@ -8,6 +8,13 @@
 #if HAVE_NETINET_IP_ICMP_H
 #include <netinet/ip_icmp.h>
 #endif
+
+#ifdef INET6
+#if HAVE_NETINET_ICMP6_H
+#include <netinet/icmp6.h>
+#endif
+#endif /* INET6 */
+
 #if HAVE_NETINET_ICMP_VAR_H
 #include <netinet/icmp_var.h>
 #endif
@@ -29,7 +36,6 @@
 #ifndef ICMP_STATS_CACHE_TIMEOUT
 #define ICMP_STATS_CACHE_TIMEOUT	MIB_STATS_CACHE_TIMEOUT
 #endif
-
         /*********************
 	 *
 	 *  Kernel & interface information,
@@ -50,6 +56,7 @@
  */
 oid             icmp_oid[] = { SNMP_OID_MIB2, 5 };
 oid             icmp_stats_tbl_oid[] = { SNMP_OID_MIB2, 5, 29 };
+oid             icmp_msg_stats_tbl_oid[] = { SNMP_OID_MIB2, 5, 30 };
 #ifdef USING_MIBII_IP_MODULE
 extern oid      ip_module_oid[];
 extern int      ip_module_oid_len;
@@ -67,6 +74,28 @@
 
 struct icmp_stats_table_entry icmp_stats_table[2];
  
+#define ICMP_MSG_STATS_HAS_IN 1
+#define ICMP_MSG_STATS_HAS_OUT 2
+
+struct icmp_msg_stats_table_entry {
+	uint32_t ipVer;
+	uint32_t icmpMsgStatsType;
+	uint32_t icmpMsgStatsInPkts;
+	uint32_t icmpMsgStatsOutPkts;
+	int flags;
+};
+
+#define ICMP_MSG_STATS_IPV4_COUNT 11
+
+#ifdef INET6
+#define ICMP_MSG_STATS_IPV6_COUNT 14
+#else 
+#define ICMP_MSG_STATS_IPV6_COUNT 0
+#endif /* INET6 */
+
+
+struct icmp_msg_stats_table_entry icmp_msg_stats_table[ICMP_MSG_STATS_IPV4_COUNT+ICMP_MSG_STATS_IPV6_COUNT];
+
 int
 icmp_stats_load(netsnmp_cache *cache, void *vmagic)
 {
@@ -109,7 +138,165 @@
 	return 0;
 }
 
+int
+icmp_msg_stats_load(netsnmp_cache *cache, void *vmagic)
+{
+	struct icmp_mib v4icmp;
+	struct icmp6_mib v6icmp;
+	int i;
+	
+	memset(&icmp_msg_stats_table, 0, sizeof(icmp_msg_stats_table));
+	linux_read_icmp_stat(&v4icmp);
+	
+	/* set the IP version and default flags */
+	for (i=0; i<ICMP_MSG_STATS_IPV4_COUNT; i++) {
+		icmp_msg_stats_table[i].ipVer = 1;
+		icmp_msg_stats_table[i].flags = ICMP_MSG_STATS_HAS_IN | ICMP_MSG_STATS_HAS_OUT;
+	}
+#ifdef INET6
+	for (i=0; i<ICMP_MSG_STATS_IPV6_COUNT; i++) {
+		icmp_msg_stats_table[ICMP_MSG_STATS_IPV4_COUNT+i].ipVer = 2;
+		icmp_msg_stats_table[ICMP_MSG_STATS_IPV4_COUNT+i].flags = ICMP_MSG_STATS_HAS_IN | ICMP_MSG_STATS_HAS_OUT;
+	}
+#endif /* INET6 */
+	
+	i=0;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_ECHOREPLY;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInEchoReps;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutEchoReps;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_DEST_UNREACH;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInDestUnreachs;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutDestUnreachs;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_SOURCE_QUENCH;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInSrcQuenchs;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutSrcQuenchs;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_REDIRECT;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInRedirects;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutRedirects;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_ECHO;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInEchos;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutEchos;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_TIME_EXCEEDED;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInTimeExcds;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutTimeExcds;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_PARAMETERPROB;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInParmProbs;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutParmProbs;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_TIMESTAMP;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInTimestamps;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutTimestamps;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_TIMESTAMPREPLY;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInTimestampReps;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutTimestampReps;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_ADDRESS;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInAddrMasks;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutAddrMasks;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP_ADDRESSREPLY;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v4icmp.icmpInAddrMaskReps;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v4icmp.icmpOutAddrMaskReps;
+	i++;
+
+#ifdef INET6
+	linux_read_icmp6_stat(&v6icmp);
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP6_DST_UNREACH;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InDestUnreachs;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutDestUnreachs;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP6_PACKET_TOO_BIG;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InPktTooBigs;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutPktTooBigs;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP6_TIME_EXCEEDED;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InTimeExcds;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutTimeExcds;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP6_PARAM_PROB;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InParmProblems;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutParmProblems;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP6_ECHO_REQUEST;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InEchos;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = 0;
+	icmp_msg_stats_table[i].flags = ICMP_MSG_STATS_HAS_IN;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ICMP6_ECHO_REPLY;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InEchoReplies;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutEchoReplies;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = MLD_LISTENER_QUERY;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InGroupMembQueries;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = 0;
+	icmp_msg_stats_table[i].flags = ICMP_MSG_STATS_HAS_IN;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = MLD_LISTENER_REPORT;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InGroupMembResponses;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutGroupMembResponses;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = MLD_LISTENER_REDUCTION;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InGroupMembReductions;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutGroupMembReductions;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ND_ROUTER_SOLICIT;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InRouterSolicits;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutRouterSolicits;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ND_ROUTER_ADVERT;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InRouterAdvertisements;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = 0;
+	icmp_msg_stats_table[i].flags = ICMP_MSG_STATS_HAS_IN;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ND_NEIGHBOR_SOLICIT;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InNeighborSolicits;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutNeighborSolicits;
+	i++;
+	
+	icmp_msg_stats_table[i].icmpMsgStatsType = ND_NEIGHBOR_ADVERT;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InNeighborAdvertisements;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutNeighborAdvertisements;
+	i++;
+
+	icmp_msg_stats_table[i].icmpMsgStatsType = ND_REDIRECT;
+	icmp_msg_stats_table[i].icmpMsgStatsInPkts = v6icmp.icmp6InRedirects;
+	icmp_msg_stats_table[i].icmpMsgStatsOutPkts = v6icmp.icmp6OutRedirects;
+#endif /* INET6 */
+	
+	return 0;
+}
+
 netsnmp_variable_list *
+
 icmp_stats_next_entry( void **loop_context,
                      void **data_context,
                      netsnmp_variable_list *index,
@@ -148,14 +335,56 @@
         *data_context = NULL;
         return icmp_stats_next_entry(loop_context, data_context, index, data);
 }
+
+netsnmp_variable_list *
+icmp_msg_stats_next_entry( void **loop_context,
+                     void **data_context,
+                     netsnmp_variable_list *index,
+                     netsnmp_iterator_info *data)
+{
+	int i = (int)(*loop_context);
+	netsnmp_variable_list *idx = index;
+
+	if(i >= ICMP_MSG_STATS_IPV4_COUNT + ICMP_MSG_STATS_IPV6_COUNT)
+		return NULL;
+
+	/*set IP version */
+	snmp_set_var_typed_value(idx, ASN_INTEGER, (u_char *)&icmp_msg_stats_table[i].ipVer,
+                                sizeof(uint32_t));
+	idx = idx->next_variable;
+	/*set packet type */
+	snmp_set_var_typed_value(idx, ASN_INTEGER, (u_char *)&icmp_msg_stats_table[i].icmpMsgStatsType,
+                                sizeof(uint32_t));
+
+	*data_context = &icmp_msg_stats_table[i];
+	*loop_context = (void *)(++i);
+	
+	return index;
+}
+
+
+netsnmp_variable_list *
+icmp_msg_stats_first_entry( void **loop_context,
+                     void **data_context,
+                     netsnmp_variable_list *index,
+                     netsnmp_iterator_info *data)
+{
+    *loop_context = 0;
+    *data_context = NULL;
+    return icmp_msg_stats_next_entry(loop_context, data_context, index, data);
+}
+
 #endif
 
 void
 init_icmp(void)
 {
     netsnmp_handler_registration *reginfo;
+    netsnmp_handler_registration *msg_stats_reginfo;
     netsnmp_iterator_info *iinfo;
+    netsnmp_iterator_info *msg_stats_iinfo;
     netsnmp_table_registration_info *table_info;
+    netsnmp_table_registration_info *msg_stats_table_info;
 
     /*
      * register ourselves with the agent as a group of scalars...
@@ -165,6 +394,8 @@
 		    icmp_oid, OID_LENGTH(icmp_oid), HANDLER_CAN_RONLY);
     netsnmp_register_scalar_group(reginfo, ICMPINMSGS, ICMPOUTADDRMASKREPS);
 #ifdef linux
+    
+    /* register icmpStatsTable */
     reginfo = netsnmp_create_handler_registration("icmpStatsTable",
 		icmp_stats_table_handler, icmp_stats_tbl_oid,
 		OID_LENGTH(icmp_stats_tbl_oid), HANDLER_CAN_RONLY);
@@ -188,6 +419,35 @@
     iinfo->table_reginfo        = table_info;
 
     netsnmp_register_table_iterator(reginfo, iinfo);
+
+    
+    /* register icmpMsgStatsTable */
+    msg_stats_reginfo = netsnmp_create_handler_registration("icmpMsgStatsTable",
+		icmp_msg_stats_table_handler, icmp_msg_stats_tbl_oid,
+		OID_LENGTH(icmp_msg_stats_tbl_oid), HANDLER_CAN_RONLY);
+
+    msg_stats_table_info = SNMP_MALLOC_TYPEDEF(netsnmp_table_registration_info);
+    if (!msg_stats_table_info) {
+        return;
+    }
+
+    netsnmp_table_helper_add_indexes(msg_stats_table_info, ASN_INTEGER, ASN_INTEGER, 0);
+    msg_stats_table_info->min_column = ICMP_MSG_STAT_IN_PKTS;
+    msg_stats_table_info->max_column = ICMP_MSG_STAT_OUT_PKTS;
+
+    msg_stats_iinfo = SNMP_MALLOC_TYPEDEF(netsnmp_iterator_info);
+    if (!msg_stats_iinfo) {
+        return;
+    }
+    msg_stats_iinfo->get_first_data_point = icmp_msg_stats_first_entry;
+    msg_stats_iinfo->get_next_data_point  = icmp_msg_stats_next_entry;
+    msg_stats_iinfo->table_reginfo        = msg_stats_table_info;
+
+    netsnmp_register_table_iterator(msg_stats_reginfo, msg_stats_iinfo);
+    netsnmp_inject_handler( msg_stats_reginfo,
+		    netsnmp_get_cache_handler(ICMP_STATS_CACHE_TIMEOUT,
+			   		icmp_load, icmp_free,
+			   		icmp_msg_stats_tbl_oid, OID_LENGTH(icmp_msg_stats_tbl_oid)));
 #endif
     /*
      * .... with a local cache
@@ -693,6 +953,71 @@
 
 	return SNMP_ERR_NOERROR;
 }
+
+int
+icmp_msg_stats_table_handler(netsnmp_mib_handler  *handler,
+                 netsnmp_handler_registration *reginfo,
+                 netsnmp_agent_request_info   *reqinfo,
+                 netsnmp_request_info         *requests)
+{
+	netsnmp_request_info  *request;
+	netsnmp_variable_list *requestvb;
+	netsnmp_table_request_info *table_info;
+	struct icmp_msg_stats_table_entry   *entry;
+	oid subid;
+
+	switch (reqinfo->mode) {
+		case MODE_GET:
+			for (request=requests; request; request=request->next) {
+				requestvb = request->requestvb;
+				entry = (struct icmp_msg_stats_table_entry *)netsnmp_extract_iterator_context(request);
+				if (!entry)
+					continue;
+				table_info = netsnmp_extract_table_info(request);
+				subid      = table_info->colnum;
+
+				switch (subid) {
+					case ICMP_MSG_STAT_IN_PKTS:
+						if (entry->flags & ICMP_MSG_STATS_HAS_IN) {
+						    snmp_set_var_typed_value(requestvb, ASN_COUNTER,
+							    (u_char *)&entry->icmpMsgStatsInPkts, sizeof(uint32_t));
+						} else {
+							requestvb->type = SNMP_NOSUCHINSTANCE;
+						}
+						break;	
+					case ICMP_MSG_STAT_OUT_PKTS:
+						if (entry->flags & ICMP_MSG_STATS_HAS_OUT) {
+						    snmp_set_var_typed_value(requestvb, ASN_COUNTER,
+							    (u_char *)&entry->icmpMsgStatsOutPkts, sizeof(uint32_t));
+						} else {
+							requestvb->type = SNMP_NOSUCHINSTANCE;
+						}
+						break;	
+					default:
+						snmp_log(LOG_WARNING, "mibII/icmpMsgStatsTable: Unrecognised column (%d)\n",(int)subid);
+				}
+			}
+			break;
+		case MODE_GETNEXT:
+		case MODE_GETBULK:
+		case MODE_SET_RESERVE1:
+		case MODE_SET_RESERVE2:
+		case MODE_SET_ACTION:
+		case MODE_SET_COMMIT:
+		case MODE_SET_FREE:
+		case MODE_SET_UNDO:
+			snmp_log(LOG_WARNING, "mibII/icmpStatsTable: Unsupported mode (%d)\n",
+				reqinfo->mode);
+			break;
+		default:
+			snmp_log(LOG_WARNING, "mibII/icmpStatsTable: Unrecognised mode (%d)\n",
+				reqinfo->mode);
+			break;
+
+	}
+
+	return SNMP_ERR_NOERROR;
+}
 
         /*********************
          *
@@ -826,6 +1151,7 @@
         DEBUGMSGTL(("mibII/icmp", "Loaded ICMP Group (linux)\n"));
     }
     icmp_stats_load(cache, vmagic);
+    icmp_msg_stats_load(cache, vmagic);
     return ret_value;
 }
 #else		/* linux */
--- orig/agent/mibgroup/mibII/icmp.h	2007-08-27 12:00:10.000000000 +0200
+++ net-snmp-5.3.1/agent/mibgroup/mibII/icmp.h	2007-08-27 15:42:42.000000000 +0200
@@ -13,6 +13,7 @@
 extern void     init_icmp(void);
 extern Netsnmp_Node_Handler icmp_handler;
 extern Netsnmp_Node_Handler icmp_stats_table_handler;
+extern Netsnmp_Node_Handler icmp_msg_stats_table_handler;
 extern NetsnmpCacheLoad icmp_load;
 extern NetsnmpCacheFree icmp_free;
 
@@ -48,5 +49,12 @@
 #define ICMP_STAT_INMSG       2 
 #define ICMP_STAT_INERR       3 
 #define ICMP_STAT_OUTMSG      4 
-#define ICMP_STAT_OUTERR      5 
+#define ICMP_STAT_OUTERR      5
+
+#define ICMPMSGSTATSTABLE     30
+#define ICMP_MSG_STAT_IPVER    1
+#define ICMP_MSG_STAT_TYPE     2
+#define ICMP_MSG_STAT_IN_PKTS  3
+#define ICMP_MSG_STAT_OUT_PKTS 4
+
 #endif                          /* _MIBGROUP_ICMP_H */
--- orig/configure	2007-08-27 12:00:10.000000000 +0200
+++ net-snmp-5.3.1/configure	2007-08-27 15:42:42.000000000 +0200
@@ -19572,7 +19572,7 @@
 
 
 
-for ac_header in arpa/inet.h netinet/in_systm.h netinet/in.h netinet/ip_var.h netinet/tcp.h netinet/tcpip.h netinet/udp.h net/if.h netinet/in_var.h netinet/ip.h netinet/ip_icmp.h net/if_arp.h net/if_mib.h net/if_var.h netinet/if_ether.h netinet/tcp_timer.h netinet/tcp_var.h netinet/udp_var.h netinet/icmp_var.h netdb.h net/route.h
+for ac_header in arpa/inet.h netinet/in_systm.h netinet/in.h netinet/ip_var.h netinet/tcp.h netinet/tcpip.h netinet/udp.h net/if.h netinet/in_var.h netinet/ip.h netinet/ip_icmp.h netinet/icmp6.h net/if_arp.h net/if_mib.h net/if_var.h netinet/if_ether.h netinet/tcp_timer.h netinet/tcp_var.h netinet/udp_var.h netinet/icmp_var.h netdb.h net/route.h
 do
 as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_header" >&5
@@ -19620,6 +19620,9 @@
 #if HAVE_NETINET_IP_ICMP_H
 #include <netinet/ip_icmp.h>
 #endif
+#if HAVE_NETINET_ICMP6_H
+#include <netinet/icmp6.h>
+#endif
 #if HAVE_NETINET_TCP_H
 #include <netinet/tcp.h>
 #endif
--- orig/configure.in	2007-08-27 12:00:10.000000000 +0200
+++ net-snmp-5.3.1/configure.in	2007-08-27 15:42:42.000000000 +0200
@@ -2558,7 +2558,7 @@
 ])
 AC_CHECK_HEADERS(sys/timeout.h sys/un.h fstab.h sys/fs.h mtab.h ufs/fs.h sys/fixpoint.h machine/param.h sys/vm.h vm/vm.h sys/vmmeter.h sys/vmparam.h sys/vmmac.h sys/vmsystm.h sys/time.h sys/times.h sys/statvfs.h sys/vfs.h sys/mnttab.h sys/select.h mntent.h sys/mntent.h kstat.h utsname.h sys/utsname.h sys/cdefs.h getopt.h locale.h pthread.h sys/loadavg.h regex.h linux/tasks.h pwd.h grp.h utmpx.h)
 # Network headers
-AC_CHECK_HEADERS(arpa/inet.h netinet/in_systm.h netinet/in.h netinet/ip_var.h netinet/tcp.h netinet/tcpip.h netinet/udp.h net/if.h netinet/in_var.h netinet/ip.h netinet/ip_icmp.h net/if_arp.h net/if_mib.h net/if_var.h netinet/if_ether.h netinet/tcp_timer.h netinet/tcp_var.h netinet/udp_var.h netinet/icmp_var.h netdb.h net/route.h,,,
+AC_CHECK_HEADERS(arpa/inet.h netinet/in_systm.h netinet/in.h netinet/ip_var.h netinet/tcp.h netinet/tcpip.h netinet/udp.h net/if.h netinet/in_var.h netinet/ip.h netinet/ip_icmp.h netinet/icmp6.h net/if_arp.h net/if_mib.h net/if_var.h netinet/if_ether.h netinet/tcp_timer.h netinet/tcp_var.h netinet/udp_var.h netinet/icmp_var.h netdb.h net/route.h,,,
 [[
 #if HAVE_SYS_TYPES_H
 #include <sys/types.h>
@@ -2593,6 +2593,9 @@
 #if HAVE_NETINET_IP_ICMP_H
 #include <netinet/ip_icmp.h>
 #endif
+#if HAVE_NETINET_ICMP6_H
+#include <netinet/icmp6.h>
+#endif
 #if HAVE_NETINET_TCP_H
 #include <netinet/tcp.h>
 #endif
--- orig/include/net-snmp/net-snmp-config.h.in	2007-08-27 12:00:10.000000000 +0200
+++ net-snmp-5.3.1/include/net-snmp/net-snmp-config.h.in	2007-08-27 15:42:42.000000000 +0200
@@ -483,6 +483,9 @@
 /* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
 #undef HAVE_NETINET_IP_ICMP_H
 
+/* Define to 1 if you have the <netinet/icmp6.h> header file. */
+#undef HAVE_NETINET_ICMP6_H
+
 /* Define to 1 if you have the <netinet/ip_var.h> header file. */
 #undef HAVE_NETINET_IP_VAR_H
 
--- orig/win32/net-snmp/net-snmp-config.h.in	2007-08-27 12:00:10.000000000 +0200
+++ net-snmp-5.3.1/win32/net-snmp/net-snmp-config.h.in	2007-08-27 15:42:42.000000000 +0200
@@ -481,6 +481,9 @@
 /* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
 /* #undef HAVE_NETINET_IP_ICMP_H */
 
+/* Define to 1 if you have the <netinet/icmp6.h> header file. */
+/* #undef HAVE_NETINET_ICMP6_H */
+
 /* Define to 1 if you have the <netinet/ip_var.h> header file. */
 /* #undef HAVE_NETINET_IP_VAR_H */