backout 16488880/15685782/15997718/15705167/15754602/16003771/16242256 - needs more work
authorMike Sullivan <Mike.Sullivan@Oracle.COM>
Sat, 18 May 2013 09:18:20 -0700
changeset 1306 11b376b53ac1
parent 1305 d11b04684351
child 1307 11fe2dd83574
backout 16488880/15685782/15997718/15705167/15754602/16003771/16242256 - needs more work
components/net-snmp/Makefile
components/net-snmp/net-snmp-26.p5m
components/net-snmp/net-snmp-27.p5m
components/net-snmp/net-snmp-addons.p5m
components/net-snmp/net-snmp-base.p5m
components/net-snmp/net-snmp-documentation.p5m
components/net-snmp/patches/001.scapi.patch
components/net-snmp/patches/003.solaris-ip-mib.patch
components/net-snmp/patches/004.16436.patch
components/net-snmp/patches/005.16736.patch
components/net-snmp/patches/006.16742.patch
components/net-snmp/patches/007.16863.patch
components/net-snmp/patches/009.ltmain.sh.patch
components/net-snmp/patches/011.Makefile.in.patch
components/net-snmp/patches/013.6852099.proxy.patch
components/net-snmp/patches/017.6984919.kernel_sunos5.patch
components/net-snmp/patches/018.6932608.systemstats_common.patch
components/net-snmp/patches/019.6998845.container.patch
components/net-snmp/patches/021.7046749.snmp_api.patch
components/net-snmp/patches/025.7162956.util_funcs.patch
components/net-snmp/patches/026.7186501.cpu_kstat.patch
components/net-snmp/patches/027.7118090.hr_filesys.patch
components/net-snmp/patches/029.7097655.ipAddressTable_container.patch
components/net-snmp/patches/031.16488880.patch
components/net-snmp/resolve.deps
--- a/components/net-snmp/Makefile	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/Makefile	Sat May 18 09:18:20 2013 -0700
@@ -18,7 +18,7 @@
 #
 # CDDL HEADER END
 #
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
 #
 include ../../make-rules/shared-macros.mk
 
@@ -26,13 +26,14 @@
 DOXYGEN=/usr/bin/doxygen
 
 COMPONENT_NAME=		net-snmp
-COMPONENT_VERSION=	5.7.2
+COMPONENT_VERSION=	5.4.1
 COMPONENT_PROJECT_URL=	http://www.net-snmp.org/
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC).tar.gz
 COMPONENT_ARCHIVE_HASH= \
-    sha256:09ed31b4cc1f3c0411ef9a16eff79ef3b30d89c32ca46d5a01a41826c4ceb816
-COMPONENT_ARCHIVE_URL=	http://ftp.ntua.gr/mirror/net-snmp/net-snmp/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
+    sha256:0ea976722c993c87dede8eb6348e6feb059e3851bbef2de824bf18ac97cdb565
+#COMPONENT_ARCHIVE_URL=	http://ftp.ntua.gr/mirror/net-snmp/net-snmp/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
+COMPONENT_ARCHIVE_URL= http://ftp.ntua.gr/mirror/net-snmp/OldFiles/net-snmp-5.4.x/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
 COMPONENT_BUGDB=	service/net-snmp utility/net-snmp library/net-snmp
 
 include $(WS_TOP)/make-rules/prep.mk
@@ -80,9 +81,6 @@
 CONFIGURE_OPTIONS	+=	CPPFLAGS="$(CPPFLAGS)"
 CONFIGURE_OPTIONS	+=	CC="$(CC)"
 
-# Enable ASLR for this component
-ASLR_MODE = $(ASLR_ENABLE)
-
 PKG_MACROS +=	BUILD_DIR=$(BUILD_DIR)
 
 COMPONENT_PRE_CONFIGURE_ACTION = \
@@ -110,9 +108,7 @@
 $(INSTALL_32): COMPONENT_POST_INSTALL_ACTION= \
 	($(MKDIR) -p $(BUILD_DIR)/prototype/$(MACH)/etc/net-snmp/snmp/mibs; \
 	 cd $(BUILD_DIR)/$(MACH32)/sun ; ls agent; $(CCSMAKE) -e $(CCSMAKE_ARGS) install) ; \
-	(cd $(@D)/python2.7 ; env CFLAGS="-I$(BUILD_DIR)/$(MACH32)/include \
-		-L$(BUILD_DIR)/$(MACH32)/agent/.libs -L$(BUILD_DIR)/$(MACH32)/snmplib/.libs" \
-		PYTHON=$(PYTHON.2.7.$(BITS)) \
+	(cd $(@D)/python2.7 ; env PYTHON=$(PYTHON.2.7.$(BITS)) \
 		$(PYTHON.2.7.$(BITS)) ./setup.py install \
 			--root $(PROTO_DIR) \
 			--install-lib=$(PYTHON.2.7.VENDOR_PACKAGES))
--- a/components/net-snmp/net-snmp-26.p5m	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/net-snmp-26.p5m	Sat May 18 09:18:20 2013 -0700
@@ -25,7 +25,6 @@
     value=pkg:/library/python-2/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="The Net-SNMP - Python 2.6 bindings"
 set name=com.oracle.info.description value="Python 2.6 bindings for Net-SNMP"
-set name=com.oracle.info.tpno value=13120
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
--- a/components/net-snmp/net-snmp-27.p5m	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/net-snmp-27.p5m	Sat May 18 09:18:20 2013 -0700
@@ -25,7 +25,6 @@
     value=pkg:/library/python-2/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="The Net-SNMP - Python 2.7 bindings"
 set name=com.oracle.info.description value="Python 2.7 bindings for Net-SNMP"
-set name=com.oracle.info.tpno value=13120
 set name=info.classification \
     value=org.opensolaris.category.2008:Development/Python
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
--- a/components/net-snmp/net-snmp-addons.p5m	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/net-snmp-addons.p5m	Sat May 18 09:18:20 2013 -0700
@@ -24,7 +24,6 @@
 set name=pkg.fmri value=pkg:/system/management/snmp/net-snmp/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION)
 set name=pkg.summary value="Net-SNMP addon libraries"
 set name=com.oracle.info.description value="the Net-SNMP addon libraries"
-set name=com.oracle.info.tpno value=13120
 set name=info.classification value="org.opensolaris.category.2008:System/Enterprise Management"
 set name=info.upstream-url value=$(COMPONENT_PROJECT_URL)
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
--- a/components/net-snmp/net-snmp-base.p5m	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/net-snmp-base.p5m	Sat May 18 09:18:20 2013 -0700
@@ -29,7 +29,6 @@
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
 set name=org.opensolaris.consolidation value=$(CONSOLIDATION)
 set name=com.oracle.info.description value="the Net-SNMP agent files and libraries"
-set name=com.oracle.info.tpno value=13120
 set name=info.classification value="org.opensolaris.category.2008:System/Enterprise Management"
 
 set name=org.opensolaris.arc-caseid \
@@ -103,7 +102,6 @@
 file local/mib2c-conf.d/syntax-RowStatus-varbind-validate.m2i path=etc/net-snmp/snmp/mib2c-data/syntax-RowStatus-varbind-validate.m2i
 file local/mib2c-conf.d/syntax-StorageType-dependencies.m2i path=etc/net-snmp/snmp/mib2c-data/syntax-StorageType-dependencies.m2i
 file local/mib2c-conf.d/syntax-TestAndIncr-get.m2i path=etc/net-snmp/snmp/mib2c-data/syntax-TestAndIncr-get.m2i
-file local/mib2c-conf.d/generic-get-U64.m2i path=etc/net-snmp/snmp/mib2c-data/generic-get-U64.m2i
 file local/mib2c.access_functions.conf path=etc/net-snmp/snmp/mib2c.access_functions.conf
 file local/mib2c.array-user.conf path=etc/net-snmp/snmp/mib2c.array-user.conf
 file local/mib2c.check_values.conf path=etc/net-snmp/snmp/mib2c.check_values.conf
@@ -123,7 +121,6 @@
 file local/mib2c.notify.conf path=etc/net-snmp/snmp/mib2c.notify.conf
 file local/mib2c.old-api.conf path=etc/net-snmp/snmp/mib2c.old-api.conf
 file local/mib2c.perl.conf path=etc/net-snmp/snmp/mib2c.perl.conf
-file local/mib2c.raw-table.conf path=etc/net-snmp/snmp/mib2c.raw-table.conf
 file local/mib2c.row.conf path=etc/net-snmp/snmp/mib2c.row.conf
 file local/mib2c.scalar.conf path=etc/net-snmp/snmp/mib2c.scalar.conf
 file local/mib2c.table_data.conf path=etc/net-snmp/snmp/mib2c.table_data.conf
@@ -135,9 +132,6 @@
 file $(MACH32)/sun/agent/mibs/SUN-SEA-PROXY-MIB.txt path=etc/net-snmp/snmp/mibs/SUN-SEA-PROXY-MIB.txt
 file $(MACH32)/sun/agent/mibs/smatrap.mib path=etc/net-snmp/snmp/mibs/smatrap.mib
 file mibs/AGENTX-MIB.txt path=etc/net-snmp/snmp/mibs/AGENTX-MIB.txt
-file mibs/BRIDGE-MIB.txt path=etc/net-snmp/snmp/mibs/BRIDGE-MIB.txt
-file mibs/NET-SNMP-PASS-MIB.txt path=etc/net-snmp/snmp/mibs/NET-SNMP-PASS-MIB.txt
-file mibs/SCTP-MIB.txt path=etc/net-snmp/snmp/mibs/SCTP-MIB.txt
 file mibs/DISMAN-EVENT-MIB.txt path=etc/net-snmp/snmp/mibs/DISMAN-EVENT-MIB.txt
 file mibs/DISMAN-EXPRESSION-MIB.txt path=etc/net-snmp/snmp/mibs/DISMAN-EXPRESSION-MIB.txt
 file mibs/DISMAN-NSLOOKUP-MIB.txt path=etc/net-snmp/snmp/mibs/DISMAN-NSLOOKUP-MIB.txt
@@ -234,7 +228,6 @@
 file path=usr/bin/mib2c
 file path=usr/bin/mib2c-update
 file usr/bin/net-snmp-config path=usr/bin/net-snmp-config-32
-file path=usr/bin/net-snmp-create-v3-user
 file build/prototype/$(MACH64)/usr/bin/$(MACH64)/net-snmp-config path=usr/bin/net-snmp-config-64
 file path=usr/bin/snmpbulkget
 file path=usr/bin/snmpbulkwalk
@@ -256,17 +249,12 @@
 file path=usr/bin/snmpwalk
 file path=usr/bin/tkmib
 file path=usr/bin/traptoemail
-file build/prototype/$(MACH64)/usr/bin/$(MACH64)/net-snmp-create-v3-user path=usr/bin/$(MACH64)/net-snmp-create-v3-user
-file build/prototype/$(MACH64)/usr/bin/$(MACH64)/agentxtrap path=usr/lib/$(MACH64)/agentxtrap
-file build/prototype/$(MACH64)/usr/bin/$(MACH64)/net-snmp-cert path=usr/lib/$(MACH64)/net-snmp-cert
-file build/prototype/$(MACH64)/usr/bin/$(MACH64)/snmp-bridge-mib path=usr/lib/$(MACH64)/snmp-bridge-mib
 file path=usr/include/net-snmp/agent/agent_callbacks.h
 file path=usr/include/net-snmp/agent/agent_handler.h
 file path=usr/include/net-snmp/agent/agent_index.h
 file path=usr/include/net-snmp/agent/agent_module_config.h
 file path=usr/include/net-snmp/agent/agent_read_config.h
 file path=usr/include/net-snmp/agent/agent_registry.h
-file path=usr/include/net-snmp/agent/agent_sysORTable.h
 file path=usr/include/net-snmp/agent/agent_trap.h
 file path=usr/include/net-snmp/agent/all_helpers.h
 file path=usr/include/net-snmp/agent/auto_nlist.h
@@ -292,12 +280,9 @@
 file path=usr/include/net-snmp/agent/serialize.h
 file path=usr/include/net-snmp/agent/set_helper.h
 file path=usr/include/net-snmp/agent/snmp_agent.h
-file path=usr/include/net-snmp/agent/snmp_get_statistic.h
 file path=usr/include/net-snmp/agent/snmp_vars.h
 file path=usr/include/net-snmp/agent/stash_cache.h
 file path=usr/include/net-snmp/agent/stash_to_next.h
-file path=usr/include/net-snmp/agent/struct.h
-file path=usr/include/net-snmp/agent/sysORTable.h
 file path=usr/include/net-snmp/agent/table_array.h
 file path=usr/include/net-snmp/agent/table_container.h
 file path=usr/include/net-snmp/agent/table_data.h
@@ -312,8 +297,8 @@
 file path=usr/include/net-snmp/definitions.h
 file path=usr/include/net-snmp/library/asn1.h
 file path=usr/include/net-snmp/library/callback.h
-file path=usr/include/net-snmp/library/cert_util.h
 file path=usr/include/net-snmp/library/check_varbind.h
+file path=usr/include/net-snmp/library/cmu_compat.h
 file path=usr/include/net-snmp/library/container_binary_array.h
 file path=usr/include/net-snmp/library/container_iterator.h
 file path=usr/include/net-snmp/library/container_list_ssll.h
@@ -321,19 +306,16 @@
 file path=usr/include/net-snmp/library/container.h
 file path=usr/include/net-snmp/library/data_list.h
 file path=usr/include/net-snmp/library/default_store.h
-file path=usr/include/net-snmp/library/dir_utils.h
 file path=usr/include/net-snmp/library/factory.h
 file path=usr/include/net-snmp/library/fd_event_manager.h
 file path=usr/include/net-snmp/library/file_utils.h
 file path=usr/include/net-snmp/library/getopt.h
 file path=usr/include/net-snmp/library/int64.h
 file path=usr/include/net-snmp/library/keytools.h
-file path=usr/include/net-snmp/library/large_fd_set.h
 file path=usr/include/net-snmp/library/lcd_time.h
 file path=usr/include/net-snmp/library/md5.h
 file path=usr/include/net-snmp/library/mib.h
 file path=usr/include/net-snmp/library/mt_support.h
-file path=usr/include/net-snmp/library/oid.h
 file path=usr/include/net-snmp/library/oid_stash.h
 file path=usr/include/net-snmp/library/parse.h
 file path=usr/include/net-snmp/library/read_config.h
@@ -353,17 +335,10 @@
 file path=usr/include/net-snmp/library/snmp_transport.h
 file path=usr/include/net-snmp/library/snmp-tc.h
 file path=usr/include/net-snmp/library/snmp.h
-file path=usr/include/net-snmp/library/snmpAliasDomain.h
 file path=usr/include/net-snmp/library/snmpCallbackDomain.h
-file path=usr/include/net-snmp/library/snmpIPv4BaseDomain.h
-file path=usr/include/net-snmp/library/snmpIPv6BaseDomain.h
-file path=usr/include/net-snmp/library/snmpSocketBaseDomain.h
-file path=usr/include/net-snmp/library/snmpTCPBaseDomain.h
 file path=usr/include/net-snmp/library/snmpTCPDomain.h
 file path=usr/include/net-snmp/library/snmpTCPIPv6Domain.h
-file path=usr/include/net-snmp/library/snmpUDPBaseDomain.h
 file path=usr/include/net-snmp/library/snmpUDPDomain.h
-file path=usr/include/net-snmp/library/snmpUDPIPv4BaseDomain.h
 file path=usr/include/net-snmp/library/snmpUDPIPv6Domain.h
 file path=usr/include/net-snmp/library/snmpUnixDomain.h
 file path=usr/include/net-snmp/library/snmpusm.h
@@ -373,7 +348,6 @@
 file path=usr/include/net-snmp/library/text_utils.h
 file path=usr/include/net-snmp/library/tools.h
 file path=usr/include/net-snmp/library/transform_oids.h
-file path=usr/include/net-snmp/library/types.h
 file path=usr/include/net-snmp/library/ucd_compat.h
 file path=usr/include/net-snmp/library/vacm.h
 file path=usr/include/net-snmp/library/winpipe.h
@@ -382,7 +356,6 @@
 file path=usr/include/net-snmp/mib_api.h
 file path=usr/include/net-snmp/net-snmp-config.h
 file path=usr/include/net-snmp/net-snmp-includes.h
-file path=usr/include/net-snmp/net-snmp-features.h
 file path=usr/include/net-snmp/output_api.h
 file path=usr/include/net-snmp/pdu_api.h
 file path=usr/include/net-snmp/session_api.h
@@ -397,7 +370,6 @@
 file path=usr/include/net-snmp/system/darwin7.h
 file path=usr/include/net-snmp/system/darwin8.h
 file path=usr/include/net-snmp/system/darwin9.h
-file path=usr/include/net-snmp/system/darwin10.h
 file path=usr/include/net-snmp/system/dragonfly.h
 file path=usr/include/net-snmp/system/dynix.h
 file path=usr/include/net-snmp/system/freebsd.h
@@ -406,10 +378,6 @@
 file path=usr/include/net-snmp/system/freebsd4.h
 file path=usr/include/net-snmp/system/freebsd5.h
 file path=usr/include/net-snmp/system/freebsd6.h
-file path=usr/include/net-snmp/system/freebsd7.h
-file path=usr/include/net-snmp/system/freebsd8.h
-file path=usr/include/net-snmp/system/freebsd9.h
-file path=usr/include/net-snmp/system/freebsd10.h
 file path=usr/include/net-snmp/system/generic.h
 file path=usr/include/net-snmp/system/hpux.h
 file path=usr/include/net-snmp/system/irix.h
@@ -418,8 +386,6 @@
 file path=usr/include/net-snmp/system/mips.h
 file path=usr/include/net-snmp/system/netbsd.h
 file path=usr/include/net-snmp/system/openbsd.h
-file path=usr/include/net-snmp/system/openbsd4.h
-file path=usr/include/net-snmp/system/openbsd5.h
 file path=usr/include/net-snmp/system/osf5.h
 file path=usr/include/net-snmp/system/solaris.h
 file path=usr/include/net-snmp/system/solaris2.3.h
@@ -476,19 +442,18 @@
 file path=usr/include/ucd-snmp/var_struct.h
 file path=usr/include/ucd-snmp/version.h
 file $(MACH64)/sun/agent/modules/entityMib/libentity.so path=usr/lib/$(MACH64)/libentity.so
-file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmp.so.30.0.2 path=usr/lib/$(MACH64)/libnetsnmp.so.30.0.2
-file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmpagent.so.30.0.2 path=usr/lib/$(MACH64)/libnetsnmpagent.so.30.0.2
-file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmphelpers.so.30.0.2 path=usr/lib/$(MACH64)/libnetsnmphelpers.so.30.0.2
-file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmpmibs.so.30.0.2 path=usr/lib/$(MACH64)/libnetsnmpmibs.so.30.0.2
-file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmptrapd.so.30.0.2 path=usr/lib/$(MACH64)/libnetsnmptrapd.so.30.0.2
-file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libsnmp.so.30.0.2 path=usr/lib/$(MACH64)/libsnmp.so.30.0.2
+file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmp.so.15.1.0 path=usr/lib/$(MACH64)/libnetsnmp.so.15.1.0
+file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmpagent.so.15.1.0 path=usr/lib/$(MACH64)/libnetsnmpagent.so.15.1.0
+file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmphelpers.so.15.1.0 path=usr/lib/$(MACH64)/libnetsnmphelpers.so.15.1.0
+file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmpmibs.so.15.1.0 path=usr/lib/$(MACH64)/libnetsnmpmibs.so.15.1.0
+file build/prototype/$(MACH64)/usr/lib/$(MACH64)/libnetsnmptrapd.so.15.1.0 path=usr/lib/$(MACH64)/libnetsnmptrapd.so.15.1.0
 file $(MACH32)/sun/agent/modules/entityMib/libentity.so path=usr/lib/libentity.so
-file path=usr/lib/libnetsnmp.so.30.0.2
-file path=usr/lib/libnetsnmpagent.so.30.0.2
-file path=usr/lib/libnetsnmphelpers.so.30.0.2
-file path=usr/lib/libnetsnmpmibs.so.30.0.2
-file path=usr/lib/libnetsnmptrapd.so.30.0.2
-file path=usr/lib/libsnmp.so.30.0.2
+file path=usr/lib/libnetsnmp.so.15.1.0
+file path=usr/lib/libnetsnmpagent.so.15.1.0
+file path=usr/lib/libnetsnmphelpers.so.15.1.0
+file path=usr/lib/libnetsnmpmibs.so.15.1.0
+file path=usr/lib/libnetsnmptrapd.so.15.1.0
+file path=usr/lib/libsnmp.so.15.1.0
 file $(MACH32)/sun/masfcnv path=usr/lib/net-snmp/masfcnv
 file $(MACH32)/sun/masfd path=usr/lib/net-snmp/masfd
 file path=usr/perl5/$(PERL_VERSION)/man/man3/NetSNMP::agent::default_store.3
@@ -540,43 +505,28 @@
 link path=usr/bin/net-snmp-config target=./net-snmp-config-32 variant.arch=i386
 link path=usr/bin/net-snmp-config target=./net-snmp-config-64 variant.arch=sparc
 link path=usr/bin/snmpinform target=snmptrap
-link path=usr/lib/$(MACH64)/libnetsnmp.so target=./libnetsnmp.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmp.so.30 target=./libnetsnmp.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmpagent.so target=./libnetsnmpagent.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmpagent.so.30 target=./libnetsnmpagent.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmphelpers.so target=./libnetsnmphelpers.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmphelpers.so.30 target=./libnetsnmphelpers.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmpmibs.so target=./libnetsnmpmibs.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmpmibs.so.30 target=./libnetsnmpmibs.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmptrapd.so target=./libnetsnmptrapd.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmptrapd.so.30 target=./libnetsnmptrapd.so.30.0.2
-link path=usr/lib/$(MACH64)/libsnmp.so target=./libsnmp.so.30.0.2
-link path=usr/lib/$(MACH64)/libsnmp.so.30 target=./libsnmp.so.30.0.2
-link path=usr/lib/libnetsnmp.so target=./libnetsnmp.so.30.0.2
-link path=usr/lib/libnetsnmp.so.30 target=./libnetsnmp.so.30.0.2
-link path=usr/lib/libnetsnmpagent.so target=./libnetsnmpagent.so.30.0.2
-link path=usr/lib/libnetsnmpagent.so.30 target=./libnetsnmpagent.so.30.0.2
-link path=usr/lib/libnetsnmphelpers.so target=./libnetsnmphelpers.so.30.0.2
-link path=usr/lib/libnetsnmphelpers.so.30 target=./libnetsnmphelpers.so.30.0.2
-link path=usr/lib/libnetsnmpmibs.so target=./libnetsnmpmibs.so.30.0.2
-link path=usr/lib/libnetsnmpmibs.so.30 target=./libnetsnmpmibs.so.30.0.2
-link path=usr/lib/libnetsnmptrapd.so target=./libnetsnmptrapd.so.30.0.2
-link path=usr/lib/libnetsnmptrapd.so.30 target=./libnetsnmptrapd.so.30.0.2
-link path=usr/lib/libsnmp.so target=./libsnmp.so.30.0.2
-link path=usr/lib/libsnmp.so.30 target=./libsnmp.so.30.0.2
-
-link path=usr/lib/libnetsnmpagent.so.15 target=./libnetsnmpagent.so.30.0.2
-link path=usr/lib/libnetsnmp.so.15 target=./libnetsnmp.so.30.0.2
-link path=usr/lib/libnetsnmphelpers.so.15 target=./libnetsnmphelpers.so.30.0.2
-link path=usr/lib/libsnmp.so.15 target=./libsnmp.so.30.0.2
-link path=usr/lib/libnetsnmptrapd.so.15 target=./libnetsnmptrapd.so.30.0.2
-link path=usr/lib/libnetsnmpmibs.so.15 target=./libnetsnmpmibs.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmpagent.so.15 target=./libnetsnmpagent.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmp.so.15 target=./libnetsnmp.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmphelpers.so.15 target=./libnetsnmphelpers.so.30.0.2
-link path=usr/lib/$(MACH64)/libsnmp.so.15 target=./libsnmp.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmptrapd.so.15 target=./libnetsnmptrapd.so.30.0.2
-link path=usr/lib/$(MACH64)/libnetsnmpmibs.so.15 target=./libnetsnmpmibs.so.30.0.2
+link path=usr/lib/$(MACH64)/libnetsnmp.so target=./libnetsnmp.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmp.so.15 target=./libnetsnmp.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmpagent.so target=./libnetsnmpagent.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmpagent.so.15 target=./libnetsnmpagent.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmphelpers.so target=./libnetsnmphelpers.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmphelpers.so.15 target=./libnetsnmphelpers.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmpmibs.so target=./libnetsnmpmibs.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmpmibs.so.15 target=./libnetsnmpmibs.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmptrapd.so target=./libnetsnmptrapd.so.15.1.0
+link path=usr/lib/$(MACH64)/libnetsnmptrapd.so.15 target=./libnetsnmptrapd.so.15.1.0
+link path=usr/lib/libnetsnmp.so target=./libnetsnmp.so.15.1.0
+link path=usr/lib/libnetsnmp.so.15 target=./libnetsnmp.so.15.1.0
+link path=usr/lib/libnetsnmpagent.so target=./libnetsnmpagent.so.15.1.0
+link path=usr/lib/libnetsnmpagent.so.15 target=./libnetsnmpagent.so.15.1.0
+link path=usr/lib/libnetsnmphelpers.so target=./libnetsnmphelpers.so.15.1.0
+link path=usr/lib/libnetsnmphelpers.so.15 target=./libnetsnmphelpers.so.15.1.0
+link path=usr/lib/libnetsnmpmibs.so target=./libnetsnmpmibs.so.15.1.0
+link path=usr/lib/libnetsnmpmibs.so.15 target=./libnetsnmpmibs.so.15.1.0
+link path=usr/lib/libnetsnmptrapd.so target=./libnetsnmptrapd.so.15.1.0
+link path=usr/lib/libnetsnmptrapd.so.15 target=./libnetsnmptrapd.so.15.1.0
+link path=usr/lib/libsnmp.so target=./libsnmp.so.15.1.0
+link path=usr/lib/libsnmp.so.15 target=./libsnmp.so.15.1.0
 
 depend fmri=library/python-2/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION) \
     predicate=runtime/python-26 \
@@ -584,4 +534,4 @@
 
 depend fmri=library/python-2/[email protected]$(IPS_COMPONENT_VERSION),$(BUILD_VERSION) \
     predicate=runtime/python-27 \
-	    type=conditional
+    type=conditional
--- a/components/net-snmp/net-snmp-documentation.p5m	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/net-snmp-documentation.p5m	Sat May 18 09:18:20 2013 -0700
@@ -27,7 +27,6 @@
 set name=pkg.summary \
     value="Net-SNMP Agent manpages and html documentation files"
 set name=com.oracle.info.description value="the Net-SNMP agent manpages and html documentation files"
-set name=com.oracle.info.tpno value=13120
 set name=info.classification \
     value="org.opensolaris.category.2008:System/Enterprise Management"
 set name=info.source-url value=$(COMPONENT_ARCHIVE_URL)
@@ -222,10 +221,6 @@
     path=usr/share/doc/net-snmp/html/agent__registry_8c_source.html
 file build/$(MACH32)/docs/html/agent__registry_8h_source.html \
     path=usr/share/doc/net-snmp/html/agent__registry_8h_source.html
-file build/$(MACH32)/docs/html/agent__sysORTable_8c_source.html \
-    path=usr/share/doc/net-snmp/html/agent__sysORTable_8c_source.html
-file build/$(MACH32)/docs/html/agent__sysORTable_8h_source.html \
-    path=usr/share/doc/net-snmp/html/agent__sysORTable_8h_source.html
 file build/$(MACH32)/docs/html/agent__trap_8c_source.html \
     path=usr/share/doc/net-snmp/html/agent__trap_8c_source.html
 file build/$(MACH32)/docs/html/agent__trap_8h_source.html \
@@ -264,12 +259,6 @@
     path=usr/share/doc/net-snmp/html/callback_8c_source.html
 file build/$(MACH32)/docs/html/callback_8h_source.html \
     path=usr/share/doc/net-snmp/html/callback_8h_source.html
-file build/$(MACH32)/docs/html/cert__util_8c_source.html \
-    path=usr/share/doc/net-snmp/html/cert__util_8c_source.html
-file build/$(MACH32)/docs/html/cert__util_8h_source.html \
-    path=usr/share/doc/net-snmp/html/cert__util_8h_source.html
-file build/$(MACH32)/docs/html/closedir_8c_source.html \
-    path=usr/share/doc/net-snmp/html/closedir_8c_source.html
 file build/$(MACH32)/docs/html/check__varbind_8c_source.html \
     path=usr/share/doc/net-snmp/html/check__varbind_8c_source.html
 file build/$(MACH32)/docs/html/check__varbind_8h_source.html \
@@ -278,6 +267,10 @@
     path=usr/share/doc/net-snmp/html/classes.html
 file build/$(MACH32)/docs/html/closed.png \
     path=usr/share/doc/net-snmp/html/closed.png
+file build/$(MACH32)/docs/html/cmu__compat_8c_source.html \
+    path=usr/share/doc/net-snmp/html/cmu__compat_8c_source.html
+file build/$(MACH32)/docs/html/cmu__compat_8h_source.html \
+    path=usr/share/doc/net-snmp/html/cmu__compat_8h_source.html
 file build/$(MACH32)/docs/html/config__api_8h_source.html \
     path=usr/share/doc/net-snmp/html/config__api_8h_source.html
 file build/$(MACH32)/docs/html/container_8c_source.html \
@@ -330,12 +323,6 @@
     path=usr/share/doc/net-snmp/html/delayed_instance_8c-example.html
 file build/$(MACH32)/docs/html/deprecated.html \
     path=usr/share/doc/net-snmp/html/deprecated.html
-file build/$(MACH32)/docs/html/dir__utils_8c_source.html \
-    path=usr/share/doc/net-snmp/html/dir__utils_8c_source.html
-file build/$(MACH32)/docs/html/dir__utils_8h_source.html \
-    path=usr/share/doc/net-snmp/html/dir__utils_8h_source.html
-file build/$(MACH32)/docs/html/dummy_8c_source.html \
-    path=usr/share/doc/net-snmp/html/dummy_8c_source.html
 file build/$(MACH32)/docs/html/doxygen.css \
     path=usr/share/doc/net-snmp/html/doxygen.css
 file build/$(MACH32)/docs/html/doxygen.png \
@@ -368,8 +355,6 @@
     path=usr/share/doc/net-snmp/html/getopt_8c_source.html
 file build/$(MACH32)/docs/html/getopt_8h_source.html \
     path=usr/share/doc/net-snmp/html/getopt_8h_source.html
-file build/$(MACH32)/docs/html/gettimeofday_8c_source.html \
-    path=usr/share/doc/net-snmp/html/gettimeofday_8c_source.html
 file build/$(MACH32)/docs/html/globals.html \
     path=usr/share/doc/net-snmp/html/globals.html
 file build/$(MACH32)/docs/html/globals_defs.html \
@@ -382,18 +367,6 @@
     path=usr/share/doc/net-snmp/html/group__access__multiplexer.html
 file build/$(MACH32)/docs/html/group__agent.html \
     path=usr/share/doc/net-snmp/html/group__agent.html
-file build/$(MACH32)/docs/html/group__agent__context__cache.html \
-    path=usr/share/doc/net-snmp/html/group__agent__context__cache.html
-file build/$(MACH32)/docs/html/group__agent__lookup__cache.html \
-    path=usr/share/doc/net-snmp/html/group__agent__lookup__cache.html
-file build/$(MACH32)/docs/html/group__agent__mib__registering.html \
-    path=usr/share/doc/net-snmp/html/group__agent__mib__registering.html
-file build/$(MACH32)/docs/html/group__agent__mib__subtree.html \
-    path=usr/share/doc/net-snmp/html/group__agent__mib__subtree.html
-file build/$(MACH32)/docs/html/group__agent__signals.html \
-    path=usr/share/doc/net-snmp/html/group__agent__signals.html
-file build/$(MACH32)/docs/html/group__null__container.html \
-    path=usr/share/doc/net-snmp/html/group__null__container.html
 file build/$(MACH32)/docs/html/group__agent__registry.html \
     path=usr/share/doc/net-snmp/html/group__agent__registry.html
 file build/$(MACH32)/docs/html/group__agent__trap.html \
@@ -496,12 +469,6 @@
     path=usr/share/doc/net-snmp/html/index.html
 file build/$(MACH32)/docs/html/inet__ntop_8c_source.html \
     path=usr/share/doc/net-snmp/html/inet__ntop_8c_source.html
-file build/$(MACH32)/docs/html/inet__ntop_8h_source.html \
-    path=usr/share/doc/net-snmp/html/inet__ntop_8h_source.html
-file build/$(MACH32)/docs/html/inet__pton_8h_source.html \
-    path=usr/share/doc/net-snmp/html/inet__pton_8h_source.html
-file build/$(MACH32)/docs/html/int64_8c.html \
-    path=usr/share/doc/net-snmp/html/int64_8c.html
 file build/$(MACH32)/docs/html/inet__pton_8c_source.html \
     path=usr/share/doc/net-snmp/html/inet__pton_8c_source.html
 file build/$(MACH32)/docs/html/instance_8c_source.html \
@@ -514,10 +481,6 @@
     path=usr/share/doc/net-snmp/html/int64_8h_source.html
 file build/$(MACH32)/docs/html/jquery.js \
     path=usr/share/doc/net-snmp/html/jquery.js
-file build/$(MACH32)/docs/html/kernel_8c.html \
-    path=usr/share/doc/net-snmp/html/kernel_8c.html
-file build/$(MACH32)/docs/html/kernel_8h.html \
-    path=usr/share/doc/net-snmp/html/kernel_8h.html
 file build/$(MACH32)/docs/html/kernel_8c_source.html \
     path=usr/share/doc/net-snmp/html/kernel_8c_source.html
 file build/$(MACH32)/docs/html/kernel_8h_source.html \
@@ -526,18 +489,6 @@
     path=usr/share/doc/net-snmp/html/keytools_8c_source.html
 file build/$(MACH32)/docs/html/keytools_8h_source.html \
     path=usr/share/doc/net-snmp/html/keytools_8h_source.html
-file build/$(MACH32)/docs/html/large__fd__set_8c.html \
-    path=usr/share/doc/net-snmp/html/large__fd__set_8c.html
-file build/$(MACH32)/docs/html/large__fd__set_8c_source.html \
-    path=usr/share/doc/net-snmp/html/large__fd__set_8c_source.html
-file build/$(MACH32)/docs/html/large__fd__set_8h.html \
-    path=usr/share/doc/net-snmp/html/large__fd__set_8h.html
-file build/$(MACH32)/docs/html/large__fd__set_8h_source.html \
-    path=usr/share/doc/net-snmp/html/large__fd__set_8h_source.html
-file build/$(MACH32)/docs/html/library_2openssl__md5_8h_source.html \
-    path=usr/share/doc/net-snmp/html/library_2openssl__md5_8h_source.html
-file build/$(MACH32)/docs/html/library_2types_8h_source.html \
-    path=usr/share/doc/net-snmp/html/library_2types_8h_source.html
 file build/$(MACH32)/docs/html/lcd__time_8c_source.html \
     path=usr/share/doc/net-snmp/html/lcd__time_8c_source.html
 file build/$(MACH32)/docs/html/lcd__time_8h_source.html \
@@ -586,8 +537,6 @@
     path=usr/share/doc/net-snmp/html/net-snmp-agent-includes_8h_source.html
 file build/$(MACH32)/docs/html/net-snmp-config_8h_source.html \
     path=usr/share/doc/net-snmp/html/net-snmp-config_8h_source.html
-file build/$(MACH32)/docs/html/net-snmp-features_8h_source.html \
-    path=usr/share/doc/net-snmp/html/net-snmp-features_8h_source.html
 file build/$(MACH32)/docs/html/net-snmp-includes_8h_source.html \
     path=usr/share/doc/net-snmp/html/net-snmp-includes_8h_source.html
 file build/$(MACH32)/docs/html/netSnmpHostsTable_8c_source.html \
@@ -628,18 +577,6 @@
     path=usr/share/doc/net-snmp/html/oid__stash_8c_source.html
 file build/$(MACH32)/docs/html/oid__stash_8h_source.html \
     path=usr/share/doc/net-snmp/html/oid__stash_8h_source.html
-file build/$(MACH32)/docs/html/oid_8h_source.html \
-    path=usr/share/doc/net-snmp/html/oid_8h_source.html
-file build/$(MACH32)/docs/html/opendir_8c_source.html \
-    path=usr/share/doc/net-snmp/html/opendir_8c_source.html
-file build/$(MACH32)/docs/html/openssl__aes_8h_source.html \
-    path=usr/share/doc/net-snmp/html/openssl__aes_8h_source.html
-file build/$(MACH32)/docs/html/openssl__des_8h_source.html \
-    path=usr/share/doc/net-snmp/html/openssl__des_8h_source.html
-file build/$(MACH32)/docs/html/openssl__md5_8h_source.html \
-    path=usr/share/doc/net-snmp/html/openssl__md5_8h_source.html
-file build/$(MACH32)/docs/html/openssl__sha_8h_source.html \
-    path=usr/share/doc/net-snmp/html/openssl__sha_8h_source.html
 file build/$(MACH32)/docs/html/old__api_8c_source.html \
     path=usr/share/doc/net-snmp/html/old__api_8c_source.html
 file build/$(MACH32)/docs/html/old__api_8h_source.html \
@@ -658,8 +595,6 @@
     path=usr/share/doc/net-snmp/html/pdu__api_8h_source.html
 file build/$(MACH32)/docs/html/pkcs_8c_source.html \
     path=usr/share/doc/net-snmp/html/pkcs_8c_source.html
-file build/$(MACH32)/docs/html/readdir_8c_source.html \
-    path=usr/share/doc/net-snmp/html/readdir_8c_source.html
 file build/$(MACH32)/docs/html/read__config_8c_source.html \
     path=usr/share/doc/net-snmp/html/read__config_8c_source.html
 file build/$(MACH32)/docs/html/read__config_8h_source.html \
@@ -702,62 +637,40 @@
     path=usr/share/doc/net-snmp/html/snmp-tc_8c_source.html
 file build/$(MACH32)/docs/html/snmp-tc_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmp-tc_8h_source.html
-file build/$(MACH32)/docs/html/snmpAliasDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpAliasDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpDTLSUDPDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpDTLSUDPDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpIPv4BaseDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpIPv4BaseDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpIPv6BaseDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpIPv6BaseDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpSSHDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpSSHDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpSocketBaseDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpSocketBaseDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpTCPBaseDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpTCPBaseDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpTLSBaseDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpTLSBaseDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpTLSTCPDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpTLSTCPDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpUDPBaseDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpUDPBaseDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmpUDPIPv4BaseDomain_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpUDPIPv4BaseDomain_8h_source.html
-file build/$(MACH32)/docs/html/snmp__get__statistic_8c_source.html \
-    path=usr/share/doc/net-snmp/html/snmp__get__statistic_8c_source.html
-file build/$(MACH32)/docs/html/snmp__get__statistic_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmp__get__statistic_8h_source.html
-file build/$(MACH32)/docs/html/snmp__openssl_8c_source.html \
-    path=usr/share/doc/net-snmp/html/snmp__openssl_8c_source.html
-file build/$(MACH32)/docs/html/snmp__openssl_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmp__openssl_8h_source.html
-file build/$(MACH32)/docs/html/snmp__parse__args_8h.html \
-    path=usr/share/doc/net-snmp/html/snmp__parse__args_8h.html
-file build/$(MACH32)/docs/html/snmp__perl_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmp__perl_8h_source.html
-file build/$(MACH32)/docs/html/snmpsm__shutdown_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmpsm__shutdown_8h_source.html
-file build/$(MACH32)/docs/html/snmptsm_8c_source.html \
-    path=usr/share/doc/net-snmp/html/snmptsm_8c_source.html
-file build/$(MACH32)/docs/html/snmptsm_8h_source.html \
-    path=usr/share/doc/net-snmp/html/snmptsm_8h_source.html
+file build/$(MACH32)/docs/html/snmpAAL5PVCDomain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpAAL5PVCDomain_8c_source.html
 file build/$(MACH32)/docs/html/snmpAAL5PVCDomain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpAAL5PVCDomain_8h_source.html
+file build/$(MACH32)/docs/html/snmpCallbackDomain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpCallbackDomain_8c_source.html
 file build/$(MACH32)/docs/html/snmpCallbackDomain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpCallbackDomain_8h_source.html
+file build/$(MACH32)/docs/html/snmpIPXDomain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpIPXDomain_8c_source.html
 file build/$(MACH32)/docs/html/snmpIPXDomain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpIPXDomain_8h_source.html
+file build/$(MACH32)/docs/html/snmpSTDDomain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpSTDDomain_8c_source.html
 file build/$(MACH32)/docs/html/snmpSTDDomain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpSTDDomain_8h_source.html
+file build/$(MACH32)/docs/html/snmpTCPDomain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpTCPDomain_8c_source.html
 file build/$(MACH32)/docs/html/snmpTCPDomain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpTCPDomain_8h_source.html
+file build/$(MACH32)/docs/html/snmpTCPIPv6Domain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpTCPIPv6Domain_8c_source.html
 file build/$(MACH32)/docs/html/snmpTCPIPv6Domain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpTCPIPv6Domain_8h_source.html
+file build/$(MACH32)/docs/html/snmpUDPDomain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpUDPDomain_8c_source.html
 file build/$(MACH32)/docs/html/snmpUDPDomain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpUDPDomain_8h_source.html
+file build/$(MACH32)/docs/html/snmpUDPIPv6Domain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpUDPIPv6Domain_8c_source.html
 file build/$(MACH32)/docs/html/snmpUDPIPv6Domain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpUDPIPv6Domain_8h_source.html
+file build/$(MACH32)/docs/html/snmpUnixDomain_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmpUnixDomain_8c_source.html
 file build/$(MACH32)/docs/html/snmpUnixDomain_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpUnixDomain_8h_source.html
 file build/$(MACH32)/docs/html/snmp_8c_source.html \
@@ -830,6 +743,10 @@
     path=usr/share/doc/net-snmp/html/snmpksm_8c_source.html
 file build/$(MACH32)/docs/html/snmpksm_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpksm_8h_source.html
+file build/$(MACH32)/docs/html/snmplocalsm_8c_source.html \
+    path=usr/share/doc/net-snmp/html/snmplocalsm_8c_source.html
+file build/$(MACH32)/docs/html/snmplocalsm_8h_source.html \
+    path=usr/share/doc/net-snmp/html/snmplocalsm_8h_source.html
 file build/$(MACH32)/docs/html/snmpsm__init_8h_source.html \
     path=usr/share/doc/net-snmp/html/snmpsm__init_8h_source.html
 file build/$(MACH32)/docs/html/snmpusm_8c_source.html \
@@ -854,12 +771,6 @@
     path=usr/share/doc/net-snmp/html/stash__to__next_8c_source.html
 file build/$(MACH32)/docs/html/stash__to__next_8h_source.html \
     path=usr/share/doc/net-snmp/html/stash__to__next_8h_source.html
-file build/$(MACH32)/docs/html/strlcat_8c_source.html \
-    path=usr/share/doc/net-snmp/html/strlcat_8c_source.html
-file build/$(MACH32)/docs/html/strtoull_8c_source.html \
-    path=usr/share/doc/net-snmp/html/strtoull_8c_source.html
-file build/$(MACH32)/docs/html/sysORTable_8h_source.html \
-    path=usr/share/doc/net-snmp/html/sysORTable_8h_source.html
 file build/$(MACH32)/docs/html/strlcpy_8c_source.html \
     path=usr/share/doc/net-snmp/html/strlcpy_8c_source.html
 file build/$(MACH32)/docs/html/strtok__r_8c_source.html \
@@ -868,52 +779,6 @@
     path=usr/share/doc/net-snmp/html/strtol_8c_source.html
 file build/$(MACH32)/docs/html/strtoul_8c_source.html \
     path=usr/share/doc/net-snmp/html/strtoul_8c_source.html
-file build/$(MACH32)/docs/html/structDES__ks.html \
-    path=usr/share/doc/net-snmp/html/structDES__ks.html
-file build/$(MACH32)/docs/html/structMD5state__st.html \
-    path=usr/share/doc/net-snmp/html/structMD5state__st.html
-file build/$(MACH32)/docs/html/structSHA256state__st.html \
-    path=usr/share/doc/net-snmp/html/structSHA256state__st.html
-file build/$(MACH32)/docs/html/structSHA512state__st.html \
-    path=usr/share/doc/net-snmp/html/structSHA512state__st.html
-file build/$(MACH32)/docs/html/structSHAstate__st.html \
-    path=usr/share/doc/net-snmp/html/structSHAstate__st.html
-file build/$(MACH32)/docs/html/struct__dir__struc.html \
-    path=usr/share/doc/net-snmp/html/struct__dir__struc.html
-file build/$(MACH32)/docs/html/struct__netsnmpTLSBaseData__s.html \
-    path=usr/share/doc/net-snmp/html/struct__netsnmpTLSBaseData__s.html
-file build/$(MACH32)/docs/html/struct__netsnmp__verify__info__s.html \
-    path=usr/share/doc/net-snmp/html/struct__netsnmp__verify__info__s.html
-file build/$(MACH32)/docs/html/structaes__key__st.html \
-    path=usr/share/doc/net-snmp/html/structaes__key__st.html
-file build/$(MACH32)/docs/html/structdata__node__s.html \
-    path=usr/share/doc/net-snmp/html/structdata__node__s.html
-file build/$(MACH32)/docs/html/structdirect.html \
-    path=usr/share/doc/net-snmp/html/structdirect.html
-file build/$(MACH32)/docs/html/structnetsnmp__addr__pair__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__addr__pair__s.html
-file build/$(MACH32)/docs/html/structnetsnmp__indexed__addr__pair__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__indexed__addr__pair__s.html
-file build/$(MACH32)/docs/html/structnetsnmp__large__fd__set__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__large__fd__set__s.html
-file build/$(MACH32)/docs/html/structnetsnmp__state__machine__input__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__state__machine__input__s.html
-file build/$(MACH32)/docs/html/structnetsnmp__state__machine__step__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__state__machine__step__s.html
-file build/$(MACH32)/docs/html/structnetsnmp__tmStateReference__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__tmStateReference__s.html
-file build/$(MACH32)/docs/html/structnetsnmp__transport__config__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__transport__config__s.html
-file build/$(MACH32)/docs/html/structnetsnmp__tsmSecurityReference__s.html \
-    path=usr/share/doc/net-snmp/html/structnetsnmp__tsmSecurityReference__s.html
-file build/$(MACH32)/docs/html/structregister__sysOR__parameters.html \
-    path=usr/share/doc/net-snmp/html/structregister__sysOR__parameters.html
-file build/$(MACH32)/docs/html/structrowcreate__state__s.html \
-    path=usr/share/doc/net-snmp/html/structrowcreate__state__s.html
-file build/$(MACH32)/docs/html/structssll__iterator__s.html \
-    path=usr/share/doc/net-snmp/html/structssll__iterator__s.html
-file build/$(MACH32)/docs/html/structsysORTable.html \
-    path=usr/share/doc/net-snmp/html/structsysORTable.html
 file build/$(MACH32)/docs/html/structMDstruct.html \
     path=usr/share/doc/net-snmp/html/structMDstruct.html
 file build/$(MACH32)/docs/html/struct__InputParams.html \
@@ -922,6 +787,12 @@
     path=usr/share/doc/net-snmp/html/struct__PrefixList.html
 file build/$(MACH32)/docs/html/struct__agent__nsap.html \
     path=usr/share/doc/net-snmp/html/struct__agent__nsap.html
+file build/$(MACH32)/docs/html/struct__com2SecEntry.html \
+    path=usr/share/doc/net-snmp/html/struct__com2SecEntry.html
+file build/$(MACH32)/docs/html/struct__com2SecUnixEntry.html \
+    path=usr/share/doc/net-snmp/html/struct__com2SecUnixEntry.html
+file build/$(MACH32)/docs/html/struct__sockaddr__un__pair.html \
+    path=usr/share/doc/net-snmp/html/struct__sockaddr__un__pair.html
 file build/$(MACH32)/docs/html/structaddrCache.html \
     path=usr/share/doc/net-snmp/html/structaddrCache.html
 file build/$(MACH32)/docs/html/structagent__add__trap__args.html \
@@ -940,10 +811,16 @@
     path=usr/share/doc/net-snmp/html/structconfig__files.html
 file build/$(MACH32)/docs/html/structconfig__line.html \
     path=usr/share/doc/net-snmp/html/structconfig__line.html
+file build/$(MACH32)/docs/html/structcontainer__table__data__s.html \
+    path=usr/share/doc/net-snmp/html/structcontainer__table__data__s.html
+file build/$(MACH32)/docs/html/structcontainer__type__s.html \
+    path=usr/share/doc/net-snmp/html/structcontainer__type__s.html
 file build/$(MACH32)/docs/html/structcounter64.html \
     path=usr/share/doc/net-snmp/html/structcounter64.html
 file build/$(MACH32)/docs/html/structdata__set__cache__s.html \
     path=usr/share/doc/net-snmp/html/structdata__set__cache__s.html
+file build/$(MACH32)/docs/html/structdata__set__tables__s.html \
+    path=usr/share/doc/net-snmp/html/structdata__set__tables__s.html
 file build/$(MACH32)/docs/html/structenginetime__struct.html \
     path=usr/share/doc/net-snmp/html/structenginetime__struct.html
 file build/$(MACH32)/docs/html/structenum__list.html \
@@ -952,12 +829,42 @@
     path=usr/share/doc/net-snmp/html/structget__req__state.html
 file build/$(MACH32)/docs/html/structindex__list.html \
     path=usr/share/doc/net-snmp/html/structindex__list.html
+file build/$(MACH32)/docs/html/structiterator__info__s.html \
+    path=usr/share/doc/net-snmp/html/structiterator__info__s.html
 file build/$(MACH32)/docs/html/structksm__cache__entry.html \
     path=usr/share/doc/net-snmp/html/structksm__cache__entry.html
 file build/$(MACH32)/docs/html/structksm__secStateRef.html \
     path=usr/share/doc/net-snmp/html/structksm__secStateRef.html
 file build/$(MACH32)/docs/html/structlookup__cache__context__s.html \
     path=usr/share/doc/net-snmp/html/structlookup__cache__context__s.html
+file build/$(MACH32)/docs/html/structlookup__cache__s.html \
+    path=usr/share/doc/net-snmp/html/structlookup__cache__s.html
+file build/$(MACH32)/docs/html/structmib__atEntry.html \
+    path=usr/share/doc/net-snmp/html/structmib__atEntry.html
+file build/$(MACH32)/docs/html/structmib__egp.html \
+    path=usr/share/doc/net-snmp/html/structmib__egp.html
+file build/$(MACH32)/docs/html/structmib__egpNeighEntry.html \
+    path=usr/share/doc/net-snmp/html/structmib__egpNeighEntry.html
+file build/$(MACH32)/docs/html/structmib__icmp.html \
+    path=usr/share/doc/net-snmp/html/structmib__icmp.html
+file build/$(MACH32)/docs/html/structmib__ifEntry.html \
+    path=usr/share/doc/net-snmp/html/structmib__ifEntry.html
+file build/$(MACH32)/docs/html/structmib__interface.html \
+    path=usr/share/doc/net-snmp/html/structmib__interface.html
+file build/$(MACH32)/docs/html/structmib__ip.html \
+    path=usr/share/doc/net-snmp/html/structmib__ip.html
+file build/$(MACH32)/docs/html/structmib__ipAddrEntry.html \
+    path=usr/share/doc/net-snmp/html/structmib__ipAddrEntry.html
+file build/$(MACH32)/docs/html/structmib__ipRouteEntry.html \
+    path=usr/share/doc/net-snmp/html/structmib__ipRouteEntry.html
+file build/$(MACH32)/docs/html/structmib__system.html \
+    path=usr/share/doc/net-snmp/html/structmib__system.html
+file build/$(MACH32)/docs/html/structmib__tcp.html \
+    path=usr/share/doc/net-snmp/html/structmib__tcp.html
+file build/$(MACH32)/docs/html/structmib__tcpConnEntry.html \
+    path=usr/share/doc/net-snmp/html/structmib__tcpConnEntry.html
+file build/$(MACH32)/docs/html/structmib__udp.html \
+    path=usr/share/doc/net-snmp/html/structmib__udp.html
 file build/$(MACH32)/docs/html/structmodule.html \
     path=usr/share/doc/net-snmp/html/structmodule.html
 file build/$(MACH32)/docs/html/structmodule__compatability.html \
@@ -1034,6 +941,8 @@
     path=usr/share/doc/net-snmp/html/structnetsnmp__monitor__callback__header__s.html
 file build/$(MACH32)/docs/html/structnetsnmp__monitor__callback__set__request__s.html \
     path=usr/share/doc/net-snmp/html/structnetsnmp__monitor__callback__set__request__s.html
+file build/$(MACH32)/docs/html/structnetsnmp__num__file__instance__s.html \
+    path=usr/share/doc/net-snmp/html/structnetsnmp__num__file__instance__s.html
 file build/$(MACH32)/docs/html/structnetsnmp__oid__stash__node__s.html \
     path=usr/share/doc/net-snmp/html/structnetsnmp__oid__stash__node__s.html
 file build/$(MACH32)/docs/html/structnetsnmp__oid__stash__save__info__s.html \
@@ -1092,12 +1001,16 @@
     path=usr/share/doc/net-snmp/html/structnetsnmp__transport__s.html
 file build/$(MACH32)/docs/html/structnetsnmp__tree__cache__s.html \
     path=usr/share/doc/net-snmp/html/structnetsnmp__tree__cache__s.html
+file build/$(MACH32)/docs/html/structnetsnmp__udp__addr__pair__s.html \
+    path=usr/share/doc/net-snmp/html/structnetsnmp__udp__addr__pair__s.html
 file build/$(MACH32)/docs/html/structnetsnmp__void__array__s.html \
     path=usr/share/doc/net-snmp/html/structnetsnmp__void__array__s.html
 file build/$(MACH32)/docs/html/structnetsnmp__watcher__info__s.html \
     path=usr/share/doc/net-snmp/html/structnetsnmp__watcher__info__s.html
 file build/$(MACH32)/docs/html/structnewrow__stash__s.html \
     path=usr/share/doc/net-snmp/html/structnewrow__stash__s.html
+file build/$(MACH32)/docs/html/structnode.html \
+    path=usr/share/doc/net-snmp/html/structnode.html
 file build/$(MACH32)/docs/html/structobjgroup.html \
     path=usr/share/doc/net-snmp/html/structobjgroup.html
 file build/$(MACH32)/docs/html/structold__opi__cache__s.html \
@@ -1114,12 +1027,18 @@
     path=usr/share/doc/net-snmp/html/structsession__list.html
 file build/$(MACH32)/docs/html/structsl__container__s.html \
     path=usr/share/doc/net-snmp/html/structsl__container__s.html
+file build/$(MACH32)/docs/html/structsl__node.html \
+    path=usr/share/doc/net-snmp/html/structsl__node.html
 file build/$(MACH32)/docs/html/structsnmp__alarm.html \
     path=usr/share/doc/net-snmp/html/structsnmp__alarm.html
 file build/$(MACH32)/docs/html/structsnmp__enum__list.html \
     path=usr/share/doc/net-snmp/html/structsnmp__enum__list.html
+file build/$(MACH32)/docs/html/structsnmp__enum__list__str.html \
+    path=usr/share/doc/net-snmp/html/structsnmp__enum__list__str.html
 file build/$(MACH32)/docs/html/structsnmp__gen__callback.html \
     path=usr/share/doc/net-snmp/html/structsnmp__gen__callback.html
+file build/$(MACH32)/docs/html/structsnmp__index.html \
+    path=usr/share/doc/net-snmp/html/structsnmp__index.html
 file build/$(MACH32)/docs/html/structsnmp__internal__session.html \
     path=usr/share/doc/net-snmp/html/structsnmp__internal__session.html
 file build/$(MACH32)/docs/html/structsnmp__log__message.html \
@@ -1150,8 +1069,12 @@
     path=usr/share/doc/net-snmp/html/structti__cache__info__s.html
 file build/$(MACH32)/docs/html/structtok.html \
     path=usr/share/doc/net-snmp/html/structtok.html
+file build/$(MACH32)/docs/html/structtrap__sink.html \
+    path=usr/share/doc/net-snmp/html/structtrap__sink.html
 file build/$(MACH32)/docs/html/structtree.html \
     path=usr/share/doc/net-snmp/html/structtree.html
+file build/$(MACH32)/docs/html/structundoInfo.html \
+    path=usr/share/doc/net-snmp/html/structundoInfo.html
 file build/$(MACH32)/docs/html/structusmStateReference.html \
     path=usr/share/doc/net-snmp/html/structusmStateReference.html
 file build/$(MACH32)/docs/html/structusmUser.html \
@@ -1232,6 +1155,8 @@
     path=usr/share/doc/net-snmp/html/table__tdata_8h_source.html
 file build/$(MACH32)/docs/html/tabs.css \
     path=usr/share/doc/net-snmp/html/tabs.css
+file build/$(MACH32)/docs/html/test__binary__array_8c_source.html \
+    path=usr/share/doc/net-snmp/html/test__binary__array_8c_source.html
 file build/$(MACH32)/docs/html/text__utils_8c_source.html \
     path=usr/share/doc/net-snmp/html/text__utils_8c_source.html
 file build/$(MACH32)/docs/html/text__utils_8h_source.html \
@@ -1248,10 +1173,6 @@
     path=usr/share/doc/net-snmp/html/transform__oids_8h_source.html
 file build/$(MACH32)/docs/html/types_8h_source.html \
     path=usr/share/doc/net-snmp/html/types_8h_source.html
-file build/$(MACH32)/docs/html/testing_8h_source.html \
-    path=usr/share/doc/net-snmp/html/testing_8h_source.html
-file build/$(MACH32)/docs/html/unionnetsnmp__sockaddr__storage__u.html \
-    path=usr/share/doc/net-snmp/html/unionnetsnmp__sockaddr__storage__u.html
 file build/$(MACH32)/docs/html/ucd-snmp-includes_8h_source.html \
     path=usr/share/doc/net-snmp/html/ucd-snmp-includes_8h_source.html
 file build/$(MACH32)/docs/html/ucdDemoPublic_8c_source.html \
@@ -1296,14 +1217,11 @@
     path=usr/share/doc/net-snmp/html/winservice_8c_source.html
 file build/$(MACH32)/docs/html/winservice_8h_source.html \
     path=usr/share/doc/net-snmp/html/winservice_8h_source.html
-file path=usr/share/man/man1/agentxtrap.1
 file path=usr/share/man/man1/encode_keychange.1
 file path=usr/share/man/man1/fixproc.1
 file path=usr/share/man/man1/mib2c-update.1
 file path=usr/share/man/man1/mib2c.1
 file path=usr/share/man/man1/net-snmp-config.1
-file path=usr/share/man/man1/net-snmp-create-v3-user.1
-file path=usr/share/man/man1/snmp-bridge-mib.1
 file path=usr/share/man/man1/snmpbulkget.1
 file path=usr/share/man/man1/snmpbulkwalk.1
 file path=usr/share/man/man1/snmpcmd.1
@@ -1334,58 +1252,88 @@
 file path=usr/share/man/man3/fprint_value.3
 file path=usr/share/man/man3/fprint_variable.3
 file path=usr/share/man/man3/get_module_node.3
-file path=usr/share/man/man3/netsnmp_agent_api.3
-file path=usr/share/man/man3/netsnmp_config_api.3
-file path=usr/share/man/man3/netsnmp_init_mib.3
-file path=usr/share/man/man3/netsnmp_mib_api.3
-file path=usr/share/man/man3/netsnmp_pdu_api.3
-file path=usr/share/man/man3/netsnmp_read_module.3
-file path=usr/share/man/man3/netsnmp_sess_api.3
-file path=usr/share/man/man3/netsnmp_session_api.3
-file path=usr/share/man/man3/netsnmp_trap_api.3
-file path=usr/share/man/man3/netsnmp_varbind_api.3
+file path=usr/share/man/man3/init_mib.3
+file path=usr/share/man/man3/init_mib_internals.3
+file path=usr/share/man/man3/mib_api.3
+file path=usr/share/man/man3/netsnmp_Container_iterator.3
+file path=usr/share/man/man3/netsnmp_agent.3
+file path=usr/share/man/man3/netsnmp_baby_steps.3
+file path=usr/share/man/man3/netsnmp_bulk_to_next.3
+file path=usr/share/man/man3/netsnmp_cache_handler.3
+file path=usr/share/man/man3/netsnmp_container.3
+file path=usr/share/man/man3/netsnmp_debug.3
+file path=usr/share/man/man3/netsnmp_ds_get_boolean.3
+file path=usr/share/man/man3/netsnmp_ds_get_int.3
+file path=usr/share/man/man3/netsnmp_ds_get_string.3
+file path=usr/share/man/man3/netsnmp_ds_register_config.3
+file path=usr/share/man/man3/netsnmp_ds_register_premib.3
+file path=usr/share/man/man3/netsnmp_ds_set_boolean.3
+file path=usr/share/man/man3/netsnmp_ds_set_int.3
+file path=usr/share/man/man3/netsnmp_ds_set_string.3
+file path=usr/share/man/man3/netsnmp_ds_shutdown.3
+file path=usr/share/man/man3/netsnmp_example_scalar_int.3
+file path=usr/share/man/man3/netsnmp_handler.3
+file path=usr/share/man/man3/netsnmp_instance.3
+file path=usr/share/man/man3/netsnmp_iterator_info_s.3
+file path=usr/share/man/man3/netsnmp_leaf.3
+file path=usr/share/man/man3/netsnmp_library.3
+file path=usr/share/man/man3/netsnmp_mib_handler_methods.3
+file path=usr/share/man/man3/netsnmp_mib_utilities.3
+file path=usr/share/man/man3/netsnmp_mode_end_call.3
+file path=usr/share/man/man3/netsnmp_multiplexer.3
+file path=usr/share/man/man3/netsnmp_old_api.3
+file path=usr/share/man/man3/netsnmp_read_only.3
+file path=usr/share/man/man3/netsnmp_row_merge.3
+file path=usr/share/man/man3/netsnmp_scalar.3
+file path=usr/share/man/man3/netsnmp_scalar_group_group.3
+file path=usr/share/man/man3/netsnmp_serialize.3
+file path=usr/share/man/man3/netsnmp_stash_cache.3
+file path=usr/share/man/man3/netsnmp_table.3
+file path=usr/share/man/man3/netsnmp_table_array.3
+file path=usr/share/man/man3/netsnmp_table_data.3
+file path=usr/share/man/man3/netsnmp_table_dataset.3
+file path=usr/share/man/man3/netsnmp_table_iterator.3
+file path=usr/share/man/man3/netsnmp_utilities.3
+file path=usr/share/man/man3/netsnmp_watcher.3
 file path=usr/share/man/man3/print_description.3
 file path=usr/share/man/man3/print_mib.3
 file path=usr/share/man/man3/print_objid.3
 file path=usr/share/man/man3/print_value.3
 file path=usr/share/man/man3/print_variable.3
 file path=usr/share/man/man3/read_all_mibs.3
+file path=usr/share/man/man3/read_config.3
 file path=usr/share/man/man3/read_config_print_usage.3
 file path=usr/share/man/man3/read_configs.3
 file path=usr/share/man/man3/read_mib.3
+file path=usr/share/man/man3/read_module.3
+file path=usr/share/man/man3/read_module_node.3
 file path=usr/share/man/man3/read_objid.3
 file path=usr/share/man/man3/read_premib_configs.3
 file path=usr/share/man/man3/register_app_config_handler.3
-file path=usr/share/man/man3/register_app_prenetsnmp_mib_handler.3
+file path=usr/share/man/man3/register_app_premib_handler.3
 file path=usr/share/man/man3/register_config_handler.3
-file path=usr/share/man/man3/register_const_config_handler.3
 file path=usr/share/man/man3/register_mib_handlers.3
-file path=usr/share/man/man3/register_prenetsnmp_mib_handler.3
+file path=usr/share/man/man3/register_premib_handler.3
 file path=usr/share/man/man3/send_easy_trap.3
 file path=usr/share/man/man3/send_trap_vars.3
 file path=usr/share/man/man3/send_v2trap.3
 file path=usr/share/man/man3/shutdown_mib.3
-file path=usr/share/man/man3/snmp_add_null_var.3
+file path=usr/share/man/man3/snmp_agent_api.3
 file path=usr/share/man/man3/snmp_alarm.3
 file path=usr/share/man/man3/snmp_alarm_register.3
 file path=usr/share/man/man3/snmp_alarm_register_hr.3
 file path=usr/share/man/man3/snmp_alarm_unregister.3
+file path=usr/share/man/man3/snmp_api.3
 file path=usr/share/man/man3/snmp_api_errstring.3
 file path=usr/share/man/man3/snmp_close.3
-file path=usr/share/man/man3/snmp_clone_pdu.3
 file path=usr/share/man/man3/snmp_error.3
-file path=usr/share/man/man3/snmp_fix_pdu.3
 file path=usr/share/man/man3/snmp_free_pdu.3
-file path=usr/share/man/man3/snmp_free_var.3
-file path=usr/share/man/man3/snmp_free_varbind.3
 file path=usr/share/man/man3/snmp_open.3
-file path=usr/share/man/man3/snmp_parse_oid.3
 file path=usr/share/man/man3/snmp_perror.3
-file path=usr/share/man/man3/snmp_pdu_add_variable.3
-file path=usr/share/man/man3/snmp_pdu_create.3
 file path=usr/share/man/man3/snmp_read.3
 file path=usr/share/man/man3/snmp_select_info.3
 file path=usr/share/man/man3/snmp_send.3
+file path=usr/share/man/man3/snmp_sess_api.3
 file path=usr/share/man/man3/snmp_sess_async_send.3
 file path=usr/share/man/man3/snmp_sess_close.3
 file path=usr/share/man/man3/snmp_sess_error.3
@@ -1397,20 +1345,16 @@
 file path=usr/share/man/man3/snmp_sess_send.3
 file path=usr/share/man/man3/snmp_sess_session.3
 file path=usr/share/man/man3/snmp_sess_timeout.3
-file path=usr/share/man/man3/snmp_set_mib_errors.3
 file path=usr/share/man/man3/snmp_set_mib_warnings.3
 file path=usr/share/man/man3/snmp_set_save_descriptions.3
-file path=usr/share/man/man3/snmp_set_var_objid.3
-file path=usr/share/man/man3/snmp_set_var_typed_integer.3
-file path=usr/share/man/man3/snmp_set_var_typed_value.3
-file path=usr/share/man/man3/snmp_set_var_value.3
 file path=usr/share/man/man3/snmp_timeout.3
-file path=usr/share/man/man3/snmp_varlist_add_variable.3
-file path=usr/share/man/man3/snprint_description.3
+file path=usr/share/man/man3/snmp_trap_api.3
 file path=usr/share/man/man3/snprint_objid.3
 file path=usr/share/man/man3/snprint_value.3
 file path=usr/share/man/man3/snprint_variable.3
-file path=usr/share/man/man3/unregister_all_config_handlers.3
+file path=usr/share/man/man3/sprint_realloc_objid.3
+file path=usr/share/man/man3/sprint_realloc_value.3
+file path=usr/share/man/man3/sprint_realloc_variable.3
 file path=usr/share/man/man3/unregister_app_config_handler.3
 file path=usr/share/man/man3/unregister_config_handler.3
 file path=usr/share/man/man5/mib2c.conf.5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/001.scapi.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,31 @@
+--- net-snmp-5.4.1/snmplib/scapi.c	Fri Sep 15 05:47:01 2006
++++ net-snmp-5.4.1.mod/snmplib/scapi.c	Sat Jul  4 02:58:34 2009
[email protected]@ -406,11 +406,11 @@
+     int            rval = SNMPERR_SUCCESS;
+ #endif
+     int            ret;
++    unsigned int   tmp_len;
+ 
+ #ifdef NETSNMP_USE_OPENSSL
+     const EVP_MD   *hashfn;
+     EVP_MD_CTX     ctx, *cptr;
+-    unsigned int   tmp_len;
+ #endif
+ 
+     DEBUGTRACE;
[email protected]@ -479,13 +479,11 @@
+ 
+ #ifndef NETSNMP_DISABLE_MD5
+     if (ISTRANSFORM(hashtype, HMACMD5Auth)) {
+-	rval = pkcs_digest(CKM_MD5, buf, buf_len, MAC, &tmp_len);
+-        *MAC_len = tmp_len;
++	rval = pkcs_digest(CKM_MD5, buf, buf_len, MAC, MAC_len);
+     } else
+ #endif
+         if (ISTRANSFORM(hashtype, HMACSHA1Auth)) {
+-	rval = pkcs_digest(CKM_SHA_1, buf, buf_len, MAC, &tmp_len);
+-        *MAC_len = tmp_len;
++	rval = pkcs_digest(CKM_SHA_1, buf, buf_len, MAC, MAC_len);
+     } else {
+         return (SNMPERR_GENERR);
+     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/003.solaris-ip-mib.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,491 @@
+--- net-snmp-5.4.1/agent/mibgroup/ip-mib/data_access/systemstats_solaris2.c	(revision 0)
++++ net-snmp-5.4.1-patch/agent/mibgroup/ip-mib/data_access/systemstats_solaris2.c	(revision 0)
[email protected]@ -0,0 +1,199 @@
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++#include <net-snmp/data_access/ipstats.h>
++#include <net-snmp/data_access/systemstats.h>
++
++#include "kernel_sunos5.h"
++
++static int _systemstats(mibgroup_e, netsnmp_container *, u_int);
++static void _add_ipstats(mib2_ipIfStatsEntry_t *, mib2_ipIfStatsEntry_t *);
++static int _insert_entry(netsnmp_container *, mib2_ipIfStatsEntry_t *);
++
++void
++netsnmp_access_systemstats_arch_init(void)
++{
++    init_kernel_sunos5();
++}
++
++/*
++ * @retval  0 success
++ * @retval -1 container error
++ * @retval -2 could not create entry (probably malloc)
++ */
++int
++netsnmp_access_systemstats_container_arch_load(netsnmp_container* container,
++                                             u_int load_flags)
++{
++    int rc; 
++    
++    if (container == NULL)
++        return (-1);
++
++    if ((rc = _systemstats(MIB_IP_TRAFFIC_STATS, container, load_flags)) < 0)
++        return (rc);
++#if defined(NETSNMP_ENABLE_IPV6)
++    if ((rc = _systemstats(MIB_IP6, container, load_flags)) < 0) {
++            netsnmp_access_systemstats_container_free(container,
++                NETSNMP_ACCESS_SYSTEMSTATS_FREE_NOFLAGS);
++        return (rc);
++    }
++#endif
++    return (0);
++}
++
++/*
++ * @retval 0 success 
++ * @retval <0 error
++ */
++static int
++_systemstats(mibgroup_e mib, netsnmp_container *container, u_int load_flags)
++{
++    mib2_ipIfStatsEntry_t ipe, iptot;
++    req_e req = GET_FIRST;
++    int ipversion = (mib == MIB_IP6) ? MIB2_INETADDRESSTYPE_ipv6 :
++                                       MIB2_INETADDRESSTYPE_ipv4;
++    bzero((void *)&iptot, sizeof(iptot));
++
++    while (getMibstat(mib, &ipe, sizeof(ipe), req, 
++                      &Get_everything, NULL) == 0) { 
++        req = GET_NEXT;
++        netsnmp_assert(ipe.ipIfStatsIPVersion == ipversion);
++        _add_ipstats(&iptot, &ipe);
++    }
++    iptot.ipIfStatsIPVersion = ipversion;
++    return _insert_entry(container, &iptot);
++}
++
++static void
++_add_ipstats(mib2_ipIfStatsEntry_t *o1, mib2_ipIfStatsEntry_t *o2)
++{
++    o1->ipIfStatsInHdrErrors += o2->ipIfStatsInHdrErrors;
++    o1->ipIfStatsInTooBigErrors += o2->ipIfStatsInTooBigErrors;
++    o1->ipIfStatsInNoRoutes += o2->ipIfStatsInNoRoutes;
++    o1->ipIfStatsInAddrErrors += o2->ipIfStatsInAddrErrors;
++    o1->ipIfStatsInUnknownProtos += o2->ipIfStatsInUnknownProtos;
++    o1->ipIfStatsInTruncatedPkts += o2->ipIfStatsInTruncatedPkts;
++    o1->ipIfStatsInDiscards += o2->ipIfStatsInDiscards;
++    o1->ipIfStatsOutDiscards += o2->ipIfStatsOutDiscards;
++    o1->ipIfStatsOutFragOKs += o2->ipIfStatsOutFragOKs;
++    o1->ipIfStatsOutFragFails += o2->ipIfStatsOutFragFails;
++    o1->ipIfStatsOutFragCreates += o2->ipIfStatsOutFragCreates;
++    o1->ipIfStatsReasmReqds += o2->ipIfStatsReasmReqds;
++    o1->ipIfStatsReasmOKs += o2->ipIfStatsReasmOKs;
++    o1->ipIfStatsReasmFails += o2->ipIfStatsReasmFails;
++    o1->ipIfStatsOutNoRoutes += o2->ipIfStatsOutNoRoutes;
++    o1->ipIfStatsReasmDuplicates += o2->ipIfStatsReasmDuplicates;
++    o1->ipIfStatsReasmPartDups += o2->ipIfStatsReasmPartDups;
++    o1->ipIfStatsForwProhibits += o2->ipIfStatsForwProhibits;
++    o1->udpInCksumErrs += o2->udpInCksumErrs;
++    o1->udpInOverflows += o2->udpInOverflows;
++    o1->rawipInOverflows += o2->rawipInOverflows;
++    o1->ipIfStatsInWrongIPVersion += o2->ipIfStatsInWrongIPVersion;
++    o1->ipIfStatsOutWrongIPVersion += o2->ipIfStatsOutWrongIPVersion;
++    o1->ipIfStatsOutSwitchIPVersion += o2->ipIfStatsOutSwitchIPVersion;
++    o1->ipIfStatsHCInReceives += o2->ipIfStatsHCInReceives;
++    o1->ipIfStatsHCInOctets += o2->ipIfStatsHCInOctets;
++    o1->ipIfStatsHCInForwDatagrams += o2->ipIfStatsHCInForwDatagrams;
++    o1->ipIfStatsHCInDelivers += o2->ipIfStatsHCInDelivers;
++    o1->ipIfStatsHCOutRequests += o2->ipIfStatsHCOutRequests;
++    o1->ipIfStatsHCOutForwDatagrams += o2->ipIfStatsHCOutForwDatagrams;
++    o1->ipIfStatsOutFragReqds += o2->ipIfStatsOutFragReqds;
++    o1->ipIfStatsHCOutTransmits += o2->ipIfStatsHCOutTransmits;
++    o1->ipIfStatsHCOutOctets += o2->ipIfStatsHCOutOctets;
++    o1->ipIfStatsHCInMcastPkts += o2->ipIfStatsHCInMcastPkts;
++    o1->ipIfStatsHCInMcastOctets += o2->ipIfStatsHCInMcastOctets;
++    o1->ipIfStatsHCOutMcastPkts += o2->ipIfStatsHCOutMcastPkts;
++    o1->ipIfStatsHCOutMcastOctets += o2->ipIfStatsHCOutMcastOctets;
++    o1->ipIfStatsHCInBcastPkts += o2->ipIfStatsHCInBcastPkts;
++    o1->ipIfStatsHCOutBcastPkts += o2->ipIfStatsHCOutBcastPkts;
++    o1->ipsecInSucceeded += o2->ipsecInSucceeded;
++    o1->ipsecInFailed += o2->ipsecInFailed;
++    o1->ipInCksumErrs += o2->ipInCksumErrs;
++    o1->tcpInErrs += o2->tcpInErrs;
++    o1->udpNoPorts += o2->udpNoPorts;
++}
++
++/*
++ * @retval 0 entry was successfully inserted in the container 
++ * @retval -1 container error
++ * @retval -2 memory allocation error
++ */
++static int 
++_insert_entry(netsnmp_container *container, mib2_ipIfStatsEntry_t *ipe)
++{
++    netsnmp_systemstats_entry *ep =
++        netsnmp_access_systemstats_entry_create(ipe->ipIfStatsIPVersion); 
++
++    DEBUGMSGTL(("access:systemstats:arch", "insert entry for v%d\n",
++                ipe->ipIfStatsIPVersion)); 
++    if (ep == NULL) {
++        DEBUGMSGT(("access:systemstats:arch", "insert failed (alloc)"));
++        return (-2);
++    }
++
++    ep->stats.HCInReceives.low = 
++        ipe->ipIfStatsHCInReceives & 0xffffffff;
++    ep->stats.HCInReceives.high = ipe->ipIfStatsHCInReceives >> 32;
++    ep->stats.HCInOctets.low = 
++        ipe->ipIfStatsHCInOctets & 0xffffffff;
++    ep->stats.HCInOctets.high = ipe->ipIfStatsHCInOctets >> 32;
++    ep->stats.InHdrErrors = ipe->ipIfStatsInHdrErrors;
++    ep->stats.InAddrErrors = ipe->ipIfStatsInAddrErrors;
++    ep->stats.InUnknownProtos = ipe->ipIfStatsInUnknownProtos;
++    ep->stats.InTruncatedPkts = ipe->ipIfStatsInTruncatedPkts;
++    ep->stats.HCInForwDatagrams.low = 
++        ipe->ipIfStatsHCInForwDatagrams & 0xffffffff;
++    ep->stats.HCInForwDatagrams.high = 
++        ipe->ipIfStatsHCInForwDatagrams >> 32;
++    ep->stats.ReasmReqds = ipe->ipIfStatsReasmReqds; 
++    ep->stats.ReasmOKs = ipe->ipIfStatsReasmOKs; 
++    ep->stats.ReasmFails = ipe->ipIfStatsReasmFails; 
++    ep->stats.InDiscards = ipe->ipIfStatsInDiscards;
++    ep->stats.HCInDelivers.low = 
++        ipe->ipIfStatsHCInDelivers & 0xffffffff; 
++    ep->stats.HCInDelivers.high = 
++        ipe->ipIfStatsHCInDelivers >> 32; 
++    ep->stats.HCOutRequests.low = 
++        ipe->ipIfStatsHCOutRequests & 0xffffffff;
++    ep->stats.HCOutRequests.high = 
++        ipe->ipIfStatsHCOutRequests >> 32; 
++    ep->stats.OutNoRoutes = ipe->ipIfStatsOutNoRoutes; 
++    ep->stats.HCOutForwDatagrams.low = 
++        ipe->ipIfStatsHCOutForwDatagrams & 0xffffffff;
++    ep->stats.HCOutForwDatagrams.high = 
++        ipe->ipIfStatsHCOutForwDatagrams >> 32;
++    ep->stats.OutDiscards = ipe->ipIfStatsOutDiscards; 
++    ep->stats.OutFragOKs = ipe->ipIfStatsOutFragOKs; 
++    ep->stats.OutFragFails = ipe->ipIfStatsOutFragFails; 
++    ep->stats.OutFragCreates = ipe->ipIfStatsOutFragCreates; 
++    ep->stats.HCOutTransmits.low = 
++        ipe->ipIfStatsHCOutTransmits & 0xffffffff;
++    ep->stats.HCOutTransmits.high = ipe->ipIfStatsHCOutTransmits >> 32;
++    ep->stats.HCOutOctets.low = ipe->ipIfStatsHCOutOctets & 0xffffffff;
++    ep->stats.HCOutOctets.high = ipe->ipIfStatsHCOutOctets >> 32;
++    ep->stats.HCInMcastPkts.low = ipe->ipIfStatsHCInMcastPkts & 0xffffffff;
++    ep->stats.HCInMcastPkts.high = ipe->ipIfStatsHCInMcastPkts >> 32;
++    ep->stats.HCInMcastOctets.low = 
++        ipe->ipIfStatsHCInMcastOctets & 0xffffffff;
++    ep->stats.HCInMcastOctets.high = ipe->ipIfStatsHCInMcastOctets >> 32;
++    ep->stats.HCOutMcastPkts.low = 
++        ipe->ipIfStatsHCOutMcastPkts & 0xffffffff;
++    ep->stats.HCOutMcastPkts.high = ipe->ipIfStatsHCOutMcastPkts >> 32;
++    ep->stats.HCOutMcastOctets.low = 
++        ipe->ipIfStatsHCOutMcastOctets & 0xffffffff;
++    ep->stats.HCOutMcastOctets.high = ipe->ipIfStatsHCOutMcastOctets >> 32;
++    ep->stats.HCInBcastPkts.low = ipe->ipIfStatsHCInBcastPkts & 0xffffffff;
++    ep->stats.HCInBcastPkts.high = ipe->ipIfStatsHCInBcastPkts >> 32;
++    ep->stats.HCOutBcastPkts.low = 
++        ipe->ipIfStatsHCOutBcastPkts & 0xffffffff;
++    ep->stats.HCOutBcastPkts.high = ipe->ipIfStatsHCOutBcastPkts >> 32;
++
++    if (CONTAINER_INSERT(container, ep) < 0) {
++        DEBUGMSGT(("access:systemstats:arch", "unable to insert entry")); 
++        netsnmp_access_systemstats_entry_free(ep); 
++        return (-1);
++    }
++    return (0);
++}
+--- net-snmp-5.4.1/agent/mibgroup/ip-mib/data_access/ipaddress_solaris2.c	(revision 0)
++++ net-snmp-5.4.1-patch/agent/mibgroup/ip-mib/data_access/ipaddress_solaris2.c	(revision 0)
[email protected]@ -0,0 +1,286 @@
++/*
++ *  IP-MIB architecture support
++ *
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++#include <net-snmp/data_access/ipaddress.h>
++#include <net-snmp/data_access/interface.h>
++
++#include "ip-mib/ipAddressTable/ipAddressTable_constants.h"
++
++#include "kernel_sunos5.h"
++#include "mibII/mibII_common.h"
++
++static int _load_v4(netsnmp_container *container, int idx_offset);
++#if defined( NETSNMP_ENABLE_IPV6 )
++static int _load_v6(netsnmp_container *container, int idx_offset);
++#endif
++
++/*
++ * initialize arch specific storage
++ *
++ * @retval  0: success
++ * @retval <0: error
++ */
++int
++netsnmp_arch_ipaddress_entry_init(netsnmp_ipaddress_entry *entry)
++{
++    init_kernel_sunos5();
++    return 0;
++}
++
++/*
++ * cleanup arch specific storage
++ */
++void
++netsnmp_arch_ipaddress_entry_cleanup(netsnmp_ipaddress_entry *entry)
++{
++    /*
++     * Nothing to do.
++     */
++}
++
++/*
++ * copy arch specific storage
++ */
++int
++netsnmp_arch_ipaddress_entry_copy(netsnmp_ipaddress_entry *lhs,
++                                  netsnmp_ipaddress_entry *rhs)
++{
++    /*
++     * Nothing to do. 
++     */
++    return 0;
++}
++
++/*
++ * create a new entry
++ */
++int
++netsnmp_arch_ipaddress_create(netsnmp_ipaddress_entry *entry)
++{
++    if (NULL == entry)
++        return -1;
++
++    DEBUGMSGT(("access:ipaddress:create", "not applicable\n"));
++        return 0;
++}
++
++/*
++ * delete an entry
++ */
++int
++netsnmp_arch_ipaddress_delete(netsnmp_ipaddress_entry *entry)
++{
++    if (NULL == entry)
++        return -1;
++
++    DEBUGMSGT(("access:ipaddress:create", "not applicable\n"));
++    return 0;
++}
++
++/**
++ *
++ * @retval  0 no errors
++ * @retval !0 errors
++ */
++int
++netsnmp_arch_ipaddress_container_load(netsnmp_container *container,
++                                      u_int load_flags)
++{
++    int rc = 0, idx_offset = 0;
++
++    if (!(load_flags & NETSNMP_ACCESS_IPADDRESS_LOAD_IPV6_ONLY)) {
++        rc = _load_v4(container, idx_offset);
++        if(rc < 0) {
++            u_int flags = NETSNMP_ACCESS_IPADDRESS_FREE_KEEP_CONTAINER;
++            netsnmp_access_ipaddress_container_free(container, flags);
++        }
++    }
++
++#if defined( NETSNMP_ENABLE_IPV6 )
++
++    if (!(load_flags & NETSNMP_ACCESS_IPADDRESS_LOAD_IPV4_ONLY)) {
++        if (rc < 0)
++            rc = 0;
++
++        idx_offset = rc;
++
++        rc = _load_v6(container, idx_offset);
++        if(rc < 0) {
++            u_int flags = NETSNMP_ACCESS_IPADDRESS_FREE_KEEP_CONTAINER;
++            netsnmp_access_ipaddress_container_free(container, flags);
++        }
++    }
++#endif
++
++    /*
++     * return no errors (0) if we found any interfaces
++     */
++    if(rc > 0)
++        rc = 0;
++    return rc;
++}
++
++/*
++ * @retval >=idx_offset ok
++ * @retval -1 memory allocation error
++ * @retval -2 interface lookup error
++ * @retval -3 container error
++ */
++static int
++_load_v4(netsnmp_container *container, int idx_offset)
++{
++    mib2_ipAddrEntry_t      ipae;
++    netsnmp_ipaddress_entry *entry;
++    req_e                   req = GET_FIRST;
++    int                     rc = 0;
++
++    DEBUGMSGTL(("access:ipaddress:container", "loading v4\n"));
++    while ((rc = getMibstat(MIB_IP_ADDR, &ipae, sizeof(ipae), req,
++                            &Get_everything, NULL)) == 0) {
++        req = GET_NEXT;
++        entry = netsnmp_access_ipaddress_entry_create();
++        if (entry == NULL)
++            return (-1);    
++        if (ipae.ipAdEntAddr == INADDR_ANY)
++            continue;
++
++        ipae.ipAdEntIfIndex.o_bytes[ipae.ipAdEntIfIndex.o_length] = '\0';
++        DEBUGMSGTL(("access:ipaddress:container", "found if %s\n",
++                    ipae.ipAdEntIfIndex.o_bytes));
++        /* Obtain interface index */
++        entry->if_index = 
++            netsnmp_access_interface_index_find(ipae.ipAdEntIfIndex.o_bytes);
++        if (entry->if_index == 0) {
++            DEBUGMSGTL(("access:ipaddress:container", "cannot find if %s\n",
++                        ipae.ipAdEntIfIndex));
++            netsnmp_access_ipaddress_entry_free(entry);
++            return (-2);    
++        }
++
++        if (strchr((const char *)&ipae.ipAdEntIfIndex.o_bytes, ':') != 0)
++            entry->flags |= NETSNMP_ACCESS_IPADDRESS_ISALIAS;
++
++        /* Get the address */
++        entry->ia_address_len = sizeof(ipae.ipAdEntAddr);
++        netsnmp_assert(entry->ia_address_len == 4 &&
++            entry->ia_address_len <= sizeof(entry->ia_address));
++        memcpy(&entry->ia_address, &ipae.ipAdEntAddr, entry->ia_address_len);
++
++        /* prefix */
++        entry->ia_prefix_len = ipae.ipAdEntInfo.ae_subnet_len;
++
++        /* set the Origin */
++        if (ipae.ipAdEntInfo.ae_flags & IFF_DHCPRUNNING)
++            entry->ia_origin = IPADDRESSORIGINTC_DHCP;
++        else
++            entry->ia_origin = IPADDRESSORIGINTC_MANUAL;
++
++        /* set ipv4 constants */
++        entry->ia_type = IPADDRESSTYPE_UNICAST;
++        entry->ia_status = IPADDRESSSTATUSTC_PREFERRED;
++
++        entry->ns_ia_index = ++idx_offset;
++
++        DEBUGMSGTL(("access:ipaddress:container", "insert if %d, addrlen %d\n", 
++                    entry->if_index, entry->ia_address_len));
++
++        if (CONTAINER_INSERT(container, entry) < 0) {
++            DEBUGMSGTL(("access:ipaddress:container", "unable to insert %s\n", 
++                        ipae.ipAdEntIfIndex.o_bytes));
++            netsnmp_access_ipaddress_entry_free(entry);
++            return (-3);
++        }
++    }
++    return (idx_offset);
++}
++
++/*
++ * @retval >=idx_offset ok
++ * @retval -1 memory allocation error
++ * @retval -2 interface lookup error
++ * @retval -3 container error
++ */
++#if defined( NETSNMP_ENABLE_IPV6 )
++static int
++_load_v6(netsnmp_container *container, int idx_offset)
++{
++    mib2_ipv6AddrEntry_t    ip6ae;
++    netsnmp_ipaddress_entry *entry;
++    req_e                   req = GET_FIRST;
++    int                     rc = 0;
++
++    DEBUGMSGTL(("access:ipaddress:container", "loading v6... cache %d\n",
++                MIB_IP6_ADDR));
++    while ((rc = getMibstat(MIB_IP6_ADDR, &ip6ae, sizeof(ip6ae), req,
++                            &Get_everything, NULL)) == 0) {
++        req = GET_NEXT;
++        entry = netsnmp_access_ipaddress_entry_create();
++        if (entry == NULL)
++            return (-1);    
++        if (bcmp((const void *)&ip6ae.ipv6AddrAddress,
++                 (const void *)&in6addr_any,
++                 sizeof (ip6ae.ipv6AddrAddress)) == 0)
++            continue;
++
++        ip6ae.ipv6AddrIfIndex.o_bytes[ip6ae.ipv6AddrIfIndex.o_length] = '\0';
++        DEBUGMSGTL(("access:ipaddress:container", "found if %s\n",
++                    ip6ae.ipv6AddrIfIndex.o_bytes));
++
++        /* Obtain interface index */
++        entry->if_index = 
++            netsnmp_access_interface_index_find(
++            ip6ae.ipv6AddrIfIndex.o_bytes);
++        if (entry->if_index == 0) {
++            DEBUGMSGTL(("access:ipaddress:container", "cannot find if %s\n", 
++                        ip6ae.ipv6AddrIfIndex.o_bytes));
++            netsnmp_access_ipaddress_entry_free(entry);
++            return (-2);    
++        }
++
++        /* Get the address */
++        entry->ia_address_len = sizeof(ip6ae.ipv6AddrAddress);
++        netsnmp_assert(entry->ia_address_len == 16 &&
++                       entry->ia_address_len <= sizeof(entry->ia_address));
++        memcpy(&entry->ia_address, &ip6ae.ipv6AddrAddress, 
++               entry->ia_address_len);
++               
++        /* prefix */
++        entry->ia_prefix_len = ip6ae.ipv6AddrPfxLength;
++
++        /* type is anycast? (mib2.h: 1 = yes, 2 = no) */
++        entry->ia_type = (ip6ae.ipv6AddrAnycastFlag == 1) ? 
++            IPADDRESSTYPE_ANYCAST : IPADDRESSTYPE_UNICAST;
++
++        /* origin (mib2.h: 1 = stateless, 2 = stateful, 3 = unknown) */
++        DEBUGMSGTL(("access:ipaddress:container", "origin %d\n", 
++                        ip6ae.ipv6AddrType));
++        if (ip6ae.ipv6AddrType == 1)
++            entry->ia_origin = IPADDRESSORIGINTC_LINKLAYER;
++        else if (ip6ae.ipv6AddrInfo.ae_flags & IFF_DHCPRUNNING)
++            entry->ia_origin = IPADDRESSORIGINTC_DHCP;
++        else
++            entry->ia_origin = IPADDRESSORIGINTC_MANUAL;
++        
++        /* status */
++        entry->ia_status = ip6ae.ipv6AddrStatus;
++
++        entry->ns_ia_index = ++idx_offset;
++        
++        DEBUGMSGTL(("access:ipaddress:container", "insert if %d, addrlen %d\n", 
++                    entry->if_index, entry->ia_address_len));
++
++        if (CONTAINER_INSERT(container, entry) < 0) {
++            DEBUGMSGTL(("access:ipaddress:container", "unable to insert %s\n", 
++                        ip6ae.ipv6AddrIfIndex.o_bytes));
++            netsnmp_access_ipaddress_entry_free(entry);
++            return (-3);
++        }
++    }    
++    return (idx_offset);
++}
++#endif /* defined( NETSNMP_ENABLE_IPV6 ) */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/004.16436.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,162 @@
+Index: net-snmp/include/net-snmp/system/solaris.h
+===================================================================
+--- net-snmp/include/net-snmp/system/solaris.h	(revision 16435)
++++ net-snmp/include/net-snmp/system/solaris.h	(revision 16436)
[email protected]@ -38,3 +38,10 @@
+ 
+ /* Solaris 7+ */
+ #define NETSNMP_DONT_USE_NLIST 1
++
++/*
++ * NEW_MIB_COMPLIANT is a define used in Solaris 10U4+ to enable additional
++ * MIB information (it affects the structs in <inet/mib2.h>
++ */ 
++ 
++#define NEW_MIB_COMPLIANT
+Index: net-snmp/configure.in
+===================================================================
+--- net-snmp/configure.in	(revision 16435)
++++ net-snmp/configure.in	(revision 16436)
[email protected]@ -1339,8 +1339,9 @@
+ AC_CHECK_TYPES([off64_t])
+ AC_CHECK_TYPES([uintptr_t, intptr_t])
+ 
+-# solaris specific type
++# solaris specific types
+ AC_CHECK_TYPES([Counter64],,,[#include <inet/mib2.h>])
++AC_CHECK_TYPES([mib2_ipIfStatsEntry_t],,,[#include <inet/mib2.h>])
+ 
+ # guess IPv6 stack type.
+ if test "x$enable_ipv6" = "xyes"; then
+Index: net-snmp/agent/mibgroup/kernel_sunos5.h
+===================================================================
+--- net-snmp/agent/mibgroup/kernel_sunos5.h	(revision 16435)
++++ net-snmp/agent/mibgroup/kernel_sunos5.h	(revision 16436)
[email protected]@ -71,7 +71,11 @@
+     MIB_TRANSMISSION = 14,
+     MIB_SNMP = 15,
+ #ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
+-    MIB_IP6_ADDR = 16,
++#ifdef SOLARIS_HAVE_RFC4293_SUPPORT
++    MIB_IP_TRAFFIC_STATS,
++#endif
++    MIB_IP6,
++    MIB_IP6_ADDR,
+     MIB_TCP6_CONN,
+     MIB_UDP6_ENDPOINT,
+ #endif
+Index: net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c
+===================================================================
+--- net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c	(revision 16435)
++++ net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c	(revision 16436)
[email protected]@ -3,9 +3,9 @@
+  */
+ #include <net-snmp/net-snmp-config.h>
+ #include <net-snmp/net-snmp-includes.h>
+-#include "mibII/mibII_common.h"
+ #include "if-mib/ifTable/ifTable_constants.h"
+ #include "kernel_sunos5.h"
++#include "mibII/mibII_common.h"
+ 
+ #include <net-snmp/agent/net-snmp-agent-includes.h>
+ 
+Index: net-snmp/agent/mibgroup/ip-mib/data_access/ipaddress.h
+===================================================================
+--- net-snmp/agent/mibgroup/ip-mib/data_access/ipaddress.h	(revision 16435)
++++ net-snmp/agent/mibgroup/ip-mib/data_access/ipaddress.h	(revision 16436)
[email protected]@ -20,6 +20,8 @@
+ config_require(ip-mib/data_access/ipaddress_common)
+ #if defined( linux )
+ config_require(ip-mib/data_access/ipaddress_linux)
++#elif defined( solaris2 )
++config_require(ip-mib/data_access/ipaddress_solaris2)
+ #else
+ config_error(the ipaddress data access library is not available in this environment.)
+ #endif
+Index: net-snmp/agent/mibgroup/ip-mib/data_access/systemstats.h
+===================================================================
+--- net-snmp/agent/mibgroup/ip-mib/data_access/systemstats.h	(revision 16435)
++++ net-snmp/agent/mibgroup/ip-mib/data_access/systemstats.h	(revision 16436)
[email protected]@ -20,6 +20,8 @@
+ config_require(ip-mib/data_access/systemstats_common)
+ #if defined( linux )
+ config_require(ip-mib/data_access/systemstats_linux)
++#elif defined( solaris2 )
++config_require(ip-mib/data_access/systemstats_solaris2)
+ #else
+ config_error(the systemstats data access library is not available in this environment.)
+ #endif
+Index: net-snmp/agent/mibgroup/mibII.h
+===================================================================
+--- net-snmp/agent/mibgroup/mibII.h	(revision 16435)
++++ net-snmp/agent/mibgroup/mibII.h	(revision 16436)
[email protected]@ -30,3 +30,10 @@
+ #if defined( linux )
+ config_require(ip-mib ip-forward-mib tcp-mib udp-mib)
+ #endif
++
++/*
++ * For Solaris, enable additional tables when it has extended MIB support.
++ */
++#if defined( solaris2 ) && defined( HAVE_MIB2_IPIFSTATSENTRY_T )
++config_require(ip-mib/ipSystemStatsTable ip-mib/ipAddressTable)
++#endif
+Index: net-snmp/agent/mibgroup/kernel_sunos5.c
+===================================================================
+--- net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16435)
++++ net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16436)
[email protected]@ -45,6 +45,7 @@
+ #include <kstat.h>
+ #include <errno.h>
+ #include <time.h>
++#include <ctype.h>
+ 
+ #include <sys/sockio.h>
+ #include <sys/socket.h>
[email protected]@ -103,6 +104,13 @@
+     {MIB_TRANSMISSION, 0, (void *) -1, 0, 0, 0, 0},
+     {MIB_SNMP, 0, (void *) -1, 0, 0, 0, 0},
+ #ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
++#ifdef SOLARIS_HAVE_RFC4293_SUPPORT
++    {MIB_IP_TRAFFIC_STATS, 20 * sizeof(mib2_ipIfStatsEntry_t), (void *)-1, 0,
++     30, 0, 0},
++    {MIB_IP6, 20 * sizeof(mib2_ipIfStatsEntry_t), (void *)-1, 0, 30, 0, 0},
++#else
++    {MIB_IP6, 20 * sizeof(mib2_ipv6IfStatsEntry_t), (void *)-1, 0, 30, 0, 0},
++#endif
+     {MIB_IP6_ADDR, 20 * sizeof(mib2_ipv6AddrEntry_t), (void *)-1, 0, 30, 0, 0},
+     {MIB_TCP6_CONN, 1000 * sizeof(mib2_tcp6ConnEntry_t), (void *) -1, 0, 30,
+      0, 0},
[email protected]@ -131,6 +139,10 @@
+     {MIB2_TRANSMISSION, 0,},
+     {MIB2_SNMP, 0,},
+ #ifdef SOLARIS_HAVE_IPV6_MIB_SUPPORT
++#ifdef SOLARIS_HAVE_RFC4293_SUPPORT
++    {MIB2_IP, MIB2_IP_TRAFFIC_STATS},
++#endif
++    {MIB2_IP6, 0},
+     {MIB2_IP6, MIB2_IP6_ADDR},
+     {MIB2_TCP6, MIB2_TCP6_CONN},
+     {MIB2_UDP6, MIB2_UDP6_ENTRY},
[email protected]@ -343,7 +355,8 @@
+     kstat_ctl_t    *ksc;
+     kstat_t        *ks, *kstat_data;
+     kstat_named_t  *d;
+-    size_t          i, instance;
++    uint_t          i;
++    int             instance;
+     char            module_name[64];
+     int             ret;
+     u_longlong_t    val;    /* The largest value */
[email protected]@ -900,7 +913,11 @@
+     req = (struct opthdr *)(tor + 1);
+     req->level = groupname;
+     req->name = subgroupname;
++#if defined( SOLARIS_HAVE_RFC4293_SUPPORT )
++    req->len = 1; /* Used as a flag for S10 to grab extra data */
++#else
+     req->len = 0;
++#endif
+     strbuf.len = tor->OPT_length + tor->OPT_offset;
+     flags = 0;
+     if ((rc = putmsg(sd, &strbuf, NULL, flags))) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/005.16736.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,759 @@
+Index: net-snmp/agent/mibgroup/kernel_sunos5.h
+===================================================================
+--- net-snmp/agent/mibgroup/kernel_sunos5.h	(revision 16735)
++++ net-snmp/agent/mibgroup/kernel_sunos5.h	(revision 16736)
[email protected]@ -193,6 +193,8 @@
+     int             getKstatString(const char *statname, const char *varname,
+                                    char *value, size_t value_len);
+ 
++    int             solaris2_if_nametoindex(const char *, int);
++
+ #ifdef _STDC_COMPAT
+ #ifdef __cplusplus
+ }
+Index: net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c
+===================================================================
+--- net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c	(revision 16735)
++++ net-snmp/agent/mibgroup/if-mib/data_access/interface_solaris2.c	(revision 16736)
[email protected]@ -14,6 +14,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/sockio.h>
+ #include <strings.h>
++#include <string.h>
+ 
+ static int _set_ip_flags_v4(netsnmp_interface_entry *, mib2_ifEntry_t *);
+ static int _match_ifname_v4addr(void *ifname, void *ipaddr);
[email protected]@ -43,25 +44,7 @@
+ #if defined(HAVE_IF_NAMETOINDEX)
+     return if_nametoindex(name);
+ #else /* use GIFINDEX */
+-    int             sd;
+-    struct ifreq    ifr;
+-
+-    if (name == 0) {
+-        return (0);
+-    }
+-
+-    if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+-        return (0);
+-    }
+-
+-    strncpy(ifr.ifr_name, name, IFNAMSIZ);
+-    if (ioctl(sd, SIOCGIFINDEX, (char *) &ifr) < 0) {
+-        close(sd);
+-        return (0);
+-    }
+-
+-    close(sd);
+-    return (ifr.ifr_index);
++    return solaris2_if_nametoindex(name, strlen(name));
+ #endif /* defined(HAVE_IF_NAMETOINDEX) */
+ }
+ 
+Index: net-snmp/agent/mibgroup/mibII/interfaces.c
+===================================================================
+--- net-snmp/agent/mibgroup/mibII/interfaces.c	(revision 16735)
++++ net-snmp/agent/mibgroup/mibII/interfaces.c	(revision 16736)
[email protected]@ -2245,71 +2245,7 @@
+ int
+ Interface_Index_By_Name(char *Name, int Len)
+ {
+-    int             i, sd, lastlen = 0, interfaces = 0;
+-    struct ifconf   ifc;
+-    struct ifreq   *ifrp = NULL;
+-    char           *buf = NULL;
+-
+-    if (Name == 0) {
+-        return 0;
+-    }
+-    if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+-        return 0;
+-    }
+-
+-    /*
+-     * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF
+-     * on some platforms; see W. R. Stevens, ``Unix Network Programming
+-     * Volume I'', p.435.  
+-     */
+-
+-    for (i = 8;; i += 8) {
+-        buf = calloc(i, sizeof(struct ifreq));
+-        if (buf == NULL) {
+-            close(sd);
+-            return 0;
+-        }
+-        ifc.ifc_len = i * sizeof(struct ifreq);
+-        ifc.ifc_buf = (caddr_t) buf;
+-
+-        if (ioctl(sd, SIOCGIFCONF, (char *) &ifc) < 0) {
+-            if (errno != EINVAL || lastlen != 0) {
+-                /*
+-                 * Something has gone genuinely wrong.  
+-                 */
+-                free(buf);
+-                close(sd);
+-                return 0;
+-            }
+-            /*
+-             * Otherwise, it could just be that the buffer is too small.  
+-             */
+-        } else {
+-            if (ifc.ifc_len == lastlen) {
+-                /*
+-                 * The length is the same as the last time; we're done.  
+-                 */
+-                break;
+-            }
+-            lastlen = ifc.ifc_len;
+-        }
+-        free(buf);
+-    }
+-
+-    ifrp = ifc.ifc_req;
+-    interfaces = (ifc.ifc_len / sizeof(struct ifreq)) + 1;
+-
+-    for (i = 1; i < interfaces; i++, ifrp++) {
+-        if (strncmp(ifrp->ifr_name, Name, Len) == 0) {
+-            free(buf);
+-            close(sd);
+-            return i;
+-        }
+-    }
+-
+-    free(buf);
+-    close(sd);
+-    return 0;
++    return (solaris2_if_nametoindex(Name, Len));
+ }
+ 
+ #endif                          /* solaris2 */
+Index: net-snmp/agent/mibgroup/kernel_sunos5.c
+===================================================================
+--- net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16735)
++++ net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16736)
[email protected]@ -169,11 +169,14 @@
+ getif(mib2_ifEntry_t *ifbuf, size_t size, req_e req_type, mib2_ifEntry_t *resp,
+       size_t *length, int (*comp)(void *, void *), void *arg);
+ static void 
+-set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,int mtu);
++set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
++            int mtu);
+ static int get_if_stats(mib2_ifEntry_t *ifp);
+ 
+-static int get_phys_address(mib2_ifEntry_t *ifp);
+-static int _dlpi_phys_address(int fd, char *paddr, int maxlen, int *paddrlen);
++static int _dlpi_open(const char *devname);
++static int _dlpi_get_phys_address(int fd, char *paddr, int maxlen,
++                                  int *paddrlen);
++static int _dlpi_get_iftype(int fd, unsigned int *iftype);
+ static int _dlpi_attach(int fd, int ppa);
+ static int _dlpi_parse_devname(char *devname, int *ppap);
+ 
[email protected]@ -1047,7 +1050,7 @@
+       mib2_ifEntry_t *resp,  size_t *length, int (*comp)(void *, void *),
+       void *arg)
+ {
+-    int             i, ret;
++    int             fd, i, ret;
+     int             ifsd, ifsd6 = -1;
+     struct lifreq   lifreq, *lifrp;
+     mib2_ifEntry_t *ifp;
[email protected]@ -1109,6 +1112,15 @@
+ 
+         memset(ifp, 0, sizeof(mib2_ifEntry_t));
+ 
++        if ((fd = _dlpi_open(ifnp->if_name)) != -1) {
++            /* Could open DLPI... now try to grab some info */
++            (void) _dlpi_get_phys_address(fd, ifp->ifPhysAddress.o_bytes,
++                                sizeof(ifp->ifPhysAddress.o_bytes),
++                                &ifp->ifPhysAddress.o_length);
++            (void) _dlpi_get_iftype(fd, &ifp->ifType);
++            close(fd);
++        }
++
+         set_if_info(ifp, ifnp->if_index, ifnp->if_name, if_flags, 
+                     lifrp->lifr_metric);
+ 
[email protected]@ -1117,9 +1129,6 @@
+             continue;
+         }
+ 
+-        /* try to obtain the physical address */
+-        (void) get_phys_address(ifp);
+-
+         /*
+          * Once we reach here we know that all went well, so move to
+          * the next ifEntry. 
[email protected]@ -1294,8 +1303,11 @@
+ #endif /*defined(HAVE_IF_NAMEINDEX)&&defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)*/
+ 
+ static void
+-set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags, int mtu)
++set_if_info(mib2_ifEntry_t *ifp, unsigned index, char *name, uint64_t flags,
++            int mtu)
+ { 
++    boolean_t havespeed = B_FALSE;
++
+     /*
+      * Set basic information 
+      */
[email protected]@ -1307,101 +1319,122 @@
+     ifp->ifLastChange = 0;      /* Who knows ...  */
+     ifp->flags = flags;
+     ifp->ifMtu = mtu;
++    ifp->ifSpeed = 0;
+ 
+-    /* make ifOperStatus depend on link status if available */
+-    if (ifp->ifAdminStatus == 1) {
+-        int i_tmp;
+-        /* only UPed interfaces get correct link status - if any */
+-        if (getKstatInt(NULL, name,"link_up",&i_tmp) == 0) {
+-            ifp->ifOperStatus = i_tmp ? 1 : 2;
+-        }
+-    }
+-
+     /*
+-     * Set link Type and Speed
++     * Get link speed
+      */
+-    ifp->ifType = 1;
+-    ifp->ifSpeed = 0;
+-
+-    if ((getKstatInt(NULL, name, "ifspeed", &ifp->ifSpeed) == 0) &&
+-        (ifp->ifSpeed != 0)) {
++    if ((getKstatInt(NULL, name, "ifspeed", &ifp->ifSpeed) == 0)) {
+         /*
+          * check for SunOS patch with half implemented ifSpeed 
+          */
+-        if (ifp->ifSpeed < 10000) {
++        if (ifp->ifSpeed > 0 && ifp->ifSpeed < 10000) {
+             ifp->ifSpeed *= 1000000;
+         }
++	havespeed = B_TRUE;
+     } else if (getKstatInt(NULL, name, "ifSpeed", &ifp->ifSpeed) == 0) {
+         /*
+          * this is good 
+          */
++	havespeed = B_TRUE;
+     }
+ 
+-    switch (name[0]) {
+-    case 'a':          /* ath (802.11) */
+-        if (name[1] == 't' && name[2] == 'h')
+-            ifp->ifType = 71;
+-        break;
+-    case 'l':          /* le / lo / lane (ATM LAN Emulation) */
+-        if (name[1] == 'o') {
+-        if (!ifp->ifSpeed)
+-            ifp->ifSpeed = 127000000;
+-        ifp->ifType = 24;
+-        } else if (name[1] == 'e') {
+-        if (!ifp->ifSpeed)
+-            ifp->ifSpeed = 10000000;
+-        ifp->ifType = 6;
+-        } else if (name[1] == 'a') {
+-        if (!ifp->ifSpeed)
+-            ifp->ifSpeed = 155000000;
+-        ifp->ifType = 37;
+-        }
+-        break;
++    /* make ifOperStatus depend on link status if available */
++    if (ifp->ifAdminStatus == 1) {
++        int i_tmp;
++        /* only UPed interfaces get correct link status - if any */
++        if (getKstatInt(NULL, name,"link_up",&i_tmp) == 0) {
++            ifp->ifOperStatus = i_tmp ? 1 : 2;
++#ifdef IFF_FAILED
++        } else if (flags & IFF_FAILED) {
++            /*
++	     * If IPMP is used, and if the daemon marks the interface
++	     * as 'failed', then we know for sure something is amiss.
++             */
++            ifp->ifOperStatus = 2;
++#endif
++	} else if (havespeed == B_TRUE && ifp->ifSpeed == 0) {
++	    /* Heuristic */
++	    ifp->ifOperStatus = 2;
++	}
++    }
+ 
+-    case 'g':          /* ge (gigabit ethernet card)  */
+-    case 'c':          /* ce (Cassini Gigabit-Ethernet (PCI) */
+-        if (!ifp->ifSpeed)
+-        ifp->ifSpeed = 1000000000;
+-        ifp->ifType = 6;
+-        break;
+-
+-    case 'h':          /* hme (SBus card) */
+-    case 'e':          /* eri (PCI card) */
+-    case 'b':          /* be */
+-    case 'd':          /* dmfe -- found on netra X1 */
+-        if (!ifp->ifSpeed)
+-        ifp->ifSpeed = 100000000;
+-        ifp->ifType = 6;
+-        break;
+-
+-    case 'f':          /* fa (Fore ATM) */
+-        if (!ifp->ifSpeed)
+-        ifp->ifSpeed = 155000000;
+-        ifp->ifType = 37;
+-        break;
+-
+-    case 'q':         /* qe (QuadEther)/qa (Fore ATM)/qfe (QuadFastEther) */
+-        if (name[1] == 'a') {
+-        if (!ifp->ifSpeed)
+-            ifp->ifSpeed = 155000000;
+-        ifp->ifType = 37;
+-        } else if (name[1] == 'e') {
++    /*
++     * Set link Type and Speed (if it could not be determined from kstat)
++     */
++    if (ifp->ifType == 24) {
++        ifp->ifSpeed = 127000000;
++    } else if (ifp->ifType == 1 || ifp->ifType == 0) {
++        /*
++	 * Could not get the type from DLPI, so lets fall back to the hardcoded
++	 * values.
++	 */
++        switch (name[0]) {
++        case 'a':          /* ath (802.11) */
++            if (name[1] == 't' && name[2] == 'h')
++                ifp->ifType = 71;
++            break;
++        case 'l':          /* le / lo / lane (ATM LAN Emulation) */
++            if (name[1] == 'o') {
+             if (!ifp->ifSpeed)
++                ifp->ifSpeed = 127000000;
++            ifp->ifType = 24;
++            } else if (name[1] == 'e') {
++            if (!ifp->ifSpeed)
+                 ifp->ifSpeed = 10000000;
+             ifp->ifType = 6;
+-        } else if (name[1] == 'f') {
++            } else if (name[1] == 'a') {
+             if (!ifp->ifSpeed)
+-                ifp->ifSpeed = 100000000;
++                ifp->ifSpeed = 155000000;
++            ifp->ifType = 37;
++            }
++            break;
++    
++        case 'g':          /* ge (gigabit ethernet card)  */
++        case 'c':          /* ce (Cassini Gigabit-Ethernet (PCI) */
++            if (!ifp->ifSpeed)
++            ifp->ifSpeed = 1000000000;
+             ifp->ifType = 6;
++            break;
++    
++        case 'h':          /* hme (SBus card) */
++        case 'e':          /* eri (PCI card) */
++        case 'b':          /* be */
++        case 'd':          /* dmfe -- found on netra X1 */
++            if (!ifp->ifSpeed)
++            ifp->ifSpeed = 100000000;
++            ifp->ifType = 6;
++            break;
++    
++        case 'f':          /* fa (Fore ATM) */
++            if (!ifp->ifSpeed)
++            ifp->ifSpeed = 155000000;
++            ifp->ifType = 37;
++            break;
++    
++        case 'q':         /* qe (QuadEther)/qa (Fore ATM)/qfe (QuadFastEther) */
++            if (name[1] == 'a') {
++            if (!ifp->ifSpeed)
++                ifp->ifSpeed = 155000000;
++            ifp->ifType = 37;
++            } else if (name[1] == 'e') {
++                if (!ifp->ifSpeed)
++                    ifp->ifSpeed = 10000000;
++                ifp->ifType = 6;
++            } else if (name[1] == 'f') {
++                if (!ifp->ifSpeed)
++                    ifp->ifSpeed = 100000000;
++                ifp->ifType = 6;
++            }
++            break;
++    
++        case 'i':          /* ibd (Infiniband)/ip.tun (IP tunnel) */
++            if (name[1] == 'b')
++                ifp->ifType = 199;
++            else if (name[1] == 'p')
++                ifp->ifType = 131;
++            break;
+         }
+-        break;
+-
+-    case 'i':          /* ibd (Infiniband)/ip.tun (IP tunnel) */
+-        if (name[1] == 'b')
+-            ifp->ifType = 199;
+-        else if (name[1] == 'p')
+-            ifp->ifType = 131;
+-        break;
+     }
+ }
+ 
[email protected]@ -1491,68 +1524,69 @@
+ }
+ 
+ /*
+- * Obtain the physical address using DLPI. Pieces of this code is directly
+- * taken from libdlpi, which unfortunately is not yet commonly available. 
++ * Open a DLPI device.
++ *
++ * On success the file descriptor is returned.
++ * On error -1 is returned.
+  */
+-
+-static int 
+-get_phys_address(mib2_ifEntry_t *ifp)
++static int
++_dlpi_open(const char *devname)
+ {
+-    char                  *devstr;
+-    int                   fd;
+-    int                   ppa = -1;
+-    int                   rc = -1;
++    char *devstr;
++    int fd = -1;
++    int ppa = -1;
+ 
+-    DEBUGMSGTL(("kernel_sunos5", "get_phys_address called\n"));
++    DEBUGMSGTL(("kernel_sunos5", "_dlpi_open called\n"));
+ 
+-    if ((devstr = malloc(5 + ifp->ifDescr.o_length + 1)) == NULL)
++    if (devname == NULL)
+         return (-1);
+-    (void) sprintf(devstr, "/dev/%s", ifp->ifDescr.o_bytes);
++
++    if ((devstr = malloc(5 + strlen(devname) + 1)) == NULL)
++        return (-1);
++    (void) sprintf(devstr, "/dev/%s", devname);
+     DEBUGMSGTL(("kernel_sunos5:dlpi", "devstr(%s)\n", devstr));
+     /*
+      * First try opening the device using style 1, if the device does not
+      * exist we try style 2. Modules will not be pushed, so something like
+      * ip tunnels will not work. 
+      */
+-    if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open(%s)\n", devstr));
+-        rc = _dlpi_phys_address(fd, ifp->ifPhysAddress.o_bytes,
+-                                sizeof(ifp->ifPhysAddress.o_bytes),
+-                                &ifp->ifPhysAddress.o_length);
+-    } else if (_dlpi_parse_devname(devstr, &ppa) == 0) {
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 parse: %s, %d\n", 
+-                    devstr, ppa));
+-        /* try style 2 */
+-        if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
+-             DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open(%s)\n", devstr));
+-             if (_dlpi_attach(fd, ppa) == 0) {
+-                 DEBUGMSGTL(("kernel_sunos5:dlpi", "attached\n"));
+-                 rc = _dlpi_phys_address(fd, ifp->ifPhysAddress.o_bytes,
+-                                         sizeof(ifp->ifPhysAddress.o_bytes),
+-                                         &ifp->ifPhysAddress.o_length);
+-             }
+-         } 
+-     }
++   
++    DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open(%s)\n", devstr));
++    if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) < 0) {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open failed\n"));
++        if (_dlpi_parse_devname(devstr, &ppa) == 0) {
++            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 parse: %s, %d\n", 
++                       devstr, ppa));
++            /* try style 2 */
++            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open(%s)\n", devstr));
+ 
+-     free(devstr);
+-     if (fd != -1)
+-         close(fd);
++            if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
++                if (_dlpi_attach(fd, ppa) == 0) {
++                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached\n"));
++                } else {
++                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached failed\n"));
++                    close(fd);
++                    fd = -1;
++                }
++            } else {
++                DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open failed\n"));
++            }
++        } 
++    } else {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open succeeded\n"));
++    }
+ 
+-     if (rc == 0) {
+-         /* successful */        
+-         DEBUGMSGTL(("kernel_sunos5:dlpi", "got phys addr using DLPI\n"));
+-         return (0);
+-     } else {
+-         DEBUGMSGTL(("kernel_sunos5:dlpi", "unable to get phys address\n"));
+-         return (-1);
+-     }
++    /* clean up */
++    free(devstr);
++
++    return (fd);
+ }
+ 
+ /*
+- *
++ * Obtain the physical address of the interface using DLPI
+  */
+ static int
+-_dlpi_phys_address(int fd, char *addr, int maxlen, int *addrlen)
++_dlpi_get_phys_address(int fd, char *addr, int maxlen, int *addrlen)
+ {
+     dl_phys_addr_req_t  paddr_req;
+     union DL_primitives *dlp;
[email protected]@ -1560,6 +1594,8 @@
+     char                buf[MAX(DL_PHYS_ADDR_ACK_SIZE+64, DL_ERROR_ACK_SIZE)];
+     int                 flag = 0;
+ 
++    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_phys_address\n"));
++
+     paddr_req.dl_primitive = DL_PHYS_ADDR_REQ;
+     paddr_req.dl_addr_type = DL_CURR_PHYS_ADDR;
+     ctlbuf.buf = (char *)&paddr_req;
[email protected]@ -1570,7 +1606,7 @@
+     ctlbuf.maxlen = sizeof(buf);
+     ctlbuf.len = 0;
+     ctlbuf.buf = buf;
+-    if (getmsg(fd, &ctlbuf, NULL, &flag) != 0)
++    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0)
+         return (-1);
+ 
+     if (ctlbuf.len < sizeof(uint32_t))
[email protected]@ -1580,6 +1616,7 @@
+     case DL_PHYS_ADDR_ACK: {
+         dl_phys_addr_ack_t *phyp = (dl_phys_addr_ack_t *)buf;
+ 
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ACK\n"));
+         if (ctlbuf.len < DL_PHYS_ADDR_ACK_SIZE || phyp->dl_addr_length > maxlen)
+             return (-1); 
+         (void) memcpy(addr, buf+phyp->dl_addr_offset, phyp->dl_addr_length);
[email protected]@ -1589,16 +1626,137 @@
+     case DL_ERROR_ACK: {
+         dl_error_ack_t *errp = (dl_error_ack_t *)buf;
+ 
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ERROR ACK\n"));
+         if (ctlbuf.len < DL_ERROR_ACK_SIZE)
+             return (-1);
+         return (errp->dl_errno);
+     }
+     default:
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type: %x\n", dlp->dl_primitive));
+         return (-1);
+     }
+ }
+ 
++/*
++ * Query the interface about it's type.
++ */
+ static int
++_dlpi_get_iftype(int fd, unsigned int *iftype)
++{
++    dl_info_req_t info_req;
++    union DL_primitives *dlp;
++    struct strbuf       ctlbuf;
++    char                buf[MAX(DL_INFO_ACK_SIZE, DL_ERROR_ACK_SIZE)];
++    int                 flag = 0;
++
++    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_iftype\n"));
++
++    info_req.dl_primitive = DL_INFO_REQ;
++    ctlbuf.buf = (char *)&info_req;
++    ctlbuf.len = DL_INFO_REQ_SIZE;
++    if (putmsg(fd, &ctlbuf, NULL, 0) < 0) {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "putmsg failed: %d\nn", errno));
++        return (-1);
++    }
++    
++    ctlbuf.maxlen = sizeof(buf);
++    ctlbuf.len = 0;
++    ctlbuf.buf = buf;
++    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0) {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "getmsg failed: %d\n", errno));
++        return (-1);
++    }
++
++    if (ctlbuf.len < sizeof(uint32_t))
++        return (-1);
++    dlp = (union DL_primitives *)buf;
++    switch (dlp->dl_primitive) {
++    case DL_INFO_ACK: {
++        dl_info_ack_t *info = (dl_info_ack_t *)buf;
++
++        if (ctlbuf.len < DL_INFO_ACK_SIZE)
++            return (-1); 
++
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "dl_mac_type: %x\n",
++	           info->dl_mac_type));
++	switch (info->dl_mac_type) {
++	case DL_CSMACD:
++	case DL_ETHER:
++	case DL_ETH_CSMA:
++		*iftype = 6;
++		break;
++	case DL_TPB:	/* Token Passing Bus */
++		*iftype = 8;
++		break;
++	case DL_TPR:	/* Token Passing Ring */
++		*iftype = 9;
++		break;
++	case DL_HDLC:
++		*iftype = 118;
++		break;
++	case DL_FDDI:
++		*iftype = 15;
++		break;
++	case DL_FC:	/* Fibre channel */
++		*iftype = 56;
++		break;
++	case DL_ATM:
++		*iftype = 37;
++		break;
++	case DL_X25:
++	case DL_ISDN:
++		*iftype = 63;
++		break;
++	case DL_HIPPI:
++		*iftype = 47;
++		break;
++#ifdef DL_IB
++	case DL_IB:
++		*iftype = 199;
++		break;
++#endif
++	case DL_FRAME:	/* Frame Relay */
++		*iftype = 32;
++		break;
++	case DL_LOOP:
++		*iftype = 24;
++		break;
++#ifdef DL_WIFI
++	case DL_WIFI:
++		*iftype = 71;
++		break;
++#endif
++#ifdef DL_IPV4	/* then IPv6 is also defined */
++	case DL_IPV4:	/* IPv4 Tunnel */
++	case DL_IPV6:	/* IPv6 Tunnel */
++		*iftype = 131;
++		break;
++#endif
++	default:
++		*iftype = 1;	/* Other */
++		break;
++	}
++	
++        return (0);
++    }
++    case DL_ERROR_ACK: {
++        dl_error_ack_t *errp = (dl_error_ack_t *)buf;
++
++        DEBUGMSGTL(("kernel_sunos5:dlpi",
++                    "got DL_ERROR_ACK: dlpi %d, error %d\n", errp->dl_errno,
++                    errp->dl_unix_errno));
++
++        if (ctlbuf.len < DL_ERROR_ACK_SIZE)
++            return (-1);
++        return (errp->dl_errno);
++    }
++    default:
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type %x\n", dlp->dl_primitive));
++        return (-1);
++    }
++}
++
++static int
+ _dlpi_attach(int fd, int ppa)
+ {
+     dl_attach_req_t     attach_req;
[email protected]@ -1680,8 +1838,83 @@
+     } else {
+ 	return 1;
+     }
+-}	
++}
+ 
++/*
++ * Try to determine the index of a particular interface. If mfd-rewrites is
++ * specified, then this function would only be used when the system does not
++ * have if_nametoindex(3SOCKET).
++ */
++int
++solaris2_if_nametoindex(const char *Name, int Len)
++{
++    int             i, sd, lastlen = 0, interfaces = 0;
++    struct ifconf   ifc;
++    struct ifreq   *ifrp = NULL;
++    char           *buf = NULL;
++
++    if (Name == 0) {
++        return 0;
++    }
++    if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
++        return 0;
++    }
++
++    /*
++     * Cope with lots of interfaces and brokenness of ioctl SIOCGIFCONF
++     * on some platforms; see W. R. Stevens, ``Unix Network Programming
++     * Volume I'', p.435.  
++     */
++
++    for (i = 8;; i += 8) {
++        buf = calloc(i, sizeof(struct ifreq));
++        if (buf == NULL) {
++            close(sd);
++            return 0;
++        }
++        ifc.ifc_len = i * sizeof(struct ifreq);
++        ifc.ifc_buf = (caddr_t) buf;
++
++        if (ioctl(sd, SIOCGIFCONF, (char *) &ifc) < 0) {
++            if (errno != EINVAL || lastlen != 0) {
++                /*
++                 * Something has gone genuinely wrong.  
++                 */
++                free(buf);
++                close(sd);
++                return 0;
++            }
++            /*
++             * Otherwise, it could just be that the buffer is too small.  
++             */
++        } else {
++            if (ifc.ifc_len == lastlen) {
++                /*
++                 * The length is the same as the last time; we're done.  
++                 */
++                break;
++            }
++            lastlen = ifc.ifc_len;
++        }
++        free(buf);
++    }
++
++    ifrp = ifc.ifc_req;
++    interfaces = (ifc.ifc_len / sizeof(struct ifreq)) + 1;
++
++    for (i = 1; i < interfaces; i++, ifrp++) {
++        if (strncmp(ifrp->ifr_name, Name, Len) == 0) {
++            free(buf);
++            close(sd);
++            return i;
++        }
++    }
++
++    free(buf);
++    close(sd);
++    return 0;
++}
++
+ #ifdef _STDC_COMPAT
+ #ifdef __cplusplus
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/006.16742.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,625 @@
+Index: net-snmp/agent/mibgroup/kernel_sunos5.c
+===================================================================
+--- net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16741)
++++ net-snmp/agent/mibgroup/kernel_sunos5.c	(revision 16742)
[email protected]@ -173,12 +173,14 @@
+             int mtu);
+ static int get_if_stats(mib2_ifEntry_t *ifp);
+ 
++#if defined(HAVE_IF_NAMEINDEX) && defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)
+ static int _dlpi_open(const char *devname);
+ static int _dlpi_get_phys_address(int fd, char *paddr, int maxlen,
+                                   int *paddrlen);
+ static int _dlpi_get_iftype(int fd, unsigned int *iftype);
+ static int _dlpi_attach(int fd, int ppa);
+ static int _dlpi_parse_devname(char *devname, int *ppap);
++#endif
+ 
+ 
+ 
[email protected]@ -1044,8 +1046,300 @@
+  * Get info for interfaces group. Mimics getmib interface as much as possible
+  * to be substituted later if SunSoft decides to extend its mib2 interface.
+  */
++
+ #if defined(HAVE_IF_NAMEINDEX) && defined(NETSNMP_INCLUDE_IFTABLE_REWRITES)
++
++/*
++ * If IFTABLE_REWRITES is enabled, then we will also rely on DLPI to obtain
++ * information from the NIC.
++ */
++
++/*
++ * Open a DLPI device.
++ *
++ * On success the file descriptor is returned.
++ * On error -1 is returned.
++ */
+ static int
++_dlpi_open(const char *devname)
++{
++    char *devstr;
++    int fd = -1;
++    int ppa = -1;
++
++    DEBUGMSGTL(("kernel_sunos5", "_dlpi_open called\n"));
++
++    if (devname == NULL)
++        return (-1);
++
++    if ((devstr = malloc(5 + strlen(devname) + 1)) == NULL)
++        return (-1);
++    (void) sprintf(devstr, "/dev/%s", devname);
++    DEBUGMSGTL(("kernel_sunos5:dlpi", "devstr(%s)\n", devstr));
++    /*
++     * First try opening the device using style 1, if the device does not
++     * exist we try style 2. Modules will not be pushed, so something like
++     * ip tunnels will not work. 
++     */
++   
++    DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open(%s)\n", devstr));
++    if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) < 0) {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open failed\n"));
++        if (_dlpi_parse_devname(devstr, &ppa) == 0) {
++            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 parse: %s, %d\n", 
++                       devstr, ppa));
++            /* try style 2 */
++            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open(%s)\n", devstr));
++
++            if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
++                if (_dlpi_attach(fd, ppa) == 0) {
++                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached\n"));
++                } else {
++                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached failed\n"));
++                    close(fd);
++                    fd = -1;
++                }
++            } else {
++                DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open failed\n"));
++            }
++        } 
++    } else {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open succeeded\n"));
++    }
++
++    /* clean up */
++    free(devstr);
++
++    return (fd);
++}
++
++/*
++ * Obtain the physical address of the interface using DLPI
++ */
++static int
++_dlpi_get_phys_address(int fd, char *addr, int maxlen, int *addrlen)
++{
++    dl_phys_addr_req_t  paddr_req;
++    union DL_primitives *dlp;
++    struct strbuf       ctlbuf;
++    char                buf[MAX(DL_PHYS_ADDR_ACK_SIZE+64, DL_ERROR_ACK_SIZE)];
++    int                 flag = 0;
++
++    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_phys_address\n"));
++
++    paddr_req.dl_primitive = DL_PHYS_ADDR_REQ;
++    paddr_req.dl_addr_type = DL_CURR_PHYS_ADDR;
++    ctlbuf.buf = (char *)&paddr_req;
++    ctlbuf.len = DL_PHYS_ADDR_REQ_SIZE;
++    if (putmsg(fd, &ctlbuf, NULL, 0) < 0)
++        return (-1);
++    
++    ctlbuf.maxlen = sizeof(buf);
++    ctlbuf.len = 0;
++    ctlbuf.buf = buf;
++    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0)
++        return (-1);
++
++    if (ctlbuf.len < sizeof(uint32_t))
++        return (-1);
++    dlp = (union DL_primitives *)buf;
++    switch (dlp->dl_primitive) {
++    case DL_PHYS_ADDR_ACK: {
++        dl_phys_addr_ack_t *phyp = (dl_phys_addr_ack_t *)buf;
++
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ACK\n"));
++        if (ctlbuf.len < DL_PHYS_ADDR_ACK_SIZE || phyp->dl_addr_length > maxlen)
++            return (-1); 
++        (void) memcpy(addr, buf+phyp->dl_addr_offset, phyp->dl_addr_length);
++        *addrlen = phyp->dl_addr_length;
++        return (0);
++    }
++    case DL_ERROR_ACK: {
++        dl_error_ack_t *errp = (dl_error_ack_t *)buf;
++
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ERROR ACK\n"));
++        if (ctlbuf.len < DL_ERROR_ACK_SIZE)
++            return (-1);
++        return (errp->dl_errno);
++    }
++    default:
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type: %x\n", dlp->dl_primitive));
++        return (-1);
++    }
++}
++
++/*
++ * Query the interface about it's type.
++ */
++static int
++_dlpi_get_iftype(int fd, unsigned int *iftype)
++{
++    dl_info_req_t info_req;
++    union DL_primitives *dlp;
++    struct strbuf       ctlbuf;
++    char                buf[MAX(DL_INFO_ACK_SIZE, DL_ERROR_ACK_SIZE)];
++    int                 flag = 0;
++
++    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_iftype\n"));
++
++    info_req.dl_primitive = DL_INFO_REQ;
++    ctlbuf.buf = (char *)&info_req;
++    ctlbuf.len = DL_INFO_REQ_SIZE;
++    if (putmsg(fd, &ctlbuf, NULL, 0) < 0) {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "putmsg failed: %d\nn", errno));
++        return (-1);
++    }
++    
++    ctlbuf.maxlen = sizeof(buf);
++    ctlbuf.len = 0;
++    ctlbuf.buf = buf;
++    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0) {
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "getmsg failed: %d\n", errno));
++        return (-1);
++    }
++
++    if (ctlbuf.len < sizeof(uint32_t))
++        return (-1);
++    dlp = (union DL_primitives *)buf;
++    switch (dlp->dl_primitive) {
++    case DL_INFO_ACK: {
++        dl_info_ack_t *info = (dl_info_ack_t *)buf;
++
++        if (ctlbuf.len < DL_INFO_ACK_SIZE)
++            return (-1); 
++
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "dl_mac_type: %x\n",
++	           info->dl_mac_type));
++	switch (info->dl_mac_type) {
++	case DL_CSMACD:
++	case DL_ETHER:
++	case DL_ETH_CSMA:
++		*iftype = 6;
++		break;
++	case DL_TPB:	/* Token Passing Bus */
++		*iftype = 8;
++		break;
++	case DL_TPR:	/* Token Passing Ring */
++		*iftype = 9;
++		break;
++	case DL_HDLC:
++		*iftype = 118;
++		break;
++	case DL_FDDI:
++		*iftype = 15;
++		break;
++	case DL_FC:	/* Fibre channel */
++		*iftype = 56;
++		break;
++	case DL_ATM:
++		*iftype = 37;
++		break;
++	case DL_X25:
++	case DL_ISDN:
++		*iftype = 63;
++		break;
++	case DL_HIPPI:
++		*iftype = 47;
++		break;
++#ifdef DL_IB
++	case DL_IB:
++		*iftype = 199;
++		break;
++#endif
++	case DL_FRAME:	/* Frame Relay */
++		*iftype = 32;
++		break;
++	case DL_LOOP:
++		*iftype = 24;
++		break;
++#ifdef DL_WIFI
++	case DL_WIFI:
++		*iftype = 71;
++		break;
++#endif
++#ifdef DL_IPV4	/* then IPv6 is also defined */
++	case DL_IPV4:	/* IPv4 Tunnel */
++	case DL_IPV6:	/* IPv6 Tunnel */
++		*iftype = 131;
++		break;
++#endif
++	default:
++		*iftype = 1;	/* Other */
++		break;
++	}
++	
++        return (0);
++    }
++    case DL_ERROR_ACK: {
++        dl_error_ack_t *errp = (dl_error_ack_t *)buf;
++
++        DEBUGMSGTL(("kernel_sunos5:dlpi",
++                    "got DL_ERROR_ACK: dlpi %d, error %d\n", errp->dl_errno,
++                    errp->dl_unix_errno));
++
++        if (ctlbuf.len < DL_ERROR_ACK_SIZE)
++            return (-1);
++        return (errp->dl_errno);
++    }
++    default:
++        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type %x\n", dlp->dl_primitive));
++        return (-1);
++    }
++}
++
++static int
++_dlpi_attach(int fd, int ppa)
++{
++    dl_attach_req_t     attach_req;
++    struct strbuf       ctlbuf;
++    union DL_primitives *dlp;
++    char                buf[MAX(DL_OK_ACK_SIZE, DL_ERROR_ACK_SIZE)];
++    int                 flag = 0;
++   
++    attach_req.dl_primitive = DL_ATTACH_REQ;
++    attach_req.dl_ppa = ppa;
++    ctlbuf.buf = (char *)&attach_req;
++    ctlbuf.len = DL_ATTACH_REQ_SIZE;
++    if (putmsg(fd, &ctlbuf, NULL, 0) != 0)
++        return (-1);
++
++    ctlbuf.buf = buf;
++    ctlbuf.len = 0;
++    ctlbuf.maxlen = sizeof(buf);
++    if (getmsg(fd, &ctlbuf, NULL, &flag) != 0)
++        return (-1);
++
++    if (ctlbuf.len < sizeof(uint32_t))
++        return (-1); 
++
++    dlp = (union DL_primitives *)buf;
++    if (dlp->dl_primitive == DL_OK_ACK && ctlbuf.len >= DL_OK_ACK_SIZE)
++        return (0); 
++    return (-1);
++}
++
++static int
++_dlpi_parse_devname(char *devname, int *ppap)
++{
++    int ppa = 0;
++    int m = 1;
++    int i = strlen(devname) - 1;
++
++    while (i >= 0 && isdigit(devname[i])) {
++        ppa += m * (devname[i] - '0'); 
++        m *= 10;
++        i--;
++    }
++
++    if (m == 1) {
++        return (-1);
++    }
++    *ppap = ppa;
++    devname[i + 1] = '\0';
++
++    return (0);
++}
++static int
+ getif(mib2_ifEntry_t *ifbuf, size_t size, req_e req_type,
+       mib2_ifEntry_t *resp,  size_t *length, int (*comp)(void *, void *),
+       void *arg)
[email protected]@ -1229,7 +1523,8 @@
+ 
+ 	if (ioctl(ifsd, SIOCGIFFLAGS, ifrp) < 0) {
+ 	    ret = -1;
+-	    snmp_log(LOG_ERR, "SIOCGIFFLAGS %s: %s\n", ifrp->ifr_name, strerror(errno));
++	    snmp_log(LOG_ERR, "SIOCGIFFLAGS %s: %s\n", ifrp->ifr_name,
++                     strerror(errno));
+ 	    goto Return;
+ 	}
+         if_flags = ifrp->ifr_flags;
[email protected]@ -1522,294 +1817,7 @@
+                                       ifp->ifHCOutMulticastPkts);
+     return(0);
+ }
+-
+ /*
+- * Open a DLPI device.
+- *
+- * On success the file descriptor is returned.
+- * On error -1 is returned.
+- */
+-static int
+-_dlpi_open(const char *devname)
+-{
+-    char *devstr;
+-    int fd = -1;
+-    int ppa = -1;
+-
+-    DEBUGMSGTL(("kernel_sunos5", "_dlpi_open called\n"));
+-
+-    if (devname == NULL)
+-        return (-1);
+-
+-    if ((devstr = malloc(5 + strlen(devname) + 1)) == NULL)
+-        return (-1);
+-    (void) sprintf(devstr, "/dev/%s", devname);
+-    DEBUGMSGTL(("kernel_sunos5:dlpi", "devstr(%s)\n", devstr));
+-    /*
+-     * First try opening the device using style 1, if the device does not
+-     * exist we try style 2. Modules will not be pushed, so something like
+-     * ip tunnels will not work. 
+-     */
+-   
+-    DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open(%s)\n", devstr));
+-    if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) < 0) {
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open failed\n"));
+-        if (_dlpi_parse_devname(devstr, &ppa) == 0) {
+-            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 parse: %s, %d\n", 
+-                       devstr, ppa));
+-            /* try style 2 */
+-            DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open(%s)\n", devstr));
+-
+-            if ((fd = open(devstr, O_RDWR | O_NONBLOCK)) != -1) {
+-                if (_dlpi_attach(fd, ppa) == 0) {
+-                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached\n"));
+-                } else {
+-                    DEBUGMSGTL(("kernel_sunos5:dlpi", "attached failed\n"));
+-                    close(fd);
+-                    fd = -1;
+-                }
+-            } else {
+-                DEBUGMSGTL(("kernel_sunos5:dlpi", "style2 open failed\n"));
+-            }
+-        } 
+-    } else {
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "style1 open succeeded\n"));
+-    }
+-
+-    /* clean up */
+-    free(devstr);
+-
+-    return (fd);
+-}
+-
+-/*
+- * Obtain the physical address of the interface using DLPI
+- */
+-static int
+-_dlpi_get_phys_address(int fd, char *addr, int maxlen, int *addrlen)
+-{
+-    dl_phys_addr_req_t  paddr_req;
+-    union DL_primitives *dlp;
+-    struct strbuf       ctlbuf;
+-    char                buf[MAX(DL_PHYS_ADDR_ACK_SIZE+64, DL_ERROR_ACK_SIZE)];
+-    int                 flag = 0;
+-
+-    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_phys_address\n"));
+-
+-    paddr_req.dl_primitive = DL_PHYS_ADDR_REQ;
+-    paddr_req.dl_addr_type = DL_CURR_PHYS_ADDR;
+-    ctlbuf.buf = (char *)&paddr_req;
+-    ctlbuf.len = DL_PHYS_ADDR_REQ_SIZE;
+-    if (putmsg(fd, &ctlbuf, NULL, 0) < 0)
+-        return (-1);
+-    
+-    ctlbuf.maxlen = sizeof(buf);
+-    ctlbuf.len = 0;
+-    ctlbuf.buf = buf;
+-    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0)
+-        return (-1);
+-
+-    if (ctlbuf.len < sizeof(uint32_t))
+-        return (-1);
+-    dlp = (union DL_primitives *)buf;
+-    switch (dlp->dl_primitive) {
+-    case DL_PHYS_ADDR_ACK: {
+-        dl_phys_addr_ack_t *phyp = (dl_phys_addr_ack_t *)buf;
+-
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ACK\n"));
+-        if (ctlbuf.len < DL_PHYS_ADDR_ACK_SIZE || phyp->dl_addr_length > maxlen)
+-            return (-1); 
+-        (void) memcpy(addr, buf+phyp->dl_addr_offset, phyp->dl_addr_length);
+-        *addrlen = phyp->dl_addr_length;
+-        return (0);
+-    }
+-    case DL_ERROR_ACK: {
+-        dl_error_ack_t *errp = (dl_error_ack_t *)buf;
+-
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "got ERROR ACK\n"));
+-        if (ctlbuf.len < DL_ERROR_ACK_SIZE)
+-            return (-1);
+-        return (errp->dl_errno);
+-    }
+-    default:
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type: %x\n", dlp->dl_primitive));
+-        return (-1);
+-    }
+-}
+-
+-/*
+- * Query the interface about it's type.
+- */
+-static int
+-_dlpi_get_iftype(int fd, unsigned int *iftype)
+-{
+-    dl_info_req_t info_req;
+-    union DL_primitives *dlp;
+-    struct strbuf       ctlbuf;
+-    char                buf[MAX(DL_INFO_ACK_SIZE, DL_ERROR_ACK_SIZE)];
+-    int                 flag = 0;
+-
+-    DEBUGMSGTL(("kernel_sunos5:dlpi", "_dlpi_get_iftype\n"));
+-
+-    info_req.dl_primitive = DL_INFO_REQ;
+-    ctlbuf.buf = (char *)&info_req;
+-    ctlbuf.len = DL_INFO_REQ_SIZE;
+-    if (putmsg(fd, &ctlbuf, NULL, 0) < 0) {
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "putmsg failed: %d\nn", errno));
+-        return (-1);
+-    }
+-    
+-    ctlbuf.maxlen = sizeof(buf);
+-    ctlbuf.len = 0;
+-    ctlbuf.buf = buf;
+-    if (getmsg(fd, &ctlbuf, NULL, &flag) < 0) {
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "getmsg failed: %d\n", errno));
+-        return (-1);
+-    }
+-
+-    if (ctlbuf.len < sizeof(uint32_t))
+-        return (-1);
+-    dlp = (union DL_primitives *)buf;
+-    switch (dlp->dl_primitive) {
+-    case DL_INFO_ACK: {
+-        dl_info_ack_t *info = (dl_info_ack_t *)buf;
+-
+-        if (ctlbuf.len < DL_INFO_ACK_SIZE)
+-            return (-1); 
+-
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "dl_mac_type: %x\n",
+-	           info->dl_mac_type));
+-	switch (info->dl_mac_type) {
+-	case DL_CSMACD:
+-	case DL_ETHER:
+-	case DL_ETH_CSMA:
+-		*iftype = 6;
+-		break;
+-	case DL_TPB:	/* Token Passing Bus */
+-		*iftype = 8;
+-		break;
+-	case DL_TPR:	/* Token Passing Ring */
+-		*iftype = 9;
+-		break;
+-	case DL_HDLC:
+-		*iftype = 118;
+-		break;
+-	case DL_FDDI:
+-		*iftype = 15;
+-		break;
+-	case DL_FC:	/* Fibre channel */
+-		*iftype = 56;
+-		break;
+-	case DL_ATM:
+-		*iftype = 37;
+-		break;
+-	case DL_X25:
+-	case DL_ISDN:
+-		*iftype = 63;
+-		break;
+-	case DL_HIPPI:
+-		*iftype = 47;
+-		break;
+-#ifdef DL_IB
+-	case DL_IB:
+-		*iftype = 199;
+-		break;
+-#endif
+-	case DL_FRAME:	/* Frame Relay */
+-		*iftype = 32;
+-		break;
+-	case DL_LOOP:
+-		*iftype = 24;
+-		break;
+-#ifdef DL_WIFI
+-	case DL_WIFI:
+-		*iftype = 71;
+-		break;
+-#endif
+-#ifdef DL_IPV4	/* then IPv6 is also defined */
+-	case DL_IPV4:	/* IPv4 Tunnel */
+-	case DL_IPV6:	/* IPv6 Tunnel */
+-		*iftype = 131;
+-		break;
+-#endif
+-	default:
+-		*iftype = 1;	/* Other */
+-		break;
+-	}
+-	
+-        return (0);
+-    }
+-    case DL_ERROR_ACK: {
+-        dl_error_ack_t *errp = (dl_error_ack_t *)buf;
+-
+-        DEBUGMSGTL(("kernel_sunos5:dlpi",
+-                    "got DL_ERROR_ACK: dlpi %d, error %d\n", errp->dl_errno,
+-                    errp->dl_unix_errno));
+-
+-        if (ctlbuf.len < DL_ERROR_ACK_SIZE)
+-            return (-1);
+-        return (errp->dl_errno);
+-    }
+-    default:
+-        DEBUGMSGTL(("kernel_sunos5:dlpi", "got type %x\n", dlp->dl_primitive));
+-        return (-1);
+-    }
+-}
+-
+-static int
+-_dlpi_attach(int fd, int ppa)
+-{
+-    dl_attach_req_t     attach_req;
+-    struct strbuf       ctlbuf;
+-    union DL_primitives *dlp;
+-    char                buf[MAX(DL_OK_ACK_SIZE, DL_ERROR_ACK_SIZE)];
+-    int                 flag = 0;
+-   
+-    attach_req.dl_primitive = DL_ATTACH_REQ;
+-    attach_req.dl_ppa = ppa;
+-    ctlbuf.buf = (char *)&attach_req;
+-    ctlbuf.len = DL_ATTACH_REQ_SIZE;
+-    if (putmsg(fd, &ctlbuf, NULL, 0) != 0)
+-        return (-1);
+-
+-    ctlbuf.buf = buf;
+-    ctlbuf.len = 0;
+-    ctlbuf.maxlen = sizeof(buf);
+-    if (getmsg(fd, &ctlbuf, NULL, &flag) != 0)
+-        return (-1);
+-
+-    if (ctlbuf.len < sizeof(uint32_t))
+-        return (-1); 
+-
+-    dlp = (union DL_primitives *)buf;
+-    if (dlp->dl_primitive == DL_OK_ACK && ctlbuf.len >= DL_OK_ACK_SIZE)
+-        return (0); 
+-    return (-1);
+-}
+-
+-static int
+-_dlpi_parse_devname(char *devname, int *ppap)
+-{
+-    int ppa = 0;
+-    int m = 1;
+-    int i = strlen(devname) - 1;
+-
+-    while (i >= 0 && isdigit(devname[i])) {
+-        ppa += m * (devname[i] - '0'); 
+-        m *= 10;
+-        i--;
+-    }
+-
+-    if (m == 1) {
+-        return (-1);
+-    }
+-    *ppap = ppa;
+-    devname[i + 1] = '\0';
+-
+-    return (0);
+-}
+-
+-/*
+  * Always TRUE. May be used as a comparison function in getMibstat
+  * to obtain the whole table (GET_FIRST should be used) 
+  */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/007.16863.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,13 @@
+Index: net-snmp/snmplib/asn1.c
+===================================================================
+--- net-snmp/snmplib/asn1.c	(revision 16862)
++++ net-snmp/snmplib/asn1.c	(revision 16863)
[email protected]@ -2735,7 +2735,7 @@
+     }
+ 
+     CHECK_OVERFLOW_S(integer,10);
+-    testvalue = (*intp < 0) ? -1 : 0;
++    testvalue = (integer < 0) ? -1 : 0;
+ 
+     if (((*pkt_len - *offset) < 1) && !(r && asn_realloc(pkt, pkt_len))) {
+         return 0;
--- a/components/net-snmp/patches/009.ltmain.sh.patch	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/patches/009.ltmain.sh.patch	Sat May 18 09:18:20 2013 -0700
@@ -1,28 +1,31 @@
-#
-# The Net-SNMP libraries are built without -zdefs and are missing a large
-# number of dependency specifications (DT_NEEDED).  This makes it
-# impossible to build plugin modules against these libraries using
-# -zdefs, which should work. One such example is FMA in ON gate. 
-#
---- net-snmp-5.7.2/ltmain.sh	Sun Dec 30 23:42:05 2012
-+++ net-snmp-5.7.2/ltmain.sh	Sun Dec 30 23:49:01 2012
[email protected]@ -5406,7 +5406,9 @@
+--- net-snmp-5.4.2.1/ltmain.sh	Fri Jun  6 02:34:34 2008
++++ net-snmp-5.4.2.1/ltmain.mod.sh	Tue Feb  3 11:02:05 2009
[email protected]@ -1425,7 +1425,9 @@
  	  if test "$prev" = rpath; then
  	    case "$rpath " in
  	    *" $arg "*) ;;
--	    *) func_append rpath " $arg" ;;
-+	    *) func_append rpath " $arg"
-+		# This is make sure only $libdir path is encoded in RUNPATH
-+			sma_rpath="$rpath" ;;
+-	    *) rpath="$rpath $arg" ;;
++	    *) rpath="$rpath $arg"
++        # This is make sure only $libdir path is encoded in RUNPATH
++        sma_rpath="$rpath" ;;
  	    esac
  	  else
  	    case "$xrpath " in
[email protected]@ -8046,7 +8048,7 @@
[email protected]@ -3915,7 +3917,7 @@
+ 	if test "$hardcode_into_libs" = yes; then
+ 	  # Hardcode the library paths
+ 	  hardcode_libdirs=
+-	  dep_rpath=
++	  dep_rpath="-R $sma_rpath"
+ 	  rpath="$finalize_rpath"
+ 	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+ 	  for libdir in $rpath; do
[email protected]@ -3935,7 +3937,7 @@
  		fi
  	      else
  		eval flag=\"$hardcode_libdir_flag_spec\"
--		func_append dep_rpath " $flag"
-+#func_append dep_rpath " $flag"
+-		dep_rpath="$dep_rpath $flag"
++		#dep_rpath="$dep_rpath $flag"
  	      fi
  	    elif test -n "$runpath_var"; then
  	      case "$perm_rpath " in
--- a/components/net-snmp/patches/011.Makefile.in.patch	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/patches/011.Makefile.in.patch	Sat May 18 09:18:20 2013 -0700
@@ -1,42 +1,38 @@
-#
-# The Net-SNMP libraries are built without -zdefs and are missing a large
-# number of dependency specifications (DT_NEEDED).  This makes it
-# impossible to build plugin modules against these libraries using
-# -zdefs, which should work. One such example is FMA in ON gate. 
-#
---- net-snmp-5.7.2/agent/Makefile.in	Tue Oct  9 15:28:58 2012
-+++ net-snmp-5.7.2/agent/Makefile.in	Sun Dec 30 23:58:44 2012
[email protected]@ -274,9 +274,13 @@
+Only in net-snmp-5.4.1.mod: .patches.011.Makefile.in.patch
+diff -ru net-snmp-5.4.1/agent/Makefile.in net-snmp-5.4.1.mod/agent/Makefile.in
+--- net-snmp-5.4.1/agent/Makefile.in	2007-07-05 04:56:56.000000000 +0530
++++ net-snmp-5.4.1.mod/agent/Makefile.in	2009-06-24 06:08:28.858891018 +0530
[email protected]@ -120,8 +120,11 @@
+ OBJS		= $(LIBAGENTOBJS)  $(AGENTOBJS)  mib_modules.o  auto_nlist.o
  LOBJS		= $(LLIBAGENTOBJS) $(LAGENTOBJS) mib_modules.lo auto_nlist.lo
- FTOBJS		= $(LLIBAGENTFTS) $(FTAGENTOBJS) mib_modules.ft auto_nlist.ft
  
-+LIB_LD_ADD_AGENT   =-lnetsnmp -lnetsnmphelpers
-+
-+LIB_LD_ADD_PATH_MIBS   =-Lhelpers -L../snmplib
-+
- FEATUREFILE     = $(top_builddir)/include/net-snmp/agent/features.h
++LIB_LD_ADD_AGENT	=-lnetsnmp -lnetsnmphelpers
++ 
++LIB_LD_ADD_PATH_MIBS	=-Lhelpers -L../snmplib
  
 -all: agentlib subdirs miblib $(INSTALLBINPROGS) $(INSTALLSBINPROGS)
 +all: agentlib subdirs miblib relinklib $(INSTALLBINPROGS) $(INSTALLSBINPROGS)
  
  #
  # build stuff targets
[email protected]@ -306,6 +310,10 @@
[email protected]@ -152,6 +155,10 @@
  
  agentlib: $(AGENTLIB)
  
-+relinklib:	${LLIBAGENTOBJS} $(USELIBS)
++relinklib:     ${LLIBAGENTOBJS} $(USELIBS)
 +	$(LIB_LD_CMD) $(AGENTLIB) $(LIB_LD_ADD_PATH_MIBS) ${LLIBAGENTOBJS} $(USELIBS) ${LAGENTLIBS} $(LDFLAGS) $(PERLLDOPTS_FOR_LIBS) $(LIB_LD_LIBS) $(LIB_LD_ADD_AGENT)
 +	$(RANLIB) $(AGENTLIB) $(LIB_LD_ADD_AGENT)
 +
  miblib: $(MIBLIB)
  
- libs: $(AGENTLIB) $(MIBLIB)
---- net-snmp-5.7.2/agent/helpers/Makefile.in	Sun Dec 30 22:37:05 2012
-+++ net-snmp-5.7.2/agent/helpers/Makefile.in	Mon Dec 31 00:02:37 2012
[email protected]@ -31,8 +31,11 @@
- 
- LOBJS = dummy.lo
+ libs: $(INSTALLLIBS)
+Only in net-snmp-5.4.1.mod/agent: Makefile.in~
+diff -ru net-snmp-5.4.1/agent/helpers/Makefile.in net-snmp-5.4.1.mod/agent/helpers/Makefile.in
+--- net-snmp-5.4.1/agent/helpers/Makefile.in	2007-06-27 03:15:20.000000000 +0530
++++ net-snmp-5.4.1.mod/agent/helpers/Makefile.in	2009-06-24 06:01:35.912702710 +0530
[email protected]@ -137,8 +137,11 @@
+ 	table_tdata.lo \
+ 	watcher.lo
  
 +LIB_LD_ADD	=-lnetsnmp
 +LIB_LD_ADD_PATH	=-L../../snmplib
@@ -44,30 +40,31 @@
  all: standardall
  
  libnetsnmphelpers.$(LIB_EXTENSION)$(LIB_VERSION):    $(LOBJS)
--	$(LIB_LD_CMD) [email protected] $(LOBJS) @[email protected] $(LDFLAGS) $(LIB_LD_LIBS)
+-	$(LIB_LD_CMD) [email protected] $(LOBJS) $(AGENTLIB) $(NETSNMPLIB) $(LDFLAGS) $(LIB_LD_LIBS)
 -	$(RANLIB) [email protected]
-+	$(LIB_LD_CMD) [email protected] $(LIB_LD_ADD_PATH) $(LOBJS) @[email protected] $(LDFLAGS) $(LIB_LD_LIBS) $(LIB_LD_ADD)
++	$(LIB_LD_CMD) [email protected] $(LIB_LD_ADD_PATH) $(LOBJS) $(AGENTLIB) $(NETSNMPLIB) $(LDFLAGS) $(LIB_LD_LIBS) $(LIB_LD_ADD)
 +	$(RANLIB) [email protected] $(LIB_LD_ADD)
---- net-snmp-5.7.2/snmplib/Makefile.in	Sun Dec 30 22:37:08 2012
-+++ net-snmp-5.7.2/agent/helpers/Makefile.in	Mon Dec 31 00:06:01 2012
[email protected]@ -221,6 +221,9 @@
+diff -ru net-snmp-5.4.1/snmplib/Makefile.in net-snmp-5.4.1.mod/snmplib/Makefile.in
+--- net-snmp-5.4.1/snmplib/Makefile.in	2007-06-19 03:04:43.000000000 +0530
++++ net-snmp-5.4.1.mod/snmplib/Makefile.in	2009-06-24 06:01:35.912972597 +0530
[email protected]@ -181,6 +181,9 @@
  # just in case someone wants to remove libtool, change this to OBJS.
  TOBJS=$(LOBJS)
  
 +# To satisfy -zdefs
-+LIB_LD_ADD =-lnsl -lsocket -L$(libdir)
++LIB_LD_ADD	=-lnsl -lsocket -L$(libdir)
 +
- FEATUREFILE     = $(top_builddir)/include/net-snmp/library/features.h
+ # 
+ CPPFLAGS = $(TOP_INCLUDES) -I. 	$(SNMPLIB_INCLUDES) @[email protected]
  
- # 
[email protected]@ -230,8 +233,8 @@
[email protected]@ -188,8 +191,8 @@
  
  # how to build the libraries.
  libnetsnmp.$(LIB_EXTENSION)$(LIB_VERSION):    $(TOBJS)
--	$(LIB_LD_CMD) [email protected] $(TOBJS) @[email protected] $(LDFLAGS) @[email protected]
+-	$(LIB_LD_CMD) [email protected] $(TOBJS) $(LDFLAGS) @[email protected]
 -	$(RANLIB) [email protected]
-+	$(LIB_LD_CMD) [email protected] $(TOBJS) @[email protected] $(LDFLAGS) @[email protected] } $(LIB_LD_ADD)
-+	$(RANLIB) [email protected] $(LIB_LD_ADD)
++	$(LIB_LD_CMD) [email protected] $(TOBJS) $(LDFLAGS) @[email protected] } $(LIB_LD_ADD)
++	$(RANLIB) [email protected]  $(LIB_LD_ADD)
  
  libsnmp.$(LIB_EXTENSION)$(LIB_VERSION):    $(TOBJS)
- 	$(LIB_LD_CMD) [email protected] $(TOBJS) @[email protected] $(LDFLAGS) @[email protected]
+ 	$(LIB_LD_CMD) [email protected] $(TOBJS) $(LDFLAGS) @[email protected]
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/013.6852099.proxy.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,29 @@
+--- a/agent/mibgroup/ucd-snmp/proxy.c	2006-10-17 18:16:29.000000000 +0200
++++ b/agent/mibgroup/ucd-snmp/proxy.c	2012-03-27 09:02:10.488425400 +0200
[email protected]@ -396,6 +396,8 @@
+ 
+     if (!pdu || !sp) {
+         netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_GENERR);
++        if (pdu)
++            snmp_free_pdu(pdu);
+         return SNMP_ERR_NOERROR;
+     }
+ 
[email protected]@ -408,6 +410,8 @@
+                 /*
+                  * too large 
+                  */
++                if (pdu)
++                    snmp_free_pdu(pdu);
+                 snmp_log(LOG_ERR,
+                          "proxy oid request length is too long\n");
+                 return SNMP_ERR_NOERROR;
[email protected]@ -437,6 +441,8 @@
+      */
+     if (!proxy_fill_in_session(handler, reqinfo, (void **)&configured)) {
+         netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_GENERR);
++        if (pdu)
++            snmp_free_pdu(pdu);
+         return SNMP_ERR_NOERROR;
+     }
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/017.6984919.kernel_sunos5.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,11 @@
+--- patch/net-snmp-5.4.1/agent/mibgroup/kernel_sunos5.c	Tue Oct 12 06:55:48 2010
++++ net-snmp-5.4.1/agent/mibgroup/kernel_sunos5.c	Tue Oct 12 07:03:49 2010
[email protected]@ -82,7 +82,7 @@
+ static
+ mibcache        Mibcache[MIBCACHE_SIZE+1] = {
+     {MIB_SYSTEM, 0, (void *) -1, 0, 0, 0, 0},
+-    {MIB_INTERFACES, 10 * sizeof(mib2_ifEntry_t), (void *) -1, 0, 30, 0,
++    {MIB_INTERFACES, 50 * sizeof(mib2_ifEntry_t), (void *) -1, 0, 30, 0,
+      0},
+     {MIB_AT, 0, (void *) -1, 0, 0, 0, 0},
+     {MIB_IP, sizeof(mib2_ip_t), (void *) -1, 0, 60, 0, 0},
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/018.6932608.systemstats_common.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,19 @@
+--- patch/net-snmp-5.4.1-64/agent/mibgroup/ip-mib/data_access/systemstats_common.c	Tue Feb  8 13:58:36 2005
++++ net-snmp-5.4.1/agent/mibgroup/ip-mib/data_access/systemstats_common.c	Mon Aug  2 05:21:15 2010
[email protected]@ -339,7 +339,7 @@
+      */
+     if (0 == need_wrap_check) {
+         SNMP_FREE(prev_vals->old_stats);
+-    }
++    } else {
+     
+     /*
+      * update old stats from new stats.
[email protected]@ -346,6 +346,7 @@
+      * careful - old_stats is a pointer to stats...
+      */
+     memcpy(prev_vals->old_stats, &new_vals->stats, sizeof(new_vals->stats));
++    }
+     
+     return 0;
+ }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/019.6998845.container.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,314 @@
+--- net-snmp/include/net-snmp/library/container.h	Mon Dec  5 00:13:04 2005
++++ net-snmp/include/net-snmp/library/container.h	Fri Jan 14 17:35:37 2011
[email protected]@ -31,8 +31,16 @@
+     struct netsnmp_container_s; /** forward declare */
+ 
+     /*
+-     * function returning an int for an operation on a container
++     * function for performing an operation on a container which
++     * returns (maybe the same) container.
+      */
++
++    typedef struct netsnmp_container_s* (netsnmp_container_mod_op)
++      (struct netsnmp_container_s *, void *context, u_int flags);
++
++    /*
++     * function for setting an option on a container
++     */
+     typedef int (netsnmp_container_option)(struct netsnmp_container_s *,
+                                            int set, u_int flags);
+ 
[email protected]@ -192,6 +200,14 @@
+        netsnmp_container_op    *insert_filter;
+ 
+        /*
++	* OPTIONAL function to duplicate a container. Defaults to a shallow
++	* copy. Only the specified container is copied (i.e. sub-containers
++	* not included).
++	*/
++
++       netsnmp_container_mod_op *duplicate;
++
++       /*
+         * function to compare two object stored in the container.
+         *
+         * Returns:
[email protected]@ -219,11 +235,16 @@
+ 
+        /*
+         * sort count, for iterators to track (insert/delete
+-        * bumps coutner, invalidates iterator
++        * bumps counter, invalidates iterator)
+         */
+        u_long                          sync;
+ 
+        /*
++	* flags
++	*/
++       u_int                           flags;
++
++       /*
+         * containers can contain other containers (additional indexes)
+         */
+        struct netsnmp_container_s *next, *prev;
[email protected]@ -288,15 +309,15 @@
+ #define CONTAINER_SET_OPTIONS(x,o,rc)  do {                             \
+         if (NULL==(x)->options)                                         \
+             rc = -1;                                                    \
+-        else                                                            \
++        else {                                                          \
+             rc = (x)->options(x, 1, o);                                 \
++	     if (rc != -1 )						\
++		(x)->flags |= o;                                        \
++	}								\
+     } while(0)
+ 
+ #define CONTAINER_CHECK_OPTION(x,o,rc)    do {                          \
+-        if (NULL==(x)->options)                                         \
+-            rc = -1;                                                    \
+-        else                                                            \
+-            rc = (x)->options(x,0, o);                                  \
++	rc = x->flags & 0;                                              \
+     } while(0)
+ 
+ 
[email protected]@ -335,6 +356,12 @@
+     int CONTAINER_REMOVE(netsnmp_container *x, const void *k);
+ 
+     /*
++     * duplicate container
++     */
++    netsnmp_container *CONTAINER_DUP(netsnmp_container *x, void *ctx,
++		u_int flags); 
++
++    /*
+      * clear all containers. When clearing the *first* container, and
+      * *only* the first container, call the function f for each item.
+      * After calling this function, all containers should be empty.
[email protected]@ -364,7 +391,7 @@
+                 continue;
+             rc2 = x->insert(x,k);
+             if (rc2) {
+-                snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
++                snmp_log(LOG_DEBUG,"error on subcontainer '%s' insert (%d)\n",
+                          x->container_name ? x->container_name : "", rc2);
+                 rc = rc2;
+             }
[email protected]@ -402,6 +429,22 @@
+      * container.c. If you change one, change them both.
+      */
+     NETSNMP_STATIC_INLINE /* gcc docs recommend static w/inline */
++    netsnmp_container *CONTAINER_DUP(netsnmp_container *x, void *ctx,
++    		u_int flags)
++    {
++      if (NULL == x->duplicate) {
++    	snmp_log(LOG_ERR, "container '%s' does not support duplicate\n",
++    		x->container_name ? x->container_name : "");
++    	return NULL;
++      }
++      return x->duplicate(x, ctx, flags);
++    }
++
++    /*------------------------------------------------------------------
++     * These functions should EXACTLY match the function version in
++     * container.c. If you change one, change them both.
++     */
++    NETSNMP_STATIC_INLINE /* gcc docs recommend static w/inline */ 
+     int CONTAINER_FREE(netsnmp_container *x)
+     {
+ 	int  rc2, rc = 0;
[email protected]@ -474,6 +517,10 @@
+     }
+ 
+ #endif
++
++    /** Duplicate container meta-data. */
++    int netsnmp_container_data_dup(netsnmp_container *dup,
++    	netsnmp_container *c); 
+     
+     /*************************************************************************
+      *
+--- net-snmp/snmplib/container_binary_array.c	Wed Aug 23 21:23:22 2006
++++ net-snmp/snmplib/container_binary_array.c	Fri Jan 14 17:35:37 2011
[email protected]@ -36,7 +36,6 @@
+ typedef struct binary_array_table_s {
+     size_t                     max_size;   /* Size of the current data table */
+     size_t                     count;      /* Index of the next free entry */
+-    u_int                      flags;      /* flags */
+     int                        dirty;
+     int                        data_size;  /* Size of an individual entry */
+     void                     **data;       /* The table itself */
[email protected]@ -99,7 +98,7 @@
+     netsnmp_assert(t!=NULL);
+     netsnmp_assert(c->compare!=NULL);
+ 
+-    if (t->flags & CONTAINER_KEY_UNSORTED)
++    if (c->flags & CONTAINER_KEY_UNSORTED)
+         return 0;
+ 
+     if (t->dirty) {
[email protected]@ -204,11 +203,16 @@
+ int
+ netsnmp_binary_array_options_set(netsnmp_container *c, int set, u_int flags)
+ {
+-    binary_array_table *t = (binary_array_table*)c->container_data;
+-    if (set)
+-        t->flags = flags;
++#define BA_FLAGS (CONTAINER_KEY_ALLOW_DUPLICATES|CONTAINER_KEY_UNSORTED)
++
++    if (set) {
++    	if ((flags & BA_FLAGS) == flags)
++    		c->flags = flags;
++    	else
++    		flags = (u_int)-1; /* unsupported flag */
++    }
+     else
+-        return ((t->flags & flags) == flags);
++    	return ((c->flags & flags) == flags); 
+     return flags;
+ }
+ 
[email protected]@ -371,7 +375,7 @@
+     /*
+      * check for duplicates
+      */
+-    if (! (t->flags & CONTAINER_KEY_ALLOW_DUPLICATES)) {
++    if (! (c->flags & CONTAINER_KEY_ALLOW_DUPLICATES)) {
+         new_data = netsnmp_binary_array_get(c, entry, 1);
+         if (NULL != new_data) {
+             DEBUGMSGTL(("container","not inserting duplicate key\n"));
[email protected]@ -579,6 +583,56 @@
+     return va;
+ }
+ 
++static netsnmp_container *
++_ba_duplicate(netsnmp_container *c, void *ctx, u_int flags)
++{
++    netsnmp_container *dup;
++    binary_array_table *dupt, *t;
++
++    if (flags) {
++        snmp_log(LOG_ERR, "binary arry duplicate does not supprt flags yet\n");
++        return NULL;
++    }
++
++    dup = netsnmp_container_get_binary_array();
++    if (NULL == dup) {
++        snmp_log(LOG_ERR," no memory for binary array duplicate\n");
++        return NULL;
++    }
++    /*
++     * deal with container stuff
++     */
++    if (netsnmp_container_data_dup(dup, c) != 0) {
++        netsnmp_binary_array_release(dup);
++        return NULL;
++    }
++
++    /*
++     * deal with data
++     */
++    dupt = (binary_array_table*)dup->container_data;
++    t = (binary_array_table*)c->container_data;
++
++    dupt->max_size = t->max_size;
++    dupt->count = t->count;
++    dupt->dirty = t->dirty;
++    dupt->data_size = t->data_size;
++
++    /*
++     * shallow copy
++     */
++    dupt->data = (void**) calloc(dupt->max_size, dupt->data_size);
++    if (NULL == dupt->data) {
++        snmp_log(LOG_ERR, "no memory for binary array duplicate\n");
++        netsnmp_binary_array_release(dup);
++        return NULL;
++    }
++
++    memcpy(dupt->data, t->data, dupt->max_size * dupt->data_size);
++    
++    return dup;
++}
++
+ netsnmp_container *
+ netsnmp_container_get_binary_array(void)
+ {
[email protected]@ -592,7 +646,11 @@
+     }
+ 
+     c->container_data = netsnmp_binary_array_initialize();
+-        
++
++    /*
++     * NOTE: CHANGES HERE MUST BE DUPLICATED IN duplicate AS WELL!!
++     */
++
+     c->get_size = _ba_size;
+     c->init = NULL;
+     c->cfree = _ba_free;
[email protected]@ -604,6 +662,7 @@
+     c->get_iterator = _ba_iterator_get;
+     c->for_each = _ba_for_each;
+     c->clear = _ba_clear;
++    c->duplicate = _ba_duplicate;
+         
+     return c;
+ }
+--- net-snmp/snmplib/container.c	Fri Aug 25 15:11:06 2006
++++ net-snmp/snmplib/container.c	Fri Jan 14 17:35:37 2011
[email protected]@ -278,7 +278,7 @@
+             continue;
+         rc2 = x->insert(x,k);
+         if (rc2) {
+-            snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
++            snmp_log(LOG_DEBUG,"error on subcontainer '%s' insert (%d)\n",
+                      x->container_name ? x->container_name : "", rc2);
+             rc = rc2;
+         }
[email protected]@ -311,6 +311,20 @@
+ }
+ 
+ /*------------------------------------------------------------------
++ * These functions should EXACTLY match the function version in
++ * container.c. If you change one, change them both.
++ */
++netsnmp_container *CONTAINER_DUP(netsnmp_container *x, void *ctx, u_int flags)
++{
++    if (NULL == x->duplicate) {
++        snmp_log(LOG_ERR, "container '%s' does not support duplicate\n",
++                 x->container_name ? x->container_name : "");
++        return NULL;
++    }
++    return x->duplicate(x, ctx, flags);
++}
++
++/*------------------------------------------------------------------
+  * These functions should EXACTLY match the inline version in
+  * container.h. If you change one, change them both.
+  */
[email protected]@ -408,6 +422,24 @@
+     c->find = fnd;
+ }
+ 
++int
++netsnmp_container_data_dup(netsnmp_container *dup, netsnmp_container *c)
++{
++    if (!dup || !c)
++        return -1;
++
++    if (c->container_name)
++        dup->container_name = strdup(c->container_name);
++    dup->compare = c->compare;
++    dup->ncompare = c->ncompare;
++    dup->release = c->release;
++    dup->insert_filter = c->insert_filter;
++    dup->sync = c->sync;
++    dup->flags = c->flags;
++
++    return 0;
++}
++
+ /*------------------------------------------------------------------
+  *
+  * simple comparison routines
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/021.7046749.snmp_api.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,38 @@
+--- net-snmp/snmplib/snmp_api.c	Fri Nov 11 12:36:16 2011
++++ net-snmp/snmplib/snmp_api.c	Fri Nov 11 12:35:36 2011
[email protected]@ -419,7 +419,7 @@
+     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
+         return (retVal & 0x7fff);	/* mask to 15 bits */
+     else
+-        return retVal;
++        return (retVal & 0x7fffffff);  /* mask to 31 bits */
+ }
+ 
+ long
[email protected]@ -435,7 +435,7 @@
+     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
+         return (retVal & 0x7fff);	/* mask to 15 bits */
+     else
+-        return retVal;
++        return (retVal & 0x7fffffff);  /* mask to 31 bits */
+ }
+ 
+ long
[email protected]@ -451,7 +451,7 @@
+     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
+         return (retVal & 0x7fff);	/* mask to 15 bits */
+     else
+-        return retVal;
++        return (retVal & 0x7fffffff);  /* mask to 31 bits */
+ }
+ 
+ long
[email protected]@ -467,7 +467,7 @@
+     if (netsnmp_ds_get_boolean(NETSNMP_DS_LIBRARY_ID, NETSNMP_DS_LIB_16BIT_IDS))
+         return (retVal & 0x7fff);	/* mask to 15 bits */
+     else
+-        return retVal;
++        return (retVal & 0x7fffffff);  /* mask to 31 bits */
+ }
+ 
+ void
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/025.7162956.util_funcs.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,11 @@
+--- a/agent/mibgroup/util_funcs.c	2007-01-11 23:13:56.000000000 +0100
++++ b/agent/mibgroup/util_funcs.c	2012-06-01 13:20:07.243670066 +0200
[email protected]@ -254,7 +254,7 @@
+ #if HAVE_EXECV
+     char            cachefile[STRMAX];
+     char            cache[NETSNMP_MAXCACHESIZE];
+-    ssize_t         cachebytes;
++    int             cachebytes;
+     int             cfd;
+ #ifdef NETSNMP_EXCACHETIME
+     long            curtime;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/net-snmp/patches/026.7186501.cpu_kstat.patch	Sat May 18 09:18:20 2013 -0700
@@ -0,0 +1,11 @@
+--- net-snmp-5.4.1/agent/mibgroup/hardware/cpu/cpu_kstat.c	Thu Oct  5 08:53:42 2006
++++ net-snmp-5.4.1.mod/agent/mibgroup/hardware/cpu/cpu_kstat.c	Thu Mar 29 07:57:19 2012
[email protected]@ -103,6 +103,8 @@
+         if (strcmp(ksp->ks_module, "cpu_stat") == 0) {
+             i    = ksp->ks_instance;
+             cpu2 = netsnmp_cpu_get_byIdx( i, 0 );
++            if ( !cpu2 )
++                    break;  /* or continue ?*/ /*Skip new CPUs */
+             if ((ksp->ks_type != KSTAT_TYPE_RAW) ||
+                 (ksp->ks_data_size != sizeof(cs))||
+                 (kstat_read(kstat_fd, ksp, &cs) == -1)) {
--- a/components/net-snmp/patches/027.7118090.hr_filesys.patch	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/patches/027.7118090.hr_filesys.patch	Sat May 18 09:18:20 2013 -0700
@@ -1,9 +1,4 @@
 /*
- *  Version 2 - Modified the patch file to make it work for the newer
- *  revision in net-snmp 5.7.2. Some fragments of the patch had gone
- *  into the community net-snmp source. So this patch file has been
- *  updated with the correct diffs.
- *
  *  This patch fixes the performance issue observed while retrieving the
  *  hrStorage parameters in systems with large number of mountpoints
  *  parameters using snmpwalk.
@@ -13,20 +8,19 @@
  *  Get_Next_HR_FileSys() function.
  *
  *  We see that in the Get_Next_HR_FileSys() function, inorder to access
- *  the last mountpoint, the /etc/mnttab is opened and we walk through 
- *  all the mnttab entries for all filesystems till the end. This is the 
- *  reason we find a large number of the MNTIOC_GETMNTENT ioctl() calls.  
+ *  the last mountpoint, the /etc/mnttab is opened and we walk through
+ *  all the mnttab entries for all filesystems till the end. This is the
+ *  reason we find a large number of the MNTIOC_GETMNTENT ioctl() calls.
  *
  *  To reduce the overhead of the getmntent() calls, we maintain a cache
- *  of all the /etc/mnttab entries and walk through the cache instead of 
+ *  of all the /etc/mnttab entries and walk through the cache instead of
  *  opening /etc/mnttab and walking all the entries for each mountpoint.
  *  This functionality is provided by the load_mnttab_cache_solaris()
  *  function called from the Init_HR_FileSys() function.
  */
-
---- net-snmp/agent/mibgroup/host/hr_filesys.c	Sun Dec 30 22:37:05 2012
-+++ net-snmp/agent/mibgroup/host/hr_filesys.c	Mon Dec 31 00:55:29 2012
[email protected]@ -46,6 +46,10 @@
+--- net-snmp-5.4.1.orig/agent/mibgroup/host/hr_filesys.c	2007-05-18 11:08:01.000000000 -0700
++++ net-snmp-5.4.1/agent/mibgroup/host/hr_filesys.c	2013-01-17 03:36:28.181493003 -0800
[email protected]@ -31,6 +31,10 @@
  #include <sys/mount.h>
  #endif
  
@@ -37,7 +31,7 @@
  #include <ctype.h>
  #if HAVE_STRING_H
  #include <string.h>
[email protected]@ -108,7 +112,11 @@
[email protected]@ -85,7 +89,11 @@
  #ifdef solaris2
  
  struct mnttab   HRFS_entry_struct;
@@ -45,86 +39,155 @@
 +struct mnttab  *HRFS_entry;
 +struct mnttab	*HRFS_list;
 +static int fscount;
-+static time_t last_access=-1;
++static time_t last_access = -1;
 +
  #define	HRFS_name	mnt_special
  #define	HRFS_mount	mnt_mountp
  #define	HRFS_type	mnt_fstype
[email protected]@ -619,6 +627,12 @@
- void
- Init_HR_FileSys(void)
- {
[email protected]@ -167,6 +175,9 @@
+ static u_char  *when_dumped(char *filesys, int level, size_t * length);
+ int             header_hrfilesys(struct variable *, oid *, size_t *, int,
+                                  size_t *, WriteMethod **);
 +#ifdef solaris2
-+	char buf[512]={NULL};
-+	int lines=0, i=0;
-+	struct stat file_stat;
++static int      load_mnttab_cache_solaris(void);
 +#endif
-+
- #if HAVE_GETFSSTAT
- #if defined(HAVE_STATVFS) && defined(__NetBSD__)
-     fscount = getvfsstat(NULL, 0, ST_NOWAIT);
[email protected]@ -662,7 +676,59 @@
+ 
+         /*********************
+ 	 *
[email protected]@ -606,8 +617,14 @@
      HRFS_index = 1;
      if (fp != NULL)
          fclose(fp);
--    fp = fopen(ETC_MNTTAB, "r");
 +#ifdef solaris2
-+	HRFS_index = 0;
-+	stat(ETC_MNTTAB, &file_stat);
-+	if (last_access == -1 || last_access != file_stat.st_mtime) { 
-+    		fp = fopen(ETC_MNTTAB, "r");
-+		if(fp == NULL)
-+		{
-+			DEBUGMSGTL(("host/hr_filesys", "fopen failed for mnttab.\n"));
-+			return;
-+		}
++    if(!load_mnttab_cache_solaris())
++        return;
++#else    
+     fp = fopen(ETC_MNTTAB, "r");
+ #endif
++
++#endif
+ }
+ 
+ const char     *HRFS_ignores[] = {
[email protected]@ -663,6 +680,117 @@
+     0
+ };
+ 
++#ifdef solaris2
++
++/*
++ *  This function has been introduced to reduce the overhead
++ *  of the getmntent() calls used to fetch the details of
++ *  the /etc/mnttab entries in Init_HR_FileSys().
++ *
++ *  We maintain a cache of all the /etc/mnttab entries and
++ *  walk through the cache instead of opening /etc/mnttab and
++ *  walking all the entries for each mountpoint.
++ */
 +
-+		while ( (fgets((char *)&buf,sizeof(buf),fp)) != NULL) {
-+			lines++;
-+		}	
-+		fclose(fp);
-+	
-+		HRFS_list = (struct mnttab *) malloc (sizeof(struct mnttab) * lines);
-+		
-+		if(HRFS_list == NULL)
-+		{
-+			DEBUGMSGTL(("host/hr_filesys", "Memory allocation for mnttab cache failed.\n"));
-+			return;
-+		}				
++static int 
++load_mnttab_cache_solaris()
++{
++    char buf[512] = {NULL};
++    int i = 0;
++    struct stat file_stat;
++    const char **cpp;
++    char *ch;
++    int token_flag = 0;
++    int skip_flag = 0;
++    int ignore_flag = 0;
++    int j = 0;
++    int lines = 0;
++    int ret = 0;
++    HRFS_index = 0;
++
++    stat(ETC_MNTTAB, &file_stat);
++    if (last_access == -1 || last_access != file_stat.st_mtime) {
++        fp = fopen(ETC_MNTTAB, "r");
++        if(fp == NULL)
++        {
++            DEBUGMSGTL(("host/hr_filesys", "fopen failed for mnttab.\n"));
++            return -1;
++        }
++        
++        /* find the number of valid entries in mnttab. */
++        
++        while ((fgets((char *) &buf, sizeof(buf), fp)) != NULL) {
++            j = 0;
++            skip_flag = 0;
++            token_flag = 0;
 +
-+    		fp = fopen(ETC_MNTTAB, "r");
-+		
-+		if(fp == NULL)
-+                {
-+			DEBUGMSGTL(("host/hr_filesys", "fopen failed for mnttab.\n"));
-+			free(HRFS_list);
-+			return;
++            /* tokenize the mnttab entries to fetch the fstype
++             * which determines the valid entries.
++             */
++
++            ch = strtok(buf, " \t");
++            while (ch != NULL) {
++                j++;
++                if(j == 3) {
++                    for (cpp = HRFS_ignores; *cpp != NULL; ++cpp) {
++                        if(!strncmp(ch, *cpp, strlen(ch))) {
++                            skip_flag = 1;
++                            break;
++                        }
++                    }
++                    token_flag = 1;
 +                }
++                if(token_flag)
++                    break;
++                ch = strtok(NULL, " \t");
++             }
++             if(!skip_flag)
++                 lines++;
++        }
++        fclose(fp);
++
++        fscount = lines;
++        HRFS_list = (struct mnttab *) malloc (sizeof(struct mnttab) * fscount);
++        if(HRFS_list == NULL) {
++            DEBUGMSGTL(("host/hr_filesys", "Memory allocation for mnttab cache failed.\n"));
++            return -1;
++        }
 +
-+		fscount = lines;
-+		while (i < fscount)
-+    		{
-+			if (getmntent(fp, &HRFS_entry_struct) == 0)
-+        		{
-+				HRFS_list[i].mnt_special = strdup(HRFS_entry_struct.mnt_special);
-+				HRFS_list[i].mnt_mountp = strdup(HRFS_entry_struct.mnt_mountp);
-+				HRFS_list[i].mnt_fstype = strdup(HRFS_entry_struct.mnt_fstype);
-+				HRFS_list[i].mnt_mntopts = strdup(HRFS_entry_struct.mnt_mntopts);
-+        			i++;
-+        		}
-+    		}
-+	
-+		HRFS_entry = HRFS_list;
-+		last_access = file_stat.st_mtime;
-+	}
-+#else    
-+	fp = fopen(ETC_MNTTAB, "r");
++        fp = fopen(ETC_MNTTAB, "r");
++        if(fp == NULL) {
++            DEBUGMSGTL(("host/hr_filesys", "fopen failed for mnttab.\n"));
++            free(HRFS_list);
++            return -1;
++        }
++
++        while (i < fscount) {
++            if (getmntent(fp, &HRFS_entry_struct) == 0) {
++                 for (cpp = HRFS_ignores; *cpp != NULL; ++cpp) {
++                     if (!strcmp(HRFS_entry_struct.HRFS_type, *cpp)) {
++                         ignore_flag = 1;
++                         break;
++                     }
++                 }
++
++                 if(!ignore_flag) {
++                     HRFS_list[i].mnt_special = strdup(HRFS_entry_struct.mnt_special);
++                     HRFS_list[i].mnt_mountp = strdup(HRFS_entry_struct.mnt_mountp);
++                     HRFS_list[i].mnt_fstype = strdup(HRFS_entry_struct.mnt_fstype);
++                     HRFS_list[i].mnt_mntopts = strdup(HRFS_entry_struct.mnt_mntopts);
++                     i++;
++                 }
++
++                 ignore_flag = 0;
++            }
++        }
++
++        HRFS_entry = HRFS_list;
++        last_access = file_stat.st_mtime;
++    }
++    return ret;
++}
 +#endif
 +
-     if (!fp) {
-       netsnmp_config_error("Can't open mnttab %s\n", ETC_MNTTAB);
-     }
[email protected]@ -758,17 +824,20 @@
+ int
+ Get_Next_HR_FileSys(void)
+ {
[email protected]@ -699,17 +827,18 @@
  #else
      const char    **cpp;
  
@@ -133,16 +196,13 @@
  
  #ifdef solaris2
 -    if (getmntent(fp, HRFS_entry) != 0)
--        return -1;
-+
-+	if (HRFS_index >= fscount)
-+		return -1;
-+	HRFS_entry = &HRFS_list[HRFS_index];
-+		return ++HRFS_index;
-+
++    if (HRFS_index >= fscount)
+         return -1;
++    HRFS_entry = &HRFS_list[HRFS_index];
++        return ++HRFS_index;
  #else
-+	if (fp == NULL)
-+                return -1;
++    if (fp == NULL)
++        return -1;
      HRFS_entry = getmntent(fp);
      if (HRFS_entry == NULL)
          return -1;
@@ -150,7 +210,7 @@
  
      for (cpp = HRFS_ignores; *cpp != NULL; ++cpp)
          if (!strcmp(HRFS_entry->HRFS_type, *cpp))
[email protected]@ -787,6 +856,8 @@
[email protected]@ -728,6 +857,8 @@
      }
  
      return HRFS_index++;
@@ -159,28 +219,28 @@
  #endif                          /* HAVE_GETFSSTAT */
  }
  
[email protected]@ -854,10 +925,24 @@
[email protected]@ -791,9 +922,24 @@
          HRFS_entry = NULL;
      }
  #else
-+    int i=0;
++    int i = 0;
      if (fp != NULL)
          fclose(fp);
      fp = NULL;
 +
 +#ifdef solaris2
-+	while (i < fscount) {
-+		free(HRFS_list[i].mnt_special);
-+		free(HRFS_list[i].mnt_mountp);
-+		free(HRFS_list[i].mnt_fstype);
-+		free(HRFS_list[i].mnt_mntopts);
-+		i++;
-+	}
-+	if (HRFS_list != NULL)
-+		free(HRFS_list);
++while (i < fscount) {
++    free(HRFS_list[i].mnt_special);
++    free(HRFS_list[i].mnt_mountp);
++    free(HRFS_list[i].mnt_fstype);
++    free(HRFS_list[i].mnt_mntopts);
++    i++;
++}
++    if (HRFS_list != NULL)
++        free(HRFS_list);
++    last_access = -1;
++#endif
++
  #endif
-+
-+#endif
  }
  
- 
--- a/components/net-snmp/patches/029.7097655.ipAddressTable_container.patch	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/patches/029.7097655.ipAddressTable_container.patch	Sat May 18 09:18:20 2013 -0700
@@ -1,24 +1,457 @@
-#
-# netsnmp_access_ipaddress_container_load() can return NULL.
-# ipaddressTable_container_load() should check for the validity
-# of return value before accessing it or else it causes SEGV.
-#
---- net-snmp-5.7.2/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c	Wed Jan 30 02:01:56 2013
-+++ net-snmp-5.7.2/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c	Wed Jan 30 02:04:46 2013
[email protected]@ -348,6 +348,8 @@
+diff -ur net-snmp-5.4.1.org/agent/helpers/table_tdata.c net-snmp-5.4.1.container/agent/helpers/table_tdata.c
+--- net-snmp-5.4.1.org/agent/helpers/table_tdata.c	2012-04-02 01:31:08.387259100 -0700
++++ net-snmp-5.4.1.container/agent/helpers/table_tdata.c	2012-04-02 01:58:23.019636200 -0700
[email protected]@ -57,9 +57,18 @@
+     if ( !table )
+         return NULL;
+ 
++    table->flags = flags;
+     if (name)
+         table->name = strdup(name);
+-    table->container = netsnmp_container_find( "table_container" );
++
++    if (!(table->flags & TDATA_FLAG_NO_CONTAINER)) {
++        table->container = netsnmp_container_find( name );
++        if (!table->container)
++            table->container = netsnmp_container_find( "table_container" );
++        if (table->container)
++            table->container->container_name = strdup(name);
++    }
++
+     return table;
+ }
+ 
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-forward-mib/data_access/route_common.c net-snmp-5.4.1.container/agent/mibgroup/ip-forward-mib/data_access/route_common.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-forward-mib/data_access/route_common.c	2012-04-02 01:31:08.334343300 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-forward-mib/data_access/route_common.c	2012-04-02 02:00:46.671129800 -0700
[email protected]@ -47,8 +47,11 @@
+ 
+     DEBUGMSGTL(("access:route:container", "load\n"));
+ 
+-    if (NULL == container)
++    if (NULL == container) {
+         container = netsnmp_container_find("access:_route:table_container");
++        if (container)
++            container->container_name = strdup("_route");
++    }
+     if (NULL == container) {
+         snmp_log(LOG_ERR, "no container specified/found for access_route\n");
+         return NULL;
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c net-snmp-5.4.1.container/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c	2012-04-02 01:31:08.341048100 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-forward-mib/inetCidrRouteTable/inetCidrRouteTable_interface.c	2012-04-02 02:05:22.940847300 -0700
[email protected]@ -2307,9 +2307,12 @@
+     if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+ 
+     inetCidrRouteTable_container_init(&if_ctx->container, if_ctx->cache);
+-    if (NULL == if_ctx->container)
++    if (NULL == if_ctx->container) { 
+         if_ctx->container =
+             netsnmp_container_find("inetCidrRouteTable:table_container");
++        if (NULL != if_ctx->container)
++            if_ctx->container->container_name = strdup("inetCidrRouteTable");
++    }
+     if (NULL == if_ctx->container) {
+         snmp_log(LOG_ERR, "error creating container in "
+                  "inetCidrRouteTable_container_init\n");
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c net-snmp-5.4.1.container/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c	2012-04-02 01:31:08.337647600 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-forward-mib/ipCidrRouteTable/ipCidrRouteTable_interface.c	2012-04-02 02:08:16.825508200 -0700
[email protected]@ -2259,9 +2259,12 @@
+     if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+ 
+     ipCidrRouteTable_container_init(&if_ctx->container, if_ctx->cache);
+-    if (NULL == if_ctx->container)
++    if (NULL == if_ctx->container) {
+         if_ctx->container =
+             netsnmp_container_find("ipCidrRouteTable:table_container");
++        if (NULL != if_ctx->container)
++            if_ctx->container->container_name = strdup("ipCidrRouteTable");
++    }
+     if (NULL == if_ctx->container) {
+         snmp_log(LOG_ERR, "error creating container in "
+                  "ipCidrRouteTable_container_init\n");
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-mib/data_access/arp_common.c net-snmp-5.4.1.container/agent/mibgroup/ip-mib/data_access/arp_common.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-mib/data_access/arp_common.c	2012-04-02 01:31:08.353034100 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-mib/data_access/arp_common.c	2012-04-02 02:10:39.120984300 -0700
[email protected]@ -62,8 +62,11 @@
+ 
+     DEBUGMSGTL(("access:arp:container", "load\n"));
+ 
+-    if (NULL == container)
++    if (NULL == container) {
+         container = netsnmp_container_find("access:arp:table_container");
++        if (container)
++            container->container_name = strdup("arp");
++    }
+     if (NULL == container) {
+         snmp_log(LOG_ERR, "no container specified/found for access_arp\n");
+         return NULL;
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-mib/data_access/systemstats_common.c net-snmp-5.4.1.container/agent/mibgroup/ip-mib/data_access/systemstats_common.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-mib/data_access/systemstats_common.c	2012-04-02 01:31:08.353793700 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-mib/data_access/systemstats_common.c	2012-04-02 02:12:30.680237000 -0700
[email protected]@ -96,8 +96,11 @@
+ 
+     DEBUGMSGTL(("access:systemstats:container", "load\n"));
+ 
+-    if (NULL == container)
++    if (NULL == container) {
+         container = netsnmp_access_systemstats_container_init(load_flags);
++        if (NULL != container)
++             container->container_name = strdup("systemstats_autocreate");
++    }
+     if (NULL == container) {
+         snmp_log(LOG_ERR, "no container specified/found for access_systemstats\n");
+         return NULL;
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c net-snmp-5.4.1.container/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c	2012-04-02 01:31:08.349583400 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-mib/inetNetToMediaTable/inetNetToMediaTable_interface.c	2012-04-02 02:13:41.237688000 -0700
[email protected]@ -1935,9 +1935,12 @@
+     if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+ 
+     inetNetToMediaTable_container_init(&if_ctx->container, if_ctx->cache);
+-    if (NULL == if_ctx->container)
++    if (NULL == if_ctx->container) {
+         if_ctx->container =
+             netsnmp_container_find("inetNetToMediaTable:table_container");
++        if (if_ctx->container)
++            if_ctx->container->container_name = strdup("inetNetToMediaTable");
++    }
+     if (NULL == if_ctx->container) {
+         snmp_log(LOG_ERR, "error creating container in "
+                  "inetNetToMediaTable_container_init\n");
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c net-snmp-5.4.1.container/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c	2012-04-02 01:31:08.365565600 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-mib/ipv4InterfaceTable/ipv4InterfaceTable_interface.c	2012-04-02 03:44:15.669526200 -0700
[email protected]@ -1251,15 +1251,18 @@
+      * container init
+      */
+     ipv4InterfaceTable_container_init(&if_ctx->container);
+-    if (NULL == if_ctx->container)
++    if (NULL == if_ctx->container) 
+         if_ctx->container =
+             netsnmp_container_find("ipv4InterfaceTable:table_container");
++
+     if (NULL == if_ctx->container) {
+         snmp_log(LOG_ERR, "error creating container in "
+                  "ipv4InterfaceTable_container_init\n");
+         return;
+     }
+ 
++    if_ctx->container->container_name = strdup("ipv4InterfaceTable");
++
+ }                               /* _ipv4InterfaceTable_container_init */
+ 
+ /**
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c net-snmp-5.4.1.container/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c
+--- net-snmp-5.4.1.org/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c	2012-04-02 01:31:08.363180800 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-mib/ipv6InterfaceTable/ipv6InterfaceTable_interface.c	2012-04-02 03:45:04.295800900 -0700
[email protected]@ -1341,6 +1341,7 @@
+                  "ipv6InterfaceTable_container_init\n");
+         return;
+     }
++    if_ctx->container->container_name = strdup("ipv6InterfaceTable");
+ 
+ }                               /* _ipv6InterfaceTable_container_init */
+ 
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.c net-snmp-5.4.1.container/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.c
+--- net-snmp-5.4.1.org/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.c	2012-04-02 01:31:08.199286300 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/tcp-mib/tcpConnectionTable/tcpConnectionTable_interface.c	2012-04-02 03:47:50.113861500 -0700
[email protected]@ -1731,9 +1731,12 @@
+     if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+ 
+     tcpConnectionTable_container_init(&if_ctx->container, if_ctx->cache);
+-    if (NULL == if_ctx->container)
++    if (NULL == if_ctx->container) {
+         if_ctx->container =
+             netsnmp_container_find("tcpConnectionTable:table_container");
++        if (if_ctx->container)
++            if_ctx->container->container_name = strdup("tcpConnectionTable");
++    }
+     if (NULL == if_ctx->container) {
+         snmp_log(LOG_ERR, "error creating container in "
+                  "tcpConnectionTable_container_init\n");
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.c net-snmp-5.4.1.container/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.c
+--- net-snmp-5.4.1.org/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.c	2012-04-02 01:31:08.201001900 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/tcp-mib/tcpListenerTable/tcpListenerTable_interface.c	2012-04-02 03:48:52.542497400 -0700
[email protected]@ -922,9 +922,12 @@
+     if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+ 
+     tcpListenerTable_container_init(&if_ctx->container, if_ctx->cache);
+-    if (NULL == if_ctx->container)
++    if (NULL == if_ctx->container) {
+         if_ctx->container =
+             netsnmp_container_find("tcpListenerTable:table_container");
++        if (if_ctx->container)
++            if_ctx->container->container_name = strdup("tcpListenerTable");
++    }
+     if (NULL == if_ctx->container) {
+         snmp_log(LOG_ERR, "error creating container in "
+                  "tcpListenerTable_container_init\n");
+diff -ur net-snmp-5.4.1.org/include/net-snmp/agent/table_tdata.h net-snmp-5.4.1.container/include/net-snmp/agent/table_tdata.h
+--- net-snmp-5.4.1.org/include/net-snmp/agent/table_tdata.h	2012-04-02 01:31:08.444022500 -0700
++++ net-snmp-5.4.1.container/include/net-snmp/agent/table_tdata.h	2012-04-02 23:50:13.830827600 -0700
[email protected]@ -21,6 +21,7 @@
+ #define TABLE_TDATA_TABLE "table_tdata_table"
+ 
+ #define TDATA_FLAG_NO_STORE_INDEXES   0x01
++#define TDATA_FLAG_NO_CONTAINER       0x02    /* user will provide container */
+ 
+     /*
+      * The (table-independent) per-row data structure
+diff -ur net-snmp-5.4.1.org/include/net-snmp/library/container.h net-snmp-5.4.1.container/include/net-snmp/library/container.h
+--- net-snmp-5.4.1.orig/include/net-snmp/library/container.h	2012-09-13 03:44:03.378177029 -0700
++++ net-snmp-5.4.1.container/include/net-snmp/library/container.h	2012-09-05 12:05:44.822831595 -0700
[email protected]@ -373,31 +373,42 @@
+      */
+     int CONTAINER_FREE(netsnmp_container *x);
+ #else
+-    /*------------------------------------------------------------------
+-     * These functions should EXACTLY match the function version in
+-     * container.c. If you change one, change them both.
+-     */
+-    NETSNMP_STATIC_INLINE /* gcc docs recommend static w/inline */
+-    int CONTAINER_INSERT(netsnmp_container *x, const void *k)
+-    {
+-        int rc2, rc = 0;
+-        
+-        /** start at first container */
+-        while(x->prev)
+-            x = x->prev;
+-        for(; x; x = x->next) {
+-            if ((NULL != x->insert_filter) &&
+-                (x->insert_filter(x,k) == 1))
+-                continue;
+-            rc2 = x->insert(x,k);
+-            if (rc2) {
+-                snmp_log(LOG_DEBUG,"error on subcontainer '%s' insert (%d)\n",
+-                         x->container_name ? x->container_name : "", rc2);
+-                rc = rc2;
+-            }
+-        }
+-        return rc;
+-    }
++     /*------------------------------------------------------------------
++      * These functions should EXACTLY match the function version in
++      * container.c. If you change one, change them both.
++      */
++     NETSNMP_STATIC_INLINE /* gcc docs recommend static w/inline */
++     int CONTAINER_INSERT_HELPER(netsnmp_container* x, const void* k)
++     {
++         while(x && x->insert_filter && x->insert_filter(x,k) == 1)
++             x = x->next;
++         if(x) {
++             int rc = x->insert(x,k);
++             if(rc)
++                 snmp_log(LOG_ERR,"error on subcontainer '%s' insert (%d)\n",
++                          x->container_name ? x->container_name : "", rc);
++             else {
++                 rc = CONTAINER_INSERT_HELPER(x->next, k);
++                 if(rc)
++                     x->remove(x,k);
++             }
++             return rc;
++         }
++         return 0;
++     }
++ 
++     /*------------------------------------------------------------------
++      * These functions should EXACTLY match the function version in
++      * container.c. If you change one, change them both.
++      */
++     NETSNMP_STATIC_INLINE /* gcc docs recommend static w/inline */
++     int CONTAINER_INSERT(netsnmp_container* x, const void* k)
++     {
++         /** start at first container */
++         while(x->prev)
++             x = x->prev;
++         return CONTAINER_INSERT_HELPER(x, k);
++     }
+     
+     /*------------------------------------------------------------------
+      * These functions should EXACTLY match the function version in
+diff -ur net-snmp-5.4.1.org/snmplib/container.c net-snmp-5.4.1.container/snmplib/container.c
+--- net-snmp-5.4.1/snmplib/container.c	2012-09-13 03:44:03.380247622 -0700
++++ net-snmp-5.4.1.container/snmplib/container.c	2012-09-13 03:33:19.759881202 -0700
[email protected]@ -49,7 +49,8 @@
+      */
+     containers = netsnmp_container_get_binary_array();
+     containers->compare = netsnmp_compare_cstring;
+-
++    containers->container_name = strdup("container list");
++	
+     /*
+      * register containers
+      */
[email protected]@ -265,25 +266,34 @@
+  * These functions should EXACTLY match the inline version in
+  * container.h. If you change one, change them both.
+  */
+-int CONTAINER_INSERT(netsnmp_container *x, const void *k)
+-{ 
+-    int rc2, rc = 0;
+-    
+-    /** start at first container */
++int CONTAINER_INSERT_HELPER(netsnmp_container* x, const void* k)
++{
++     while(x && x->insert_filter && x->insert_filter(x,k) == 1)
++         x = x->next;
++     if(x) {
++         int rc = x->insert(x,k);
++         if(rc)
++             snmp_log(LOG_DEBUG,"error on subcontainer '%s' insert (%d)\n",
++                      x->container_name ? x->container_name : "", rc);
++         else {
++             rc = CONTAINER_INSERT_HELPER(x->next, k);
++             if(rc)
++                 x->remove(x,k);
++         }
++         return rc;
++     }
++     return 0;
++ }
++
++/*------------------------------------------------------------------
++ * These functions should EXACTLY match the inline version in
++ * container.h. If you change one, change them both.
++ */
++int CONTAINER_INSERT(netsnmp_container* x, const void* k)
++{
+     while(x->prev)
+-        x = x->prev;
+-    for(; x; x = x->next) {
+-        if ((NULL != x->insert_filter) &&
+-            (x->insert_filter(x,k) == 1))
+-            continue;
+-        rc2 = x->insert(x,k);
+-        if (rc2) {
+-            snmp_log(LOG_DEBUG,"error on subcontainer '%s' insert (%d)\n",
+-                     x->container_name ? x->container_name : "", rc2);
+-            rc = rc2;
+-        }
+-    }
+-    return rc;
++         x = x->prev;
++     return CONTAINER_INSERT_HELPER(x, k);
+ }
+ 
+ /*------------------------------------------------------------------
+diff -ur net-snmp-5.4.1.org/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c net-snmp-5.4.1.container/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c
+--- net-snmp-5.4.1.orig/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c	2007-05-17 14:53:28.000000000 -0700
++++ net-snmp-5.4.1.container/agent/mibgroup/ip-mib/ipAddressTable/ipAddressTable_data_access.c	2012-09-13 03:45:25.253102053 -0700
[email protected]@ -134,6 +134,7 @@
+     *container_ptr_ptr =
+         netsnmp_container_find("ipAddressTable:table_container");
+     if (NULL != *container_ptr_ptr) {
++        (*container_ptr_ptr)->container_name = strdup("ipAddressTable"); 
+         ipAddressTable_container_load(*container_ptr_ptr);
+         CONTAINER_FOR_EACH(*container_ptr_ptr,
+                            (netsnmp_container_obj_func *) _clear_times,
[email protected]@ -344,56 +345,58 @@
       * what we've already got, and make any adjustments, saving
       * missing addresses to be deleted.
       */
+-    tmp_ptr[0] = ipaddress_container->next;
+-    tmp_ptr[1] = NULL;
+-    CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *)
+-                       _check_entry_for_updates, tmp_ptr);
+-
+-    /*
+-     * now add any new interfaces
+-     */
+-    CONTAINER_FOR_EACH(ipaddress_container,
+-                       (netsnmp_container_obj_func *) _add_new_entry,
+-                       container);
+-
+-    /*
+-     * free the container. we've either claimed each entry, or released it,
+-     * so the access function doesn't need to clear the container.
+-     */
+-    netsnmp_access_ipaddress_container_free(ipaddress_container,
+-                                            NETSNMP_ACCESS_IPADDRESS_FREE_DONT_CLEAR);
+-
+-    /*
+-     * remove deleted addresses from table container
+-     */
+-    if (NULL != tmp_ptr[1]) {
+-        netsnmp_container *tmp_container =
+-            (netsnmp_container *) tmp_ptr[1];
+-        ipAddressTable_rowreq_ctx *tmp_ctx;
+-
+-        /*
+-         * this works because the tmp_container is a linked list,
+-         * which can be used like a stack...
+-         */
+-        while (CONTAINER_SIZE(tmp_container)) {
+-            /*
+-             * get from delete list
+-             */
+-            tmp_ctx = CONTAINER_FIRST(tmp_container);
+-
+-            /*
+-             * release context, delete from table container
+-             */
+-            CONTAINER_REMOVE(container, tmp_ctx);
+-            ipAddressTable_release_rowreq_ctx(tmp_ctx);
+-
+-            /*
+-             * pop off delete list
+-             */
+-            CONTAINER_REMOVE(tmp_container, NULL);
+-        }
 +    if(ipaddress_container != NULL)
 +    {
-     tmp_ptr[0] = ipaddress_container->next;
-     tmp_ptr[1] = NULL;
-     CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *)
[email protected]@ -395,6 +397,7 @@
-              * pop off delete list
-              */
-             CONTAINER_REMOVE(tmp_container, NULL);
-+            }
-         }
++    	tmp_ptr[0] = ipaddress_container->next;
++    	tmp_ptr[1] = NULL;
++    	CONTAINER_FOR_EACH(container, (netsnmp_container_obj_func *)
++                       	   _check_entry_for_updates, tmp_ptr);
++
++    	/*
++     	 * now add any new interfaces
++     	 */
++    	CONTAINER_FOR_EACH(ipaddress_container,
++                       	   (netsnmp_container_obj_func *) _add_new_entry,
++                            container);
++
++    	/*
++     	 * free the container. we've either claimed each entry, or released it,
++     	 * so the access function doesn't need to clear the container.
++     	 */
++    	netsnmp_access_ipaddress_container_free(ipaddress_container,
++                                                NETSNMP_ACCESS_IPADDRESS_FREE_DONT_CLEAR);
++
++    	/*
++     	 * remove deleted addresses from table container
++     	 */
++    	if (NULL != tmp_ptr[1]) {
++        	netsnmp_container *tmp_container =
++            	    (netsnmp_container *) tmp_ptr[1];
++        	ipAddressTable_rowreq_ctx *tmp_ctx;
++
++        	/*
++         	 * this works because the tmp_container is a linked list,
++         	 * which can be used like a stack...
++         	 */
++        	while (CONTAINER_SIZE(tmp_container)) {
++            	/*
++             	 * get from delete list
++             	 */
++            	tmp_ctx = CONTAINER_FIRST(tmp_container);
++
++            	/*
++             	 * release context, delete from table container
++             	 */
++            	CONTAINER_REMOVE(container, tmp_ctx);
++            	ipAddressTable_release_rowreq_ctx(tmp_ctx);
++
++            	/*
++             	 * pop off delete list
++              	 */
++            	CONTAINER_REMOVE(tmp_container, NULL);
++        	}
++    	}
      }
+-
+     DEBUGMSGT(("verbose:ipAddressTable:ipAddressTable_cache_load",
+                "%d records\n", CONTAINER_SIZE(container)));
  
--- a/components/net-snmp/patches/031.16488880.patch	Thu May 16 14:50:57 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
---- net-snmp/agent/mibgroup/host/data_access/swrun_procfs_psinfo.c	Tue Mar 19 22:20:09 2013
-+++ net-snmp/agent/mibgroup/host/data_access/swrun_procfs_psinfo.c	Tue Mar 19 22:21:09 2013
[email protected]@ -25,9 +25,7 @@
- 
- #define HAVE_SYS_PROCFS_H    /* XXX - Needs a configure check! */
- #ifdef HAVE_SYS_PROCFS_H
--#define _KERNEL              /* For psinfo_t */
--#include <sys/procfs.h>
--#undef _KERNEL
-+#include <procfs.h>
- #endif
- #ifdef HAVE_SYS_PROC_H
- #include <sys/proc.h>
--- a/components/net-snmp/resolve.deps	Thu May 16 14:50:57 2013 -0700
+++ b/components/net-snmp/resolve.deps	Sat May 18 09:18:20 2013 -0700
@@ -5,7 +5,6 @@
 shell/ksh93
 system/core-os
 system/library
-system/library/math
 system/linker
 system/management/snmp/net-snmp
 system/network