Move net-snmp to its proper location
authorRISCi_ATOM <bob@bobcall.me>
Thu, 28 Nov 2019 17:22:49 +0000 (12:22 -0500)
committerRISCi_ATOM <bob@bobcall.me>
Thu, 28 Nov 2019 17:22:49 +0000 (12:22 -0500)
26 files changed:
package/network/net-snmp/Makefile [deleted file]
package/network/net-snmp/files/snmpd.conf [deleted file]
package/network/net-snmp/files/snmpd.init [deleted file]
package/network/net-snmp/files/snmptrapd.init [deleted file]
package/network/net-snmp/patches/000-cross-compile.patch [deleted file]
package/network/net-snmp/patches/100-debian-statistics.patch [deleted file]
package/network/net-snmp/patches/110-debian-makefiles.patch [deleted file]
package/network/net-snmp/patches/120-debian-searchdirs.patch [deleted file]
package/network/net-snmp/patches/130-debian-extramibs.patch [deleted file]
package/network/net-snmp/patches/160-no_ldconfig.patch [deleted file]
package/network/net-snmp/patches/170-ldflags.patch [deleted file]
package/network/net-snmp/patches/750-ieee802dot11.patch [deleted file]
package/network/net-snmp/patches/900-musl-compat.patch [deleted file]
package/network/services/net-snmp/Makefile [new file with mode: 0644]
package/network/services/net-snmp/files/snmpd.conf [new file with mode: 0644]
package/network/services/net-snmp/files/snmpd.init [new file with mode: 0644]
package/network/services/net-snmp/files/snmptrapd.init [new file with mode: 0644]
package/network/services/net-snmp/patches/000-cross-compile.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/100-debian-statistics.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/110-debian-makefiles.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/120-debian-searchdirs.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/130-debian-extramibs.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/160-no_ldconfig.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/170-ldflags.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/750-ieee802dot11.patch [new file with mode: 0644]
package/network/services/net-snmp/patches/900-musl-compat.patch [new file with mode: 0644]

diff --git a/package/network/net-snmp/Makefile b/package/network/net-snmp/Makefile
deleted file mode 100644 (file)
index bfcaa90..0000000
+++ /dev/null
@@ -1,290 +0,0 @@
-#
-# Copyright (C) 2006-2017 OpenWrt.org
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=net-snmp
-PKG_VERSION:=5.8
-PKG_RELEASE:=1
-
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=@SF/net-snmp
-PKG_HASH:=b2fc3500840ebe532734c4786b0da4ef0a5f67e51ef4c86b3345d697e4976adf
-PKG_MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
-PKG_LICENSE:=MIT BSD-3-Clause-Clear
-
-PKG_FIXUP:=autoreconf
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/net-snmp/Default
-  SECTION:=net
-  CATEGORY:=Network
-  URL:=http://www.net-snmp.org/
-endef
-
-define Package/net-snmp/Default/description
- Simple Network Management Protocol (SNMP) is a widely used protocol for
- monitoring the health and welfare of network equipment (eg. routers),
- computer equipment and even devices like UPSs. Net-SNMP is a suite of
- applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both
- IPv4 and IPv6.
-endef
-
-
-define Package/libnetsnmp
-$(call Package/net-snmp/Default)
-  SECTION:=libs
-  CATEGORY:=Libraries
-  DEPENDS:=+libnl-tiny +libpci
-  TITLE:=Open source SNMP implementation (libraries)
-endef
-
-define Package/libnetsnmp/description
-$(call Package/net-snmp/Default/description)
- .
- This package contains shared libraries, needed by other programs.
-endef
-
-
-define Package/snmp-mibs
-$(call Package/net-snmp/Default)
-  TITLE:=Open source SNMP implementation (MIB-files)
-endef
-
-define Package/snmp-mibs/description
-$(call Package/net-snmp/Default/description)
- .
- This package contains SNMP MIB-Files.
-endef
-
-
-define Package/snmp-utils
-$(call Package/net-snmp/Default)
-  DEPENDS:=+libnetsnmp
-  TITLE:=Open source SNMP implementation (utilities)
-endef
-
-define Package/snmp-utils/description
-$(call Package/net-snmp/Default/description)
- .
- This package contains SNMP client utilities:
-   - snmpget
-   - snmpset
-   - snmpstatus
-   - snmptest
-   - snmptrap
-   - snmpwalk
-endef
-
-
-define Package/snmpd
-$(call Package/net-snmp/Default)
-  DEPENDS:=+libnetsnmp
-  TITLE:=Open source SNMP implementation (daemon)
-endef
-
-define Package/snmpd/description
-$(call Package/net-snmp/Default/description)
- .
- This package contains the SNMP agent, dynamically linked.
-endef
-
-
-define Package/snmpd-static
-$(call Package/net-snmp/Default)
-  DEPENDS:=+snmpd
-  TITLE:=Open source SNMP implementation (daemon)
-endef
-
-
-define Package/snmptrapd
-$(call Package/net-snmp/Default)
-  DEPENDS:=+libnetsnmp
-  TITLE:=Open source SNMP implementation (notification receiver)
-endef
-
-define Package/snmptrapd/description
-$(call Package/net-snmp/Default/description)
- .
- This package contains the SNMP notification receiver.
-endef
-
-
-SNMP_MIB_MODULES_INCLUDED = \
-       agent/extend \
-       agentx \
-       host/hr_device \
-       host/hr_disk \
-       host/hr_filesys \
-       host/hr_network \
-       host/hr_partition \
-       host/hr_proc \
-       host/hr_storage \
-       host/hr_system \
-       ieee802dot11 \
-       if-mib/ifXTable \
-       ip-mib/inetNetToMediaTable \
-       mibII/at \
-       mibII/icmp \
-       mibII/ifTable \
-       mibII/ip \
-       mibII/snmp_mib \
-       mibII/sysORTable \
-       mibII/system_mib \
-       mibII/tcp \
-       mibII/udp \
-       mibII/vacm_context \
-       mibII/vacm_vars \
-       snmpv3/snmpEngine \
-       snmpv3/snmpMPDStats \
-       snmpv3/usmConf \
-       snmpv3/usmStats \
-       snmpv3/usmUser \
-       tunnel \
-       ucd-snmp/disk \
-       ucd-snmp/dlmod \
-       ucd-snmp/extensible \
-       ucd-snmp/loadave \
-       ucd-snmp/memory \
-       ucd-snmp/pass \
-       ucd-snmp/pass_persist \
-       ucd-snmp/proc \
-       ucd-snmp/vmstat \
-       util_funcs \
-       utilities/execute \
-
-SNMP_MIB_MODULES_EXCLUDED = \
-       agent_mibs \
-       disman/event \
-       disman/schedule \
-       hardware \
-       host \
-       if-mib \
-       ip-mib \
-       mibII \
-       notification \
-       notification-log-mib \
-       snmpv3mibs \
-       target \
-       tcp-mib \
-       ucd_snmp \
-       udp-mib \
-       utilities \
-
-SNMP_TRANSPORTS_INCLUDED = Callback UDP Unix
-
-SNMP_TRANSPORTS_EXCLUDED = TCP TCPIPv6
-
-TARGET_CFLAGS += $(FPIC)
-TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny
-
-CONFIGURE_ARGS += \
-       --enable-mfd-rewrites \
-       --enable-shared \
-       --enable-static \
-       --with-endianness=$(if $(CONFIG_BIG_ENDIAN),big,little) \
-       --with-logfile=/var/log/snmpd.log \
-       --with-persistent-directory=/usr/lib/snmp/ \
-       --with-default-snmp-version=1 \
-       --with-sys-contact=root@localhost \
-       --with-sys-location=Unknown \
-       --enable-applications \
-       --disable-debugging \
-       --disable-manuals \
-       --disable-scripts \
-       --with-out-mib-modules="$(SNMP_MIB_MODULES_EXCLUDED)" \
-       --with-mib-modules="$(SNMP_MIB_MODULES_INCLUDED)" \
-       --with-out-transports="$(SNMP_TRANSPORTS_EXCLUDED)" \
-       --with-transports="$(SNMP_TRANSPORTS_INCLUDED)" \
-       --without-openssl \
-       --without-libwrap \
-       --without-mysql \
-       --without-rpm \
-       --without-zlib \
-       --with-nl \
-        $(call autoconf_bool,CONFIG_IPV6,ipv6) \
-       --disable-perl-cc-checks \
-       --disable-embedded-perl \
-       --without-perl-modules
-
-CONFIGURE_VARS += \
-       ac_cv_header_netlink_netlink_h=yes \
-       ac_cv_header_pcre_h=no \
-       netsnmp_cv_func_nl_connect_LIBS=-lnl-tiny \
-
-ifeq ($(CONFIG_IPV6),y)
-SNMP_TRANSPORTS_INCLUDED+= UDPIPv6
-endif
-
-TARGET_LDFLAGS += -L$(TOOLCHAIN_DIR)/usr/lib
-
-define Build/Compile
-       $(MAKE) -C $(PKG_BUILD_DIR) \
-               INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
-               LDFLAGS="$(TARGET_LDFLAGS) -lm -lc" \
-               all install
-endef
-
-define Build/InstallDev
-       $(INSTALL_DIR) $(2)/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/net-snmp-config $(2)/bin/
-       $(SED) 's,=/usr,=$(STAGING_DIR)/usr,g' $(2)/bin/net-snmp-config
-       $(INSTALL_DIR) $(STAGING_DIR)/usr/bin
-       $(LN) $(STAGING_DIR)/host/bin/net-snmp-config $(STAGING_DIR)/usr/bin/
-
-       $(INSTALL_DIR) $(1)/usr/include
-       $(CP) $(PKG_INSTALL_DIR)/usr/include/net-snmp $(1)/usr/include/
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnetsnmp{,agent,helpers,mibs}.{a,so*} $(1)/usr/lib/
-endef
-
-define Package/libnetsnmp/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnetsnmp{,agent,helpers,mibs}.so.* $(1)/usr/lib/
-endef
-
-define Package/snmp-mibs/install
-       $(INSTALL_DIR) $(1)/usr/share/snmp/mibs
-       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/snmp/mibs/* $(1)/usr/share/snmp/mibs/
-endef
-
-define Package/snmp-utils/install
-       $(INSTALL_DIR) $(1)/usr/bin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/snmp{get,set,status,test,trap,walk} $(1)/usr/bin/
-endef
-
-define Package/snmpd/conffiles
-/etc/config/snmpd
-endef
-
-define Package/snmpd/install
-       $(INSTALL_DIR) $(1)/etc/config
-       $(INSTALL_DATA) ./files/snmpd.conf $(1)/etc/config/snmpd
-       $(INSTALL_DIR) $(1)/etc/snmp
-       $(LN) /var/run/snmpd.conf $(1)/etc/snmp/
-       $(INSTALL_DIR) $(1)/etc/init.d
-       $(INSTALL_BIN) ./files/snmpd.init $(1)/etc/init.d/snmpd
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/snmpd $(1)/usr/sbin/snmpd
-endef
-
-define Package/snmptrapd/install
-       $(INSTALL_DIR) $(1)/etc/init.d
-       $(INSTALL_BIN) ./files/snmptrapd.init $(1)/etc/init.d/snmptrapd
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnetsnmptrapd.so.* $(1)/usr/lib/
-       $(INSTALL_DIR) $(1)/usr/sbin
-       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/snmptrapd $(1)/usr/sbin/
-endef
-
-$(eval $(call BuildPackage,libnetsnmp))
-$(eval $(call BuildPackage,snmp-mibs))
-$(eval $(call BuildPackage,snmp-utils))
-$(eval $(call BuildPackage,snmpd))
-$(eval $(call BuildPackage,snmpd-static))
-$(eval $(call BuildPackage,snmptrapd))
diff --git a/package/network/net-snmp/files/snmpd.conf b/package/network/net-snmp/files/snmpd.conf
deleted file mode 100644 (file)
index e18864d..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-config agent
-       option agentaddress UDP:161,UDP6:161
-
-config agentx
-       option agentxsocket /var/run/agentx.sock
-
-config com2sec public
-       option secname ro
-       option source default
-       option community public
-
-config com2sec private
-       option secname rw
-       option source localhost
-       option community private
-
-config com2sec6 public6
-       option secname ro
-       option source default
-       option community public
-
-config com2sec6 private6
-       option secname rw
-       option source localhost
-       option community private
-
-config group public_v1
-       option group public
-       option version v1
-       option secname ro
-
-config group public_v2c
-       option group public
-       option version v2c
-       option secname ro
-
-config group public_usm
-       option group public
-       option version usm
-       option secname ro
-
-config group private_v1
-       option group private
-       option version v1
-       option secname rw
-
-config group private_v2c
-       option group private
-       option version v2c
-       option secname rw
-
-config group private_usm
-       option group private
-       option version usm
-       option secname rw
-
-config view all
-       option viewname all
-       option type included
-       option oid .1
-
-config access public_access
-       option group public
-       option context none
-       option version any
-       option level noauth
-       option prefix exact
-       option read all
-       option write none
-       option notify none
-
-config access private_access
-       option group private
-       option context none
-       option version any
-       option level noauth
-       option prefix exact
-       option read all
-       option write all
-       option notify all
-
-config system
-       option sysLocation      'office'
-       option sysContact       'bofh@example.com'
-       option sysName          'HeartOfGold'
-#      option sysServices      72
-#      option sysDescr         'adult playground'
-#      option sysObjectID      '1.2.3.4'
-
-config exec
-       option name     filedescriptors
-       option prog     /bin/cat
-       option args     /proc/sys/fs/file-nr
-#      option miboid   1.2.3.4
-
-config engineid
-#      option engineid 'LEDE'
-       option engineidtype '3'
-       option engineidnic 'eth0'
-
-#config trapcommunity 'trapcommunity'
-#      option community 'public'
-
-#config trapsink
-#      option host 'nms.system.com'
-#      option community 'public'
-#      option port '162'
-
-#config trap2sink
-#      option host 'nms.system.com'
-#      option community 'secret'
-#      option port '162'
-
-#config informsink
-#      option host 'nms.sytem.com'
-#      option community 'public'
-#      option port '162'
-
-#config authtrapenable 'authtrapenable'
-#      option enable '1'
-
-#config v1trapaddress 'v1trapaddress'
-#      option host '1.2.3.4'
-
-#config trapsess 'trapsess'
-#      option trapsess '-v 3 -e 0x80001f88808c18d3f7b0000 -u trapuser -a MD5 -A administrator -l authPriv -x DES -X rootpasswd udp:127.0.0.1:162'
-
-config snmpd general
-       option enabled '1'
-#      list network 'wan'
diff --git a/package/network/net-snmp/files/snmpd.init b/package/network/net-snmp/files/snmpd.init
deleted file mode 100644 (file)
index a765317..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-#!/bin/sh /etc/rc.common
-# Copyright (C) 2008 OpenWrt.org
-START=50
-
-USE_PROCD=1
-PROG="/usr/sbin/snmpd"
-
-CONFIGFILE="/var/run/snmpd.conf"
-
-snmpd_agent_add() {
-       local cfg="$1"
-
-       config_get agentaddress "$cfg" agentaddress
-       [ -n "$agentaddress" ] || return 0
-       echo "agentaddress $agentaddress" >> $CONFIGFILE
-}
-
-snmpd_agentx_add() {
-       local cfg="$1"
-       echo "master agentx" >> $CONFIGFILE
-       config_get agentxsocket "$cfg" agentxsocket
-       [ -n "$agentxsocket" ] && echo "agentXSocket $agentxsocket" >> $CONFIGFILE
-}
-
-snmpd_system_add() {
-       local cfg="$1"
-       config_get syslocation "$cfg" sysLocation
-       [ -n "$syslocation" ] && echo "sysLocation $syslocation" >> $CONFIGFILE
-       config_get syscontact "$cfg" sysContact
-       [ -n "$syscontact" ] && echo "sysContact $syscontact" >> $CONFIGFILE
-       config_get sysname "$cfg" sysName
-       [ -n "$sysname" ] && echo "sysName $sysname" >> $CONFIGFILE
-       config_get sysservice "$cfg" sysService
-       [ -n "$sysservice" ] && echo "sysService $sysservice" >> $CONFIGFILE
-       config_get sysdescr "$cfg" sysDescr
-       [ -n "$sysdescr" ] && echo "sysDescr $sysdescr" >> $CONFIGFILE
-       config_get sysobjectid "$cfg" sysObjectID
-       [ -n "$sysobjectid" ] && echo "sysObjectID $sysobjectid" >> $CONFIGFILE
-}
-
-snmpd_com2sec_add() {
-       local cfg="$1"
-       config_get secname "$cfg" secname
-       [ -n "$secname" ] || return 0
-       config_get source "$cfg" source
-       [ -n "$source" ] || return 0
-       config_get community "$cfg" community
-       [ -n "$community" ] || return 0
-       echo "com2sec $secname $source $community" >> $CONFIGFILE
-}
-
-snmpd_com2sec6_add() {
-       local cfg="$1"
-       config_get secname "$cfg" secname
-       [ -n "$secname" ] || return 0
-       config_get source "$cfg" source
-       [ -n "$source" ] || return 0
-       config_get community "$cfg" community
-       [ -n "$community" ] || return 0
-       echo "com2sec6 $secname $source $community" >> $CONFIGFILE
-}
-
-snmpd_group_add() {
-       local cfg="$1"
-       config_get group "$cfg" group
-       [ -n "$group" ] || return 0
-       config_get version "$cfg" version
-       [ -n "$version" ] || return 0
-       config_get secname "$cfg" secname
-       [ -n "$secname" ] || return 0
-       echo "group $group $version $secname" >> $CONFIGFILE
-}
-
-snmpd_view_add() {
-       local cfg="$1"
-       config_get viewname "$cfg" viewname
-       [ -n "$viewname" ] || return 0
-       config_get type "$cfg" type
-       [ -n "$type" ] || return 0
-       config_get oid "$cfg" oid
-       [ -n "$oid" ] || return 0
-       # optional mask
-       config_get mask "$cfg" mask
-       echo "view $viewname $type $oid $mask" >> $CONFIGFILE
-}
-
-snmpd_access_add() {
-       local cfg="$1"
-       config_get group "$cfg" group
-       [ -n "$group" ] || return 0
-       config_get context "$cfg" context
-       [ -n $context ] || return 0
-       [ "$context" == "none" ] && context='""'
-       config_get version "$cfg" version
-       [ -n "$version" ] || return 0
-       config_get level "$cfg" level
-       [ -n "$level" ] || return 0
-       config_get prefix "$cfg" prefix
-       [ -n "$prefix" ] || return 0
-       config_get read "$cfg" read
-       [ -n "$read" ] || return 0
-       config_get write "$cfg" write
-       [ -n "$write" ] || return 0
-       config_get notify "$cfg" notify
-       [ -n "$notify" ] || return 0
-       echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE
-}
-
-snmpd_trap_hostname_add() {
-       local cfg="$1"
-       config_get hostname "$cfg" HostName
-       config_get port "$cfg" Port
-       config_get community "$cfg" Community
-       config_get type "$cfg" Type
-       echo "$type $hostname $community $port" >> $CONFIGFILE
-}
-
-snmpd_trap_ip_add() {
-       local cfg="$1"
-       config_get host_ip "$cfg" HostIP
-       config_get port "$cfg" Port
-       config_get community "$cfg" Community
-       config_get type "$cfg" Type
-       echo "$type $host_ip $community $port" >> $CONFIGFILE
-}
-
-snmpd_access_default_add() {
-       local cfg="$1"
-       config_get mode "$cfg" Mode
-       config_get community "$cfg" CommunityName
-       config_get oidrestrict "$cfg" RestrictOID
-       config_get oid "$cfg" RestrictedOID
-       echo -n "$mode $community default" >> $CONFIGFILE
-       [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
-       [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
-}
-
-snmpd_access_HostName_add() {
-       local cfg="$1"
-       config_get hostname "$cfg" HostName
-       config_get mode "$cfg" Mode
-       config_get community "$cfg" CommunityName
-       config_get oidrestrict "$cfg" RestrictOID
-       config_get oid "$cfg" RestrictedOID
-       echo -n "$mode $community $hostname" >> $CONFIGFILE
-       [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
-       [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
-}
-
-snmpd_access_HostIP_add() {
-       local cfg="$1"
-       config_get host_ip "$cfg" HostIP
-       config_get ip_mask "$cfg" IPMask
-       config_get mode "$cfg" Mode
-       config_get community "$cfg" CommunityName
-       config_get oidrestrict "$cfg" RestrictOID
-       config_get oid "$cfg" RestrictedOID
-       echo -n "$mode $community $host_ip/$ip_mask" >> $CONFIGFILE
-       [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
-       [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
-}
-
-snmpd_pass_add() {
-       local cfg="$1"
-       local pass='pass'
-
-       config_get miboid "$cfg" miboid
-       [ -n "$miboid" ] || return 0
-       config_get prog "$cfg" prog
-       [ -n "$prog" ] || return 0
-       config_get_bool persist "$cfg" persist 0
-       [ $persist -ne 0 ] && pass='pass_persist'
-       config_get priority "$cfg" priority
-       priority=${priority:+-p $priority}
-       echo "$pass $priority $miboid $prog" >> $CONFIGFILE
-}
-
-snmpd_exec_add() {
-       local cfg="$1"
-
-       config_get name "$cfg" name
-       [ -n "$name" ] || return 0
-       config_get prog "$cfg" prog
-       [ -n "$prog" ] || return 0
-       config_get args "$cfg" args
-       config_get miboid "$cfg" miboid
-       echo "exec $miboid $name $prog $args" >> $CONFIGFILE
-}
-
-snmpd_extend_add() {
-       local cfg="$1"
-
-       config_get name "$cfg" name
-       [ -n "$name" ] || return 0
-       config_get prog "$cfg" prog
-       [ -n "$prog" ] || return 0
-       config_get args "$cfg" args
-       config_get miboid "$cfg" miboid
-       echo "extend $miboid $name $prog $args" >> $CONFIGFILE
-}
-
-snmpd_disk_add() {
-        local cfg="$1"
-        local disk='disk'
-
-        config_get partition "$cfg" partition
-        [ -n "$partition" ] || return 0
-        config_get size "$cfg" size
-        [ -n "$size" ] || return 0
-        echo "$disk $partition $size" >> $CONFIGFILE
-}
-
-snmpd_engineid_add() {
-       local cfg="$1"
-
-       config_get engineid "$cfg" engineid
-       [ -n "$engineid" ] && echo "engineID $engineid" >> $CONFIGFILE
-       config_get engineidtype "$cfg" engineidtype
-       [ "$engineidtype" -ge 1 -a "$engineidtype" -le 3 ] && \
-               echo "engineIDType $engineidtype" >> $CONFIGFILE
-       config_get engineidnic "$cfg" engineidnic
-       [ -n "$engineidnic" ] && echo "engineIDNic $engineidnic" >> $CONFIGFILE
-}
-
-snmpd_sink_add() {
-       local cfg="$1"
-       local section="$2"
-       local community
-       local port
-       local host
-
-       config_get host "$cfg" host
-       [ -n "section" -a -n "$host" ] || return 0
-       # optional community
-       config_get community "$cfg" community
-       # optional port
-       config_get port "$cfg" port
-       port=${port:+:$port}
-       echo "$section $host$port $community" >> $CONFIGFILE
-}
-
-append_parm() {
-       local section="$1"
-       local option="$2"
-       local switch="$3"
-       local _loctmp
-       config_get _loctmp "$section" "$option"
-       [ -z "$_loctmp" ] && return 0
-       echo "$switch $_loctmp" >> $CONFIGFILE
-}
-
-append_authtrapenable() {
-       local section="$1"
-       local option="$2"
-       local switch="$3"
-       local _loctmp
-       config_get_bool _loctmp "$section" "$option"
-       [ -z "$_loctmp" ] && return 0
-       [ "$_loctmp" -gt 0 ] && echo "$switch $_loctmp" >> $CONFIGFILE
-}
-
-snmpd_setup_fw_rules() {
-       local net="$1"
-       local zone
-
-       zone=$(fw3 -q network "$net" 2>/dev/null)
-
-       local handled_zone
-       for handled_zone in $HANDLED_SNMP_ZONES; do
-               [ "$handled_zone" = "$zone" ] && return
-       done
-
-       json_add_object ""
-       json_add_string type rule
-       json_add_string src "$zone"
-       json_add_string proto udp
-       json_add_string dest_port 161
-       json_add_string target ACCEPT
-       json_close_object
-
-       HANDLED_SNMP_ZONES="$HANDLED_SNMP_ZONES $zone"
-}
-
-start_service() {
-       [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
-
-       config_load snmpd
-
-       config_get_bool snmp_enabled general enabled 1
-       [ "$snmp_enabled" -eq 0 ] && return
-
-       procd_open_instance
-
-       config_foreach snmpd_agent_add agent
-       config_foreach snmpd_agentx_add agentx
-       config_foreach snmpd_system_add system
-       config_foreach snmpd_com2sec_add com2sec
-       config_foreach snmpd_com2sec6_add com2sec6
-       config_foreach snmpd_group_add group
-       config_foreach snmpd_view_add view
-       config_foreach snmpd_access_add access
-       config_foreach snmpd_trap_hostname_add trap_HostName
-       config_foreach snmpd_trap_ip_add trap_HostIP
-       config_foreach snmpd_access_default_add access_default
-       config_foreach snmpd_access_HostName_add access_HostName
-       config_foreach snmpd_access_HostIP_add access_HostIP
-       config_foreach snmpd_pass_add pass
-       config_foreach snmpd_exec_add exec
-       config_foreach snmpd_extend_add extend
-       config_foreach snmpd_disk_add disk
-       config_foreach snmpd_engineid_add engineid
-       append_parm trapcommunity community trapcommunity
-       config_foreach snmpd_sink_add trapsink trapsink
-       config_foreach snmpd_sink_add trap2sink trap2sink
-       config_foreach snmpd_sink_add informsink informsink
-       append_authtrapenable authtrapenable enable authtrapenable
-       append_parm v1trapaddress host v1trapaddress
-       append_parm trapsess trapsess trapsess
-
-       procd_set_param command $PROG -Lf /dev/null -f
-       procd_set_param file $CONFIGFILE
-       procd_set_param respawn
-
-       for iface in $(ls /sys/class/net 2>/dev/null); do
-               procd_append_param netdev "$iface"
-       done
-
-       procd_open_data
-
-       json_add_array firewall
-       config_list_foreach general network snmpd_setup_fw_rules
-       json_close_array
-
-       procd_close_data
-
-       procd_close_instance
-}
-
-stop_service() {
-       [ -f "$CONFIGFILE" ] || return
-       rm -f "$CONFIGFILE"
-       procd_set_config_changed firewall
-}
-
-service_triggers(){
-       local script=$(readlink "$initscript")
-       local name=$(basename ${script:-$initscript})
-
-       procd_open_trigger
-       procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload
-       procd_close_trigger
-
-       procd_add_reload_trigger 'snmpd'
-}
-
-service_started() {
-       [ "$snmp_enabled" -eq 0 ] && return
-       procd_set_config_changed firewall
-}
diff --git a/package/network/net-snmp/files/snmptrapd.init b/package/network/net-snmp/files/snmptrapd.init
deleted file mode 100644 (file)
index 43278a2..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/sh /etc/rc.common
-
-START=50
-
-USE_PROCD=1
-PROG="/usr/sbin/snmptrapd"
-
-start_service() {
-       procd_open_instance
-
-       procd_set_param command $PROG -Lf /dev/null -f
-       procd_set_param respawn
-
-       procd_close_instance
-}
diff --git a/package/network/net-snmp/patches/000-cross-compile.patch b/package/network/net-snmp/patches/000-cross-compile.patch
deleted file mode 100644 (file)
index 730bdbc..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-From: Jo-Philipp Wich <jo@mein.io>
-Date: Fri, 6 Jan 2017 13:41:00 +0100
-Subject: [PATCH] configure: allow overriding hardcoded /usr/include/libnl3
-
-In a cross-compile setting we do not want to probe the host systems
-/usr/include path, therfore allow to disable this include path by passing
-ac_cv_header_netlink_netlink_h=yes to configure.
-
-Also disable the testing for libraries providing nl_connect when
-netsnmp_cv_func_nl_connect_LIBS is predefined since the proprietary
-NETSNMP_SEARCH_LIBS() macro will clobber the internal link flags upon
-encountering predefined cache variables, causing all subsequent configure
-link tests to fail due to a stray "no" word getting passed to the linker.
-
-Signed-off-by: Jo-Philipp Wich <jo@mein.io>
---- a/configure.d/config_os_libs2
-+++ b/configure.d/config_os_libs2
-@@ -254,14 +254,22 @@ if test "x$with_nl" != "xno"; then
-         )
-         netsnmp_save_CPPFLAGS="$CPPFLAGS"
--        CPPFLAGS="${LIBNL3_CFLAGS} $CPPFLAGS"
--        NETSNMP_SEARCH_LIBS(nl_connect, nl-3,
--            [AC_CHECK_HEADERS(netlink/netlink.h)
--            EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES ${LIBNL3_CFLAGS}"],
--            [CPPFLAGS="$netsnmp_save_CPPFLAGS"], [], [], [LMIBLIBS])
-+        netsnmp_netlink_include_flags=""
-         if test "x$ac_cv_header_netlink_netlink_h" != xyes; then
--            NETSNMP_SEARCH_LIBS(nl_connect, nl, [
--                AC_CHECK_HEADERS(netlink/netlink.h)], [], [], LMIBLIBS)
-+            netsnmp_netlink_include_flags="-I/usr/include/libnl3"
-+        fi
-+        CPPFLAGS="$netsnmp_netlink_include_flags $CPPFLAGS"
-+        if test "x$netsnmp_cv_func_nl_connect_LIBS" = x; then
-+            NETSNMP_SEARCH_LIBS(nl_connect, nl-3,
-+                [AC_CHECK_HEADERS(netlink/netlink.h)
-+                EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES $netsnmp_netlink_include_flags"],
-+                [CPPFLAGS="$netsnmp_save_CPPFLAGS"], [], [], [LMIBLIBS])
-+            if test "x$ac_cv_header_netlink_netlink_h" != xyes; then
-+                NETSNMP_SEARCH_LIBS(nl_connect, nl, [
-+                    AC_CHECK_HEADERS(netlink/netlink.h)], [], [], LMIBLIBS)
-+            fi
-+        else
-+            LMIBLIBS="$LMIBLIBS $netsnmp_cv_func_nl_connect_LIBS"
-         fi
-         if test "x$ac_cv_header_netlink_netlink_h" = xyes; then
-             AC_EGREP_HEADER([nl_socket_free], [netlink/socket.h],
diff --git a/package/network/net-snmp/patches/100-debian-statistics.patch b/package/network/net-snmp/patches/100-debian-statistics.patch
deleted file mode 100644 (file)
index 2b24d94..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/agent/mibgroup/mibII/interfaces.c
-+++ b/agent/mibgroup/mibII/interfaces.c
-@@ -1588,6 +1588,10 @@ Interface_Scan_Init(void)
-         struct ifnet   *nnew;
-         char           *stats, *ifstart = line;
-+      /* Ignore interfaces with no statistics. */
-+      if (strstr(line, "No statistics available."))
-+          continue;
-+
-         if (line[strlen(line) - 1] == '\n')
-             line[strlen(line) - 1] = '\0';
-@@ -1620,7 +1624,7 @@ Interface_Scan_Init(void)
-                                                &coll) != 5)) {
-             if ((scan_line_to_use == scan_line_2_2)
-                 && !strstr(line, "No statistics available"))
--                snmp_log(LOG_ERR,
-+                snmp_log(LOG_DEBUG,
-                          "/proc/net/dev data format error, line ==|%s|",
-                          line);
-             continue;
diff --git a/package/network/net-snmp/patches/110-debian-makefiles.patch b/package/network/net-snmp/patches/110-debian-makefiles.patch
deleted file mode 100644 (file)
index 7b71ed0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -uNr a/local/Makefile.in b/local/Makefile.in
---- a/local/Makefile.in        2014-02-20 08:36:42.000000000 +0800
-+++ b/local/Makefile.in        2014-05-27 13:21:34.245223503 +0800
-@@ -101,7 +101,7 @@
- mib2c.made: $(srcdir)/mib2c
-       if test "x$(PERL)" != "x" ; then \
--        $(PERL) -p -e 's%^#!.*/perl.*%#!$(PERL)%;s#/usr/local/share/snmp#$(snmplibdir)#;' ${srcdir}/mib2c > mib2c.made; \
-+        $(PERL) -p -e 's%^#!.*/perl.*%#!$(PERL)%;s#/usr/local/share/snmp#$(snmplibdir)#;s#/usr/local/etc/snmp#$(SNMPCONFPATH)#;' ${srcdir}/mib2c > mib2c.made; \
-       else \
-         touch mib2c.made; \
-         fi
-diff -uNr a/Makefile.top b/Makefile.top
---- a/Makefile.top     2014-02-20 08:36:42.000000000 +0800
-+++ b/Makefile.top     2014-05-27 13:26:53.023737120 +0800
-@@ -28,6 +28,7 @@
- snmplibdir    = $(datadir)/snmp
- mibdir                = $(snmplibdir)/mibs
- persistentdir = @PERSISTENT_DIRECTORY@
-+sysconfdir    = @sysconfdir@
- DESTDIR         = @INSTALL_PREFIX@
- INSTALL_PREFIX  = $(DESTDIR)
-diff -uNr a/mibs/Makefile.in b/mibs/Makefile.in
---- a/mibs/Makefile.in 2014-02-20 08:36:42.000000000 +0800
-+++ b/mibs/Makefile.in 2014-05-27 13:25:07.151988585 +0800
-@@ -47,11 +47,15 @@
- UCDMIBS = UCD-SNMP-MIB.txt UCD-DEMO-MIB.txt UCD-IPFWACC-MIB.txt \
-       UCD-DLMOD-MIB.txt UCD-DISKIO-MIB.txt
-+EXTRAMIBS = BGP4-MIB.txt BRIDGE-MIB.txt GNOME-SMI.txt OSPF-MIB.txt \
-+      OSPF-TRAP-MIB.txt RIPv2-MIB.txt SOURCE-ROUTING-MIB.txt \
-+      LM-SENSORS-MIB.txt
-+
- DEFAULTMIBS = @default_mibs_install@
- MIBS  = $(V1MIBS) $(V2MIBS) $(V3MIBS) $(RFCMIBS) \
-       $(AGENTMIBS) $(IANAMIBS) \
--      $(NETSNMPMIBS) $(UCDMIBS) $(DEFAULTMIBS)
-+      $(NETSNMPMIBS) $(UCDMIBS) $(DEFAULTMIBS) $(EXTRAMIBS)
- all: standardall
diff --git a/package/network/net-snmp/patches/120-debian-searchdirs.patch b/package/network/net-snmp/patches/120-debian-searchdirs.patch
deleted file mode 100644 (file)
index b5e377f..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/local/mib2c
-+++ b/local/mib2c
-@@ -61,8 +61,9 @@ $currentlevel = -1;
- if($ENV{MIB2C_DIR}) {
-    push @def_search_dirs, split(/:/, $ENV{MIB2C_DIR});
- }
--push @def_search_dirs, "/usr/local/share/snmp/";
--push @def_search_dirs, "/usr/local/share/snmp/mib2c-data";
-+push @def_search_dirs, "/etc/snmp/";
-+push @def_search_dirs, "/usr/share/snmp/";
-+push @def_search_dirs, "/usr/share/snmp/mib2c-data";
- push @def_search_dirs, "./mib2c-conf.d";
- sub usage {
diff --git a/package/network/net-snmp/patches/130-debian-extramibs.patch b/package/network/net-snmp/patches/130-debian-extramibs.patch
deleted file mode 100644 (file)
index 48fb907..0000000
+++ /dev/null
@@ -1,5183 +0,0 @@
---- /dev/null
-+++ b/mibs/BGP4-MIB.txt
-@@ -0,0 +1,929 @@
-+    BGP4-MIB DEFINITIONS ::= BEGIN
-+
-+        IMPORTS
-+            MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
-+            IpAddress, Integer32, Counter32, Gauge32, mib-2
-+                FROM SNMPv2-SMI
-+            MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
-+                FROM SNMPv2-CONF;
-+
-+        bgp MODULE-IDENTITY
-+            LAST-UPDATED "9902100000Z"
-+            ORGANIZATION "IETF IDR Working Group"
-+            CONTACT-INFO "E-mail:  idr@merit.net
-+
-+                          Susan Hares  (Editor)
-+                          Merit Network
-+                          4251 Plymouth Road
-+                          Suite C
-+                          Ann Arbor, MI 48105-2785
-+                          Tel: +1 734 936 2095
-+                          Fax: +1 734 647 3185
-+                          E-mail: skh@merit.edu
-+
-+                          Jeff Johnson (Editor)
-+                          RedBack Networks, Inc.
-+                          1389 Moffett Park Drive
-+                          Sunnyvale, CA  94089-1134
-+                          Tel: +1 408 548 3516
-+                          Fax: +1 408 548 3599
-+                          E-mail: jeff@redback.com"
-+            DESCRIPTION
-+                    "The MIB module for BGP-4."
-+            REVISION    "9902100000Z"
-+            DESCRIPTION
-+                    "Corrected duplicate OBJECT IDENTIFIER
-+                     assignment in the conformance information."
-+            REVISION    "9601080000Z"
-+            DESCRIPTION
-+                    "1) Fixed the definitions of the traps to
-+                     make them equivalent to their initial
-+                     definition in RFC 1269.
-+                     2) Added compliance and conformance info."
-+            ::= { mib-2 15 }
-+
-+        bgpVersion OBJECT-TYPE
-+            SYNTAX     OCTET STRING (SIZE (1..255))
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "Vector of supported BGP protocol version
-+                    numbers.  Each peer negotiates the version
-+                    from this vector.  Versions are identified
-+                    via the string of bits contained within this
-+                    object.  The first octet contains bits 0 to
-+                    7, the second octet contains bits 8 to 15,
-+                    and so on, with the most significant bit
-+                    referring to the lowest bit number in the
-+                    octet (e.g., the MSB of the first octet
-+                    refers to bit 0).  If a bit, i, is present
-+                    and set, then the version (i+1) of the BGP
-+                    is supported."
-+            ::= { bgp 1 }
-+
-+        bgpLocalAs OBJECT-TYPE
-+            SYNTAX     INTEGER (0..65535)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The local autonomous system number."
-+            ::= { bgp 2 }
-+
-+
-+
-+        -- BGP Peer table.  This table contains, one entry per BGP
-+        -- peer, information about the BGP peer.
-+
-+        bgpPeerTable OBJECT-TYPE
-+            SYNTAX     SEQUENCE OF BgpPeerEntry
-+            MAX-ACCESS not-accessible
-+            STATUS     current
-+            DESCRIPTION
-+                    "BGP peer table.  This table contains,
-+                    one entry per BGP peer, information about the
-+                    connections with BGP peers."
-+            ::= { bgp 3 }
-+
-+        bgpPeerEntry OBJECT-TYPE
-+            SYNTAX     BgpPeerEntry
-+            MAX-ACCESS not-accessible
-+            STATUS     current
-+            DESCRIPTION
-+                    "Entry containing information about the
-+                    connection with a BGP peer."
-+            INDEX { bgpPeerRemoteAddr }
-+            ::= { bgpPeerTable 1 }
-+
-+        BgpPeerEntry ::= SEQUENCE {
-+                bgpPeerIdentifier
-+                    IpAddress,
-+                bgpPeerState
-+                    INTEGER,
-+                bgpPeerAdminStatus
-+                    INTEGER,
-+                bgpPeerNegotiatedVersion
-+                    Integer32,
-+                bgpPeerLocalAddr
-+                    IpAddress,
-+                bgpPeerLocalPort
-+                    INTEGER,
-+                bgpPeerRemoteAddr
-+                    IpAddress,
-+                bgpPeerRemotePort
-+                    INTEGER,
-+                bgpPeerRemoteAs
-+                    INTEGER,
-+                bgpPeerInUpdates
-+                    Counter32,
-+                bgpPeerOutUpdates
-+                    Counter32,
-+                bgpPeerInTotalMessages
-+                    Counter32,
-+                bgpPeerOutTotalMessages
-+                    Counter32,
-+                bgpPeerLastError
-+                    OCTET STRING,
-+                bgpPeerFsmEstablishedTransitions
-+                    Counter32,
-+                bgpPeerFsmEstablishedTime
-+                    Gauge32,
-+                bgpPeerConnectRetryInterval
-+                    INTEGER,
-+                bgpPeerHoldTime
-+                    INTEGER,
-+                bgpPeerKeepAlive
-+                    INTEGER,
-+                bgpPeerHoldTimeConfigured
-+                    INTEGER,
-+                bgpPeerKeepAliveConfigured
-+                    INTEGER,
-+                bgpPeerMinASOriginationInterval
-+                    INTEGER,
-+                bgpPeerMinRouteAdvertisementInterval
-+                    INTEGER,
-+                bgpPeerInUpdateElapsedTime
-+                    Gauge32
-+                }
-+
-+        bgpPeerIdentifier OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The BGP Identifier of this entry's BGP peer."
-+            ::= { bgpPeerEntry 1 }
-+
-+        bgpPeerState OBJECT-TYPE
-+            SYNTAX     INTEGER {
-+                                idle(1),
-+                                connect(2),
-+                                active(3),
-+                                opensent(4),
-+                                openconfirm(5),
-+                                established(6)
-+                       }
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The BGP peer connection state."
-+            ::= { bgpPeerEntry 2 }
-+
-+        bgpPeerAdminStatus OBJECT-TYPE
-+            SYNTAX     INTEGER {
-+                                stop(1),
-+                                start(2)
-+                       }
-+            MAX-ACCESS read-write
-+            STATUS     current
-+            DESCRIPTION
-+                    "The desired state of the BGP connection.  A
-+                    transition from 'stop' to 'start' will cause
-+                    the BGP Start Event to be generated.  A
-+                    transition from 'start' to 'stop' will cause
-+                    the BGP Stop Event to be generated.  This
-+                    parameter can be used to restart BGP peer
-+                    connections.  Care should be used in providing
-+                    write access to this object without adequate
-+                    authentication."
-+            ::= { bgpPeerEntry 3 }
-+
-+        bgpPeerNegotiatedVersion OBJECT-TYPE
-+            SYNTAX     Integer32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The negotiated version of BGP running between
-+                    the two peers."
-+            ::= { bgpPeerEntry 4 }
-+
-+        bgpPeerLocalAddr OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The local IP address of this entry's BGP
-+                    connection."
-+            ::= { bgpPeerEntry 5 }
-+
-+        bgpPeerLocalPort OBJECT-TYPE
-+            SYNTAX     INTEGER (0..65535)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The local port for the TCP connection between
-+                    the BGP peers."
-+            ::= { bgpPeerEntry 6 }
-+
-+        bgpPeerRemoteAddr OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The remote IP address of this entry's BGP
-+                    peer."
-+            ::= { bgpPeerEntry 7 }
-+
-+        bgpPeerRemotePort OBJECT-TYPE
-+            SYNTAX     INTEGER (0..65535)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The remote port for the TCP connection between
-+                    the BGP peers.  Note that the objects
-+                    bgpPeerLocalAddr, bgpPeerLocalPort,
-+                    bgpPeerRemoteAddr and bgpPeerRemotePort
-+                    provide the appropriate reference to the
-+                    standard MIB TCP connection table."
-+            ::= { bgpPeerEntry 8 }
-+
-+        bgpPeerRemoteAs OBJECT-TYPE
-+            SYNTAX     INTEGER (0..65535)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The remote autonomous system number."
-+            ::= { bgpPeerEntry 9 }
-+
-+        bgpPeerInUpdates OBJECT-TYPE
-+            SYNTAX     Counter32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The number of BGP UPDATE messages received on
-+                    this connection.  This object should be
-+                    initialized to zero (0) when the connection is
-+                    established."
-+            ::= { bgpPeerEntry 10 }
-+
-+        bgpPeerOutUpdates OBJECT-TYPE
-+            SYNTAX     Counter32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The number of BGP UPDATE messages transmitted
-+                    on this connection.  This object should be
-+                    initialized to zero (0) when the connection is
-+                    established."
-+            ::= { bgpPeerEntry 11 }
-+
-+        bgpPeerInTotalMessages OBJECT-TYPE
-+            SYNTAX     Counter32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The total number of messages received from the
-+                    remote peer on this connection.  This object
-+                    should be initialized to zero when the
-+                    connection is established."
-+            ::= { bgpPeerEntry 12 }
-+
-+        bgpPeerOutTotalMessages OBJECT-TYPE
-+            SYNTAX     Counter32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The total number of messages transmitted to
-+                    the remote peer on this connection.  This object
-+                    should be initialized to zero when the
-+                    connection is established."
-+            ::= { bgpPeerEntry 13 }
-+
-+        bgpPeerLastError OBJECT-TYPE
-+            SYNTAX     OCTET STRING (SIZE (2))
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The last error code and subcode seen by this
-+                    peer on this connection.  If no error has
-+                    occurred, this field is zero.  Otherwise, the
-+                    first byte of this two byte OCTET STRING
-+                    contains the error code, and the second byte
-+                    contains the subcode."
-+            ::= { bgpPeerEntry 14 }
-+
-+        bgpPeerFsmEstablishedTransitions OBJECT-TYPE
-+            SYNTAX     Counter32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The total number of times the BGP FSM
-+                    transitioned into the established state."
-+            ::= { bgpPeerEntry 15 }
-+
-+        bgpPeerFsmEstablishedTime OBJECT-TYPE
-+            SYNTAX     Gauge32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "This timer indicates how long (in seconds) this
-+                    peer has been in the Established state or how long
-+                    since this peer was last in the Established state.
-+                    It is set to zero when a new peer is configured or
-+                    the router is booted."
-+            ::= { bgpPeerEntry 16 }
-+
-+        bgpPeerConnectRetryInterval OBJECT-TYPE
-+            SYNTAX     INTEGER (1..65535)
-+            MAX-ACCESS read-write
-+            STATUS     current
-+            DESCRIPTION
-+                    "Time interval in seconds for the ConnectRetry
-+                    timer.  The suggested value for this timer is
-+                    120 seconds."
-+            ::= { bgpPeerEntry 17 }
-+
-+        bgpPeerHoldTime OBJECT-TYPE
-+            SYNTAX     INTEGER  ( 0 | 3..65535 )
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "Time interval in seconds for the Hold Timer
-+                    established with the peer.  The value of this
-+                    object is calculated by this BGP speaker by
-+                    using the smaller of the value in
-+                    bgpPeerHoldTimeConfigured and the Hold Time
-+                    received in the OPEN message.  This value
-+                    must be at lease three seconds if it is not
-+                    zero (0) in which case the Hold Timer has
-+                    not been established with the peer, or, the
-+                    value of bgpPeerHoldTimeConfigured is zero (0)."
-+            ::= { bgpPeerEntry 18 }
-+
-+        bgpPeerKeepAlive OBJECT-TYPE
-+            SYNTAX     INTEGER ( 0 | 1..21845 )
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "Time interval in seconds for the KeepAlive
-+                    timer established with the peer.  The value of
-+                    this object is calculated by this BGP speaker
-+                    such that, when compared with bgpPeerHoldTime,
-+                    it has the same proportion as what
-+                    bgpPeerKeepAliveConfigured has when compared
-+                    with bgpPeerHoldTimeConfigured.  If the value
-+                    of this object is zero (0), it indicates that
-+                    the KeepAlive timer has not been established
-+                    with the peer, or, the value of
-+                    bgpPeerKeepAliveConfigured is zero (0)."
-+            ::= { bgpPeerEntry 19 }
-+
-+        bgpPeerHoldTimeConfigured OBJECT-TYPE
-+            SYNTAX     INTEGER ( 0 | 3..65535 )
-+            MAX-ACCESS read-write
-+            STATUS     current
-+            DESCRIPTION
-+                    "Time interval in seconds for the Hold Time
-+                    configured for this BGP speaker with this peer.
-+                    This value is placed in an OPEN message sent to
-+                    this peer by this BGP speaker, and is compared
-+                    with the Hold Time field in an OPEN message
-+                    received from the peer when determining the Hold
-+                    Time (bgpPeerHoldTime) with the peer.  This value
-+                    must not be less than three seconds if it is not
-+                    zero (0) in which case the Hold Time is NOT to be
-+                    established with the peer.  The suggested value for
-+                    this timer is 90 seconds."
-+            ::= { bgpPeerEntry 20 }
-+
-+        bgpPeerKeepAliveConfigured OBJECT-TYPE
-+            SYNTAX     INTEGER ( 0 | 1..21845 )
-+            MAX-ACCESS read-write
-+            STATUS     current
-+            DESCRIPTION
-+                    "Time interval in seconds for the KeepAlive timer
-+                    configured for this BGP speaker with this peer.
-+                    The value of this object will only determine the
-+                    KEEPALIVE messages' frequency relative to the value
-+                    specified in bgpPeerHoldTimeConfigured; the actual
-+                    time interval for the KEEPALIVE messages is
-+                    indicated by bgpPeerKeepAlive.  A reasonable
-+                    maximum value for this timer would be configured to
-+                    be one third of that of bgpPeerHoldTimeConfigured.
-+                    If the value of this object is zero (0), no
-+                    periodical KEEPALIVE messages are sent to the peer
-+                    after the BGP connection has been established.  The
-+                    suggested value for this timer is 30 seconds."
-+            ::= { bgpPeerEntry 21 }
-+
-+        bgpPeerMinASOriginationInterval OBJECT-TYPE
-+            SYNTAX     INTEGER (1..65535)
-+            MAX-ACCESS read-write
-+            STATUS     current
-+            DESCRIPTION
-+                    "Time interval in seconds for the
-+                    MinASOriginationInterval timer.
-+                    The suggested value for this timer is 15 seconds."
-+            ::= { bgpPeerEntry 22 }
-+
-+        bgpPeerMinRouteAdvertisementInterval OBJECT-TYPE
-+            SYNTAX     INTEGER (1..65535)
-+            MAX-ACCESS read-write
-+            STATUS     current
-+            DESCRIPTION
-+                    "Time interval in seconds for the
-+                    MinRouteAdvertisementInterval timer.
-+                    The suggested value for this timer is 30 seconds."
-+            ::= { bgpPeerEntry 23 }
-+
-+        bgpPeerInUpdateElapsedTime OBJECT-TYPE
-+            SYNTAX     Gauge32
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "Elapsed time in seconds since the last BGP
-+                    UPDATE message was received from the peer.
-+                    Each time bgpPeerInUpdates is incremented,
-+                    the value of this object is set to zero (0)."
-+            ::= { bgpPeerEntry 24 }
-+
-+
-+
-+        bgpIdentifier OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The BGP Identifier of local system."
-+            ::= { bgp 4 }
-+
-+
-+
-+        -- Received Path Attribute Table.  This table contains,
-+        -- one entry per path to a network, path attributes
-+        -- received from all peers running BGP version 3 or less.
-+        -- This table is obsolete, having been replaced in
-+        -- functionality with the bgp4PathAttrTable.
-+
-+        bgpRcvdPathAttrTable OBJECT-TYPE
-+            SYNTAX     SEQUENCE OF BgpPathAttrEntry
-+            MAX-ACCESS not-accessible
-+            STATUS     obsolete
-+            DESCRIPTION
-+                    "The BGP Received Path Attribute Table contains
-+                    information about paths to destination networks
-+                    received from all peers running BGP version 3 or
-+                    less."
-+            ::= { bgp 5 }
-+
-+        bgpPathAttrEntry OBJECT-TYPE
-+            SYNTAX     BgpPathAttrEntry
-+            MAX-ACCESS not-accessible
-+            STATUS     obsolete
-+            DESCRIPTION
-+                    "Information about a path to a network."
-+            INDEX { bgpPathAttrDestNetwork,
-+                    bgpPathAttrPeer        }
-+            ::= { bgpRcvdPathAttrTable 1 }
-+
-+        BgpPathAttrEntry ::= SEQUENCE {
-+            bgpPathAttrPeer
-+                 IpAddress,
-+            bgpPathAttrDestNetwork
-+                 IpAddress,
-+            bgpPathAttrOrigin
-+                 INTEGER,
-+            bgpPathAttrASPath
-+                 OCTET STRING,
-+            bgpPathAttrNextHop
-+                 IpAddress,
-+            bgpPathAttrInterASMetric
-+                 Integer32
-+        }
-+
-+        bgpPathAttrPeer OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     obsolete
-+            DESCRIPTION
-+                    "The IP address of the peer where the path
-+                    information was learned."
-+            ::= { bgpPathAttrEntry 1 }
-+
-+        bgpPathAttrDestNetwork OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     obsolete
-+            DESCRIPTION
-+                    "The address of the destination network."
-+            ::= { bgpPathAttrEntry 2 }
-+
-+        bgpPathAttrOrigin OBJECT-TYPE
-+            SYNTAX     INTEGER {
-+                           igp(1),-- networks are interior
-+                           egp(2),-- networks learned via EGP
-+                           incomplete(3) -- undetermined
-+                       }
-+            MAX-ACCESS read-only
-+            STATUS     obsolete
-+            DESCRIPTION
-+                 "The ultimate origin of the path information."
-+            ::= { bgpPathAttrEntry 3 }
-+
-+        bgpPathAttrASPath OBJECT-TYPE
-+            SYNTAX     OCTET STRING (SIZE (2..255))
-+            MAX-ACCESS read-only
-+            STATUS     obsolete
-+            DESCRIPTION
-+                    "The set of ASs that must be traversed to reach
-+                    the network.  This object is probably best
-+                    represented as SEQUENCE OF INTEGER.  For SMI
-+                    compatibility, though, it is represented as
-+                    OCTET STRING.  Each AS is represented as a pair
-+                    of octets according to the following algorithm:
-+
-+                        first-byte-of-pair = ASNumber / 256;
-+                        second-byte-of-pair = ASNumber & 255;"
-+            ::= { bgpPathAttrEntry 4 }
-+
-+        bgpPathAttrNextHop OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     obsolete
-+            DESCRIPTION
-+                    "The address of the border router that should
-+                    be used for the destination network."
-+            ::= { bgpPathAttrEntry 5 }
-+
-+        bgpPathAttrInterASMetric OBJECT-TYPE
-+            SYNTAX     Integer32
-+            MAX-ACCESS read-only
-+            STATUS     obsolete
-+            DESCRIPTION
-+                    "The optional inter-AS metric.  If this
-+                    attribute has not been provided for this route,
-+                    the value for this object is 0."
-+            ::= { bgpPathAttrEntry 6 }
-+
-+
-+
-+        -- BGP-4 Received Path Attribute Table.  This table contains,
-+        -- one entry per path to a network, path attributes
-+        -- received from all peers running BGP-4.
-+
-+        bgp4PathAttrTable OBJECT-TYPE
-+            SYNTAX     SEQUENCE OF Bgp4PathAttrEntry
-+            MAX-ACCESS not-accessible
-+            STATUS     current
-+            DESCRIPTION
-+                    "The BGP-4 Received Path Attribute Table contains
-+                    information about paths to destination networks
-+                    received from all BGP4 peers."
-+            ::= { bgp 6 }
-+
-+        bgp4PathAttrEntry OBJECT-TYPE
-+            SYNTAX     Bgp4PathAttrEntry
-+            MAX-ACCESS not-accessible
-+            STATUS     current
-+            DESCRIPTION
-+                    "Information about a path to a network."
-+            INDEX { bgp4PathAttrIpAddrPrefix,
-+                    bgp4PathAttrIpAddrPrefixLen,
-+                    bgp4PathAttrPeer            }
-+            ::= { bgp4PathAttrTable 1 }
-+
-+        Bgp4PathAttrEntry ::= SEQUENCE {
-+            bgp4PathAttrPeer
-+                 IpAddress,
-+            bgp4PathAttrIpAddrPrefixLen
-+                 INTEGER,
-+            bgp4PathAttrIpAddrPrefix
-+                 IpAddress,
-+            bgp4PathAttrOrigin
-+                 INTEGER,
-+            bgp4PathAttrASPathSegment
-+                 OCTET STRING,
-+            bgp4PathAttrNextHop
-+                 IpAddress,
-+            bgp4PathAttrMultiExitDisc
-+                 INTEGER,
-+            bgp4PathAttrLocalPref
-+                 INTEGER,
-+            bgp4PathAttrAtomicAggregate
-+                 INTEGER,
-+            bgp4PathAttrAggregatorAS
-+                 INTEGER,
-+            bgp4PathAttrAggregatorAddr
-+                 IpAddress,
-+            bgp4PathAttrCalcLocalPref
-+                 INTEGER,
-+            bgp4PathAttrBest
-+                 INTEGER,
-+            bgp4PathAttrUnknown
-+                 OCTET STRING
-+        }
-+
-+        bgp4PathAttrPeer OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The IP address of the peer where the path
-+                    information was learned."
-+            ::= { bgp4PathAttrEntry 1 }
-+        bgp4PathAttrIpAddrPrefixLen OBJECT-TYPE
-+            SYNTAX     INTEGER (0..32)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "Length in bits of the IP address prefix in the
-+                    Network Layer Reachability Information field."
-+            ::= { bgp4PathAttrEntry 2 }
-+
-+        bgp4PathAttrIpAddrPrefix OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "An IP address prefix in the Network Layer
-+                    Reachability Information field.  This object
-+                    is an IP address containing the prefix with
-+                    length specified by bgp4PathAttrIpAddrPrefixLen.
-+                    Any bits beyond the length specified by
-+                    bgp4PathAttrIpAddrPrefixLen are zeroed."
-+            ::= { bgp4PathAttrEntry 3 }
-+
-+        bgp4PathAttrOrigin OBJECT-TYPE
-+            SYNTAX     INTEGER {
-+                                 igp(1),-- networks are interior
-+                                 egp(2),-- networks learned via EGP
-+                                 incomplete(3) -- undetermined
-+                               }
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The ultimate origin of the path information."
-+            ::= { bgp4PathAttrEntry 4 }
-+
-+        bgp4PathAttrASPathSegment OBJECT-TYPE
-+            SYNTAX     OCTET STRING (SIZE (2..255))
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The sequence of AS path segments.  Each AS
-+                    path segment is represented by a triple
-+                    <type, length, value>.
-+
-+                    The type is a 1-octet field which has two
-+                    possible values:
-+                         1      AS_SET: unordered set of ASs a
-+                                     route in the UPDATE message
-+                                     has traversed
-+                         2      AS_SEQUENCE: ordered set of ASs
-+                                     a route in the UPDATE message
-+                                     has traversed.
-+
-+                    The length is a 1-octet field containing the
-+                    number of ASs in the value field.
-+
-+                    The value field contains one or more AS
-+                    numbers, each AS is represented in the octet
-+                    string as a pair of octets according to the
-+                    following algorithm:
-+
-+                        first-byte-of-pair = ASNumber / 256;
-+                        second-byte-of-pair = ASNumber & 255;"
-+            ::= { bgp4PathAttrEntry 5 }
-+
-+        bgp4PathAttrNextHop OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The address of the border router that should
-+                    be used for the destination network."
-+            ::= { bgp4PathAttrEntry 6 }
-+
-+        bgp4PathAttrMultiExitDisc OBJECT-TYPE
-+            SYNTAX     INTEGER (-1..2147483647)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "This metric is used to discriminate between
-+                    multiple exit points to an adjacent autonomous
-+                    system.  A value of -1 indicates the absence of
-+                    this attribute."
-+            ::= { bgp4PathAttrEntry 7 }
-+
-+        bgp4PathAttrLocalPref OBJECT-TYPE
-+            SYNTAX     INTEGER (-1..2147483647)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The originating BGP4 speaker's degree of
-+                    preference for an advertised route.  A value of
-+                    -1 indicates the absence of this attribute."
-+            ::= { bgp4PathAttrEntry 8 }
-+
-+        bgp4PathAttrAtomicAggregate OBJECT-TYPE
-+            SYNTAX     INTEGER {
-+                           lessSpecificRrouteNotSelected(1),
-+                           lessSpecificRouteSelected(2)
-+                       }
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "Whether or not a system has selected
-+                    a less specific route without selecting a
-+                    more specific route."
-+            ::= { bgp4PathAttrEntry 9 }
-+
-+        bgp4PathAttrAggregatorAS OBJECT-TYPE
-+            SYNTAX     INTEGER (0..65535)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The AS number of the last BGP4 speaker that
-+                    performed route aggregation.  A value of zero (0)
-+                    indicates the absence of this attribute."
-+            ::= { bgp4PathAttrEntry 10 }
-+
-+        bgp4PathAttrAggregatorAddr OBJECT-TYPE
-+            SYNTAX     IpAddress
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The IP address of the last BGP4 speaker that
-+                     performed route aggregation.  A value of
-+                     0.0.0.0 indicates the absence of this attribute."
-+            ::= { bgp4PathAttrEntry 11 }
-+
-+        bgp4PathAttrCalcLocalPref OBJECT-TYPE
-+            SYNTAX     INTEGER (-1..2147483647)
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "The degree of preference calculated by the
-+                    receiving BGP4 speaker for an advertised route.
-+                    A value of -1 indicates the absence of this
-+                    attribute."
-+            ::= { bgp4PathAttrEntry 12 }
-+
-+        bgp4PathAttrBest OBJECT-TYPE
-+            SYNTAX     INTEGER {
-+                           false(1),-- not chosen as best route
-+                           true(2) -- chosen as best route
-+                       }
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "An indication of whether or not this route
-+                    was chosen as the best BGP4 route."
-+            ::= { bgp4PathAttrEntry 13 }
-+
-+        bgp4PathAttrUnknown OBJECT-TYPE
-+            SYNTAX     OCTET STRING (SIZE(0..255))
-+            MAX-ACCESS read-only
-+            STATUS     current
-+            DESCRIPTION
-+                    "One or more path attributes not understood
-+                     by this BGP4 speaker.  Size zero (0) indicates
-+                     the absence of such attribute(s).  Octets
-+                     beyond the maximum size, if any, are not
-+                     recorded by this object."
-+            ::= { bgp4PathAttrEntry 14 }
-+
-+
-+        -- Traps.
-+
-+        -- note that in RFC 1657, bgpTraps was incorrectly
-+        -- assigned a value of { bgp 7 }, and each of the
-+        -- traps had the bgpPeerRemoteAddr object inappropriately
-+        -- removed from their OBJECTS clause.  The following
-+        -- definitions restore the semantics of the traps as
-+        -- they were initially defined in RFC 1269.
-+
-+        -- { bgp 7 } is unused
-+
-+        bgpTraps          OBJECT IDENTIFIER ::= { bgp 0 }
-+
-+        bgpEstablished NOTIFICATION-TYPE
-+            OBJECTS { bgpPeerRemoteAddr,
-+                      bgpPeerLastError,
-+                      bgpPeerState      }
-+            STATUS  current
-+            DESCRIPTION
-+                    "The BGP Established event is generated when
-+                    the BGP FSM enters the ESTABLISHED state."
-+            ::= { bgpTraps 1 }
-+
-+        bgpBackwardTransition NOTIFICATION-TYPE
-+            OBJECTS { bgpPeerRemoteAddr,
-+                      bgpPeerLastError,
-+                      bgpPeerState      }
-+            STATUS  current
-+            DESCRIPTION
-+                    "The BGPBackwardTransition Event is generated
-+                    when the BGP FSM moves from a higher numbered
-+                    state to a lower numbered state."
-+            ::= { bgpTraps 2 }
-+
-+        -- conformance information
-+
-+        bgpMIBConformance OBJECT IDENTIFIER ::= { bgp 8 }
-+        bgpMIBCompliances OBJECT IDENTIFIER ::= { bgpMIBConformance 1 }
-+        bgpMIBGroups      OBJECT IDENTIFIER ::= { bgpMIBConformance 2 }
-+
-+        -- compliance statements
-+
-+        bgpMIBCompliance MODULE-COMPLIANCE
-+            STATUS  current
-+            DESCRIPTION
-+                    "The compliance statement for entities which
-+                     implement the BGP4 mib."
-+            MODULE  -- this module
-+                MANDATORY-GROUPS { bgp4MIBGlobalsGroup,
-+                                   bgp4MIBPeerGroup,
-+                                   bgp4MIBPathAttrGroup,
-+                                   bgp4MIBNotificationGroup }
-+            ::= { bgpMIBCompliances 1 }
-+
-+        -- units of conformance
-+
-+        bgp4MIBGlobalsGroup OBJECT-GROUP
-+            OBJECTS { bgpVersion,
-+                      bgpLocalAs,
-+                      bgpIdentifier }
-+            STATUS  current
-+            DESCRIPTION
-+                    "A collection of objects providing information
-+                     on global BGP state."
-+            ::= { bgpMIBGroups 1 }
-+
-+        bgp4MIBPeerGroup OBJECT-GROUP
-+            OBJECTS { bgpPeerIdentifier,
-+                      bgpPeerState,
-+                      bgpPeerAdminStatus,
-+                      bgpPeerNegotiatedVersion,
-+                      bgpPeerLocalAddr,
-+                      bgpPeerLocalPort,
-+                      bgpPeerRemoteAddr,
-+                      bgpPeerRemotePort,
-+                      bgpPeerRemoteAs,
-+                      bgpPeerInUpdates,
-+                      bgpPeerOutUpdates,
-+                      bgpPeerInTotalMessages,
-+                      bgpPeerOutTotalMessages,
-+                      bgpPeerLastError,
-+                      bgpPeerFsmEstablishedTransitions,
-+                      bgpPeerFsmEstablishedTime,
-+                      bgpPeerConnectRetryInterval,
-+                      bgpPeerHoldTime,
-+                      bgpPeerKeepAlive,
-+                      bgpPeerHoldTimeConfigured,
-+                      bgpPeerKeepAliveConfigured,
-+                      bgpPeerMinASOriginationInterval,
-+                      bgpPeerMinRouteAdvertisementInterval,
-+                      bgpPeerInUpdateElapsedTime }
-+            STATUS  current
-+            DESCRIPTION
-+                    "A collection of objects for managing
-+                     BGP peers."
-+            ::= { bgpMIBGroups 2 }
-+
-+        bgp4MIBRcvdPathAttrGroup OBJECT-GROUP
-+            OBJECTS { bgpPathAttrPeer,
-+                      bgpPathAttrDestNetwork,
-+                      bgpPathAttrOrigin,
-+                      bgpPathAttrASPath,
-+                      bgpPathAttrNextHop,
-+                      bgpPathAttrInterASMetric }
-+            STATUS  obsolete
-+            DESCRIPTION
-+                    "A collection of objects for managing BGP
-+                     path entries.
-+
-+                     This conformance group is obsolete,
-+                     replaced by bgp4MIBPathAttrGroup."
-+            ::= { bgpMIBGroups 3 }
-+
-+        bgp4MIBPathAttrGroup OBJECT-GROUP
-+            OBJECTS { bgp4PathAttrPeer,
-+                      bgp4PathAttrIpAddrPrefixLen,
-+                      bgp4PathAttrIpAddrPrefix,
-+                      bgp4PathAttrOrigin,
-+                      bgp4PathAttrASPathSegment,
-+                      bgp4PathAttrNextHop,
-+                      bgp4PathAttrMultiExitDisc,
-+                      bgp4PathAttrLocalPref,
-+                      bgp4PathAttrAtomicAggregate,
-+                      bgp4PathAttrAggregatorAS,
-+                      bgp4PathAttrAggregatorAddr,
-+                      bgp4PathAttrCalcLocalPref,
-+                      bgp4PathAttrBest,
-+                      bgp4PathAttrUnknown }
-+            STATUS  current
-+            DESCRIPTION
-+                    "A collection of objects for managing
-+                     BGP path entries."
-+            ::= { bgpMIBGroups 4 }
-+
-+        bgp4MIBNotificationGroup NOTIFICATION-GROUP
-+            NOTIFICATIONS { bgpEstablished,
-+                            bgpBackwardTransition }
-+            STATUS  current
-+            DESCRIPTION
-+                    "A collection of notifications for signaling
-+                    changes in BGP peer relationships."
-+            ::= { bgpMIBGroups 5 }
-+
-+    END
---- /dev/null
-+++ b/mibs/GNOME-SMI.txt
-@@ -0,0 +1,88 @@
-+GNOME-SMI DEFINITIONS ::= BEGIN
-+
-+IMPORTS
-+      MODULE-IDENTITY,
-+      OBJECT-IDENTITY,
-+      enterprises
-+              FROM SNMPv2-SMI;
-+
-+gnome MODULE-IDENTITY
-+      LAST-UPDATED "200709070000Z"
-+      ORGANIZATION "GNOME project"
-+      CONTACT-INFO
-+              "GNU Network Object Model Environment project
-+              
-+              see http://www.gnome.org for contact persons of a particular
-+              area or subproject of GNOME.
-+
-+              Administrative contact for MIB module:
-+
-+              Jochen Friedrich
-+              Ramsaystr. 9
-+              63450 Hanau
-+              Germany 
-+
-+              email: jochen@scram.de"
-+      DESCRIPTION
-+              "The Structure of GNOME."
-+
-+      -- revision history
-+
-+      REVISION "200709070000Z"  -- Sep 07, 2007
-+      DESCRIPTION
-+              "Fixed wrong enterprise number (how comes this
-+              typo was unnoticed for so long?)."
-+
-+      REVISION "200505070000Z"  -- May 07, 2005
-+      DESCRIPTION
-+              "Added gnomeLDAP subtree for LDAP definitions."
-+
-+      REVISION "200312070000Z"  -- December 07, 2003
-+      DESCRIPTION
-+              "Added gnomeSysadmin subtree for GNOME project system administration.
-+              Updated contact info."
-+
-+      REVISION "9809010000Z"  -- September 01, 1998
-+      DESCRIPTION
-+              "Initial version."
-+
-+      ::= { enterprises 3319 }        -- assigned by IANA
-+
-+gnomeProducts OBJECT-IDENTITY
-+      STATUS  current
-+      DESCRIPTION
-+              "gnomeProducts is the root OBJECT IDENTIFIER from
-+              which sysObjectID values are assigned."
-+      ::= { gnome 1 }
-+
-+gnomeMgmt OBJECT-IDENTITY
-+      STATUS  current
-+      DESCRIPTION
-+              "gnomeMgmt defines the subtree for production GNOME related
-+              MIB registrations."
-+      ::= { gnome 2 }
-+
-+gnomeTest OBJECT-IDENTITY
-+      STATUS  current
-+      DESCRIPTION
-+              "gnomeTest defines the subtree for testing GNOME related
-+              MIB registrations."
-+      ::= { gnome 3 }
-+
-+gnomeSysadmin OBJECT-IDENTITY
-+      STATUS  current
-+      DESCRIPTION
-+              "gnomeSysadmin defines the subtree for GNOME related Sysadmin
-+              MIB registrations."
-+      ::= { gnome 4 }
-+
-+gnomeLDAP OBJECT-IDENTITY
-+      STATUS  current
-+      DESCRIPTION
-+              "gnomeLDAP defines the subtree for GNOME related LDAP
-+              registrations."
-+      ::= { gnome 5 }
-+
-+-- more to come if necessary.
-+
-+END
---- /dev/null
-+++ b/mibs/OSPF-MIB.txt
-@@ -0,0 +1,2723 @@
-+OSPF-MIB DEFINITIONS ::= BEGIN
-+
-+    IMPORTS
-+            MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32,
-+            Integer32, IpAddress
-+                FROM SNMPv2-SMI
-+            TEXTUAL-CONVENTION, TruthValue, RowStatus
-+                FROM SNMPv2-TC
-+            MODULE-COMPLIANCE, OBJECT-GROUP          FROM SNMPv2-CONF
-+            mib-2                                    FROM RFC1213-MIB;
-+
-+--  This MIB module uses the extended OBJECT-TYPE macro as
-+--  defined in [9].
-+
-+ospf MODULE-IDENTITY
-+        LAST-UPDATED "9501201225Z" -- Fri Jan 20 12:25:50 PST 1995
-+        ORGANIZATION "IETF OSPF Working Group"
-+        CONTACT-INFO
-+       "       Fred Baker
-+       Postal: Cisco Systems
-+               519 Lado Drive
-+               Santa Barbara, California 93111
-+       Tel:    +1 805 681 0115
-+       E-Mail: fred@cisco.com
-+
-+               Rob Coltun
-+       Postal: RainbowBridge Communications
-+       Tel:    (301) 340-9416
-+       E-Mail: rcoltun@rainbow-bridge.com"
-+    DESCRIPTION
-+       "The MIB module to describe the OSPF Version 2
-+       Protocol"
-+    ::= { mib-2 14 }
-+
-+--  The Area ID, in OSPF, has the same format as an IP Address,
-+--  but has the function of defining a summarization point for
-+--  Link State Advertisements
-+
-+AreaID ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "An OSPF Area Identifier."
-+    SYNTAX      IpAddress
-+
-+
-+--  The Router ID, in OSPF, has the same format as an IP Address,
-+--  but identifies the router independent of its IP Address.
-+
-+RouterID ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "A OSPF Router Identifier."
-+    SYNTAX      IpAddress
-+
-+
-+--  The OSPF Metric is defined as an unsigned value in the range
-+
-+Metric ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "The OSPF Internal Metric."
-+    SYNTAX      Integer32 (0..'FFFF'h)
-+
-+BigMetric ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "The OSPF External Metric."
-+    SYNTAX      Integer32 (0..'FFFFFF'h)
-+
-+--  Status Values
-+
-+Status ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "The status of an interface: 'enabled' indicates that
-+       it is willing to communicate with other OSPF Routers,
-+       while 'disabled' indicates that it is not."
-+    SYNTAX      INTEGER { enabled (1), disabled (2) }
-+
-+--  Time Durations measured in seconds
-+
-+PositiveInteger ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "A positive integer. Values in excess are precluded as
-+       unnecessary and prone to interoperability issues."
-+    SYNTAX      Integer32 (0..'7FFFFFFF'h)
-+
-+HelloRange ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "The range of intervals on which hello messages are
-+       exchanged."
-+    SYNTAX      Integer32 (1..'FFFF'h)
-+
-+UpToMaxAge ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "The values that one might find or configure for
-+       variables bounded by the maximum age of an LSA."
-+    SYNTAX      Integer32 (0..3600)
-+
-+
-+--  The range of ifIndex
-+
-+InterfaceIndex ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "The range of ifIndex."
-+    SYNTAX      Integer32
-+
-+
-+--  Potential Priorities for the Designated Router Election
-+
-+DesignatedRouterPriority ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "The values defined for the priority of a system for
-+       becoming the designated router."
-+    SYNTAX      Integer32 (0..'FF'h)
-+
-+TOSType ::= TEXTUAL-CONVENTION
-+    STATUS      current
-+    DESCRIPTION
-+       "Type of Service is defined as a mapping to the IP Type of
-+       Service Flags as defined in the IP Forwarding Table MIB
-+
-+       +-----+-----+-----+-----+-----+-----+-----+-----+
-+       |                 |                       |     |
-+       |   PRECEDENCE    |    TYPE OF SERVICE    |  0  |
-+       |                 |                       |     |
-+       +-----+-----+-----+-----+-----+-----+-----+-----+
-+
-+                IP TOS                IP TOS
-+           Field     Policy      Field     Policy
-+
-+           Contents    Code      Contents    Code
-+           0 0 0 0  ==>   0      0 0 0 1  ==>   2
-+           0 0 1 0  ==>   4      0 0 1 1  ==>   6
-+           0 1 0 0  ==>   8      0 1 0 1  ==>  10
-+           0 1 1 0  ==>  12      0 1 1 1  ==>  14
-+           1 0 0 0  ==>  16      1 0 0 1  ==>  18
-+           1 0 1 0  ==>  20      1 0 1 1  ==>  22
-+           1 1 0 0  ==>  24      1 1 0 1  ==>  26
-+           1 1 1 0  ==>  28      1 1 1 1  ==>  30
-+
-+       The remaining values are left for future definition."
-+    SYNTAX      Integer32 (0..30)
-+
-+
-+--  OSPF General Variables
-+
-+--      These parameters apply globally to the Router's
-+--      OSPF Process.
-+
-+ospfGeneralGroup OBJECT IDENTIFIER ::= { ospf 1 }
-+
-+
-+    ospfRouterId OBJECT-TYPE
-+        SYNTAX   RouterID
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "A  32-bit  integer  uniquely  identifying  the
-+           router in the Autonomous System.
-+
-+           By  convention,  to  ensure  uniqueness,   this
-+           should  default  to  the  value  of  one of the
-+           router's IP interface addresses."
-+       REFERENCE
-+          "OSPF Version 2, C.1 Global parameters"
-+      ::= { ospfGeneralGroup 1 }
-+
-+
-+    ospfAdminStat OBJECT-TYPE
-+        SYNTAX   Status
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "The  administrative  status  of  OSPF  in  the
-+           router.   The  value 'enabled' denotes that the
-+           OSPF Process is active on at least  one  inter-
-+           face;  'disabled'  disables  it  on  all inter-
-+           faces."
-+       ::= { ospfGeneralGroup 2 }
-+
-+    ospfVersionNumber OBJECT-TYPE
-+        SYNTAX   INTEGER    { version2 (2) }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The current version number of the OSPF  proto-
-+           col is 2."
-+       REFERENCE
-+          "OSPF Version 2, Title"
-+      ::= { ospfGeneralGroup 3 }
-+
-+
-+    ospfAreaBdrRtrStatus OBJECT-TYPE
-+        SYNTAX   TruthValue
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "A flag to note whether this router is an  area
-+           border router."
-+       REFERENCE
-+          "OSPF Version 2, Section 3 Splitting the AS into
-+          Areas"
-+      ::= { ospfGeneralGroup 4 }
-+
-+
-+    ospfASBdrRtrStatus OBJECT-TYPE
-+        SYNTAX   TruthValue
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "A flag to note whether this router is  config-
-+           ured as an Autonomous System border router."
-+       REFERENCE
-+          "OSPF Version 2, Section 3.3  Classification  of
-+          routers"
-+      ::= { ospfGeneralGroup 5 }
-+
-+    ospfExternLsaCount OBJECT-TYPE
-+        SYNTAX   Gauge32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of external (LS type 5)  link-state
-+           advertisements in the link-state database."
-+       REFERENCE
-+          "OSPF Version 2, Appendix A.4.5 AS external link
-+          advertisements"
-+      ::= { ospfGeneralGroup 6 }
-+
-+
-+    ospfExternLsaCksumSum OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The 32-bit unsigned sum of the LS checksums of
-+           the  external  link-state  advertisements  con-
-+           tained in the link-state  database.   This  sum
-+           can  be  used  to determine if there has been a
-+           change in a router's link state  database,  and
-+           to  compare  the  link-state  database  of  two
-+           routers."
-+       ::= { ospfGeneralGroup 7 }
-+
-+
-+    ospfTOSSupport OBJECT-TYPE
-+        SYNTAX   TruthValue
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "The router's support for type-of-service rout-
-+           ing."
-+       REFERENCE
-+          "OSPF Version 2,  Appendix  F.1.2  Optional  TOS
-+          support"
-+      ::= { ospfGeneralGroup 8 }
-+
-+    ospfOriginateNewLsas OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of  new  link-state  advertisements
-+           that  have been originated.  This number is in-
-+           cremented each time the router originates a new
-+           LSA."
-+       ::= { ospfGeneralGroup 9 }
-+
-+
-+    ospfRxNewLsas OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of  link-state  advertisements  re-
-+           ceived  determined  to  be  new instantiations.
-+           This number does not include  newer  instantia-
-+           tions  of self-originated link-state advertise-
-+           ments."
-+       ::= { ospfGeneralGroup 10 }
-+
-+    ospfExtLsdbLimit OBJECT-TYPE
-+        SYNTAX   Integer32 (-1..'7FFFFFFF'h)
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "The  maximum   number   of   non-default   AS-
-+           external-LSAs entries that can be stored in the
-+           link-state database.  If the value is -1,  then
-+           there is no limit.
-+
-+           When the number of non-default AS-external-LSAs
-+           in   a  router's  link-state  database  reaches
-+           ospfExtLsdbLimit, the router  enters  Overflow-
-+           State.   The   router  never  holds  more  than
-+           ospfExtLsdbLimit  non-default  AS-external-LSAs
-+           in  its  database. OspfExtLsdbLimit MUST be set
-+           identically in all routers attached to the OSPF
-+           backbone  and/or  any regular OSPF area. (i.e.,
-+           OSPF stub areas and NSSAs are excluded)."
-+       DEFVAL { -1 }
-+       ::= { ospfGeneralGroup 11 }
-+
-+    ospfMulticastExtensions OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "A Bit Mask indicating whether  the  router  is
-+           forwarding  IP  multicast  (Class  D) datagrams
-+           based on the algorithms defined in  the  Multi-
-+           cast Extensions to OSPF.
-+
-+           Bit 0, if set, indicates that  the  router  can
-+           forward  IP multicast datagrams in the router's
-+           directly attached areas (called intra-area mul-
-+           ticast routing).
-+
-+           Bit 1, if set, indicates that  the  router  can
-+           forward  IP  multicast  datagrams  between OSPF
-+           areas (called inter-area multicast routing).
-+
-+           Bit 2, if set, indicates that  the  router  can
-+           forward  IP  multicast  datagrams between Auto-
-+           nomous Systems (called inter-AS multicast rout-
-+           ing).
-+
-+           Only certain combinations of bit  settings  are
-+           allowed,  namely: 0 (no multicast forwarding is
-+           enabled), 1 (intra-area multicasting  only),  3
-+           (intra-area  and  inter-area  multicasting),  5
-+           (intra-area and inter-AS  multicasting)  and  7
-+           (multicasting  everywhere). By default, no mul-
-+           ticast forwarding is enabled."
-+       DEFVAL { 0 }
-+       ::= { ospfGeneralGroup 12 }
-+
-+    ospfExitOverflowInterval OBJECT-TYPE
-+        SYNTAX   PositiveInteger
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of  seconds  that,  after  entering
-+           OverflowState,  a  router will attempt to leave
-+           OverflowState. This allows the router to  again
-+           originate  non-default  AS-external-LSAs.  When
-+           set to 0, the router will not  leave  Overflow-
-+           State until restarted."
-+       DEFVAL { 0 }
-+       ::= { ospfGeneralGroup 13 }
-+
-+
-+    ospfDemandExtensions OBJECT-TYPE
-+        SYNTAX   TruthValue
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "The router's support for demand routing."
-+       REFERENCE
-+          "OSPF Version 2, Appendix on Demand Routing"
-+      ::= { ospfGeneralGroup 14 }
-+
-+
-+--      The OSPF Area Data Structure contains information
-+--      regarding the various areas. The interfaces and
-+--      virtual links are configured as part of these areas.
-+--      Area 0.0.0.0, by definition, is the Backbone Area
-+
-+
-+    ospfAreaTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfAreaEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "Information describing the configured  parame-
-+           ters  and cumulative statistics of the router's
-+           attached areas."
-+       REFERENCE
-+          "OSPF Version 2, Section 6  The Area Data Struc-
-+          ture"
-+      ::= { ospf 2 }
-+
-+
-+    ospfAreaEntry OBJECT-TYPE
-+        SYNTAX   OspfAreaEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "Information describing the configured  parame-
-+           ters  and  cumulative  statistics of one of the
-+           router's attached areas."
-+       INDEX { ospfAreaId }
-+       ::= { ospfAreaTable 1 }
-+
-+OspfAreaEntry ::=
-+    SEQUENCE {
-+        ospfAreaId
-+            AreaID,
-+        ospfAuthType
-+            Integer32,
-+        ospfImportAsExtern
-+            INTEGER,
-+        ospfSpfRuns
-+            Counter32,
-+        ospfAreaBdrRtrCount
-+            Gauge32,
-+        ospfAsBdrRtrCount
-+            Gauge32,
-+        ospfAreaLsaCount
-+            Gauge32,
-+        ospfAreaLsaCksumSum
-+            Integer32,
-+        ospfAreaSummary
-+            INTEGER,
-+        ospfAreaStatus
-+            RowStatus
-+              }
-+
-+    ospfAreaId OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "A 32-bit integer uniquely identifying an area.
-+           Area ID 0.0.0.0 is used for the OSPF backbone."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfAreaEntry 1 }
-+
-+
-+    ospfAuthType OBJECT-TYPE
-+        SYNTAX   Integer32
-+                    -- none (0),
-+                    -- simplePassword (1)
-+                    -- md5 (2)
-+                    -- reserved for specification by IANA (> 2)
-+        MAX-ACCESS   read-create
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "The authentication type specified for an area.
-+           Additional authentication types may be assigned
-+           locally on a per Area basis."
-+       REFERENCE
-+          "OSPF Version 2, Appendix E Authentication"
-+      DEFVAL { 0 }        -- no authentication, by default
-+      ::= { ospfAreaEntry 2 }
-+
-+    ospfImportAsExtern OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    importExternal (1),
-+                    importNoExternal (2),
-+                    importNssa (3)
-+                  }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The area's support for importing  AS  external
-+           link- state advertisements."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      DEFVAL { importExternal }
-+      ::= { ospfAreaEntry 3 }
-+
-+
-+    ospfSpfRuns OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of times that the intra-area  route
-+           table  has  been  calculated  using this area's
-+           link-state database.  This  is  typically  done
-+           using Dijkstra's algorithm."
-+       ::= { ospfAreaEntry 4 }
-+
-+
-+    ospfAreaBdrRtrCount OBJECT-TYPE
-+        SYNTAX   Gauge32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The total number of area border routers reach-
-+           able within this area.  This is initially zero,
-+           and is calculated in each SPF Pass."
-+       ::= { ospfAreaEntry 5 }
-+
-+    ospfAsBdrRtrCount OBJECT-TYPE
-+        SYNTAX   Gauge32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The total number of Autonomous  System  border
-+           routers  reachable  within  this area.  This is
-+           initially zero, and is calculated in  each  SPF
-+           Pass."
-+       ::= { ospfAreaEntry 6 }
-+
-+
-+    ospfAreaLsaCount OBJECT-TYPE
-+        SYNTAX   Gauge32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The total number of link-state  advertisements
-+           in  this  area's link-state database, excluding
-+           AS External LSA's."
-+       ::= { ospfAreaEntry 7 }
-+
-+
-+    ospfAreaLsaCksumSum OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The 32-bit unsigned sum of the link-state  ad-
-+           vertisements'  LS  checksums  contained in this
-+           area's link-state database.  This sum  excludes
-+           external (LS type 5) link-state advertisements.
-+           The sum can be used to determine if  there  has
-+           been  a  change  in a router's link state data-
-+           base, and to compare the link-state database of
-+           two routers."
-+       DEFVAL   { 0 }
-+       ::= { ospfAreaEntry 8 }
-+
-+    ospfAreaSummary OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    noAreaSummary (1),
-+                    sendAreaSummary (2)
-+                  }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The variable ospfAreaSummary controls the  im-
-+           port  of  summary LSAs into stub areas.  It has
-+           no effect on other areas.
-+
-+           If it is noAreaSummary, the router will neither
-+           originate  nor  propagate summary LSAs into the
-+           stub area.  It will rely entirely  on  its  de-
-+           fault route.
-+
-+           If it is sendAreaSummary, the router will  both
-+           summarize and propagate summary LSAs."
-+       DEFVAL   { noAreaSummary }
-+       ::= { ospfAreaEntry 9 }
-+
-+
-+    ospfAreaStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfAreaEntry 10 }
-+
-+
-+--  OSPF Area Default Metric Table
-+
-+--      The OSPF Area Default Metric Table describes the metrics
-+--      that a default Area Border Router will advertise into a
-+--      Stub area.
-+
-+
-+    ospfStubAreaTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfStubAreaEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The set of metrics that will be advertised  by
-+           a default Area Border Router into a stub area."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2, Area Parameters"
-+      ::= { ospf 3 }
-+
-+
-+    ospfStubAreaEntry OBJECT-TYPE
-+        SYNTAX   OspfStubAreaEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The metric for a given Type  of  Service  that
-+           will  be  advertised  by  a default Area Border
-+           Router into a stub area."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2, Area Parameters"
-+      INDEX { ospfStubAreaId, ospfStubTOS }
-+      ::= { ospfStubAreaTable 1 }
-+
-+OspfStubAreaEntry ::=
-+    SEQUENCE {
-+        ospfStubAreaId
-+            AreaID,
-+        ospfStubTOS
-+            TOSType,
-+        ospfStubMetric
-+            BigMetric,
-+        ospfStubStatus
-+            RowStatus,
-+        ospfStubMetricType
-+            INTEGER
-+              }
-+
-+    ospfStubAreaId OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The 32 bit identifier for the Stub  Area.   On
-+           creation,  this  can  be  derived  from the in-
-+           stance."
-+       ::= { ospfStubAreaEntry 1 }
-+
-+
-+    ospfStubTOS OBJECT-TYPE
-+        SYNTAX   TOSType
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The  Type  of  Service  associated  with   the
-+           metric.   On creation, this can be derived from
-+           the instance."
-+       ::= { ospfStubAreaEntry 2 }
-+
-+
-+    ospfStubMetric OBJECT-TYPE
-+        SYNTAX   BigMetric
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The metric value applied at the indicated type
-+           of  service.  By default, this equals the least
-+           metric at the type of service among the  inter-
-+           faces to other areas."
-+       ::= { ospfStubAreaEntry 3 }
-+
-+
-+    ospfStubStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfStubAreaEntry 4 }
-+
-+    ospfStubMetricType OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    ospfMetric (1),                -- OSPF Metric
-+                    comparableCost (2),        -- external type 1
-+                    nonComparable  (3)        -- external type 2
-+                  }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the type of metric  ad-
-+           vertised as a default route."
-+       DEFVAL   { ospfMetric }
-+       ::= { ospfStubAreaEntry 5 }
-+
-+--  OSPF Link State Database
-+
-+--      The Link State Database contains the Link State
-+--      Advertisements from throughout the areas that the
-+--      device is attached to.
-+
-+
-+    ospfLsdbTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfLsdbEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The OSPF Process's Link State Database."
-+       REFERENCE
-+          "OSPF Version 2, Section 12  Link  State  Adver-
-+          tisements"
-+      ::= { ospf 4 }
-+
-+
-+    ospfLsdbEntry OBJECT-TYPE
-+        SYNTAX   OspfLsdbEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A single Link State Advertisement."
-+       INDEX { ospfLsdbAreaId, ospfLsdbType,
-+               ospfLsdbLsid, ospfLsdbRouterId }
-+       ::= { ospfLsdbTable 1 }
-+
-+OspfLsdbEntry ::=
-+    SEQUENCE {
-+        ospfLsdbAreaId
-+            AreaID,
-+        ospfLsdbType
-+            INTEGER,
-+        ospfLsdbLsid
-+            IpAddress,
-+        ospfLsdbRouterId
-+            RouterID,
-+        ospfLsdbSequence
-+            Integer32,
-+        ospfLsdbAge
-+            Integer32,
-+        ospfLsdbChecksum
-+            Integer32,
-+        ospfLsdbAdvertisement
-+            OCTET STRING
-+              }
-+    ospfLsdbAreaId OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The 32 bit identifier of the Area  from  which
-+           the LSA was received."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfLsdbEntry 1 }
-+
-+-- External Link State Advertisements are permitted
-+-- for backward compatibility, but should be displayed in
-+-- the ospfExtLsdbTable rather than here.
-+
-+    ospfLsdbType OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    routerLink (1),
-+                    networkLink (2),
-+                    summaryLink (3),
-+                    asSummaryLink (4),
-+                    asExternalLink (5), -- but see ospfExtLsdbTable
-+                    multicastLink (6),
-+                    nssaExternalLink (7)
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The type  of  the  link  state  advertisement.
-+           Each  link state type has a separate advertise-
-+           ment format."
-+       REFERENCE
-+          "OSPF Version 2, Appendix A.4.1 The  Link  State
-+          Advertisement header"
-+      ::= { ospfLsdbEntry 2 }
-+
-+    ospfLsdbLsid OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Link State ID is an LS Type Specific field
-+           containing either a Router ID or an IP Address;
-+           it identifies the piece of the  routing  domain
-+           that is being described by the advertisement."
-+       REFERENCE
-+          "OSPF Version 2, Section 12.1.4 Link State ID"
-+      ::= { ospfLsdbEntry 3 }
-+    ospfLsdbRouterId OBJECT-TYPE
-+        SYNTAX   RouterID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The 32 bit number that uniquely identifies the
-+           originating router in the Autonomous System."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.1 Global parameters"
-+      ::= { ospfLsdbEntry 4 }
-+
-+--  Note that the OSPF Sequence Number is a 32 bit signed
-+--  integer.  It starts with the value '80000001'h,
-+--  or -'7FFFFFFF'h, and increments until '7FFFFFFF'h
-+--  Thus, a typical sequence number will be very negative.
-+
-+    ospfLsdbSequence OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The sequence number field is a  signed  32-bit
-+           integer.   It  is used to detect old and dupli-
-+           cate link state advertisements.  The  space  of
-+           sequence  numbers  is  linearly  ordered.   The
-+           larger the sequence number the more recent  the
-+           advertisement."
-+       REFERENCE
-+          "OSPF Version  2,  Section  12.1.6  LS  sequence
-+          number"
-+      ::= { ospfLsdbEntry 5 }
-+
-+
-+    ospfLsdbAge OBJECT-TYPE
-+        SYNTAX   Integer32    -- Should be 0..MaxAge
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "This field is the age of the link state adver-
-+           tisement in seconds."
-+       REFERENCE
-+          "OSPF Version 2, Section 12.1.1 LS age"
-+      ::= { ospfLsdbEntry 6 }
-+
-+    ospfLsdbChecksum OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "This field is the  checksum  of  the  complete
-+           contents  of  the  advertisement, excepting the
-+           age field.  The age field is excepted  so  that
-+           an   advertisement's  age  can  be  incremented
-+           without updating the  checksum.   The  checksum
-+           used  is  the same that is used for ISO connec-
-+           tionless datagrams; it is commonly referred  to
-+           as the Fletcher checksum."
-+       REFERENCE
-+          "OSPF Version 2, Section 12.1.7 LS checksum"
-+      ::= { ospfLsdbEntry 7 }
-+
-+
-+    ospfLsdbAdvertisement OBJECT-TYPE
-+        SYNTAX   OCTET STRING (SIZE (1..65535))
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The entire Link State Advertisement, including
-+           its header."
-+       REFERENCE
-+          "OSPF Version 2, Section 12  Link  State  Adver-
-+          tisements"
-+      ::= { ospfLsdbEntry 8 }
-+
-+
-+--  Address Range Table
-+
-+--      The Address Range Table acts as an adjunct to the Area
-+--      Table; It describes those Address Range Summaries that
-+--      are configured to be propagated from an Area to reduce
-+--      the amount of information about it which is known beyond
-+--      its borders.
-+
-+    ospfAreaRangeTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfAreaRangeEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "A range if IP addresses  specified  by  an  IP
-+           address/IP  network  mask  pair.   For example,
-+           class B address range of X.X.X.X with a network
-+           mask  of  255.255.0.0 includes all IP addresses
-+           from X.X.0.0 to X.X.255.255"
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2  Area parameters"
-+      ::= { ospf 5 }
-+    ospfAreaRangeEntry OBJECT-TYPE
-+        SYNTAX   OspfAreaRangeEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "A range if IP addresses  specified  by  an  IP
-+           address/IP  network  mask  pair.   For example,
-+           class B address range of X.X.X.X with a network
-+           mask  of  255.255.0.0 includes all IP addresses
-+           from X.X.0.0 to X.X.255.255"
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2  Area parameters"
-+      INDEX { ospfAreaRangeAreaId, ospfAreaRangeNet }
-+      ::= { ospfAreaRangeTable 1 }
-+
-+OspfAreaRangeEntry ::=
-+    SEQUENCE {
-+        ospfAreaRangeAreaId
-+            AreaID,
-+        ospfAreaRangeNet
-+            IpAddress,
-+        ospfAreaRangeMask
-+            IpAddress,
-+        ospfAreaRangeStatus
-+            RowStatus,
-+        ospfAreaRangeEffect
-+            INTEGER
-+              }
-+
-+    ospfAreaRangeAreaId OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "The Area the Address  Range  is  to  be  found
-+           within."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfAreaRangeEntry 1 }
-+
-+
-+    ospfAreaRangeNet OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "The IP Address of the Net or Subnet  indicated
-+           by the range."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfAreaRangeEntry 2 }
-+
-+
-+    ospfAreaRangeMask OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-create
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "The Subnet Mask that pertains to  the  Net  or
-+           Subnet."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfAreaRangeEntry 3 }
-+
-+    ospfAreaRangeStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfAreaRangeEntry 4 }
-+
-+
-+    ospfAreaRangeEffect OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    advertiseMatching (1),
-+                    doNotAdvertiseMatching (2)
-+                  }
-+        MAX-ACCESS   read-create
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "Subnets subsumed by ranges either trigger  the
-+           advertisement  of the indicated summary (adver-
-+           tiseMatching), or result in  the  subnet's  not
-+           being advertised at all outside the area."
-+       DEFVAL   { advertiseMatching }
-+       ::= { ospfAreaRangeEntry 5 }
-+
-+
-+
-+--  OSPF Host Table
-+
-+--      The Host/Metric Table indicates what hosts are directly
-+--      attached to the Router, and what metrics and types of
-+--      service should be advertised for them.
-+
-+    ospfHostTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfHostEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The list of Hosts, and their metrics, that the
-+           router will advertise as host routes."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.6  Host route param-
-+          eters"
-+      ::= { ospf 6 }
-+
-+
-+    ospfHostEntry OBJECT-TYPE
-+        SYNTAX   OspfHostEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A metric to be advertised, for a given type of
-+           service, when a given host is reachable."
-+       INDEX { ospfHostIpAddress, ospfHostTOS }
-+       ::= { ospfHostTable 1 }
-+
-+OspfHostEntry ::=
-+    SEQUENCE {
-+        ospfHostIpAddress
-+            IpAddress,
-+        ospfHostTOS
-+            TOSType,
-+        ospfHostMetric
-+            Metric,
-+        ospfHostStatus
-+            RowStatus,
-+        ospfHostAreaID
-+            AreaID
-+              }
-+
-+    ospfHostIpAddress OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP Address of the Host."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.6 Host route parame-
-+          ters"
-+      ::= { ospfHostEntry 1 }
-+
-+
-+    ospfHostTOS OBJECT-TYPE
-+        SYNTAX   TOSType
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Type of Service of the route being config-
-+           ured."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.6 Host route parame-
-+          ters"
-+      ::= { ospfHostEntry 2 }
-+
-+
-+    ospfHostMetric OBJECT-TYPE
-+        SYNTAX   Metric
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The Metric to be advertised."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.6 Host route parame-
-+          ters"
-+      ::= { ospfHostEntry 3 }
-+
-+    ospfHostStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfHostEntry 4 }
-+
-+
-+    ospfHostAreaID OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Area the Host Entry is to be found within.
-+           By  default, the area that a subsuming OSPF in-
-+           terface is in, or 0.0.0.0"
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfHostEntry 5 }
-+
-+
-+--  OSPF Interface Table
-+
-+--      The OSPF Interface Table augments the ipAddrTable
-+--             with OSPF specific information.
-+
-+    ospfIfTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfIfEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The OSPF Interface Table describes the  inter-
-+           faces from the viewpoint of OSPF."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.3  Router  interface
-+          parameters"
-+      ::= { ospf 7 }
-+
-+
-+    ospfIfEntry OBJECT-TYPE
-+        SYNTAX   OspfIfEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The OSPF Interface Entry describes one  inter-
-+           face from the viewpoint of OSPF."
-+       INDEX { ospfIfIpAddress, ospfAddressLessIf }
-+       ::= { ospfIfTable 1 }
-+
-+OspfIfEntry ::=
-+    SEQUENCE {
-+        ospfIfIpAddress
-+            IpAddress,
-+        ospfAddressLessIf
-+            Integer32,
-+        ospfIfAreaId
-+            AreaID,
-+        ospfIfType
-+            INTEGER,
-+        ospfIfAdminStat
-+            Status,
-+        ospfIfRtrPriority
-+            DesignatedRouterPriority,
-+        ospfIfTransitDelay
-+            UpToMaxAge,
-+        ospfIfRetransInterval
-+            UpToMaxAge,
-+        ospfIfHelloInterval
-+            HelloRange,
-+        ospfIfRtrDeadInterval
-+            PositiveInteger,
-+        ospfIfPollInterval
-+            PositiveInteger,
-+        ospfIfState
-+            INTEGER,
-+        ospfIfDesignatedRouter
-+            IpAddress,
-+        ospfIfBackupDesignatedRouter
-+            IpAddress,
-+        ospfIfEvents
-+            Counter32,
-+        ospfIfAuthType
-+            INTEGER,
-+        ospfIfAuthKey
-+            OCTET STRING,
-+        ospfIfStatus
-+            RowStatus,
-+        ospfIfMulticastForwarding
-+            INTEGER,
-+        ospfIfDemand
-+            TruthValue
-+              }
-+
-+    ospfIfIpAddress OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP address of this OSPF interface."
-+       ::= { ospfIfEntry 1 }
-+
-+    ospfAddressLessIf OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "For the purpose of easing  the  instancing  of
-+           addressed   and  addressless  interfaces;  This
-+           variable takes the value 0 on  interfaces  with
-+           IP  Addresses,  and  the corresponding value of
-+           ifIndex for interfaces having no IP Address."
-+       ::= { ospfIfEntry 2 }
-+    ospfIfAreaId OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "A 32-bit integer uniquely identifying the area
-+           to  which  the  interface  connects.   Area  ID
-+           0.0.0.0 is used for the OSPF backbone."
-+       DEFVAL   { '00000000'H }    -- 0.0.0.0
-+       ::= { ospfIfEntry 3 }
-+
-+    ospfIfType OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    broadcast (1),
-+                    nbma (2),
-+                    pointToPoint (3),
-+                    pointToMultipoint (5)
-+                  }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The OSPF interface type.
-+
-+           By way of a default, this field may be intuited
-+           from the corresponding value of ifType.  Broad-
-+           cast LANs, such as  Ethernet  and  IEEE  802.5,
-+           take  the  value  'broadcast', X.25 and similar
-+           technologies take the value 'nbma',  and  links
-+           that  are  definitively point to point take the
-+           value 'pointToPoint'."
-+       ::= { ospfIfEntry 4 }
-+
-+
-+    ospfIfAdminStat OBJECT-TYPE
-+        SYNTAX   Status
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The OSPF  interface's  administrative  status.
-+           The  value formed on the interface, and the in-
-+           terface will be advertised as an internal route
-+           to  some  area.   The  value 'disabled' denotes
-+           that the interface is external to OSPF."
-+       DEFVAL { enabled }
-+       ::= { ospfIfEntry 5 }
-+
-+    ospfIfRtrPriority OBJECT-TYPE
-+        SYNTAX   DesignatedRouterPriority
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The  priority  of  this  interface.   Used  in
-+           multi-access  networks,  this  field is used in
-+           the designated router election algorithm.   The
-+           value 0 signifies that the router is not eligi-
-+           ble to become the  designated  router  on  this
-+           particular  network.   In the event of a tie in
-+           this value, routers will use their Router ID as
-+           a tie breaker."
-+       DEFVAL { 1 }
-+       ::= { ospfIfEntry 6 }
-+
-+
-+    ospfIfTransitDelay OBJECT-TYPE
-+        SYNTAX   UpToMaxAge
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The estimated number of seconds  it  takes  to
-+           transmit  a  link state update packet over this
-+           interface."
-+       DEFVAL { 1 }
-+       ::= { ospfIfEntry 7 }
-+
-+
-+    ospfIfRetransInterval OBJECT-TYPE
-+        SYNTAX   UpToMaxAge
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of seconds between  link-state  ad-
-+           vertisement  retransmissions,  for  adjacencies
-+           belonging to this  interface.   This  value  is
-+           also used when retransmitting database descrip-
-+           tion and link-state request packets."
-+       DEFVAL { 5 }
-+       ::= { ospfIfEntry 8 }
-+
-+
-+    ospfIfHelloInterval OBJECT-TYPE
-+        SYNTAX   HelloRange
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The length of time, in  seconds,  between  the
-+           Hello  packets that the router sends on the in-
-+           terface.  This value must be the same  for  all
-+           routers attached to a common network."
-+       DEFVAL { 10 }
-+       ::= { ospfIfEntry 9 }
-+
-+
-+    ospfIfRtrDeadInterval OBJECT-TYPE
-+        SYNTAX   PositiveInteger
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of seconds that  a  router's  Hello
-+           packets  have  not been seen before it's neigh-
-+           bors declare the router down.  This  should  be
-+           some  multiple  of  the  Hello  interval.  This
-+           value must be the same for all routers attached
-+           to a common network."
-+       DEFVAL { 40 }
-+       ::= { ospfIfEntry 10 }
-+
-+
-+    ospfIfPollInterval OBJECT-TYPE
-+        SYNTAX   PositiveInteger
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The larger time interval, in seconds,  between
-+           the  Hello  packets  sent  to  an inactive non-
-+           broadcast multi- access neighbor."
-+       DEFVAL { 120 }
-+       ::= { ospfIfEntry 11 }
-+
-+
-+    ospfIfState OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    down (1),
-+                    loopback (2),
-+                    waiting (3),
-+                    pointToPoint (4),
-+                    designatedRouter (5),
-+                    backupDesignatedRouter (6),
-+                    otherDesignatedRouter (7)
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The OSPF Interface State."
-+       DEFVAL { down }
-+       ::= { ospfIfEntry 12 }
-+
-+
-+    ospfIfDesignatedRouter OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP Address of the Designated Router."
-+       DEFVAL   { '00000000'H }    -- 0.0.0.0
-+       ::= { ospfIfEntry 13 }
-+
-+
-+    ospfIfBackupDesignatedRouter OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The  IP  Address  of  the  Backup   Designated
-+           Router."
-+       DEFVAL   { '00000000'H }    -- 0.0.0.0
-+       ::= { ospfIfEntry 14 }
-+
-+    ospfIfEvents OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of times this  OSPF  interface  has
-+           changed its state, or an error has occurred."
-+       ::= { ospfIfEntry 15 }
-+
-+
-+    ospfIfAuthKey OBJECT-TYPE
-+        SYNTAX   OCTET STRING (SIZE (0..256))
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The Authentication Key.  If the Area's Author-
-+           ization  Type  is  simplePassword,  and the key
-+           length is shorter than 8 octets, the agent will
-+           left adjust and zero fill to 8 octets.
-+
-+           Note that unauthenticated  interfaces  need  no
-+           authentication key, and simple password authen-
-+           tication cannot use a key of more  than  8  oc-
-+           tets.  Larger keys are useful only with authen-
-+           tication mechanisms not specified in this docu-
-+           ment.
-+
-+           When read, ospfIfAuthKey always returns an  Oc-
-+           tet String of length zero."
-+       REFERENCE
-+          "OSPF Version 2, Section 9  The  Interface  Data
-+          Structure"
-+      DEFVAL   { '0000000000000000'H }    -- 0.0.0.0.0.0.0.0
-+      ::= { ospfIfEntry 16 }
-+
-+    ospfIfStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfIfEntry 17 }
-+
-+
-+    ospfIfMulticastForwarding OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                            blocked (1),        -- no multicast forwarding
-+                            multicast (2),        -- using multicast address
-+                            unicast (3)        -- to each OSPF neighbor
-+                  }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The way multicasts should  forwarded  on  this
-+           interface;  not  forwarded,  forwarded  as data
-+           link multicasts, or forwarded as data link uni-
-+           casts.   Data link multicasting is not meaning-
-+           ful on point to point and NBMA interfaces,  and
-+           setting ospfMulticastForwarding to 0 effective-
-+           ly disables all multicast forwarding."
-+       DEFVAL { blocked }
-+       ::= { ospfIfEntry 18 }
-+
-+
-+    ospfIfDemand OBJECT-TYPE
-+        SYNTAX   TruthValue
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "Indicates whether Demand OSPF procedures (hel-
-+           lo supression to FULL neighbors and setting the
-+           DoNotAge flag on proogated LSAs) should be per-
-+           formed on this interface."
-+       DEFVAL { false }
-+       ::= { ospfIfEntry 19 }
-+
-+
-+    ospfIfAuthType OBJECT-TYPE
-+        SYNTAX   INTEGER (0..255)
-+                    -- none (0),
-+                    -- simplePassword (1)
-+                    -- md5 (2)
-+                    -- reserved for specification by IANA (> 2)
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The authentication type specified for  an  in-
-+           terface.   Additional  authentication types may
-+           be assigned locally."
-+       REFERENCE
-+          "OSPF Version 2, Appendix E Authentication"
-+      DEFVAL { 0 }        -- no authentication, by default
-+      ::= { ospfIfEntry 20 }
-+
-+
-+--  OSPF Interface Metric Table
-+
-+--      The Metric Table describes the metrics to be advertised
-+--      for a specified interface at the various types of service.
-+--      As such, this table is an adjunct of the OSPF Interface
-+--      Table.
-+
-+-- Types of service, as defined by RFC 791, have the ability
-+-- to request low delay, high bandwidth, or reliable linkage.
-+
-+-- For the purposes of this specification, the measure of
-+-- bandwidth
-+
-+--      Metric = 10^8 / ifSpeed
-+
-+-- is the default value.  For multiple link interfaces, note
-+-- that ifSpeed is the sum of the individual link speeds.
-+-- This yields a number having the following typical values:
-+
-+--      Network Type/bit rate   Metric
-+
-+--      >= 100 MBPS                 1
-+--      Ethernet/802.3             10
-+--      E1                         48
-+--      T1 (ESF)                   65
-+--       64 KBPS                 1562
-+--       56 KBPS                 1785
-+--       19.2 KBPS               5208
-+--        9.6 KBPS              10416
-+
-+-- Routes that are not specified use the default (TOS 0) metric
-+
-+    ospfIfMetricTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfIfMetricEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The TOS metrics for  a  non-virtual  interface
-+           identified by the interface index."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.3  Router  interface
-+          parameters"
-+      ::= { ospf 8 }
-+
-+    ospfIfMetricEntry OBJECT-TYPE
-+        SYNTAX   OspfIfMetricEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A particular TOS metric for a non-virtual  in-
-+           terface identified by the interface index."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.3  Router  interface
-+          parameters"
-+      INDEX { ospfIfMetricIpAddress,
-+  ospfIfMetricAddressLessIf,
-+  ospfIfMetricTOS }
-+      ::= { ospfIfMetricTable 1 }
-+
-+OspfIfMetricEntry ::=
-+    SEQUENCE {
-+        ospfIfMetricIpAddress
-+            IpAddress,
-+        ospfIfMetricAddressLessIf
-+            Integer32,
-+        ospfIfMetricTOS
-+            TOSType,
-+        ospfIfMetricValue
-+            Metric,
-+        ospfIfMetricStatus
-+            RowStatus
-+              }
-+
-+    ospfIfMetricIpAddress OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP address of this OSPF interface.  On row
-+           creation,  this  can  be  derived  from the in-
-+           stance."
-+       ::= { ospfIfMetricEntry 1 }
-+
-+    ospfIfMetricAddressLessIf OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "For the purpose of easing  the  instancing  of
-+           addressed   and  addressless  interfaces;  This
-+           variable takes the value 0 on  interfaces  with
-+           IP  Addresses, and the value of ifIndex for in-
-+           terfaces having no IP Address.   On  row  crea-
-+           tion, this can be derived from the instance."
-+       ::= { ospfIfMetricEntry 2 }
-+
-+
-+    ospfIfMetricTOS OBJECT-TYPE
-+        SYNTAX   TOSType
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The type of service metric  being  referenced.
-+           On  row  creation, this can be derived from the
-+           instance."
-+       ::= { ospfIfMetricEntry 3 }
-+
-+
-+    ospfIfMetricValue OBJECT-TYPE
-+        SYNTAX   Metric
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The metric of using this type  of  service  on
-+           this interface.  The default value of the TOS 0
-+           Metric is 10^8 / ifSpeed."
-+       ::= { ospfIfMetricEntry 4 }
-+
-+    ospfIfMetricStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfIfMetricEntry 5 }
-+
-+
-+--  OSPF Virtual Interface Table
-+
-+--      The Virtual Interface Table describes the virtual
-+--      links that the OSPF Process is configured to
-+--      carry on.
-+
-+    ospfVirtIfTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfVirtIfEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "Information about this router's virtual inter-
-+           faces."
-+       REFERENCE
-+          "OSPF Version  2,  Appendix  C.4   Virtual  link
-+          parameters"
-+      ::= { ospf 9 }
-+
-+
-+    ospfVirtIfEntry OBJECT-TYPE
-+        SYNTAX   OspfVirtIfEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "Information about a single Virtual Interface."
-+       INDEX { ospfVirtIfAreaId, ospfVirtIfNeighbor }
-+       ::= { ospfVirtIfTable 1 }
-+
-+OspfVirtIfEntry ::=
-+    SEQUENCE {
-+        ospfVirtIfAreaId
-+            AreaID,
-+        ospfVirtIfNeighbor
-+            RouterID,
-+        ospfVirtIfTransitDelay
-+            UpToMaxAge,
-+        ospfVirtIfRetransInterval
-+            UpToMaxAge,
-+        ospfVirtIfHelloInterval
-+            HelloRange,
-+        ospfVirtIfRtrDeadInterval
-+            PositiveInteger,
-+        ospfVirtIfState
-+            INTEGER,
-+        ospfVirtIfEvents
-+            Counter32,
-+        ospfVirtIfAuthType
-+            INTEGER,
-+        ospfVirtIfAuthKey
-+            OCTET STRING,
-+        ospfVirtIfStatus
-+            RowStatus
-+              }
-+
-+    ospfVirtIfAreaId OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The  Transit  Area  that  the   Virtual   Link
-+           traverses.  By definition, this is not 0.0.0.0"
-+       ::= { ospfVirtIfEntry 1 }
-+
-+
-+    ospfVirtIfNeighbor OBJECT-TYPE
-+        SYNTAX   RouterID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Router ID of the Virtual Neighbor."
-+       ::= { ospfVirtIfEntry 2 }
-+
-+
-+    ospfVirtIfTransitDelay OBJECT-TYPE
-+        SYNTAX   UpToMaxAge
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The estimated number of seconds  it  takes  to
-+           transmit  a link- state update packet over this
-+           interface."
-+       DEFVAL { 1 }
-+       ::= { ospfVirtIfEntry 3 }
-+
-+
-+    ospfVirtIfRetransInterval OBJECT-TYPE
-+        SYNTAX   UpToMaxAge
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of seconds between  link-state  ad-
-+           vertisement  retransmissions,  for  adjacencies
-+           belonging to this  interface.   This  value  is
-+           also used when retransmitting database descrip-
-+           tion  and  link-state  request  packets.   This
-+           value  should  be well over the expected round-
-+           trip time."
-+       DEFVAL { 5 }
-+       ::= { ospfVirtIfEntry 4 }
-+
-+
-+    ospfVirtIfHelloInterval OBJECT-TYPE
-+        SYNTAX   HelloRange
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The length of time, in  seconds,  between  the
-+           Hello  packets that the router sends on the in-
-+           terface.  This value must be the same  for  the
-+           virtual neighbor."
-+       DEFVAL { 10 }
-+       ::= { ospfVirtIfEntry 5 }
-+
-+
-+    ospfVirtIfRtrDeadInterval OBJECT-TYPE
-+        SYNTAX   PositiveInteger
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of seconds that  a  router's  Hello
-+           packets  have  not been seen before it's neigh-
-+           bors declare the router down.  This  should  be
-+           some  multiple  of  the  Hello  interval.  This
-+           value must be the same for the  virtual  neigh-
-+           bor."
-+       DEFVAL { 60 }
-+       ::= { ospfVirtIfEntry 6 }
-+
-+
-+    ospfVirtIfState OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    down (1),            -- these use the same encoding
-+                    pointToPoint (4)     -- as the ospfIfTable
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "OSPF virtual interface states."
-+       DEFVAL   { down }
-+       ::= { ospfVirtIfEntry 7 }
-+
-+
-+    ospfVirtIfEvents OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of state changes or error events on
-+           this Virtual Link"
-+       ::= { ospfVirtIfEntry 8 }
-+
-+
-+    ospfVirtIfAuthKey OBJECT-TYPE
-+        SYNTAX   OCTET STRING (SIZE(0..256))
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "If Authentication Type is simplePassword,  the
-+           device  will left adjust and zero fill to 8 oc-
-+           tets.
-+
-+           Note that unauthenticated  interfaces  need  no
-+           authentication key, and simple password authen-
-+           tication cannot use a key of more  than  8  oc-
-+           tets.  Larger keys are useful only with authen-
-+           tication mechanisms not specified in this docu-
-+           ment.
-+
-+           When  read,  ospfVifAuthKey  always  returns  a
-+           string of length zero."
-+       REFERENCE
-+          "OSPF Version 2, Section 9  The  Interface  Data
-+          Structure"
-+      DEFVAL   { '0000000000000000'H }    -- 0.0.0.0.0.0.0.0
-+      ::= { ospfVirtIfEntry 9 }
-+
-+
-+    ospfVirtIfStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfVirtIfEntry 10 }
-+
-+
-+    ospfVirtIfAuthType OBJECT-TYPE
-+        SYNTAX   INTEGER (0..255)
-+                    -- none (0),
-+                    -- simplePassword (1)
-+                    -- md5 (2)
-+                    -- reserved for specification by IANA (> 2)
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The authentication type specified for a virtu-
-+           al  interface.  Additional authentication types
-+           may be assigned locally."
-+       REFERENCE
-+          "OSPF Version 2, Appendix E Authentication"
-+      DEFVAL { 0 }        -- no authentication, by default
-+      ::= { ospfVirtIfEntry 11 }
-+
-+
-+--  OSPF Neighbor Table
-+
-+--      The OSPF Neighbor Table describes all neighbors in
-+--      the locality of the subject router.
-+
-+    ospfNbrTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfNbrEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A table of non-virtual neighbor information."
-+       REFERENCE
-+          "OSPF Version 2, Section 10  The  Neighbor  Data
-+          Structure"
-+      ::= { ospf 10 }
-+
-+
-+    ospfNbrEntry OBJECT-TYPE
-+        SYNTAX   OspfNbrEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The information regarding a single neighbor."
-+       REFERENCE
-+          "OSPF Version 2, Section 10  The  Neighbor  Data
-+          Structure"
-+      INDEX { ospfNbrIpAddr, ospfNbrAddressLessIndex }
-+      ::= { ospfNbrTable 1 }
-+
-+OspfNbrEntry ::=
-+    SEQUENCE {
-+        ospfNbrIpAddr
-+            IpAddress,
-+        ospfNbrAddressLessIndex
-+            InterfaceIndex,
-+        ospfNbrRtrId
-+            RouterID,
-+        ospfNbrOptions
-+            Integer32,
-+        ospfNbrPriority
-+            DesignatedRouterPriority,
-+        ospfNbrState
-+            INTEGER,
-+        ospfNbrEvents
-+            Counter32,
-+        ospfNbrLsRetransQLen
-+            Gauge32,
-+        ospfNbmaNbrStatus
-+            RowStatus,
-+        ospfNbmaNbrPermanence
-+            INTEGER,
-+        ospfNbrHelloSuppressed
-+            TruthValue
-+              }
-+
-+    ospfNbrIpAddr OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP address this neighbor is using  in  its
-+           IP  Source  Address.  Note that, on addressless
-+           links, this will not be 0.0.0.0,  but  the  ad-
-+           dress of another of the neighbor's interfaces."
-+       ::= { ospfNbrEntry 1 }
-+
-+
-+    ospfNbrAddressLessIndex OBJECT-TYPE
-+        SYNTAX   InterfaceIndex
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "On an interface having an  IP  Address,  zero.
-+           On  addressless  interfaces,  the corresponding
-+           value of ifIndex in the Internet Standard  MIB.
-+           On  row  creation, this can be derived from the
-+           instance."
-+       ::= { ospfNbrEntry 2 }
-+
-+
-+    ospfNbrRtrId OBJECT-TYPE
-+        SYNTAX   RouterID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "A 32-bit integer (represented as a type  IpAd-
-+           dress)  uniquely  identifying  the  neighboring
-+           router in the Autonomous System."
-+       DEFVAL   { '00000000'H }    -- 0.0.0.0
-+       ::= { ospfNbrEntry 3 }
-+
-+
-+    ospfNbrOptions OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "A Bit Mask corresponding to the neighbor's op-
-+           tions field.
-+
-+           Bit 0, if set, indicates that the  system  will
-+           operate  on  Type of Service metrics other than
-+           TOS 0.  If zero, the neighbor will  ignore  all
-+           metrics except the TOS 0 metric.
-+
-+           Bit 1, if set, indicates  that  the  associated
-+           area  accepts and operates on external informa-
-+           tion; if zero, it is a stub area.
-+
-+           Bit 2, if set, indicates that the system is ca-
-+           pable  of routing IP Multicast datagrams; i.e.,
-+           that it implements the Multicast Extensions  to
-+           OSPF.
-+
-+           Bit 3, if set, indicates  that  the  associated
-+           area  is  an  NSSA.  These areas are capable of
-+           carrying type 7 external advertisements,  which
-+           are  translated into type 5 external advertise-
-+           ments at NSSA borders."
-+       REFERENCE
-+          "OSPF Version 2, Section 12.1.2 Options"
-+      DEFVAL { 0 }
-+      ::= { ospfNbrEntry 4 }
-+
-+
-+    ospfNbrPriority OBJECT-TYPE
-+        SYNTAX   DesignatedRouterPriority
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The priority of this neighbor in the designat-
-+           ed router election algorithm.  The value 0 sig-
-+           nifies that the neighbor is not eligible to be-
-+           come  the  designated router on this particular
-+           network."
-+       DEFVAL { 1 }
-+       ::= { ospfNbrEntry 5 }
-+
-+
-+    ospfNbrState OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    down (1),
-+                    attempt (2),
-+                    init (3),
-+                    twoWay (4),
-+                    exchangeStart (5),
-+                    exchange (6),
-+                    loading (7),
-+                    full (8)
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The State of the relationship with this Neigh-
-+           bor."
-+       REFERENCE
-+          "OSPF Version 2, Section 10.1 Neighbor States"
-+      DEFVAL   { down }
-+      ::= { ospfNbrEntry 6 }
-+
-+
-+    ospfNbrEvents OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of times this neighbor relationship
-+           has changed state, or an error has occurred."
-+       ::= { ospfNbrEntry 7 }
-+
-+
-+    ospfNbrLsRetransQLen OBJECT-TYPE
-+        SYNTAX   Gauge32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The  current  length  of  the   retransmission
-+           queue."
-+       ::= { ospfNbrEntry 8 }
-+
-+
-+    ospfNbmaNbrStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfNbrEntry 9 }
-+
-+
-+    ospfNbmaNbrPermanence OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    dynamic (1),        -- learned through protocol
-+                    permanent (2)       -- configured address
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.   'dynamic'  and  'permanent' refer to how
-+           the neighbor became known."
-+       DEFVAL { permanent }
-+       ::= { ospfNbrEntry 10 }
-+
-+
-+    ospfNbrHelloSuppressed OBJECT-TYPE
-+        SYNTAX   TruthValue
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "Indicates whether Hellos are being  suppressed
-+           to the neighbor"
-+       ::= { ospfNbrEntry 11 }
-+
-+
-+--  OSPF Virtual Neighbor Table
-+
-+--      This table describes all virtual neighbors.
-+--      Since Virtual Links are configured in the
-+--      virtual interface table, this table is read-only.
-+
-+    ospfVirtNbrTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfVirtNbrEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A table of virtual neighbor information."
-+       REFERENCE
-+          "OSPF Version 2, Section 15  Virtual Links"
-+      ::= { ospf 11 }
-+
-+
-+    ospfVirtNbrEntry OBJECT-TYPE
-+        SYNTAX   OspfVirtNbrEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "Virtual neighbor information."
-+       INDEX { ospfVirtNbrArea, ospfVirtNbrRtrId }
-+       ::= { ospfVirtNbrTable 1 }
-+
-+OspfVirtNbrEntry ::=
-+    SEQUENCE {
-+        ospfVirtNbrArea
-+            AreaID,
-+        ospfVirtNbrRtrId
-+            RouterID,
-+        ospfVirtNbrIpAddr
-+            IpAddress,
-+        ospfVirtNbrOptions
-+            Integer32,
-+        ospfVirtNbrState
-+            INTEGER,
-+        ospfVirtNbrEvents
-+            Counter32,
-+        ospfVirtNbrLsRetransQLen
-+            Gauge32,
-+        ospfVirtNbrHelloSuppressed
-+                TruthValue
-+              }
-+
-+    ospfVirtNbrArea OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Transit Area Identifier."
-+       ::= { ospfVirtNbrEntry 1 }
-+
-+
-+    ospfVirtNbrRtrId OBJECT-TYPE
-+        SYNTAX   RouterID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "A  32-bit  integer  uniquely  identifying  the
-+           neighboring router in the Autonomous System."
-+       ::= { ospfVirtNbrEntry 2 }
-+
-+
-+    ospfVirtNbrIpAddr OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP address this Virtual  Neighbor  is  us-
-+           ing."
-+       ::= { ospfVirtNbrEntry 3 }
-+
-+
-+    ospfVirtNbrOptions OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "A Bit Mask corresponding to the neighbor's op-
-+           tions field.
-+
-+           Bit 1, if set, indicates that the  system  will
-+           operate  on  Type of Service metrics other than
-+           TOS 0.  If zero, the neighbor will  ignore  all
-+           metrics except the TOS 0 metric.
-+
-+           Bit 2, if set, indicates  that  the  system  is
-+           Network  Multicast  capable; ie, that it imple-
-+           ments OSPF Multicast Routing."
-+       ::= { ospfVirtNbrEntry 4 }
-+    ospfVirtNbrState OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    down (1),
-+                    attempt (2),
-+                    init (3),
-+                    twoWay (4),
-+                    exchangeStart (5),
-+                    exchange (6),
-+                    loading (7),
-+                    full (8)
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The state of the  Virtual  Neighbor  Relation-
-+           ship."
-+       ::= { ospfVirtNbrEntry 5 }
-+
-+
-+    ospfVirtNbrEvents OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of  times  this  virtual  link  has
-+           changed its state, or an error has occurred."
-+       ::= { ospfVirtNbrEntry 6 }
-+
-+
-+    ospfVirtNbrLsRetransQLen OBJECT-TYPE
-+        SYNTAX   Gauge32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The  current  length  of  the   retransmission
-+           queue."
-+       ::= { ospfVirtNbrEntry 7 }
-+
-+
-+    ospfVirtNbrHelloSuppressed OBJECT-TYPE
-+        SYNTAX   TruthValue
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "Indicates whether Hellos are being  suppressed
-+           to the neighbor"
-+       ::= { ospfVirtNbrEntry 8 }
-+
-+--  OSPF Link State Database, External
-+
-+--      The Link State Database contains the Link State
-+--      Advertisements from throughout the areas that the
-+--      device is attached to.
-+
-+--             This table is identical to the OSPF LSDB Table in
-+--      format, but contains only External Link State
-+--             Advertisements.  The purpose is to allow external
-+--      LSAs to be displayed once for the router rather
-+--      than once in each non-stub area.
-+
-+    ospfExtLsdbTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfExtLsdbEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "The OSPF Process's Links State Database."
-+       REFERENCE
-+          "OSPF Version 2, Section 12  Link  State  Adver-
-+          tisements"
-+      ::= { ospf 12 }
-+
-+
-+    ospfExtLsdbEntry OBJECT-TYPE
-+        SYNTAX   OspfExtLsdbEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A single Link State Advertisement."
-+       INDEX { ospfExtLsdbType, ospfExtLsdbLsid, ospfExtLsdbRouterId }
-+       ::= { ospfExtLsdbTable 1 }
-+
-+OspfExtLsdbEntry ::=
-+    SEQUENCE {
-+        ospfExtLsdbType
-+            INTEGER,
-+        ospfExtLsdbLsid
-+            IpAddress,
-+        ospfExtLsdbRouterId
-+            RouterID,
-+        ospfExtLsdbSequence
-+            Integer32,
-+        ospfExtLsdbAge
-+            Integer32,
-+        ospfExtLsdbChecksum
-+            Integer32,
-+        ospfExtLsdbAdvertisement
-+            OCTET STRING
-+              }
-+
-+    ospfExtLsdbType OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    asExternalLink (5)
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The type  of  the  link  state  advertisement.
-+           Each  link state type has a separate advertise-
-+           ment format."
-+       REFERENCE
-+          "OSPF Version 2, Appendix A.4.1 The  Link  State
-+          Advertisement header"
-+      ::= { ospfExtLsdbEntry 1 }
-+
-+
-+    ospfExtLsdbLsid OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Link State ID is an LS Type Specific field
-+           containing either a Router ID or an IP Address;
-+           it identifies the piece of the  routing  domain
-+           that is being described by the advertisement."
-+       REFERENCE
-+          "OSPF Version 2, Section 12.1.4 Link State ID"
-+      ::= { ospfExtLsdbEntry 2 }
-+
-+
-+    ospfExtLsdbRouterId OBJECT-TYPE
-+        SYNTAX   RouterID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The 32 bit number that uniquely identifies the
-+           originating router in the Autonomous System."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.1 Global parameters"
-+      ::= { ospfExtLsdbEntry 3 }
-+
-+--  Note that the OSPF Sequence Number is a 32 bit signed
-+--  integer.  It starts with the value '80000001'h,
-+--  or -'7FFFFFFF'h, and increments until '7FFFFFFF'h
-+--  Thus, a typical sequence number will be very negative.
-+    ospfExtLsdbSequence OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The sequence number field is a  signed  32-bit
-+           integer.   It  is used to detect old and dupli-
-+           cate link state advertisements.  The  space  of
-+           sequence  numbers  is  linearly  ordered.   The
-+           larger the sequence number the more recent  the
-+           advertisement."
-+       REFERENCE
-+          "OSPF Version  2,  Section  12.1.6  LS  sequence
-+          number"
-+      ::= { ospfExtLsdbEntry 4 }
-+
-+
-+    ospfExtLsdbAge OBJECT-TYPE
-+        SYNTAX   Integer32    -- Should be 0..MaxAge
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "This field is the age of the link state adver-
-+           tisement in seconds."
-+       REFERENCE
-+          "OSPF Version 2, Section 12.1.1 LS age"
-+      ::= { ospfExtLsdbEntry 5 }
-+
-+
-+    ospfExtLsdbChecksum OBJECT-TYPE
-+        SYNTAX   Integer32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "This field is the  checksum  of  the  complete
-+           contents  of  the  advertisement, excepting the
-+           age field.  The age field is excepted  so  that
-+           an   advertisement's  age  can  be  incremented
-+           without updating the  checksum.   The  checksum
-+           used  is  the same that is used for ISO connec-
-+           tionless datagrams; it is commonly referred  to
-+           as the Fletcher checksum."
-+       REFERENCE
-+          "OSPF Version 2, Section 12.1.7 LS checksum"
-+      ::= { ospfExtLsdbEntry 6 }
-+
-+
-+    ospfExtLsdbAdvertisement OBJECT-TYPE
-+        SYNTAX   OCTET STRING (SIZE(36))
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The entire Link State Advertisement, including
-+           its header."
-+       REFERENCE
-+          "OSPF Version 2, Section 12  Link  State  Adver-
-+          tisements"
-+      ::= { ospfExtLsdbEntry 7 }
-+
-+
-+--  OSPF Use of the CIDR Route Table
-+
-+ospfRouteGroup           OBJECT IDENTIFIER ::= { ospf 13 }
-+
-+-- The IP Forwarding Table defines a number of objects for use by
-+-- the routing protocol to externalize its information.  Most of
-+-- the variables (ipForwardDest, ipForwardMask, ipForwardPolicy,
-+-- ipForwardNextHop, ipForwardIfIndex, ipForwardType,
-+-- ipForwardProto, ipForwardAge, and ipForwardNextHopAS) are
-+-- defined there.
-+
-+-- Those that leave some discretion are defined here.
-+
-+-- ipCidrRouteProto is, of course, ospf (13).
-+
-+-- ipCidrRouteAge is the time since the route was first calculated,
-+-- as opposed to the time since the last SPF run.
-+
-+-- ipCidrRouteInfo is an OBJECT IDENTIFIER for use by the routing
-+-- protocol.  The following values shall be found there depending
-+-- on the way the route was calculated.
-+
-+ospfIntraArea      OBJECT IDENTIFIER ::= { ospfRouteGroup 1 }
-+ospfInterArea      OBJECT IDENTIFIER ::= { ospfRouteGroup 2 }
-+ospfExternalType1  OBJECT IDENTIFIER ::= { ospfRouteGroup 3 }
-+ospfExternalType2  OBJECT IDENTIFIER ::= { ospfRouteGroup 4 }
-+
-+-- ipCidrRouteMetric1 is, by definition, the primary routing
-+-- metric.  Therefore, it should be the metric that route
-+-- selection is based on.  For intra-area and inter-area routes,
-+-- it is an OSPF metric.  For External Type 1 (comparable value)
-+-- routes, it is an OSPF metric plus the External Metric.  For
-+-- external Type 2 (non-comparable value) routes, it is the
-+-- external metric.
-+
-+-- ipCidrRouteMetric2 is, by definition, a secondary routing
-+-- metric.  Therefore, it should be the metric that breaks a tie
-+-- among routes having equal metric1 values and the same
-+-- calculation rule.  For intra-area, inter-area routes, and
-+-- External Type 1 (comparable value) routes, it is unused.  For
-+-- external Type 2 (non-comparable value) routes, it is the metric
-+-- to the AS border router.
-+
-+-- ipCidrRouteMetric3, ipCidrRouteMetric4, and ipCidrRouteMetric5 are
-+-- unused.
-+
-+--
-+--      The OSPF Area Aggregate Table
-+--
-+--      This table replaces the OSPF Area Summary Table, being an
-+--      extension of that for CIDR routers.
-+
-+    ospfAreaAggregateTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF OspfAreaAggregateEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A range of IP addresses  specified  by  an  IP
-+           address/IP  network  mask  pair.   For example,
-+           class B address range of X.X.X.X with a network
-+           mask  of  255.255.0.0 includes all IP addresses
-+           from X.X.0.0  to  X.X.255.255.   Note  that  if
-+           ranges  are configured such that one range sub-
-+           sumes  another  range  (e.g.,   10.0.0.0   mask
-+           255.0.0.0  and  10.1.0.0 mask 255.255.0.0), the
-+           most specific match is the preferred one."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2  Area parameters"
-+      ::= { ospf 14 }
-+
-+
-+    ospfAreaAggregateEntry OBJECT-TYPE
-+        SYNTAX   OspfAreaAggregateEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A range of IP addresses  specified  by  an  IP
-+           address/IP  network  mask  pair.   For example,
-+           class B address range of X.X.X.X with a network
-+           mask  of  255.255.0.0 includes all IP addresses
-+           from X.X.0.0  to  X.X.255.255.   Note  that  if
-+           ranges are range configured such that one range
-+           subsumes another  range  (e.g.,  10.0.0.0  mask
-+           255.0.0.0  and  10.1.0.0 mask 255.255.0.0), the
-+           most specific match is the preferred one."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2  Area parameters"
-+      INDEX { ospfAreaAggregateAreaID, ospfAreaAggregateLsdbType,
-+              ospfAreaAggregateNet, ospfAreaAggregateMask }
-+      ::= { ospfAreaAggregateTable 1 }
-+
-+
-+OspfAreaAggregateEntry ::=
-+    SEQUENCE {
-+        ospfAreaAggregateAreaID
-+            AreaID,
-+        ospfAreaAggregateLsdbType
-+            INTEGER,
-+        ospfAreaAggregateNet
-+            IpAddress,
-+        ospfAreaAggregateMask
-+            IpAddress,
-+        ospfAreaAggregateStatus
-+            RowStatus,
-+        ospfAreaAggregateEffect
-+            INTEGER
-+              }
-+
-+    ospfAreaAggregateAreaID OBJECT-TYPE
-+        SYNTAX   AreaID
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Area the Address Aggregate is to be  found
-+           within."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfAreaAggregateEntry 1 }
-+
-+
-+    ospfAreaAggregateLsdbType OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    summaryLink (3),
-+                    nssaExternalLink (7)
-+                  }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The type of the Address Aggregate.  This field
-+           specifies  the  Lsdb type that this Address Ag-
-+           gregate applies to."
-+       REFERENCE
-+          "OSPF Version 2, Appendix A.4.1 The  Link  State
-+          Advertisement header"
-+      ::= { ospfAreaAggregateEntry 2 }
-+
-+
-+    ospfAreaAggregateNet OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP Address of the Net or Subnet  indicated
-+           by the range."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfAreaAggregateEntry 3 }
-+
-+
-+    ospfAreaAggregateMask OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The Subnet Mask that pertains to  the  Net  or
-+           Subnet."
-+       REFERENCE
-+          "OSPF Version 2, Appendix C.2 Area parameters"
-+      ::= { ospfAreaAggregateEntry 4 }
-+
-+
-+    ospfAreaAggregateStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable displays the status of  the  en-
-+           try.  Setting it to 'invalid' has the effect of
-+           rendering it inoperative.  The internal  effect
-+           (row removal) is implementation dependent."
-+       ::= { ospfAreaAggregateEntry 5 }
-+
-+
-+    ospfAreaAggregateEffect OBJECT-TYPE
-+        SYNTAX   INTEGER    {
-+                    advertiseMatching (1),
-+                    doNotAdvertiseMatching (2)
-+                  }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "Subnets subsumed by ranges either trigger  the
-+           advertisement  of  the indicated aggregate (ad-
-+           vertiseMatching), or result in the subnet's not
-+           being advertised at all outside the area."
-+       DEFVAL   { advertiseMatching }
-+       ::= { ospfAreaAggregateEntry 6 }
-+
-+
-+-- conformance information
-+
-+ospfConformance OBJECT IDENTIFIER ::= { ospf 15 }
-+
-+ospfGroups      OBJECT IDENTIFIER ::= { ospfConformance 1 }
-+ospfCompliances OBJECT IDENTIFIER ::= { ospfConformance 2 }
-+
-+-- compliance statements
-+
-+    ospfCompliance MODULE-COMPLIANCE
-+        STATUS  current
-+        DESCRIPTION
-+           "The compliance statement "
-+       MODULE  -- this module
-+       MANDATORY-GROUPS {
-+                    ospfBasicGroup,
-+                    ospfAreaGroup,
-+                    ospfStubAreaGroup,
-+                    ospfIfGroup,
-+                    ospfIfMetricGroup,
-+                    ospfVirtIfGroup,
-+                    ospfNbrGroup,
-+                    ospfVirtNbrGroup,
-+                    ospfAreaAggregateGroup
-+           }
-+       ::= { ospfCompliances 1 }
-+
-+
-+-- units of conformance
-+
-+    ospfBasicGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfRouterId,
-+                    ospfAdminStat,
-+                    ospfVersionNumber,
-+                    ospfAreaBdrRtrStatus,
-+                    ospfASBdrRtrStatus,
-+                    ospfExternLsaCount,
-+                    ospfExternLsaCksumSum,
-+                    ospfTOSSupport,
-+                    ospfOriginateNewLsas,
-+                    ospfRxNewLsas,
-+                    ospfExtLsdbLimit,
-+                    ospfMulticastExtensions,
-+                    ospfExitOverflowInterval,
-+                    ospfDemandExtensions
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required for OSPF systems."
-+       ::= { ospfGroups 1 }
-+
-+
-+    ospfAreaGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfAreaId,
-+                    ospfImportAsExtern,
-+                    ospfSpfRuns,
-+                    ospfAreaBdrRtrCount,
-+                    ospfAsBdrRtrCount,
-+                    ospfAreaLsaCount,
-+                    ospfAreaLsaCksumSum,
-+                    ospfAreaSummary,
-+                    ospfAreaStatus
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required  for  OSPF  systems
-+           supporting areas."
-+       ::= { ospfGroups 2 }
-+
-+
-+    ospfStubAreaGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfStubAreaId,
-+                    ospfStubTOS,
-+                    ospfStubMetric,
-+                    ospfStubStatus,
-+                    ospfStubMetricType
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required  for  OSPF  systems
-+           supporting stub areas."
-+       ::= { ospfGroups 3 }
-+
-+
-+    ospfLsdbGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfLsdbAreaId,
-+                    ospfLsdbType,
-+                    ospfLsdbLsid,
-+                    ospfLsdbRouterId,
-+                    ospfLsdbSequence,
-+                    ospfLsdbAge,
-+                    ospfLsdbChecksum,
-+                    ospfLsdbAdvertisement
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required  for  OSPF  systems
-+           that display their link state database."
-+       ::= { ospfGroups 4 }
-+
-+
-+    ospfAreaRangeGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfAreaRangeAreaId,
-+                    ospfAreaRangeNet,
-+                    ospfAreaRangeMask,
-+                    ospfAreaRangeStatus,
-+                    ospfAreaRangeEffect
-+        }
-+        STATUS  obsolete
-+        DESCRIPTION
-+           "These objects are required for  non-CIDR  OSPF
-+           systems that support multiple areas."
-+       ::= { ospfGroups 5 }
-+
-+
-+    ospfHostGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfHostIpAddress,
-+                    ospfHostTOS,
-+                    ospfHostMetric,
-+                    ospfHostStatus,
-+                    ospfHostAreaID
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required  for  OSPF  systems
-+           that support attached hosts."
-+       ::= { ospfGroups 6 }
-+
-+
-+    ospfIfGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfIfIpAddress,
-+                    ospfAddressLessIf,
-+                    ospfIfAreaId,
-+                    ospfIfType,
-+                    ospfIfAdminStat,
-+                    ospfIfRtrPriority,
-+                    ospfIfTransitDelay,
-+                    ospfIfRetransInterval,
-+                    ospfIfHelloInterval,
-+                    ospfIfRtrDeadInterval,
-+                    ospfIfPollInterval,
-+                    ospfIfState,
-+                    ospfIfDesignatedRouter,
-+                    ospfIfBackupDesignatedRouter,
-+                    ospfIfEvents,
-+                    ospfIfAuthType,
-+                    ospfIfAuthKey,
-+                    ospfIfStatus,
-+                    ospfIfMulticastForwarding,
-+                    ospfIfDemand
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required for OSPF systems."
-+       ::= { ospfGroups 7 }
-+
-+
-+    ospfIfMetricGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfIfMetricIpAddress,
-+                    ospfIfMetricAddressLessIf,
-+                    ospfIfMetricTOS,
-+                    ospfIfMetricValue,
-+                    ospfIfMetricStatus
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required for OSPF systems."
-+       ::= { ospfGroups 8 }
-+
-+
-+    ospfVirtIfGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfVirtIfAreaId,
-+                    ospfVirtIfNeighbor,
-+                    ospfVirtIfTransitDelay,
-+                    ospfVirtIfRetransInterval,
-+                    ospfVirtIfHelloInterval,
-+                    ospfVirtIfRtrDeadInterval,
-+                    ospfVirtIfState,
-+                    ospfVirtIfEvents,
-+                    ospfVirtIfAuthType,
-+                    ospfVirtIfAuthKey,
-+                    ospfVirtIfStatus
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required for OSPF systems."
-+       ::= { ospfGroups 9 }
-+
-+
-+    ospfNbrGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfNbrIpAddr,
-+                    ospfNbrAddressLessIndex,
-+                    ospfNbrRtrId,
-+                    ospfNbrOptions,
-+                    ospfNbrPriority,
-+                    ospfNbrState,
-+                    ospfNbrEvents,
-+                    ospfNbrLsRetransQLen,
-+                    ospfNbmaNbrStatus,
-+                    ospfNbmaNbrPermanence,
-+                    ospfNbrHelloSuppressed
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required for OSPF systems."
-+       ::= { ospfGroups 10 }
-+
-+
-+    ospfVirtNbrGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfVirtNbrArea,
-+                    ospfVirtNbrRtrId,
-+                    ospfVirtNbrIpAddr,
-+                    ospfVirtNbrOptions,
-+                    ospfVirtNbrState,
-+                    ospfVirtNbrEvents,
-+                    ospfVirtNbrLsRetransQLen,
-+                    ospfVirtNbrHelloSuppressed
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required for OSPF systems."
-+       ::= { ospfGroups 11 }
-+
-+
-+    ospfExtLsdbGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfExtLsdbType,
-+                    ospfExtLsdbLsid,
-+                    ospfExtLsdbRouterId,
-+                    ospfExtLsdbSequence,
-+                    ospfExtLsdbAge,
-+                    ospfExtLsdbChecksum,
-+                    ospfExtLsdbAdvertisement
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required  for  OSPF  systems
-+           that display their link state database."
-+       ::= { ospfGroups 12 }
-+
-+
-+    ospfAreaAggregateGroup    OBJECT-GROUP
-+        OBJECTS {
-+                    ospfAreaAggregateAreaID,
-+                    ospfAreaAggregateLsdbType,
-+                    ospfAreaAggregateNet,
-+                    ospfAreaAggregateMask,
-+                    ospfAreaAggregateStatus,
-+                    ospfAreaAggregateEffect
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required for OSPF systems."
-+       ::= { ospfGroups 13 }
-+
-+END
---- /dev/null
-+++ b/mibs/OSPF-TRAP-MIB.txt
-@@ -0,0 +1,443 @@
-+OSPF-TRAP-MIB DEFINITIONS ::= BEGIN
-+
-+    IMPORTS
-+            MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, IpAddress
-+                FROM SNMPv2-SMI
-+            MODULE-COMPLIANCE, OBJECT-GROUP
-+                FROM SNMPv2-CONF
-+            ospfRouterId, ospfIfIpAddress, ospfAddressLessIf, ospfIfState,
-+            ospfVirtIfAreaId, ospfVirtIfNeighbor, ospfVirtIfState,
-+            ospfNbrIpAddr, ospfNbrAddressLessIndex, ospfNbrRtrId,
-+            ospfNbrState, ospfVirtNbrArea, ospfVirtNbrRtrId, ospfVirtNbrState,
-+            ospfLsdbType, ospfLsdbLsid, ospfLsdbRouterId, ospfLsdbAreaId,
-+            ospfExtLsdbLimit, ospf
-+                FROM OSPF-MIB;
-+
-+    ospfTrap MODULE-IDENTITY
-+           LAST-UPDATED "9501201225Z" -- Fri Jan 20 12:25:50 PST 1995
-+           ORGANIZATION "IETF OSPF Working Group"
-+           CONTACT-INFO
-+           "                      Fred Baker
-+           Postal:                Cisco Systems
-+                                  519 Lado Drive
-+                                  Santa Barbara, California 93111
-+           Tel:                   +1 805 681 0115
-+           E-Mail:                fred@cisco.com
-+
-+                                  Rob Coltun
-+           Postal:                RainbowBridge Communications
-+           Tel:                   (301) 340-9416
-+           E-Mail:                rcoltun@rainbow-bridge.com"
-+       DESCRIPTION
-+          "The MIB module to describe traps for  the  OSPF
-+          Version 2 Protocol."
-+      ::= { ospf 16 }
-+
-+-- Trap Support Objects
-+
-+--         The following are support objects for the OSPF traps.
-+
-+ospfTrapControl OBJECT IDENTIFIER ::= { ospfTrap 1 }
-+ospfTraps OBJECT IDENTIFIER ::= { ospfTrap 2 }
-+
-+    ospfSetTrap OBJECT-TYPE
-+        SYNTAX   OCTET STRING (SIZE(4))
-+        MAX-ACCESS   read-write
-+        STATUS   current
-+        DESCRIPTION
-+           "A four-octet string serving as a bit  map  for
-+           the trap events defined by the OSPF traps. This
-+           object is used to enable and  disable  specific
-+           OSPF   traps   where  a  1  in  the  bit  field
-+           represents enabled.  The right-most bit  (least
-+           significant) represents trap 0."
-+       ::= { ospfTrapControl 1 }
-+
-+
-+    ospfConfigErrorType OBJECT-TYPE
-+        SYNTAX   INTEGER   {
-+                    badVersion (1),
-+                    areaMismatch (2),
-+                    unknownNbmaNbr (3), -- Router is Dr eligible
-+                    unknownVirtualNbr (4),
-+                    authTypeMismatch(5),
-+                    authFailure (6),
-+                    netMaskMismatch (7),
-+                    helloIntervalMismatch (8),
-+                    deadIntervalMismatch (9),
-+                    optionMismatch (10) }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "Potential types  of  configuration  conflicts.
-+           Used  by the ospfConfigError and ospfConfigVir-
-+           tError traps."
-+   ::= { ospfTrapControl 2 }
-+
-+
-+    ospfPacketType OBJECT-TYPE
-+        SYNTAX   INTEGER   {
-+                    hello (1),
-+                    dbDescript (2),
-+                    lsReq (3),
-+                    lsUpdate (4),
-+                    lsAck (5) }
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "OSPF packet types."
-+   ::= { ospfTrapControl 3 }
-+
-+
-+    ospfPacketSrc OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP address of an inbound packet that  can-
-+           not be identified by a neighbor instance."
-+       ::= { ospfTrapControl 4 }
-+
-+
-+-- Traps
-+
-+
-+    ospfIfStateChange NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfIfIpAddress,
-+                    ospfAddressLessIf,
-+                    ospfIfState   -- The new state
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfIfStateChange trap signifies that there
-+           has been a change in the state of a non-virtual
-+           OSPF interface. This trap should  be  generated
-+           when  the interface state regresses (e.g., goes
-+           from Dr to Down) or progresses  to  a  terminal
-+           state  (i.e.,  Point-to-Point, DR Other, Dr, or
-+           Backup)."
-+   ::= { ospfTraps 16 }
-+
-+
-+    ospfVirtIfStateChange NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfVirtIfAreaId,
-+                    ospfVirtIfNeighbor,
-+                    ospfVirtIfState  -- The new state
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfIfStateChange trap signifies that there
-+           has  been a change in the state of an OSPF vir-
-+           tual interface.
-+           This trap should be generated when  the  inter-
-+           face  state  regresses  (e.g., goes from Point-
-+           to-Point to Down) or progresses to  a  terminal
-+           state (i.e., Point-to-Point)."
-+   ::= { ospfTraps 1 }
-+
-+
-+    ospfNbrStateChange NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfNbrIpAddr,
-+                    ospfNbrAddressLessIndex,
-+                    ospfNbrRtrId,
-+                    ospfNbrState  -- The new state
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An  ospfNbrStateChange  trap  signifies   that
-+           there  has been a change in the state of a non-
-+           virtual OSPF neighbor.   This  trap  should  be
-+           generated  when  the  neighbor  state regresses
-+           (e.g., goes from Attempt or Full  to  1-Way  or
-+           Down)  or progresses to a terminal state (e.g.,
-+           2-Way or Full).  When an  neighbor  transitions
-+           from  or  to Full on non-broadcast multi-access
-+           and broadcast networks, the trap should be gen-
-+           erated  by the designated router.  A designated
-+           router transitioning to Down will be  noted  by
-+           ospfIfStateChange."
-+   ::= { ospfTraps 2 }
-+
-+
-+    ospfVirtNbrStateChange NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfVirtNbrArea,
-+                    ospfVirtNbrRtrId,
-+                    ospfVirtNbrState  -- The new state
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfIfStateChange trap signifies that there
-+           has  been a change in the state of an OSPF vir-
-+           tual neighbor.  This trap should  be  generated
-+           when  the  neighbor state regresses (e.g., goes
-+           from Attempt or  Full  to  1-Way  or  Down)  or
-+           progresses to a terminal state (e.g., Full)."
-+   ::= { ospfTraps 3 }
-+    ospfIfConfigError NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfIfIpAddress,
-+                    ospfAddressLessIf,
-+                    ospfPacketSrc,  -- The source IP address
-+                    ospfConfigErrorType, -- Type of error
-+                    ospfPacketType
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfIfConfigError  trap  signifies  that  a
-+           packet  has  been received on a non-virtual in-
-+           terface  from  a  router  whose   configuration
-+           parameters  conflict  with this router's confi-
-+           guration parameters.  Note that the  event  op-
-+           tionMismatch  should  cause  a  trap only if it
-+           prevents an adjacency from forming."
-+                  ::= { ospfTraps 4 }
-+
-+
-+    ospfVirtIfConfigError NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfVirtIfAreaId,
-+                    ospfVirtIfNeighbor,
-+                    ospfConfigErrorType, -- Type of error
-+                    ospfPacketType
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfConfigError trap signifies that a pack-
-+           et  has  been  received  on a virtual interface
-+           from a router  whose  configuration  parameters
-+           conflict   with   this  router's  configuration
-+           parameters.  Note that the event optionMismatch
-+           should  cause a trap only if it prevents an ad-
-+           jacency from forming."
-+   ::= { ospfTraps 5 }
-+
-+
-+    ospfIfAuthFailure NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfIfIpAddress,
-+                    ospfAddressLessIf,
-+                    ospfPacketSrc,  -- The source IP address
-+                    ospfConfigErrorType, -- authTypeMismatch or
-+                                         -- authFailure
-+                    ospfPacketType
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfIfAuthFailure  trap  signifies  that  a
-+           packet  has  been received on a non-virtual in-
-+           terface from a router whose authentication  key
-+           or  authentication  type  conflicts  with  this
-+           router's authentication key  or  authentication
-+           type."
-+   ::= { ospfTraps 6 }
-+
-+
-+    ospfVirtIfAuthFailure NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfVirtIfAreaId,
-+                    ospfVirtIfNeighbor,
-+                    ospfConfigErrorType, -- authTypeMismatch or
-+                                         -- authFailure
-+                    ospfPacketType
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfVirtIfAuthFailure trap signifies that a
-+           packet has been received on a virtual interface
-+           from a router whose authentication key  or  au-
-+           thentication  type conflicts with this router's
-+           authentication key or authentication type."
-+   ::= { ospfTraps 7 }
-+
-+
-+    ospfIfRxBadPacket NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfIfIpAddress,
-+                    ospfAddressLessIf,
-+                    ospfPacketSrc,  -- The source IP address
-+                    ospfPacketType
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfIfRxBadPacket trap  signifies  that  an
-+           OSPF  packet has been received on a non-virtual
-+           interface that cannot be parsed."
-+   ::= { ospfTraps 8 }
-+
-+    ospfVirtIfRxBadPacket NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfVirtIfAreaId,
-+                    ospfVirtIfNeighbor,
-+                    ospfPacketType
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfRxBadPacket trap signifies that an OSPF
-+           packet has been received on a virtual interface
-+           that cannot be parsed."
-+   ::= { ospfTraps 9 }
-+
-+
-+    ospfTxRetransmit NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfIfIpAddress,
-+                    ospfAddressLessIf,
-+                    ospfNbrRtrId, -- Destination
-+                    ospfPacketType,
-+                    ospfLsdbType,
-+                    ospfLsdbLsid,
-+                    ospfLsdbRouterId
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfTxRetransmit  trap  signifies  than  an
-+           OSPF  packet  has  been retransmitted on a non-
-+           virtual interface.  All packets that may be re-
-+           transmitted  are associated with an LSDB entry.
-+           The LS type, LS ID, and Router ID are  used  to
-+           identify the LSDB entry."
-+   ::= { ospfTraps 10 }
-+
-+
-+    ospfVirtIfTxRetransmit NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfVirtIfAreaId,
-+                    ospfVirtIfNeighbor,
-+                    ospfPacketType,
-+                    ospfLsdbType,
-+                    ospfLsdbLsid,
-+                    ospfLsdbRouterId
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfTxRetransmit  trap  signifies  than  an
-+           OSPF packet has been retransmitted on a virtual
-+           interface.  All packets that may be retransmit-
-+           ted  are  associated with an LSDB entry. The LS
-+           type, LS ID, and Router ID are used to identify
-+           the LSDB entry."
-+   ::= { ospfTraps 11 }
-+
-+
-+    ospfOriginateLsa NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfLsdbAreaId,  -- 0.0.0.0 for AS Externals
-+                    ospfLsdbType,
-+                    ospfLsdbLsid,
-+                    ospfLsdbRouterId
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfOriginateLsa trap signifies that a  new
-+           LSA  has  been originated by this router.  This
-+           trap should not be invoked for simple refreshes
-+           of  LSAs  (which happesn every 30 minutes), but
-+           instead will only be invoked  when  an  LSA  is
-+           (re)originated due to a topology change.  Addi-
-+           tionally, this trap does not include LSAs  that
-+           are  being  flushed  because  they have reached
-+           MaxAge."
-+   ::= { ospfTraps 12 }
-+
-+
-+    ospfMaxAgeLsa NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfLsdbAreaId,  -- 0.0.0.0 for AS Externals
-+                    ospfLsdbType,
-+                    ospfLsdbLsid,
-+                    ospfLsdbRouterId
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfMaxAgeLsa trap signifies  that  one  of
-+           the LSA in the router's link-state database has
-+           aged to MaxAge."
-+   ::= { ospfTraps 13 }
-+
-+
-+    ospfLsdbOverflow NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfExtLsdbLimit
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfLsdbOverflow trap  signifies  that  the
-+           number of LSAs in the router's link-state data-
-+           base has exceeded ospfExtLsdbLimit."
-+   ::= { ospfTraps 14 }
-+
-+
-+    ospfLsdbApproachingOverflow NOTIFICATION-TYPE
-+        OBJECTS {
-+                    ospfRouterId, -- The originator of the trap
-+                    ospfExtLsdbLimit
-+                  }
-+        STATUS             current
-+        DESCRIPTION
-+           "An ospfLsdbApproachingOverflow trap  signifies
-+           that  the  number of LSAs in the router's link-
-+           state database has exceeded ninety  percent  of
-+           ospfExtLsdbLimit."
-+   ::= { ospfTraps 15 }
-+
-+
-+-- conformance information
-+
-+ospfTrapConformance OBJECT IDENTIFIER ::= { ospfTrap 3 }
-+
-+ospfTrapGroups      OBJECT IDENTIFIER ::= { ospfTrapConformance 1 }
-+ospfTrapCompliances OBJECT IDENTIFIER ::= { ospfTrapConformance 2 }
-+
-+-- compliance statements
-+
-+    ospfTrapCompliance MODULE-COMPLIANCE
-+        STATUS  current
-+        DESCRIPTION
-+           "The compliance statement "
-+       MODULE  -- this module
-+       MANDATORY-GROUPS { ospfTrapControlGroup }
-+
-+
-+        GROUP       ospfTrapControlGroup
-+        DESCRIPTION
-+           "This group is optional but recommended for all
-+           OSPF systems"
-+       ::= { ospfTrapCompliances 1 }
-+
-+
-+-- units of conformance
-+
-+    ospfTrapControlGroup    OBJECT-GROUP
-+        OBJECTS {
-+                           ospfSetTrap,
-+                           ospfConfigErrorType,
-+                           ospfPacketType,
-+                           ospfPacketSrc
-+        }
-+        STATUS  current
-+        DESCRIPTION
-+           "These objects are required  to  control  traps
-+           from OSPF systems."
-+       ::= { ospfTrapGroups 1 }
-+
-+
-+END
---- /dev/null
-+++ b/mibs/RIPv2-MIB.txt
-@@ -0,0 +1,530 @@
-+   RIPv2-MIB DEFINITIONS ::= BEGIN
-+
-+   IMPORTS
-+       MODULE-IDENTITY, OBJECT-TYPE, Counter32,
-+       TimeTicks, IpAddress                     FROM SNMPv2-SMI
-+       TEXTUAL-CONVENTION, RowStatus            FROM SNMPv2-TC
-+       MODULE-COMPLIANCE, OBJECT-GROUP          FROM SNMPv2-CONF
-+       mib-2                                    FROM RFC1213-MIB;
-+
-+   --  This MIB module uses the extended OBJECT-TYPE macro as
-+   --  defined in [9].
-+
-+   rip2  MODULE-IDENTITY
-+           LAST-UPDATED "9407272253Z"      -- Wed Jul 27 22:53:04 PDT 1994
-+           ORGANIZATION "IETF RIP-II Working Group"
-+           CONTACT-INFO
-+          "       Fred Baker
-+          Postal: Cisco Systems
-+                  519 Lado Drive
-+                  Santa Barbara, California 93111
-+          Tel:    +1 805 681 0115
-+          E-Mail: fbaker@cisco.com
-+
-+          Postal: Gary Malkin
-+                  Xylogics, Inc.
-+                  53 Third Avenue
-+                  Burlington, MA  01803
-+
-+          Phone:  (617) 272-8140
-+          EMail:  gmalkin@Xylogics.COM"
-+      DESCRIPTION
-+         "The MIB module to describe the RIP2 Version 2 Protocol"
-+     ::= { mib-2 23 }
-+
-+ --  RIP-2 Management Information Base
-+
-+ -- the RouteTag type represents the contents of the
-+ -- Route Domain field in the packet header or route entry.
-+ -- The use of the Route Domain is deprecated.
-+
-+ RouteTag ::= TEXTUAL-CONVENTION
-+     STATUS      current
-+     DESCRIPTION
-+        "the RouteTag type represents the contents of the Route Domain
-+        field in the packet header or route entry"
-+    SYNTAX      OCTET STRING (SIZE (2))
-+
-+--4.1 Global Counters
-+
-+--      The RIP-2 Globals Group.
-+--      Implementation of this group is mandatory for systems
-+--      which implement RIP-2.
-+
-+-- These counters are intended to facilitate debugging quickly
-+-- changing routes or failing neighbors
-+
-+rip2Globals OBJECT IDENTIFIER ::= { rip2 1 }
-+
-+    rip2GlobalRouteChanges OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of route changes made to the IP Route
-+           Database by RIP.  This does not include the refresh
-+           of a route's age."
-+       ::= { rip2Globals 1 }
-+
-+    rip2GlobalQueries OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of responses sent to RIP queries
-+           from other systems."
-+       ::= { rip2Globals 2 }
-+
-+--4.2 RIP Interface Tables
-+
-+--  RIP Interfaces Groups
-+--  Implementation of these Groups is mandatory for systems
-+--  which implement RIP-2.
-+
-+-- The RIP Interface Status Table.
-+
-+    rip2IfStatTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF Rip2IfStatEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A list of subnets which require separate
-+           status monitoring in RIP."
-+       ::= { rip2 2 }
-+
-+   rip2IfStatEntry OBJECT-TYPE
-+       SYNTAX   Rip2IfStatEntry
-+       MAX-ACCESS   not-accessible
-+       STATUS   current
-+       DESCRIPTION
-+          "A Single Routing Domain in a single Subnet."
-+      INDEX { rip2IfStatAddress }
-+      ::= { rip2IfStatTable 1 }
-+
-+    Rip2IfStatEntry ::=
-+        SEQUENCE {
-+            rip2IfStatAddress
-+                IpAddress,
-+            rip2IfStatRcvBadPackets
-+                Counter32,
-+            rip2IfStatRcvBadRoutes
-+                Counter32,
-+            rip2IfStatSentUpdates
-+                Counter32,
-+            rip2IfStatStatus
-+                RowStatus
-+    }
-+
-+    rip2IfStatAddress OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP Address of this system on the indicated
-+           subnet. For unnumbered interfaces, the value 0.0.0.N,
-+           where the least significant 24 bits (N) is the ifIndex
-+           for the IP Interface in network byte order."
-+       ::= { rip2IfStatEntry 1 }
-+
-+    rip2IfStatRcvBadPackets OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of RIP response packets received by
-+           the RIP process which were subsequently discarded
-+           for any reason (e.g. a version 0 packet, or an
-+           unknown command type)."
-+       ::= { rip2IfStatEntry 2 }
-+
-+    rip2IfStatRcvBadRoutes OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of routes, in valid RIP packets,
-+           which were ignored for any reason (e.g. unknown
-+           address family, or invalid metric)."
-+       ::= { rip2IfStatEntry 3 }
-+
-+    rip2IfStatSentUpdates OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of triggered RIP updates actually
-+           sent on this interface.  This explicitly does
-+           NOT include full updates sent containing new
-+           information."
-+       ::= { rip2IfStatEntry 4 }
-+
-+    rip2IfStatStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "Writing invalid has the effect of deleting
-+           this interface."
-+       ::= { rip2IfStatEntry 5 }
-+
-+-- The RIP Interface Configuration Table.
-+
-+    rip2IfConfTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF Rip2IfConfEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A list of subnets which require separate
-+           configuration in RIP."
-+       ::= { rip2 3 }
-+
-+   rip2IfConfEntry OBJECT-TYPE
-+       SYNTAX   Rip2IfConfEntry
-+       MAX-ACCESS   not-accessible
-+       STATUS   current
-+       DESCRIPTION
-+          "A Single Routing Domain in a single Subnet."
-+      INDEX { rip2IfConfAddress }
-+      ::= { rip2IfConfTable 1 }
-+
-+    Rip2IfConfEntry ::=
-+        SEQUENCE {
-+            rip2IfConfAddress
-+                IpAddress,
-+            rip2IfConfDomain
-+                RouteTag,
-+            rip2IfConfAuthType
-+                INTEGER,
-+            rip2IfConfAuthKey
-+                OCTET STRING (SIZE(0..16)),
-+            rip2IfConfSend
-+                INTEGER,
-+            rip2IfConfReceive
-+                INTEGER,
-+            rip2IfConfDefaultMetric
-+                INTEGER,
-+            rip2IfConfStatus
-+                RowStatus,
-+            rip2IfConfSrcAddress
-+                IpAddress
-+    }
-+
-+    rip2IfConfAddress OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP Address of this system on the indicated
-+           subnet.  For unnumbered interfaces, the value 0.0.0.N,
-+           where the least significant 24 bits (N) is the ifIndex
-+           for the IP Interface in network byte order."
-+       ::= { rip2IfConfEntry 1 }
-+
-+    rip2IfConfDomain OBJECT-TYPE
-+        SYNTAX   RouteTag
-+        MAX-ACCESS   read-create
-+        STATUS   obsolete
-+        DESCRIPTION
-+           "Value inserted into the Routing Domain field
-+           of all RIP packets sent on this interface."
-+       DEFVAL { '0000'h }
-+       ::= { rip2IfConfEntry 2 }
-+
-+    rip2IfConfAuthType OBJECT-TYPE
-+        SYNTAX   INTEGER {
-+                    noAuthentication (1),
-+                    simplePassword (2),
-+                    md5 (3)
-+                 }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The type of Authentication used on this
-+           interface."
-+       DEFVAL { noAuthentication }
-+       ::= { rip2IfConfEntry 3 }
-+
-+    rip2IfConfAuthKey OBJECT-TYPE
-+        SYNTAX   OCTET STRING (SIZE(0..16))
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The value to be used as the Authentication Key
-+           whenever the corresponding instance of
-+           rip2IfConfAuthType has a value other than
-+           noAuthentication.  A modification of the corresponding
-+           instance of rip2IfConfAuthType does not modify
-+           the rip2IfConfAuthKey value.  If a string shorter
-+           than 16 octets is supplied, it will be left-
-+           justified and padded to 16 octets, on the right,
-+           with nulls (0x00).
-+
-+           Reading this object always results in an  OCTET
-+           STRING of length zero; authentication may not
-+           be bypassed by reading the MIB object."
-+       DEFVAL { ''h }
-+       ::= { rip2IfConfEntry 4 }
-+
-+    rip2IfConfSend OBJECT-TYPE
-+        SYNTAX   INTEGER {
-+                    doNotSend (1),
-+                    ripVersion1 (2),
-+                    rip1Compatible (3),
-+                    ripVersion2 (4),
-+                    ripV1Demand (5),
-+                    ripV2Demand (6)
-+                 }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "What the router sends on this interface.
-+           ripVersion1 implies sending RIP updates compliant
-+           with  RFC  1058.   rip1Compatible implies
-+           broadcasting RIP-2 updates using RFC 1058 route
-+           subsumption rules.  ripVersion2 implies
-+           multicasting RIP-2 updates.  ripV1Demand indicates
-+           the use of Demand RIP on a WAN interface under RIP
-+           Version 1 rules.  ripV2Demand indicates the use of
-+           Demand RIP on a WAN interface under Version 2 rules."
-+       DEFVAL { rip1Compatible }
-+       ::= { rip2IfConfEntry 5 }
-+
-+    rip2IfConfReceive OBJECT-TYPE
-+        SYNTAX   INTEGER {
-+                    rip1 (1),
-+                    rip2 (2),
-+                    rip1OrRip2 (3),
-+                    doNotRecieve (4)
-+                 }
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This indicates which version of RIP updates
-+           are to be accepted.  Note that rip2 and
-+           rip1OrRip2 implies reception of multicast
-+           packets."
-+       DEFVAL { rip1OrRip2 }
-+       ::= { rip2IfConfEntry 6 }
-+
-+    rip2IfConfDefaultMetric OBJECT-TYPE
-+        SYNTAX   INTEGER ( 0..15 )
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "This variable indicates the metric that is to
-+           be used for the default route entry in RIP updates
-+           originated on this interface.  A value of zero
-+           indicates that no default route should be
-+           originated; in this case, a default route via
-+           another router may be propagated."
-+       ::= { rip2IfConfEntry 7 }
-+
-+    rip2IfConfStatus OBJECT-TYPE
-+        SYNTAX   RowStatus
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "Writing invalid has  the  effect  of  deleting
-+           this interface."
-+       ::= { rip2IfConfEntry 8 }
-+
-+    rip2IfConfSrcAddress OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-create
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP Address this system will use as a source
-+            address on this interface.  If it is a numbered
-+            interface, this MUST be the same value as
-+            rip2IfConfAddress.  On unnumbered interfaces,
-+            it must be the value of rip2IfConfAddress for
-+            some interface on the system."
-+       ::= { rip2IfConfEntry 9 }
-+
-+--4.3 Peer Table
-+
-+--  Peer Table
-+
-+--      The RIP Peer Group
-+--      Implementation of this Group is Optional
-+
-+--      This group provides information about active peer
-+--      relationships intended to assist in debugging.  An
-+--      active peer is a router from which a valid RIP
-+--      updated has been heard in the last 180 seconds.
-+
-+    rip2PeerTable OBJECT-TYPE
-+        SYNTAX   SEQUENCE OF Rip2PeerEntry
-+        MAX-ACCESS   not-accessible
-+        STATUS   current
-+        DESCRIPTION
-+           "A list of RIP Peers."
-+       ::= { rip2 4 }
-+
-+   rip2PeerEntry OBJECT-TYPE
-+       SYNTAX   Rip2PeerEntry
-+       MAX-ACCESS   not-accessible
-+       STATUS   current
-+       DESCRIPTION
-+          "Information regarding a single routing peer."
-+      INDEX { rip2PeerAddress, rip2PeerDomain }
-+      ::= { rip2PeerTable 1 }
-+
-+    Rip2PeerEntry ::=
-+        SEQUENCE {
-+            rip2PeerAddress
-+                IpAddress,
-+            rip2PeerDomain
-+                RouteTag,
-+            rip2PeerLastUpdate
-+                TimeTicks,
-+            rip2PeerVersion
-+                INTEGER,
-+            rip2PeerRcvBadPackets
-+                Counter32,
-+            rip2PeerRcvBadRoutes
-+                Counter32
-+            }
-+
-+    rip2PeerAddress OBJECT-TYPE
-+        SYNTAX   IpAddress
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The IP Address that the peer is using as its source
-+            address.  Note that on an unnumbered link, this may
-+            not be a member of any subnet on the system."
-+       ::= { rip2PeerEntry 1 }
-+
-+    rip2PeerDomain OBJECT-TYPE
-+        SYNTAX   RouteTag
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The value in the Routing Domain field  in  RIP
-+           packets received from the peer.  As domain suuport
-+           is deprecated, this must be zero."
-+       ::= { rip2PeerEntry 2 }
-+
-+    rip2PeerLastUpdate OBJECT-TYPE
-+        SYNTAX   TimeTicks
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The value of sysUpTime when the most recent
-+           RIP update was received from this system."
-+       ::= { rip2PeerEntry 3 }
-+
-+    rip2PeerVersion OBJECT-TYPE
-+        SYNTAX   INTEGER ( 0..255 )
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The RIP version number in the header of the
-+           last RIP packet received."
-+       ::= { rip2PeerEntry 4 }
-+
-+    rip2PeerRcvBadPackets OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of RIP response packets from this
-+           peer discarded as invalid."
-+       ::= { rip2PeerEntry 5 }
-+
-+
-+    rip2PeerRcvBadRoutes OBJECT-TYPE
-+        SYNTAX   Counter32
-+        MAX-ACCESS   read-only
-+        STATUS   current
-+        DESCRIPTION
-+           "The number of routes from this peer that were
-+           ignored because the entry format was invalid."
-+       ::= { rip2PeerEntry 6 }
-+
-+-- conformance information
-+
-+rip2Conformance OBJECT IDENTIFIER ::= { rip2 5 }
-+
-+rip2Groups      OBJECT IDENTIFIER ::= { rip2Conformance 1 }
-+rip2Compliances OBJECT IDENTIFIER ::= { rip2Conformance 2 }
-+
-+-- compliance statements
-+rip2Compliance MODULE-COMPLIANCE
-+    STATUS  current
-+    DESCRIPTION
-+       "The compliance statement "
-+    MODULE  -- this module
-+    MANDATORY-GROUPS {
-+                 rip2GlobalGroup,
-+                 rip2IfStatGroup,
-+                 rip2IfConfGroup,
-+                 rip2PeerGroup
-+        }
-+    GROUP       rip2GlobalGroup
-+    DESCRIPTION
-+       "This group defines global controls for RIP-II systems."
-+    GROUP       rip2IfStatGroup
-+    DESCRIPTION
-+       "This group defines interface statistics for RIP-II systems."
-+    GROUP       rip2IfConfGroup
-+    DESCRIPTION
-+       "This group defines interface configuration for RIP-II systems."
-+    GROUP       rip2PeerGroup
-+    DESCRIPTION
-+       "This group defines peer information for RIP-II systems."
-+    ::= { rip2Compliances 1 }
-+
-+-- units of conformance
-+
-+rip2GlobalGroup    OBJECT-GROUP
-+    OBJECTS {
-+                rip2GlobalRouteChanges,
-+                rip2GlobalQueries
-+    }
-+    STATUS  current
-+    DESCRIPTION
-+       "This group defines global controls for RIP-II systems."
-+    ::= { rip2Groups 1 }
-+rip2IfStatGroup    OBJECT-GROUP
-+    OBJECTS {
-+            rip2IfStatAddress,
-+            rip2IfStatRcvBadPackets,
-+            rip2IfStatRcvBadRoutes,
-+            rip2IfStatSentUpdates,
-+            rip2IfStatStatus
-+    }
-+    STATUS  current
-+    DESCRIPTION
-+       "This group defines interface statistics for RIP-II systems."
-+    ::= { rip2Groups 2 }
-+rip2IfConfGroup    OBJECT-GROUP
-+    OBJECTS {
-+            rip2IfConfAddress,
-+            rip2IfConfAuthType,
-+            rip2IfConfAuthKey,
-+            rip2IfConfSend,
-+            rip2IfConfReceive,
-+            rip2IfConfDefaultMetric,
-+            rip2IfConfStatus,
-+            rip2IfConfSrcAddress
-+    }
-+    STATUS  current
-+    DESCRIPTION
-+       "This group defines interface configuration for RIP-II systems."
-+    ::= { rip2Groups 3 }
-+rip2PeerGroup    OBJECT-GROUP
-+    OBJECTS {
-+            rip2PeerAddress,
-+            rip2PeerDomain,
-+            rip2PeerLastUpdate,
-+            rip2PeerVersion,
-+            rip2PeerRcvBadPackets,
-+            rip2PeerRcvBadRoutes
-+    }
-+    STATUS  current
-+    DESCRIPTION
-+       "This group defines peer information for RIP-II systems."
-+    ::= { rip2Groups 4 }
-+END
---- /dev/null
-+++ b/mibs/SOURCE-ROUTING-MIB.txt
-@@ -0,0 +1,452 @@
-+SOURCE-ROUTING-MIB DEFINITIONS ::= BEGIN
-+
-+IMPORTS
-+        Counter, Gauge
-+                FROM RFC1155-SMI
-+        dot1dBridge, dot1dSr
-+                FROM BRIDGE-MIB
-+        OBJECT-TYPE
-+                FROM RFC-1212;
-+
-+-- groups in the SR MIB
-+
-+-- dot1dSr is imported from the Bridge MIB
-+
-+dot1dPortPair   OBJECT IDENTIFIER ::= { dot1dBridge 10 }
-+
-+-- the dot1dSr group
-+
-+-- this group is implemented by those bridges that
-+-- support the source route bridging mode, including Source
-+-- Routing and SRT bridges.
-+
-+dot1dSrPortTable OBJECT-TYPE
-+    SYNTAX  SEQUENCE OF Dot1dSrPortEntry
-+    ACCESS  not-accessible
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "A table that contains information about every
-+            port that is associated with this source route
-+            bridge."
-+    ::= { dot1dSr 1 }
-+
-+dot1dSrPortEntry OBJECT-TYPE
-+    SYNTAX  Dot1dSrPortEntry
-+    ACCESS  not-accessible
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "A list of information for each port of a source
-+            route bridge."
-+    INDEX   { dot1dSrPort }
-+
-+    ::= { dot1dSrPortTable 1 }
-+
-+Dot1dSrPortEntry ::=
-+    SEQUENCE {
-+        dot1dSrPort
-+            INTEGER,
-+        dot1dSrPortHopCount
-+            INTEGER,
-+        dot1dSrPortLocalSegment
-+            INTEGER,
-+        dot1dSrPortBridgeNum
-+            INTEGER,
-+        dot1dSrPortTargetSegment
-+            INTEGER,
-+        dot1dSrPortLargestFrame
-+            INTEGER,
-+        dot1dSrPortSTESpanMode
-+            INTEGER,
-+        dot1dSrPortSpecInFrames
-+            Counter,
-+        dot1dSrPortSpecOutFrames
-+            Counter,
-+        dot1dSrPortApeInFrames
-+            Counter,
-+        dot1dSrPortApeOutFrames
-+            Counter,
-+        dot1dSrPortSteInFrames
-+            Counter,
-+        dot1dSrPortSteOutFrames
-+            Counter,
-+        dot1dSrPortSegmentMismatchDiscards
-+            Counter,
-+        dot1dSrPortDuplicateSegmentDiscards
-+            Counter,
-+        dot1dSrPortHopCountExceededDiscards
-+            Counter,
-+        dot1dSrPortDupLanIdOrTreeErrors
-+            Counter,
-+        dot1dSrPortLanIdMismatches
-+            Counter
-+    }
-+
-+dot1dSrPort OBJECT-TYPE
-+    SYNTAX  INTEGER (1..65535)
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The port number of the port for which this entry
-+
-+            contains Source Route management information."
-+    ::= { dot1dSrPortEntry 1 }
-+
-+dot1dSrPortHopCount OBJECT-TYPE
-+    SYNTAX  INTEGER
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The maximum number of routing descriptors allowed
-+            in an All Paths or Spanning Tree Explorer frames."
-+    ::= { dot1dSrPortEntry 2 }
-+
-+dot1dSrPortLocalSegment OBJECT-TYPE
-+    SYNTAX  INTEGER
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The segment number that uniquely identifies the
-+            segment to which this port is connected. Current
-+            source routing protocols limit this value to the
-+            range: 0 through 4095. (The value 0 is used by
-+            some management applications for special test
-+            cases.) A value of 65535 signifies that no segment
-+            number is assigned to this port."
-+    ::= { dot1dSrPortEntry 3 }
-+
-+dot1dSrPortBridgeNum OBJECT-TYPE
-+    SYNTAX  INTEGER
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "A bridge number uniquely identifies a bridge when
-+            more than one bridge is used to span the same two
-+            segments.  Current source routing protocols limit
-+            this value to the range: 0 through 15. A value of
-+            65535 signifies that no bridge number is assigned
-+            to this bridge."
-+    ::= { dot1dSrPortEntry 4 }
-+
-+dot1dSrPortTargetSegment OBJECT-TYPE
-+    SYNTAX  INTEGER
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The segment number that corresponds to the target
-+            segment this port is considered to be connected to
-+            by the bridge.  Current source routing protocols
-+            limit this value to the range: 0 through 4095.
-+
-+            (The value 0 is used by some management
-+            applications for special test cases.) A value of
-+            65535 signifies that no target segment is assigned
-+            to this port."
-+    ::= { dot1dSrPortEntry 5 }
-+
-+-- It would be nice if we could use ifMtu as the size of the
-+-- largest frame, but we can't because ifMtu is defined to be
-+-- the size that the (inter-)network layer can use which can
-+-- differ from the MAC layer (especially if several layers of
-+-- encapsulation are used).
-+
-+dot1dSrPortLargestFrame OBJECT-TYPE
-+    SYNTAX  INTEGER
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The maximum size of the INFO field (LLC and
-+            above) that this port can send/receive.  It does
-+            not include any MAC level (framing) octets.  The
-+            value of this object is used by this bridge to
-+            determine whether a modification of the
-+            LargestFrame (LF, see [14]) field of the Routing
-+            Control field of the Routing Information Field is
-+            necessary.
-+
-+            64 valid values are defined by the IEEE 802.5M SRT
-+            Addendum: 516, 635, 754, 873, 993, 1112, 1231,
-+            1350, 1470, 1542, 1615, 1688, 1761, 1833, 1906,
-+            1979, 2052, 2345, 2638, 2932, 3225, 3518, 3812,
-+            4105, 4399, 4865, 5331, 5798, 6264, 6730, 7197,
-+            7663, 8130, 8539, 8949, 9358, 9768, 10178, 10587,
-+            10997, 11407, 12199, 12992, 13785, 14578, 15370,
-+            16163, 16956, 17749, 20730, 23711, 26693, 29674,
-+            32655, 35637, 38618, 41600, 44591, 47583, 50575,
-+            53567, 56559, 59551, and 65535.
-+
-+            An illegal value will not be accepted by the
-+            bridge."
-+    ::= { dot1dSrPortEntry 6 }
-+
-+dot1dSrPortSTESpanMode OBJECT-TYPE
-+    SYNTAX  INTEGER {
-+                auto-span(1),
-+                disabled(2),
-+                forced(3)
-+            }
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "Determines how this port behaves when presented
-+            with a Spanning Tree Explorer frame.  The value
-+            'disabled(2)' indicates that the port will not
-+            accept or send Spanning Tree Explorer packets; any
-+            STE packets received will be silently discarded.
-+            The value 'forced(3)' indicates the port will
-+            always accept and propagate Spanning Tree Explorer
-+            frames.  This allows a manually configured
-+            Spanning Tree for this class of packet to be
-+            configured.  Note that unlike transparent
-+            bridging, this is not catastrophic to the network
-+            if there are loops.  The value 'auto-span(1)' can
-+            only be returned by a bridge that both implements
-+            the Spanning Tree Protocol and has use of the
-+            protocol enabled on this port. The behavior of the
-+            port for Spanning Tree Explorer frames is
-+            determined by the state of dot1dStpPortState.  If
-+            the port is in the 'forwarding' state, the frame
-+            will be accepted or propagated.  Otherwise, it
-+            will be silently discarded."
-+    ::= { dot1dSrPortEntry 7 }
-+
-+dot1dSrPortSpecInFrames OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of Specifically Routed frames, also
-+            referred to as Source Routed Frames, that have
-+            been received from this port's segment."
-+    ::= { dot1dSrPortEntry 8 }
-+
-+dot1dSrPortSpecOutFrames OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of Specifically Routed frames, also
-+            referred to as Source Routed Frames, that this
-+            port has transmitted on its segment."
-+    ::= { dot1dSrPortEntry 9 }
-+
-+dot1dSrPortApeInFrames OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of All Paths Explorer frames, also
-+            referred to as All Routes Explorer frames, that
-+            have been received by this port from its segment."
-+    ::= { dot1dSrPortEntry 10 }
-+
-+dot1dSrPortApeOutFrames OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of all Paths Explorer Frames, also
-+            referred to as All Routes Explorer frames, that
-+            have been transmitted by this port on its
-+            segment."
-+    ::= { dot1dSrPortEntry 11 }
-+
-+dot1dSrPortSteInFrames OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of spanning tree explorer frames that
-+            have been received by this port from its segment."
-+    ::= { dot1dSrPortEntry 12 }
-+
-+dot1dSrPortSteOutFrames OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of spanning tree explorer frames that
-+            have been transmitted by this port on its
-+            segment."
-+    ::= { dot1dSrPortEntry 13 }
-+
-+dot1dSrPortSegmentMismatchDiscards OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of explorer frames that have been
-+            discarded by this port because the routing
-+            descriptor field contained an invalid adjacent
-+            segment value."
-+    ::= { dot1dSrPortEntry 14 }
-+
-+dot1dSrPortDuplicateSegmentDiscards OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of frames that have been discarded by
-+            this port because the routing descriptor field
-+            contained a duplicate segment identifier."
-+    ::= { dot1dSrPortEntry 15 }
-+
-+dot1dSrPortHopCountExceededDiscards OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of explorer frames that have been
-+            discarded by this port because the Routing
-+            Information Field has exceeded the maximum route
-+            descriptor length."
-+    ::= { dot1dSrPortEntry 16 }
-+
-+dot1dSrPortDupLanIdOrTreeErrors OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of duplicate LAN IDs or Tree errors.
-+            This helps in detection of problems in networks
-+            containing older IBM Source Routing Bridges."
-+    ::= { dot1dSrPortEntry 17 }
-+
-+dot1dSrPortLanIdMismatches OBJECT-TYPE
-+    SYNTAX  Counter
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The number of ARE and STE frames that were
-+            discarded because the last LAN ID in the routing
-+            information field did not equal the LAN-in ID.
-+            This error can occur in implementations which do
-+            only a LAN-in ID and Bridge Number check instead
-+            of a LAN-in ID, Bridge Number, and LAN-out ID
-+            check before they forward broadcast frames."
-+    ::= { dot1dSrPortEntry 18 }
-+
-+-- scalar object in dot1dSr
-+
-+dot1dSrBridgeLfMode OBJECT-TYPE
-+    SYNTAX  INTEGER {
-+                mode3(1),
-+                mode6(2)
-+            }
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "Indicates whether the bridge operates using older
-+            3 bit length negotiation fields or the newer 6 bit
-+            length field in its RIF."
-+    ::= { dot1dSr 2 }
-+
-+-- The Port-Pair Database
-+
-+-- Implementation of this group is optional.
-+
-+-- This group is implemented by those bridges that support
-+-- the direct multiport model of the source route bridging
-+-- mode as defined in the IEEE 802.5 SRT Addendum to
-+-- 802.1d.
-+
-+-- Bridges implementing this group may report 65535 for
-+-- dot1dSrPortBridgeNumber and dot1dSrPortTargetSegment,
-+-- indicating that those objects are not applicable.
-+
-+dot1dPortPairTableSize OBJECT-TYPE
-+    SYNTAX  Gauge
-+    ACCESS  read-only
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The total number of entries in the Bridge Port
-+            Pair Database."
-+    ::= { dot1dPortPair 1 }
-+
-+-- the Bridge Port-Pair table
-+
-+-- this table represents port pairs within a bridge forming
-+-- a unique bridge path, as defined in the IEEE 802.5M SRT
-+-- Addendum.
-+
-+dot1dPortPairTable OBJECT-TYPE
-+    SYNTAX  SEQUENCE OF Dot1dPortPairEntry
-+    ACCESS  not-accessible
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "A table that contains information about every
-+
-+            port pair database entity associated with this
-+            source routing bridge."
-+    ::= { dot1dPortPair 2 }
-+
-+dot1dPortPairEntry OBJECT-TYPE
-+    SYNTAX  Dot1dPortPairEntry
-+    ACCESS  not-accessible
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "A list of information for each port pair entity
-+            of a bridge."
-+    INDEX   { dot1dPortPairLowPort, dot1dPortPairHighPort }
-+    ::= { dot1dPortPairTable 1 }
-+
-+Dot1dPortPairEntry ::=
-+    SEQUENCE {
-+        dot1dPortPairLowPort
-+            INTEGER,
-+        dot1dPortPairHighPort
-+            INTEGER,
-+        dot1dPortPairBridgeNum
-+            INTEGER,
-+        dot1dPortPairBridgeState
-+            INTEGER
-+    }
-+
-+dot1dPortPairLowPort OBJECT-TYPE
-+    SYNTAX  INTEGER (1..65535)
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The port number of the lower numbered port for
-+            which this entry contains port pair database
-+            information."
-+    ::= { dot1dPortPairEntry 1 }
-+
-+dot1dPortPairHighPort OBJECT-TYPE
-+    SYNTAX  INTEGER (1..65535)
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The port number of the higher numbered port for
-+            which this entry contains port pair database
-+            information."
-+    ::= { dot1dPortPairEntry 2 }
-+
-+dot1dPortPairBridgeNum OBJECT-TYPE
-+    SYNTAX  INTEGER
-+
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "A bridge number that uniquely identifies the path
-+            provided by this source routing bridge between the
-+            segments connected to dot1dPortPairLowPort and
-+            dot1dPortPairHighPort.  The purpose of bridge
-+            number is to disambiguate between multiple paths
-+            connecting the same two LANs."
-+    ::= { dot1dPortPairEntry 3 }
-+
-+dot1dPortPairBridgeState OBJECT-TYPE
-+    SYNTAX  INTEGER {
-+                enabled(1),
-+                disabled(2),
-+                invalid(3)
-+            }
-+    ACCESS  read-write
-+    STATUS  mandatory
-+    DESCRIPTION
-+            "The state of dot1dPortPairBridgeNum.  Writing
-+            'invalid(3)' to this object removes the
-+            corresponding entry."
-+    ::= { dot1dPortPairEntry 4 }
-+
-+END
diff --git a/package/network/net-snmp/patches/160-no_ldconfig.patch b/package/network/net-snmp/patches/160-no_ldconfig.patch
deleted file mode 100644 (file)
index d9de73e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/configure
-+++ b/configure
-@@ -15097,7 +15097,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
-   need_version=no
-   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
-   soname_spec='${libname}${release}${shared_ext}$major'
--  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-+  finish_cmds=''
-   shlibpath_var=LD_LIBRARY_PATH
-   shlibpath_overrides_runpath=no
diff --git a/package/network/net-snmp/patches/170-ldflags.patch b/package/network/net-snmp/patches/170-ldflags.patch
deleted file mode 100644 (file)
index 656fded..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/Makefile.top
-+++ b/Makefile.top
-@@ -87,7 +87,7 @@ LIBCURRENT  = 30
- LIBAGE      = 0
- LIBREVISION = 0
--LIB_LD_CMD      = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
-+LIB_LD_CMD      = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) $(LDFLAGS) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
- LIB_EXTENSION   = la
- LIB_VERSION     =
- LIB_LDCONFIG_CMD = $(LIBTOOL) --mode=finish $(INSTALL_PREFIX)$(libdir)
diff --git a/package/network/net-snmp/patches/750-ieee802dot11.patch b/package/network/net-snmp/patches/750-ieee802dot11.patch
deleted file mode 100644 (file)
index a3c5c0a..0000000
+++ /dev/null
@@ -1,6156 +0,0 @@
---- /dev/null
-+++ b/agent/mibgroup/ieee802dot11.c
-@@ -0,0 +1,4915 @@
-+/****************************************************************************
-+*                                                                           *
-+*  File Name:           ieee802dot11.c                                      *
-+*  Used By:                                                                 *
-+*                                                                           *
-+*  Operating System:                                                        *
-+*  Purpose:                                                                 *
-+*                                                                           *
-+*  Comments:                                                                *
-+*                                                                           *
-+*  Author:              Larry Simmons                                       *
-+*                       lsimmons@avantcom.com                               *
-+*                       www.avantcom.com                                    *
-+*                                                                           *
-+*  Creation Date:       09/02/03                                            *
-+*                                                                           *
-+*   Ver    Date   Inits Modification                                        *
-+*  ----- -------- ----- ------------                                        *
-+*  0.0.1 09/02/03  LRS  created                                             *
-+*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
-+****************************************************************************/
-+/****************************************************************************
-+*                               Includes                                    *
-+****************************************************************************/
-+#include <net-snmp/net-snmp-config.h>
-+#include <net-snmp/net-snmp-includes.h>
-+#include <net-snmp/agent/net-snmp-agent-includes.h>
-+#include "ieee802dot11.h"
-+#include "iwlib.h"
-+
-+/****************************************************************************
-+*                                Defines                                    *
-+****************************************************************************/
-+#define DISPLAYWIEXT                        // display wireless ext info
-+#define TABLE_SIZE   1
-+//#define MINLOADFREQ 15                    // min reload frequency in seconds
-+#define MINLOADFREQ 5                       // min reload frequency in seconds      // for testing
-+#define PROC_NET_DEV      "/proc/net/dev"
-+#define PROC_NET_WIRELESS "/proc/net/wireless"
-+
-+#ifndef UCHAR
-+  typedef unsigned char UCHAR;
-+#endif
-+
-+/****************************************************************************
-+*                            Private Functions                              *
-+****************************************************************************/
-+static void loadTables();
-+static void loadWiExt ( int, char *, struct wireless_info * );
-+static void load80211Structs ( int, char *, struct wireless_info * );
-+static void initStructs();
-+
-+// Wireless Extensions Specific Functions
-+static void loadWiExtTo80211Structs ( int, char *, struct wireless_info * );
-+static void displayWiExt ( struct wireless_info );
-+
-+// Linked List Functions
-+static void addList ( char *, char *, int );
-+static void initLists();                    // initialize all the linked lists
-+static void flushLists();                   // flush all the linked lists
-+static void flushList ( char * );           // flush a single linked list
-+
-+// Utility Functions
-+static int  openSocket ( void );
-+static int  mWatt2dbm ( int );
-+static char *htob ( char * );
-+static int  hasChanged ( char *, int );
-+
-+/****************************************************************************
-+*                            Private Variables                              *
-+****************************************************************************/
-+static unsigned long lastLoad = 0;          // ET in secs at last table load
-+
-+static struct avNode *lastNode, *newNode, *np;
-+
-+/****************************************************************************
-+*                            External Functions                             *
-+****************************************************************************/
-+
-+/****************************************************************************
-+*   ieee802dot11_variables_oid:                                             *
-+*       this is the top level oid that we want to register under.  This     *
-+*       is essentially a prefix, with the suffix appearing in the           *
-+*       variable below.                                                     *
-+****************************************************************************/
-+oid ieee802dot11_variables_oid[] = { 1,2,840,10036 };
-+
-+/****************************************************************************
-+*   variable7 ieee802dot11_variables:                                       *
-+*     this variable defines function callbacks and type return information  *
-+*     for the ieee802dot11 mib section                                      *
-+****************************************************************************/
-+struct variable7 ieee802dot11_variables[] = {
-+/*  magic number        , variable type , ro/rw , callback fn  , L, oidsuffix */
-+#define   DOT11STATIONID        3
-+  { DOT11STATIONID      , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,1 } },
-+#define   DOT11MEDIUMOCCUPANCYLIMIT  4
-+  { DOT11MEDIUMOCCUPANCYLIMIT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,2 } },
-+#define   DOT11CFPOLLABLE       5
-+  { DOT11CFPOLLABLE     , ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,3 } },
-+#define   DOT11CFPPERIOD        6
-+  { DOT11CFPPERIOD      , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,4 } },
-+#define   DOT11CFPMAXDURATION   7
-+  { DOT11CFPMAXDURATION , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,5 } },
-+#define   DOT11AUTHENTICATIONRESPONSETIMEOUT  8
-+  { DOT11AUTHENTICATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,6 } },
-+#define   DOT11PRIVACYOPTIONIMPLEMENTED  9
-+  { DOT11PRIVACYOPTIONIMPLEMENTED, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,7 } },
-+#define   DOT11POWERMANAGEMENTMODE  10
-+  { DOT11POWERMANAGEMENTMODE, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,8 } },
-+#define   DOT11DESIREDSSID      11
-+  { DOT11DESIREDSSID    , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,9 } },
-+#define   DOT11DESIREDBSSTYPE   12
-+  { DOT11DESIREDBSSTYPE , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,10 } },
-+#define   DOT11OPERATIONALRATESET  13
-+  { DOT11OPERATIONALRATESET, ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,11 } },
-+#define   DOT11BEACONPERIOD     14
-+  { DOT11BEACONPERIOD   , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,12 } },
-+#define   DOT11DTIMPERIOD       15
-+  { DOT11DTIMPERIOD     , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,13 } },
-+#define   DOT11ASSOCIATIONRESPONSETIMEOUT  16
-+  { DOT11ASSOCIATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,14 } },
-+#define   DOT11DISASSOCIATEREASON  17
-+  { DOT11DISASSOCIATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,15 } },
-+#define   DOT11DISASSOCIATESTATION  18
-+  { DOT11DISASSOCIATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,16 } },
-+#define   DOT11DEAUTHENTICATEREASON  19
-+  { DOT11DEAUTHENTICATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,17 } },
-+#define   DOT11DEAUTHENTICATESTATION  20
-+  { DOT11DEAUTHENTICATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,18 } },
-+#define   DOT11AUTHENTICATEFAILSTATUS  21
-+  { DOT11AUTHENTICATEFAILSTATUS, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,19 } },
-+#define   DOT11AUTHENTICATEFAILSTATION  22
-+  { DOT11AUTHENTICATEFAILSTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,20 } },
-+
-+#define   DOT11AUTHENTICATIONALGORITHM  26
-+  { DOT11AUTHENTICATIONALGORITHM, ASN_INTEGER   , RONLY , var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,2 } },
-+#define   DOT11AUTHENTICATIONALGORITHMSENABLE  27
-+  { DOT11AUTHENTICATIONALGORITHMSENABLE, ASN_INTEGER   , RWRITE, var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,3 } },
-+
-+#define   DOT11WEPDEFAULTKEYVALUE  31
-+  { DOT11WEPDEFAULTKEYVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPDefaultKeysTable, 4, { 1,3,1,2 } },
-+
-+#define   DOT11WEPKEYMAPPINGADDRESS  35
-+  { DOT11WEPKEYMAPPINGADDRESS, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,2 } },
-+#define   DOT11WEPKEYMAPPINGWEPON  36
-+  { DOT11WEPKEYMAPPINGWEPON, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,3 } },
-+#define   DOT11WEPKEYMAPPINGVALUE  37
-+  { DOT11WEPKEYMAPPINGVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,4 } },
-+#define   DOT11WEPKEYMAPPINGSTATUS  38
-+  { DOT11WEPKEYMAPPINGSTATUS, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,5 } },
-+
-+#define   DOT11PRIVACYINVOKED   41
-+  { DOT11PRIVACYINVOKED , ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,1 } },
-+#define   DOT11WEPDEFAULTKEYID  42
-+  { DOT11WEPDEFAULTKEYID, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,2 } },
-+#define   DOT11WEPKEYMAPPINGLENGTH  43
-+  { DOT11WEPKEYMAPPINGLENGTH, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,3 } },
-+#define   DOT11EXCLUDEUNENCRYPTED  44
-+  { DOT11EXCLUDEUNENCRYPTED, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,4 } },
-+#define   DOT11WEPICVERRORCOUNT  45
-+  { DOT11WEPICVERRORCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,5 } },
-+#define   DOT11WEPEXCLUDEDCOUNT  46
-+  { DOT11WEPEXCLUDEDCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,6 } },
-+
-+#define   DOT11MACADDRESS       49
-+  { DOT11MACADDRESS     , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,1 } },
-+#define   DOT11RTSTHRESHOLD     50
-+  { DOT11RTSTHRESHOLD   , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,2 } },
-+#define   DOT11SHORTRETRYLIMIT  51
-+  { DOT11SHORTRETRYLIMIT, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,3 } },
-+#define   DOT11LONGRETRYLIMIT   52
-+  { DOT11LONGRETRYLIMIT , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,4 } },
-+#define   DOT11FRAGMENTATIONTHRESHOLD  53
-+  { DOT11FRAGMENTATIONTHRESHOLD, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,5 } },
-+#define   DOT11MAXTRANSMITMSDULIFETIME  54
-+  { DOT11MAXTRANSMITMSDULIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,6 } },
-+#define   DOT11MAXRECEIVELIFETIME  55
-+  { DOT11MAXRECEIVELIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,7 } },
-+#define   DOT11MANUFACTURERID   56
-+  { DOT11MANUFACTURERID , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,8 } },
-+#define   DOT11PRODUCTID        57
-+  { DOT11PRODUCTID      , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,9 } },
-+
-+#define   DOT11TRANSMITTEDFRAGMENTCOUNT  60
-+  { DOT11TRANSMITTEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,1 } },
-+#define   DOT11MULTICASTTRANSMITTEDFRAMECOUNT  61
-+  { DOT11MULTICASTTRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,2 } },
-+#define   DOT11FAILEDCOUNT      62
-+  { DOT11FAILEDCOUNT    , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,3 } },
-+#define   DOT11RETRYCOUNT       63
-+  { DOT11RETRYCOUNT     , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,4 } },
-+#define   DOT11MULTIPLERETRYCOUNT  64
-+  { DOT11MULTIPLERETRYCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,5 } },
-+#define   DOT11FRAMEDUPLICATECOUNT  65
-+  { DOT11FRAMEDUPLICATECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,6 } },
-+#define   DOT11RTSSUCCESSCOUNT  66
-+  { DOT11RTSSUCCESSCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,7 } },
-+#define   DOT11RTSFAILURECOUNT  67
-+  { DOT11RTSFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,8 } },
-+#define   DOT11ACKFAILURECOUNT  68
-+  { DOT11ACKFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,9 } },
-+#define   DOT11RECEIVEDFRAGMENTCOUNT  69
-+  { DOT11RECEIVEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,10 } },
-+#define   DOT11MULTICASTRECEIVEDFRAMECOUNT  70
-+  { DOT11MULTICASTRECEIVEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,11 } },
-+#define   DOT11FCSERRORCOUNT    71
-+  { DOT11FCSERRORCOUNT  , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,12 } },
-+#define   DOT11TRANSMITTEDFRAMECOUNT  72
-+  { DOT11TRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,13 } },
-+#define   DOT11WEPUNDECRYPTABLECOUNT  73
-+  { DOT11WEPUNDECRYPTABLECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,14 } },
-+
-+#define   DOT11ADDRESS          77
-+  { DOT11ADDRESS        , ASN_OCTET_STR , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,2 } },
-+#define   DOT11GROUPADDRESSESSTATUS  78
-+  { DOT11GROUPADDRESSESSTATUS, ASN_INTEGER   , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,3 } },
-+
-+#define   DOT11RESOURCETYPEIDNAME  79
-+  { DOT11RESOURCETYPEIDNAME, ASN_OCTET_STR , RONLY , var_ieee802dot11, 3, { 3,1,1 } },
-+#define   DOT11MANUFACTUREROUI  82
-+  { DOT11MANUFACTUREROUI, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,1 } },
-+#define   DOT11MANUFACTURERNAME  83
-+  { DOT11MANUFACTURERNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,2 } },
-+#define   DOT11MANUFACTURERPRODUCTNAME  84
-+  { DOT11MANUFACTURERPRODUCTNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,3 } },
-+#define   DOT11MANUFACTURERPRODUCTVERSION  85
-+  { DOT11MANUFACTURERPRODUCTVERSION, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,4 } },
-+
-+#define   DOT11PHYTYPE          88
-+  { DOT11PHYTYPE        , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,1 } },
-+#define   DOT11CURRENTREGDOMAIN  89
-+  { DOT11CURRENTREGDOMAIN, ASN_INTEGER   , RWRITE, var_dot11PhyOperationTable, 4, { 4,1,1,2 } },
-+#define   DOT11TEMPTYPE         90
-+  { DOT11TEMPTYPE       , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,3 } },
-+#define   DOT11CURRENTTXANTENNA  93
-+  { DOT11CURRENTTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,1 } },
-+#define   DOT11DIVERSITYSUPPORT  94
-+  { DOT11DIVERSITYSUPPORT, ASN_INTEGER   , RONLY , var_dot11PhyAntennaTable, 4, { 4,2,1,2 } },
-+#define   DOT11CURRENTRXANTENNA  95
-+  { DOT11CURRENTRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,3 } },
-+#define   DOT11NUMBERSUPPORTEDPOWERLEVELS  98
-+  { DOT11NUMBERSUPPORTEDPOWERLEVELS, ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,1 } },
-+#define   DOT11TXPOWERLEVEL1    99
-+  { DOT11TXPOWERLEVEL1  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,2 } },
-+#define   DOT11TXPOWERLEVEL2    100
-+  { DOT11TXPOWERLEVEL2  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,3 } },
-+#define   DOT11TXPOWERLEVEL3    101
-+  { DOT11TXPOWERLEVEL3  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,4 } },
-+#define   DOT11TXPOWERLEVEL4    102
-+  { DOT11TXPOWERLEVEL4  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,5 } },
-+#define   DOT11TXPOWERLEVEL5    103
-+  { DOT11TXPOWERLEVEL5  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,6 } },
-+#define   DOT11TXPOWERLEVEL6    104
-+  { DOT11TXPOWERLEVEL6  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,7 } },
-+#define   DOT11TXPOWERLEVEL7    105
-+  { DOT11TXPOWERLEVEL7  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,8 } },
-+#define   DOT11TXPOWERLEVEL8    106
-+  { DOT11TXPOWERLEVEL8  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,9 } },
-+#define   DOT11CURRENTTXPOWERLEVEL  107
-+  { DOT11CURRENTTXPOWERLEVEL, ASN_INTEGER   , RWRITE, var_dot11PhyTxPowerTable, 4, { 4,3,1,10 } },
-+
-+#define   DOT11HOPTIME          110
-+  { DOT11HOPTIME        , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,1 } },
-+#define   DOT11CURRENTCHANNELNUMBER  111
-+  { DOT11CURRENTCHANNELNUMBER, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,2 } },
-+#define   DOT11MAXDWELLTIME     112
-+  { DOT11MAXDWELLTIME   , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,3 } },
-+#define   DOT11CURRENTDWELLTIME  113
-+  { DOT11CURRENTDWELLTIME, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,4 } },
-+#define   DOT11CURRENTSET       114
-+  { DOT11CURRENTSET     , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,5 } },
-+#define   DOT11CURRENTPATTERN   115
-+  { DOT11CURRENTPATTERN , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,6 } },
-+#define   DOT11CURRENTINDEX     116
-+  { DOT11CURRENTINDEX   , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,7 } },
-+
-+#define   DOT11CURRENTCHANNEL   119
-+  { DOT11CURRENTCHANNEL , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,1 } },
-+#define   DOT11CCAMODESUPPORTED  120
-+  { DOT11CCAMODESUPPORTED, ASN_INTEGER   , RONLY , var_dot11PhyDSSSTable, 4, { 4,5,1,2 } },
-+#define   DOT11CURRENTCCAMODE   121
-+  { DOT11CURRENTCCAMODE , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,3 } },
-+#define   DOT11EDTHRESHOLD      122
-+  { DOT11EDTHRESHOLD    , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,4 } },
-+
-+#define   DOT11CCAWATCHDOGTIMERMAX  125
-+  { DOT11CCAWATCHDOGTIMERMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,1 } },
-+#define   DOT11CCAWATCHDOGCOUNTMAX  126
-+  { DOT11CCAWATCHDOGCOUNTMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,2 } },
-+#define   DOT11CCAWATCHDOGTIMERMIN  127
-+  { DOT11CCAWATCHDOGTIMERMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,3 } },
-+#define   DOT11CCAWATCHDOGCOUNTMIN  128
-+  { DOT11CCAWATCHDOGCOUNTMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,4 } },
-+
-+#define   DOT11REGDOMAINSSUPPORTVALUE  132
-+  { DOT11REGDOMAINSSUPPORTVALUE, ASN_INTEGER   , RONLY , var_dot11RegDomainsSupportedTable, 4, { 4,7,1,2 } },
-+
-+#define   DOT11SUPPORTEDTXANTENNA  136
-+  { DOT11SUPPORTEDTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,2 } },
-+#define   DOT11SUPPORTEDRXANTENNA  137
-+  { DOT11SUPPORTEDRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,3 } },
-+#define   DOT11DIVERSITYSELECTIONRX  138
-+  { DOT11DIVERSITYSELECTIONRX, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,4 } },
-+
-+#define   DOT11SUPPORTEDDATARATESTXVALUE  142
-+  { DOT11SUPPORTEDDATARATESTXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesTxTable, 4, { 4,9,1,2 } },
-+
-+#define   DOT11SUPPORTEDDATARATESRXVALUE  146
-+  { DOT11SUPPORTEDDATARATESRXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesRxTable, 4, { 4,10,1,2 } },
-+};
-+// ( L = length of the oidsuffix )
-+
-+/****************************************************************************
-+*                                                                           *
-+*         init_ieee802dot11() - perform any required initialization         *
-+*                                                                           *
-+****************************************************************************/
-+void init_ieee802dot11 ( void ) {
-+
-+  /* register ourselves with the agent to handle our mib tree */
-+  REGISTER_MIB("ieee802dot11", ieee802dot11_variables, variable7,
-+               ieee802dot11_variables_oid);
-+
-+  initLists();
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*    shutdown_ieee802dot11() - perform any required cleanup @ shutdown      *
-+*                                                                           *
-+****************************************************************************/
-+void shutdown_ieee802dot11 ( void )
-+{
-+  flushLists();
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_ieee802dot11() -                                                    *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_ieee802dot11 ( struct variable *vp, 
-+                    oid     *name, 
-+                    size_t  *length, 
-+                    int     exact, 
-+                    size_t  *var_len, 
-+                    WriteMethod **write_method)
-+{
-+  loadTables();                                               
-+
-+  if ( header_generic ( vp, name, length, exact,var_len,write_method )
-+                                  == MATCH_FAILED )
-+    return NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11RESOURCETYPEIDNAME:
-+      if ( !haveResourceTypeIDName )
-+        return NULL;
-+      *var_len = strlen ( resourceTypeIDName );
-+      return ( UCHAR * ) resourceTypeIDName;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*  var_dot11StationConfigTable() - return a variable value from the table   *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11StationConfigTable ( struct variable *vp,
-+                              oid     *name,
-+                              size_t  *length,
-+                              int     exact,
-+                              size_t  *var_len,
-+                              WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+  static char MACWork[17];
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &scList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    sc = ( struct scTbl_data * ) np->data;
-+    rName[vp->namelen] = sc->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) || 
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+
-+      switch ( vp->magic ) {      // found requested OID, now check for requested variable
-+        case DOT11STATIONID: 
-+          if ( sc->haveStationID                     ) found = TRUE; break;
-+        case DOT11MEDIUMOCCUPANCYLIMIT:
-+          if ( sc->haveMediumOccupancyLimit          ) found = TRUE; break;
-+        case DOT11CFPOLLABLE:
-+          if ( sc->haveCFPPollable                   ) found = TRUE; break;
-+        case DOT11CFPPERIOD:
-+          if ( sc->haveCFPPeriod                     ) found = TRUE; break;
-+        case DOT11CFPMAXDURATION:
-+          if ( sc->haveMaxDuration                   ) found = TRUE; break;
-+        case DOT11AUTHENTICATIONRESPONSETIMEOUT:
-+          if ( sc->haveAuthenticationResponseTimeOut ) found = TRUE; break;
-+        case DOT11PRIVACYOPTIONIMPLEMENTED:
-+          if ( sc->havePrivacyOptionImplemented      ) found = TRUE; break;
-+        case DOT11POWERMANAGEMENTMODE:
-+          if ( sc->havePowerManagementMode           ) found = TRUE; break;
-+        case DOT11DESIREDSSID:
-+          if ( sc->haveDesiredSSID                   ) found = TRUE; break;
-+        case DOT11DESIREDBSSTYPE:
-+          if ( sc->haveDesiredBSSType                ) found = TRUE; break;
-+        case DOT11OPERATIONALRATESET:
-+          if ( sc->haveOperationalRateSet            ) found = TRUE; break;
-+        case DOT11BEACONPERIOD: 
-+          if ( sc->haveBeaconPeriod                  ) found = TRUE; break;
-+        case DOT11DTIMPERIOD:
-+          if ( sc->haveDTIMPeriod                    ) found = TRUE; break;
-+        case DOT11ASSOCIATIONRESPONSETIMEOUT:
-+          if ( sc->haveAssociationResponseTimeOut    ) found = TRUE; break;
-+        case DOT11DISASSOCIATEREASON:
-+          if ( sc->disAssociationReason              ) found = TRUE; break;
-+        case DOT11DISASSOCIATESTATION:
-+          if ( sc->haveDisAssociationStation         ) found = TRUE; break;
-+        case DOT11DEAUTHENTICATEREASON:
-+          if ( sc->deAuthenticationReason            ) found = TRUE; break;
-+        case DOT11DEAUTHENTICATESTATION:
-+          if ( sc->haveDeAuthenticationStation       ) found = TRUE; break;
-+        case DOT11AUTHENTICATEFAILSTATUS:
-+          if ( sc->authenticateFailStatus            ) found = TRUE; break;
-+        case DOT11AUTHENTICATEFAILSTATION:
-+          if ( sc->haveAuthenticateFailStation       ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11STATIONID: 
-+//    *write_method = write_dot11StationID;
-+      MACWork[ 0] = sc->stationID [ 0];
-+      MACWork[ 1] = sc->stationID [ 1];
-+      MACWork[ 2] = sc->stationID [ 3];
-+      MACWork[ 3] = sc->stationID [ 4];
-+      MACWork[ 4] = sc->stationID [ 6];
-+      MACWork[ 5] = sc->stationID [ 7];
-+      MACWork[ 6] = sc->stationID [ 9];
-+      MACWork[ 7] = sc->stationID [10];
-+      MACWork[ 8] = sc->stationID [12];
-+      MACWork[ 9] = sc->stationID [13];
-+      MACWork[10] = sc->stationID [15];
-+      MACWork[11] = sc->stationID [16];
-+      MACWork[12] = '\0';
-+      *var_len = 6;
-+      return ( UCHAR * ) htob ( MACWork );
-+
-+    case DOT11MEDIUMOCCUPANCYLIMIT:
-+//    *write_method = write_dot11MediumOccupancyLimit;
-+      sc->mediumOccupancyLimit = 5;
-+      return ( UCHAR * ) &sc->mediumOccupancyLimit;
-+
-+    case DOT11CFPOLLABLE:
-+      return ( UCHAR * ) &sc->CFPPollable;
-+
-+    case DOT11CFPPERIOD:
-+//    *write_method = write_dot11CFPPeriod;
-+      return ( UCHAR * ) &sc->CFPPeriod;
-+
-+    case DOT11CFPMAXDURATION:
-+//    *write_method = write_dot11CFPMaxDuration;
-+      return ( UCHAR * ) &sc->maxDuration;
-+
-+    case DOT11AUTHENTICATIONRESPONSETIMEOUT:
-+//    *write_method = write_dot11AuthenticationResponseTimeOut;
-+      return ( UCHAR * ) &sc->authenticationResponseTimeOut;
-+
-+    case DOT11PRIVACYOPTIONIMPLEMENTED:
-+      return ( UCHAR * ) &sc->privacyOptionImplemented;
-+
-+    case DOT11POWERMANAGEMENTMODE:
-+//    *write_method = write_dot11PowerManagementMode;
-+      return ( UCHAR * ) &sc->powerManagementMode;
-+
-+    case DOT11DESIREDSSID:
-+//    *write_method = write_dot11DesiredSSID;
-+      *var_len = strlen ( sc->desiredSSID );
-+      return ( UCHAR * ) sc->desiredSSID;
-+
-+    case DOT11DESIREDBSSTYPE:
-+//    *write_method = write_dot11DesiredBSSType;
-+      return ( UCHAR * ) &sc->desiredBSSType;
-+
-+    case DOT11OPERATIONALRATESET:
-+//    *write_method = write_dot11OperationalRateSet;
-+      *var_len = strlen ( sc->operationalRateSet );
-+      return ( UCHAR * ) sc->operationalRateSet;
-+
-+    case DOT11BEACONPERIOD: 
-+//    *write_method = write_dot11BeaconPeriod;
-+      return ( UCHAR * ) &sc->beaconPeriod;
-+
-+    case DOT11DTIMPERIOD:
-+//    *write_method = write_dot11DTIMPeriod;
-+      return ( UCHAR * ) &sc->DTIMPeriod;
-+
-+    case DOT11ASSOCIATIONRESPONSETIMEOUT:
-+//    *write_method = write_dot11AssociationResponseTimeOut;
-+      return ( UCHAR * ) &sc->associationResponseTimeOut;
-+
-+    case DOT11DISASSOCIATEREASON:
-+      return ( UCHAR * ) &sc->disAssociationReason;
-+
-+    case DOT11DISASSOCIATESTATION:
-+      MACWork[ 0] = sc->disAssociationStation[ 0];
-+      MACWork[ 1] = sc->disAssociationStation[ 1];
-+      MACWork[ 2] = sc->disAssociationStation[ 3];
-+      MACWork[ 3] = sc->disAssociationStation[ 4];
-+      MACWork[ 4] = sc->disAssociationStation[ 6];
-+      MACWork[ 5] = sc->disAssociationStation[ 7];
-+      MACWork[ 6] = sc->disAssociationStation[ 9];
-+      MACWork[ 7] = sc->disAssociationStation[10];
-+      MACWork[ 8] = sc->disAssociationStation[12];
-+      MACWork[ 9] = sc->disAssociationStation[13];
-+      MACWork[10] = sc->disAssociationStation[15];
-+      MACWork[11] = sc->disAssociationStation[16];
-+      MACWork[12] = '\0';
-+      *var_len = 6;
-+      return ( UCHAR * ) htob ( MACWork );
-+
-+    case DOT11DEAUTHENTICATEREASON:
-+      return ( UCHAR * ) &sc->deAuthenticationReason;
-+
-+    case DOT11DEAUTHENTICATESTATION:
-+      MACWork[ 0] = sc->deAuthenticationStation[ 0];
-+      MACWork[ 1] = sc->deAuthenticationStation[ 1];
-+      MACWork[ 2] = sc->deAuthenticationStation[ 3];
-+      MACWork[ 3] = sc->deAuthenticationStation[ 4];
-+      MACWork[ 4] = sc->deAuthenticationStation[ 6];
-+      MACWork[ 5] = sc->deAuthenticationStation[ 7];
-+      MACWork[ 6] = sc->deAuthenticationStation[ 9];
-+      MACWork[ 7] = sc->deAuthenticationStation[10];
-+      MACWork[ 8] = sc->deAuthenticationStation[12];
-+      MACWork[ 9] = sc->deAuthenticationStation[13];
-+      MACWork[10] = sc->deAuthenticationStation[15];
-+      MACWork[11] = sc->deAuthenticationStation[16];
-+      MACWork[12] = '\0';
-+      *var_len = 6;
-+      return ( UCHAR * ) htob ( MACWork );
-+
-+    case DOT11AUTHENTICATEFAILSTATUS:
-+      return ( UCHAR * ) &sc->authenticateFailStatus;
-+
-+    case DOT11AUTHENTICATEFAILSTATION:
-+      MACWork[ 0] = sc->authenticateFailStation[ 0];
-+      MACWork[ 1] = sc->authenticateFailStation[ 1];
-+      MACWork[ 2] = sc->authenticateFailStation[ 3];
-+      MACWork[ 3] = sc->authenticateFailStation[ 4];
-+      MACWork[ 4] = sc->authenticateFailStation[ 6];
-+      MACWork[ 5] = sc->authenticateFailStation[ 7];
-+      MACWork[ 6] = sc->authenticateFailStation[ 9];
-+      MACWork[ 7] = sc->authenticateFailStation[10];
-+      MACWork[ 8] = sc->authenticateFailStation[12];
-+      MACWork[ 9] = sc->authenticateFailStation[13];
-+      MACWork[10] = sc->authenticateFailStation[15];
-+      MACWork[11] = sc->authenticateFailStation[16];
-+      MACWork[12] = '\0';
-+      *var_len = 6;
-+      return ( UCHAR * ) htob ( MACWork );
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*  var_dot11AuthenticationAlgorithmsTable() -                               *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11AuthenticationAlgorithmsTable (  struct variable *vp,
-+                                          oid     *name,
-+                                          size_t  *length,
-+                                          int     exact,
-+                                          size_t  *var_len,
-+                                          WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &aaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    aa = ( struct aaTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = aa->ifIndex;
-+    rName[vp->namelen + 1] = aa->authenticationAlgorithmsIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11AUTHENTICATIONALGORITHM:
-+          if ( aa->haveAuthenticationAlgorithm    ) found = TRUE; break;
-+        case DOT11AUTHENTICATIONALGORITHMSENABLE:
-+          if ( aa->authenticationAlgorithmsEnable ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11AUTHENTICATIONALGORITHM:
-+      return ( UCHAR * ) &aa->authenticationAlgorithm;
-+        
-+    case DOT11AUTHENTICATIONALGORITHMSENABLE:
-+//    *write_method = write_dot11AuthenticationAlgorithmsEnable;
-+      return ( UCHAR * ) &aa->authenticationAlgorithmsEnable;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*  var_dot11WEPDefaultKeysTable() -                                         *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11WEPDefaultKeysTable ( struct variable *vp,
-+                                oid     *name,
-+                                size_t  *length,
-+                                int     exact,
-+                                size_t  *var_len,
-+                                WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &dfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    df = ( struct dfTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = df->ifIndex;
-+    rName[vp->namelen + 1] = df->WEPDefaultKeyIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11WEPDEFAULTKEYVALUE:
-+          if ( df->haveWEPDefaultKeyValue ) found = TRUE; break;
-+      }          
-+    }          
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11WEPDEFAULTKEYVALUE:
-+//    *write_method = write_dot11WEPDefaultKeyValue;
-+      *var_len = strlen ( df->WEPDefaultKeyValue );
-+      return ( UCHAR * ) df->WEPDefaultKeyValue;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*  var_dot11WEPKeyMappingsTable() -                                         *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11WEPKeyMappingsTable ( struct variable *vp,
-+                                oid     *name,
-+                                size_t  *length,
-+                                int     exact,
-+                                size_t  *var_len,
-+                                WriteMethod **write_method)
-+{
-+  static char MACWork[17];
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &kmList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    km = ( struct kmTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = km->ifIndex;
-+    rName[vp->namelen + 1] = km->WEPKeyMappingIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11WEPKEYMAPPINGADDRESS:
-+          if ( km->haveWEPKeyMappingAddress ) found = TRUE; break;
-+        case DOT11WEPKEYMAPPINGWEPON:
-+          if ( km->haveWEPKeyMappingWEPOn   ) found = TRUE; break;
-+        case DOT11WEPKEYMAPPINGVALUE:
-+          if ( km->haveWEPKeyMappingValue   ) found = TRUE; break;
-+        case DOT11WEPKEYMAPPINGSTATUS:
-+          if ( km->haveWEPKeyMappingStatus  ) found = TRUE; break; 
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11WEPKEYMAPPINGADDRESS:
-+//    *write_method = write_dot11WEPKeyMappingAddress;
-+      MACWork[ 0] = km->WEPKeyMappingAddress[ 0];
-+      MACWork[ 1] = km->WEPKeyMappingAddress[ 1];
-+      MACWork[ 2] = km->WEPKeyMappingAddress[ 3];
-+      MACWork[ 3] = km->WEPKeyMappingAddress[ 4];
-+      MACWork[ 4] = km->WEPKeyMappingAddress[ 6];
-+      MACWork[ 5] = km->WEPKeyMappingAddress[ 7];
-+      MACWork[ 6] = km->WEPKeyMappingAddress[ 9];
-+      MACWork[ 7] = km->WEPKeyMappingAddress[10];
-+      MACWork[ 8] = km->WEPKeyMappingAddress[12];
-+      MACWork[ 9] = km->WEPKeyMappingAddress[13];
-+      MACWork[10] = km->WEPKeyMappingAddress[15];
-+      MACWork[11] = km->WEPKeyMappingAddress[16];
-+      MACWork[12] = '\0';
-+      *var_len = 6;
-+      return ( UCHAR * ) htob ( MACWork );
-+
-+    case DOT11WEPKEYMAPPINGWEPON:
-+//    *write_method = write_dot11WEPKeyMappingWEPOn;
-+      return ( UCHAR * ) &km->WEPKeyMappingWEPOn;
-+
-+    case DOT11WEPKEYMAPPINGVALUE:
-+//    *write_method = write_dot11WEPKeyMappingValue;
-+      *var_len = strlen ( km->WEPKeyMappingValue );
-+      return ( UCHAR * ) km->WEPKeyMappingValue;
-+
-+    case DOT11WEPKEYMAPPINGSTATUS:
-+//    *write_method = write_dot11WEPKeyMappingStatus;
-+      return ( UCHAR * ) &km->WEPKeyMappingStatus;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11PrivacyTable() -                                               *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11PrivacyTable ( struct variable *vp,
-+                        oid     *name,
-+                        size_t  *length,
-+                        int     exact,
-+                        size_t  *var_len,
-+                        WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &prList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    pr = ( struct prTbl_data * ) np->data;
-+    rName[vp->namelen] = pr->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11PRIVACYINVOKED:
-+          if ( pr->havePrivacyInvoked      ) found = TRUE; break;
-+        case DOT11WEPDEFAULTKEYID:
-+          if ( pr->haveWEPDefaultKeyID     ) found = TRUE; break;
-+        case DOT11WEPKEYMAPPINGLENGTH:
-+          if ( pr->haveWEPKeyMappingLength ) found = TRUE; break;
-+        case DOT11EXCLUDEUNENCRYPTED:
-+          if ( pr->haveExcludeUnencrypted  ) found = TRUE; break;
-+        case DOT11WEPICVERRORCOUNT:
-+          if ( pr->haveWEPICVErrorCount    ) found = TRUE; break;
-+        case DOT11WEPEXCLUDEDCOUNT:
-+          if ( pr->haveWEPExcludedCount    ) found = TRUE; break;
-+      }      
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11PRIVACYINVOKED:
-+//    *write_method = write_dot11PrivacyInvoked;
-+      return ( UCHAR * ) &pr->privacyInvoked;
-+
-+    case DOT11WEPDEFAULTKEYID:
-+//    *write_method = write_dot11WEPDefaultKeyID;
-+      return ( UCHAR * ) &pr->WEPDefaultKeyID;
-+
-+    case DOT11WEPKEYMAPPINGLENGTH:
-+//    *write_method = write_dot11WEPKeyMappingLength;
-+      return ( UCHAR * ) &pr->WEPKeyMappingLength;
-+
-+    case DOT11EXCLUDEUNENCRYPTED:
-+//    *write_method = write_dot11ExcludeUnencrypted;
-+      return ( UCHAR * ) &pr->excludeUnencrypted;
-+
-+    case DOT11WEPICVERRORCOUNT:
-+      return ( UCHAR * ) &pr->WEPICVErrorCount;
-+        
-+    case DOT11WEPEXCLUDEDCOUNT:
-+      return ( UCHAR * ) &pr->WEPExcludedCount;
-+        
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11OperationTable() -                                             *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11OperationTable ( struct variable *vp,
-+                          oid     *name,
-+                          size_t  *length,
-+                          int     exact,
-+                          size_t  *var_len,
-+                          WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+  static char MACWork[17];
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &opList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    op = ( struct opTbl_data * ) np->data;
-+    rName[vp->namelen] = op->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+
-+      switch ( vp->magic ) {      // found requested OID, now check for requested variable
-+        case DOT11MACADDRESS:             
-+          if ( op->haveMACAddress              ) found = TRUE; break;
-+        case DOT11RTSTHRESHOLD:           
-+          if ( op->haveRTSThreshold            ) found = TRUE; break;
-+        case DOT11SHORTRETRYLIMIT: 
-+          if ( op->haveShortRetryLimit         ) found = TRUE; break;
-+        case DOT11LONGRETRYLIMIT:
-+          if ( op->haveLongRetryLimit          ) found = TRUE; break;
-+        case DOT11FRAGMENTATIONTHRESHOLD: 
-+          if ( op->haveFragmentationThreshold  ) found = TRUE; break;
-+        case DOT11MAXTRANSMITMSDULIFETIME: 
-+          if ( op->haveMaxTransmitMSDULifetime ) found = TRUE; break;
-+        case DOT11MAXRECEIVELIFETIME:
-+          if ( op->haveMaxReceiveLifetime      ) found = TRUE; break;
-+        case DOT11MANUFACTURERID:
-+          if ( op->haveManufacturerID          ) found = TRUE; break;
-+        case DOT11PRODUCTID:
-+          if ( op->haveProductID               ) found = TRUE; break;
-+      }
-+    }
-+    if ( found ) 
-+      break;
-+  }
-+
-+  if ( !found )
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11MACADDRESS:
-+      MACWork[ 0] = op->MACAddress[ 0];
-+      MACWork[ 1] = op->MACAddress[ 1];
-+      MACWork[ 2] = op->MACAddress[ 3];
-+      MACWork[ 3] = op->MACAddress[ 4];
-+      MACWork[ 4] = op->MACAddress[ 6];
-+      MACWork[ 5] = op->MACAddress[ 7];
-+      MACWork[ 6] = op->MACAddress[ 9];
-+      MACWork[ 7] = op->MACAddress[10];
-+      MACWork[ 8] = op->MACAddress[12];
-+      MACWork[ 9] = op->MACAddress[13];
-+      MACWork[10] = op->MACAddress[15];
-+      MACWork[11] = op->MACAddress[16];
-+      MACWork[12] = '\0';
-+      *var_len = 6;
-+      return ( UCHAR * ) htob ( MACWork );
-+        
-+    case DOT11RTSTHRESHOLD:
-+//    *write_method = write_dot11RTSThreshold;
-+      return ( UCHAR * ) &op->RTSThreshold;
-+
-+    case DOT11SHORTRETRYLIMIT:
-+//    *write_method = write_dot11ShortRetryLimit;
-+      return ( UCHAR * ) &op->shortRetryLimit;
-+
-+    case DOT11LONGRETRYLIMIT:
-+//    *write_method = write_dot11LongRetryLimit;
-+      return ( UCHAR * ) &op->longRetryLimit;
-+
-+    case DOT11FRAGMENTATIONTHRESHOLD:
-+//    *write_method = write_dot11FragmentationThreshold;
-+      return ( UCHAR * ) &op->fragmentationThreshold;
-+
-+    case DOT11MAXTRANSMITMSDULIFETIME:
-+//    *write_method = write_dot11MaxTransmitMSDULifetime;
-+      return ( UCHAR * ) &op->maxTransmitMSDULifetime;
-+
-+    case DOT11MAXRECEIVELIFETIME:
-+//    *write_method = write_dot11MaxReceiveLifetime;
-+      return ( UCHAR * ) &op->maxReceiveLifetime;
-+
-+    case DOT11MANUFACTURERID:
-+      *var_len = strlen ( op->manufacturerID );
-+      return ( UCHAR * ) op->manufacturerID;
-+
-+    case DOT11PRODUCTID:
-+      *var_len = strlen ( op->productID );
-+      return ( UCHAR * ) op->productID;
-+        
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11CountersTable() -                                              *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11CountersTable(struct variable *vp,
-+          oid     *name,
-+          size_t  *length,
-+          int     exact,
-+          size_t  *var_len,
-+          WriteMethod **write_method)
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &coList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    co = ( struct coTbl_data * ) np->data;
-+    rName[vp->namelen] = co->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11TRANSMITTEDFRAGMENTCOUNT:
-+          if ( co->haveTransmittedFragmentCount    ) found = TRUE; break;
-+        case DOT11MULTICASTTRANSMITTEDFRAMECOUNT:
-+          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
-+        case DOT11FAILEDCOUNT:
-+          if ( co->haveFailedCount                 ) found = TRUE; break;
-+        case DOT11RETRYCOUNT:
-+          if ( co->haveRetryCount                  ) found = TRUE; break;
-+        case DOT11MULTIPLERETRYCOUNT:
-+          if ( co->haveMultipleRetryCount          ) found = TRUE; break;
-+        case DOT11FRAMEDUPLICATECOUNT:
-+          if ( co->haveFrameDuplicateCount         ) found = TRUE; break;
-+        case DOT11RTSSUCCESSCOUNT:
-+          if ( co->haveRTSSuccessCount             ) found = TRUE; break;
-+        case DOT11RTSFAILURECOUNT:
-+          if ( co->haveRTSFailureCount             ) found = TRUE; break;
-+        case DOT11ACKFAILURECOUNT:
-+          if ( co->haveACKFailureCount             ) found = TRUE; break;
-+        case DOT11RECEIVEDFRAGMENTCOUNT:
-+          if ( co->haveReceivedFragmentCount       ) found = TRUE; break;
-+        case DOT11MULTICASTRECEIVEDFRAMECOUNT:
-+          if ( co->haveMulticastReceivedFrameCount ) found = TRUE; break;
-+        case DOT11FCSERRORCOUNT:
-+          if ( co->haveFCSErrorCount               ) found = TRUE; break;
-+        case DOT11TRANSMITTEDFRAMECOUNT:
-+          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
-+        case DOT11WEPUNDECRYPTABLECOUNT:
-+          if ( co->haveWEPUndecryptableCount       ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11TRANSMITTEDFRAGMENTCOUNT:       return ( UCHAR * ) &co->transmittedFragmentCount;
-+    case DOT11MULTICASTTRANSMITTEDFRAMECOUNT: return ( UCHAR * ) &co->transmittedFrameCount;
-+    case DOT11FAILEDCOUNT:                    return ( UCHAR * ) &co->failedCount;
-+    case DOT11RETRYCOUNT:                     return ( UCHAR * ) &co->retryCount;
-+    case DOT11MULTIPLERETRYCOUNT:             return ( UCHAR * ) &co->multipleRetryCount;
-+    case DOT11FRAMEDUPLICATECOUNT:            return ( UCHAR * ) &co->frameDuplicateCount;
-+    case DOT11RTSSUCCESSCOUNT:                return ( UCHAR * ) &co->RTSSuccessCount;
-+    case DOT11RTSFAILURECOUNT:                return ( UCHAR * ) &co->RTSFailureCount;
-+    case DOT11ACKFAILURECOUNT:                return ( UCHAR * ) &co->ACKFailureCount;
-+    case DOT11RECEIVEDFRAGMENTCOUNT:          return ( UCHAR * ) &co->receivedFragmentCount;
-+    case DOT11MULTICASTRECEIVEDFRAMECOUNT:    return ( UCHAR * ) &co->multicastReceivedFrameCount;
-+    case DOT11FCSERRORCOUNT:                  return ( UCHAR * ) &co->FCSErrorCount;
-+    case DOT11TRANSMITTEDFRAMECOUNT:          return ( UCHAR * ) &co->transmittedFrameCount;
-+    case DOT11WEPUNDECRYPTABLECOUNT:          return ( UCHAR * ) &co->WEPUndecryptableCount;
-+        
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11GroupAddressesTable() -                                        *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11GroupAddressesTable(struct variable *vp,
-+          oid     *name,
-+          size_t  *length,
-+          int     exact,
-+          size_t  *var_len,
-+          WriteMethod **write_method)
-+{
-+  static char MACWork[17];
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &gaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    ga = ( struct gaTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = ga->ifIndex;
-+    rName[vp->namelen + 1] = ga->groupAddressesIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11ADDRESS:
-+          if ( ga->haveAddress              ) found = TRUE; break;
-+        case DOT11GROUPADDRESSESSTATUS:
-+          if ( ga->haveGroupAddressesStatus ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11ADDRESS:
-+//    *write_method = write_dot11Address;
-+      MACWork[ 0] = ga->address[ 0];
-+      MACWork[ 1] = ga->address[ 1];
-+      MACWork[ 2] = ga->address[ 3];
-+      MACWork[ 3] = ga->address[ 4];
-+      MACWork[ 4] = ga->address[ 6];
-+      MACWork[ 5] = ga->address[ 7];
-+      MACWork[ 6] = ga->address[ 9];
-+      MACWork[ 7] = ga->address[10];
-+      MACWork[ 8] = ga->address[12];
-+      MACWork[ 9] = ga->address[13];
-+      MACWork[10] = ga->address[15];
-+      MACWork[11] = ga->address[16];
-+      MACWork[12] = '\0';
-+      *var_len = 6;
-+      return ( UCHAR * ) htob ( MACWork );
-+
-+    case DOT11GROUPADDRESSESSTATUS:
-+//    *write_method = write_dot11GroupAddressesStatus;
-+      return ( UCHAR * ) &ga->groupAddressesStatus;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11ResourceInfoTable() -                                          *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11ResourceInfoTable ( struct variable *vp,
-+                              oid     *name,
-+                              size_t  *length,
-+                              int     exact,
-+                              size_t  *var_len,
-+                              WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &riList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    ri = ( struct riTbl_data * ) np->data;
-+    rName[vp->namelen] = ri->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11MANUFACTUREROUI:
-+          if ( ri->haveManufacturerOUI            ) found = TRUE; break;
-+        case DOT11MANUFACTURERNAME:
-+          if ( ri->haveManufacturerName           ) found = TRUE; break;
-+        case DOT11MANUFACTURERPRODUCTNAME:
-+          if ( ri->haveManufacturerProductName    ) found = TRUE; break;
-+        case DOT11MANUFACTURERPRODUCTVERSION:
-+          if ( ri->haveManufacturerProductVersion ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11MANUFACTUREROUI:
-+      *var_len = strlen ( ri->manufacturerOUI );
-+      return ( UCHAR * ) ri->manufacturerOUI;
-+        
-+    case DOT11MANUFACTURERNAME:
-+      *var_len = strlen ( ri->manufacturerName );
-+      return ( UCHAR * ) ri->manufacturerName;
-+        
-+    case DOT11MANUFACTURERPRODUCTNAME:
-+      *var_len = strlen ( ri->manufacturerProductName );
-+      return ( UCHAR * ) ri->manufacturerProductName;
-+        
-+    case DOT11MANUFACTURERPRODUCTVERSION:
-+      *var_len = strlen ( ri->manufacturerProductVersion );
-+      return ( UCHAR * ) ri->manufacturerProductVersion;
-+        
-+    default: 
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11PhyOperationTable() -                                          *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11PhyOperationTable ( struct variable *vp,
-+                              oid     *name,
-+                              size_t  *length,
-+                              int     exact,
-+                              size_t  *var_len,
-+                              WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &poList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    po = ( struct poTbl_data * ) np->data;
-+    rName[vp->namelen] = po->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11PHYTYPE:
-+          if ( po->havePHYType          ) found = TRUE; break;
-+        case DOT11CURRENTREGDOMAIN:
-+          if ( po->haveCurrentRegDomain ) found = TRUE; break;
-+        case DOT11TEMPTYPE:
-+          if ( po->haveTempType         ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11PHYTYPE:
-+      return ( UCHAR * ) &po->PHYType;
-+        
-+    case DOT11CURRENTREGDOMAIN:
-+//    *write_method = write_dot11CurrentRegDomain;
-+      return ( UCHAR * ) &po->currentRegDomain;
-+
-+    case DOT11TEMPTYPE:
-+      return ( UCHAR * ) &po->tempType;
-+        
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11PhyAntennaTable() -                                            *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11PhyAntennaTable ( struct variable *vp,
-+                            oid     *name,
-+                            size_t  *length,
-+                            int     exact,
-+                            size_t  *var_len,
-+                            WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &paList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    pa = ( struct paTbl_data * ) np->data;
-+    rName[vp->namelen] = pa->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11CURRENTTXANTENNA:
-+          if ( pa->haveCurrentTxAntenna ) found = TRUE; break;
-+        case DOT11DIVERSITYSUPPORT:
-+          if ( pa->haveDiversitySupport ) found = TRUE; break;
-+        case DOT11CURRENTRXANTENNA:
-+          if ( pa->haveCurrentRxAntenna ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11CURRENTTXANTENNA:
-+//    *write_method = write_dot11CurrentTxAntenna;
-+      return ( UCHAR * ) &pa->currentTxAntenna;
-+
-+    case DOT11DIVERSITYSUPPORT:
-+      return ( UCHAR * ) &pa->diversitySupport;
-+        
-+    case DOT11CURRENTRXANTENNA:
-+//    *write_method = write_dot11CurrentRxAntenna;
-+      return ( UCHAR * ) &pa->currentRxAntenna;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*   var_dot11PhyTxPowerTable() -                                            *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11PhyTxPowerTable ( struct variable *vp,
-+                            oid     *name,
-+                            size_t  *length,
-+                            int     exact,
-+                            size_t  *var_len,
-+                            WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &ptList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    pt = ( struct ptTbl_data * ) np->data;
-+    rName[vp->namelen] = pt->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11NUMBERSUPPORTEDPOWERLEVELS:
-+          if ( pt->haveNumberSupportedPowerLevels ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL1:
-+          if ( pt->haveTxPowerLevel1   ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL2:
-+          if ( pt->haveTxPowerLevel2   ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL3:
-+          if ( pt->haveTxPowerLevel3   ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL4:
-+          if ( pt->haveTxPowerLevel4   ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL5:
-+          if ( pt->haveTxPowerLevel5   ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL6:
-+          if ( pt->haveTxPowerLevel6   ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL7:
-+          if ( pt->haveTxPowerLevel7   ) found = TRUE; break;
-+        case DOT11TXPOWERLEVEL8:
-+          if ( pt->haveTxPowerLevel8   ) found = TRUE; break;
-+        case DOT11CURRENTTXPOWERLEVEL:
-+          if ( pt->currentTxPowerLevel ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11NUMBERSUPPORTEDPOWERLEVELS: 
-+      return ( UCHAR * ) &pt->numberSupportedPowerLevels;
-+
-+    case DOT11TXPOWERLEVEL1: return ( UCHAR * ) &pt->TxPowerLevel1;
-+    case DOT11TXPOWERLEVEL2: return ( UCHAR * ) &pt->TxPowerLevel2;
-+    case DOT11TXPOWERLEVEL3: return ( UCHAR * ) &pt->TxPowerLevel3;
-+    case DOT11TXPOWERLEVEL4: return ( UCHAR * ) &pt->TxPowerLevel4;
-+    case DOT11TXPOWERLEVEL5: return ( UCHAR * ) &pt->TxPowerLevel5;
-+    case DOT11TXPOWERLEVEL6: return ( UCHAR * ) &pt->TxPowerLevel6;
-+    case DOT11TXPOWERLEVEL7: return ( UCHAR * ) &pt->TxPowerLevel7;
-+    case DOT11TXPOWERLEVEL8: return ( UCHAR * ) &pt->TxPowerLevel8;
-+        
-+    case DOT11CURRENTTXPOWERLEVEL:
-+//    *write_method = write_dot11CurrentTxPowerLevel;
-+      return ( UCHAR * ) &pt->currentTxPowerLevel;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*     var_dot11PhyFHSSTable() -                                             *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11PhyFHSSTable ( struct variable *vp,
-+                        oid     *name,
-+                        size_t  *length,
-+                        int     exact,
-+                        size_t  *var_len,
-+                        WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &pfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    pf = ( struct pfTbl_data * ) np->data;
-+    rName[vp->namelen] = pf->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11HOPTIME:
-+          if ( pf->haveHopTime              ) found = TRUE; break;
-+        case DOT11CURRENTCHANNELNUMBER:
-+          if ( pf->haveCurrentChannelNumber ) found = TRUE; break;
-+        case DOT11MAXDWELLTIME:
-+          if ( pf->haveMaxDwellTime         ) found = TRUE; break;
-+        case DOT11CURRENTDWELLTIME:
-+          if ( pf->haveCurrentDwellTime     ) found = TRUE; break;
-+        case DOT11CURRENTSET:
-+          if ( pf->haveCurrentSet           ) found = TRUE; break;
-+        case DOT11CURRENTPATTERN:
-+          if ( pf->haveCurrentPattern       ) found = TRUE; break;
-+        case DOT11CURRENTINDEX:
-+          if ( pf->haveCurrentIndex         ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11HOPTIME:
-+      return ( UCHAR * ) &pf->hopTime;
-+        
-+    case DOT11CURRENTCHANNELNUMBER:
-+//    *write_method = write_dot11CurrentChannelNumber;
-+      return ( UCHAR * ) &pf->currentChannelNumber;
-+
-+    case DOT11MAXDWELLTIME:
-+      return ( UCHAR * ) &pf->maxDwellTime;
-+        
-+    case DOT11CURRENTDWELLTIME:
-+//    *write_method = write_dot11CurrentDwellTime;
-+      return ( UCHAR * ) &pf->currentDwellTime;
-+
-+    case DOT11CURRENTSET:
-+//    *write_method = write_dot11CurrentSet;
-+      return ( UCHAR * ) &pf->currentSet;
-+
-+    case DOT11CURRENTPATTERN:
-+//    *write_method = write_dot11CurrentPattern;
-+      return ( UCHAR * ) &pf->currentPattern;
-+
-+    case DOT11CURRENTINDEX:
-+//    *write_method = write_dot11CurrentIndex;
-+      return ( UCHAR * ) &pf->currentIndex;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*     var_dot11PhyDSSSTable() -                                             *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11PhyDSSSTable ( struct variable *vp,
-+                        oid     *name,
-+                        size_t  *length,
-+                        int     exact,
-+                        size_t  *var_len,
-+                        WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &pdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    pd = ( struct pdTbl_data * ) np->data;
-+    rName[vp->namelen] = pd->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11CURRENTCHANNEL:
-+          if ( pd->haveCurrentChannel   ) found = TRUE; break;
-+        case DOT11CCAMODESUPPORTED:
-+          if ( pd->haveCCAModeSupported ) found = TRUE; break;
-+        case DOT11CURRENTCCAMODE:
-+          if ( pd->haveCurrentCCAMode   ) found = TRUE; break;
-+        case DOT11EDTHRESHOLD:
-+          if ( pd->haveEDThreshold      ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11CURRENTCHANNEL:
-+//    *write_method = write_dot11CurrentChannel;
-+      return ( UCHAR * ) &pd->currentChannel;
-+
-+    case DOT11CCAMODESUPPORTED:
-+      return ( UCHAR * ) &pd->CCAModeSupported;
-+        
-+    case DOT11CURRENTCCAMODE:
-+//    *write_method = write_dot11CurrentCCAMode;
-+      return ( UCHAR * ) &pd->currentCCAMode;
-+
-+    case DOT11EDTHRESHOLD:
-+//    *write_method = write_dot11EDThreshold;
-+      return ( UCHAR * ) &pd->EDThreshold;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*     var_dot11PhyIRTable() -                                             *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11PhyIRTable ( struct variable *vp,
-+                      oid     *name,
-+                      size_t  *length,
-+                      int     exact,
-+                      size_t  *var_len,
-+                      WriteMethod **write_method)
-+{
-+
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &piList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    pi = ( struct piTbl_data * ) np->data;
-+    rName[vp->namelen] = pi->ifIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11CCAWATCHDOGTIMERMAX:
-+          if ( pi->CCAWatchdogTimerMax ) found = TRUE; break;
-+        case DOT11CCAWATCHDOGCOUNTMAX:
-+          if ( pi->CCAWatchdogCountMax ) found = TRUE; break;
-+        case DOT11CCAWATCHDOGTIMERMIN:
-+          if ( pi->CCAWatchdogTimerMin ) found = TRUE; break;
-+        case DOT11CCAWATCHDOGCOUNTMIN:
-+          if ( pi->CCAWatchdogCountMin ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
-+  *length = vp->namelen + 1;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11CCAWATCHDOGTIMERMAX:
-+//    *write_method = write_dot11CCAWatchdogTimerMax;
-+      return ( UCHAR * ) &pi->CCAWatchdogTimerMax;
-+
-+    case DOT11CCAWATCHDOGCOUNTMAX:
-+//   *write_method = write_dot11CCAWatchdogCountMax;
-+      return ( UCHAR * ) &pi->CCAWatchdogCountMax;
-+
-+    case DOT11CCAWATCHDOGTIMERMIN:
-+//    *write_method = write_dot11CCAWatchdogTimerMin;
-+      return ( UCHAR * ) &pi->CCAWatchdogTimerMin;
-+
-+    case DOT11CCAWATCHDOGCOUNTMIN:
-+//    *write_method = write_dot11CCAWatchdogCountMin;
-+      return ( UCHAR * ) &pi->CCAWatchdogCountMin;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*     var_dot11RegDomainsSupportedTable() -                                 *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11RegDomainsSupportedTable ( struct variable *vp,
-+                                    oid     *name,
-+                                    size_t  *length,
-+                                    int     exact,
-+                                    size_t  *var_len,
-+                                    WriteMethod **write_method)
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &rdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    rd = ( struct rdTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = rd->ifIndex;
-+    rName[vp->namelen + 1] = rd->regDomainsSupportIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11REGDOMAINSSUPPORTVALUE:
-+          if ( rd->haveRegDomainsSupportValue ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11REGDOMAINSSUPPORTVALUE:
-+      return ( UCHAR * ) &rd->regDomainsSupportValue;
-+        
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*     var_dot11AntennasListTable() -                                        *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11AntennasListTable(struct variable *vp,
-+          oid     *name,
-+          size_t  *length,
-+          int     exact,
-+          size_t  *var_len,
-+          WriteMethod **write_method)
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &alList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    al = ( struct alTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = al->ifIndex;
-+    rName[vp->namelen + 1] = al->antennaListIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11SUPPORTEDTXANTENNA:
-+          if ( al->haveSupportedTxAntenna   ) found = TRUE; break;
-+        case DOT11SUPPORTEDRXANTENNA:
-+          if ( al->haveSupportedRxAntenna   ) found = TRUE; break;
-+        case DOT11DIVERSITYSELECTIONRX:
-+          if ( al->haveDiversitySelectionRx ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11SUPPORTEDTXANTENNA:
-+//    *write_method = write_dot11SupportedTxAntenna;
-+      return ( UCHAR * ) &al->supportedTxAntenna;
-+
-+    case DOT11SUPPORTEDRXANTENNA:
-+//    *write_method = write_dot11SupportedRxAntenna;
-+      return ( UCHAR * ) &al->supportedRxAntenna;
-+
-+    case DOT11DIVERSITYSELECTIONRX:
-+//    *write_method = write_dot11DiversitySelectionRx;
-+      return ( UCHAR * ) &al->diversitySelectionRx;
-+
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*     var_dot11SupportedDataRatesTxTable() -                                *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11SupportedDataRatesTxTable ( struct variable *vp,
-+                                      oid     *name,
-+                                      size_t  *length,
-+                                      int     exact,
-+                                      size_t  *var_len,
-+                                      WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &rtList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    rt = ( struct rtTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = rt->ifIndex;
-+    rName[vp->namelen + 1] = rt->supportedDataRatesTxIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+         case DOT11SUPPORTEDDATARATESTXVALUE:
-+          if ( rt->haveSupportedDataRatesTxValue ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11SUPPORTEDDATARATESTXVALUE:
-+      return ( UCHAR * ) &rt->supportedDataRatesTxValue;
-+        
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*     var_dot11SupportedDataRatesRxTable() -                                *
-+*                                                                           *
-+****************************************************************************/
-+unsigned char *
-+var_dot11SupportedDataRatesRxTable ( struct variable *vp,
-+                                      oid     *name,
-+                                      size_t  *length,
-+                                      int     exact,
-+                                      size_t  *var_len,
-+                                      WriteMethod **write_method )
-+{
-+  int found = FALSE;
-+  oid rName [ MAX_OID_LEN ];                            // OID to be returned
-+
-+  loadTables();
-+  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
-+  for ( np = LIST_FIRST ( &rrList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    rr = ( struct rrTbl_data * ) np->data;
-+    rName[vp->namelen + 0] = rr->ifIndex;
-+    rName[vp->namelen + 1] = rr->supportedDataRatesRxIndex;
-+    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
-+        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
-+      switch ( vp->magic ) {
-+        case DOT11SUPPORTEDDATARATESRXVALUE:
-+          if ( rr->haveSupportedDataRatesRxValue ) found = TRUE; break;
-+      }
-+    }
-+    if ( found )
-+      break;
-+  }
-+
-+  if ( !found ) 
-+    return NULL;
-+
-+  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
-+  *length = vp->namelen + 2;
-+  *var_len = sizeof ( long );
-+  *write_method = NULL;
-+
-+  switch ( vp->magic ) {
-+
-+    case DOT11SUPPORTEDDATARATESRXVALUE:
-+      return ( UCHAR * ) &rr->supportedDataRatesRxValue;
-+        
-+    default:
-+      ERROR_MSG ( "" );
-+  }
-+
-+  return NULL;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11StationID(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static unsigned char string[SPRINT_MAX_LEN];
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_OCTET_STR ) {
-+        fprintf ( stderr, "write to dot11StationID not ASN_OCTET_STR\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( string )) {
-+        fprintf ( stderr,"write to dot11StationID: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11MediumOccupancyLimit(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11MediumOccupancyLimit not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11MediumOccupancyLimit: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CFPPeriod(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CFPPeriod not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CFPPeriod: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CFPMaxDuration(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CFPMaxDuration not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CFPMaxDuration: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11AuthenticationResponseTimeOut(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11PowerManagementMode(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11PowerManagementMode not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )) {
-+        fprintf ( stderr, "write to dot11PowerManagementMode: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11DesiredSSID(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static unsigned char string[SPRINT_MAX_LEN];
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_OCTET_STR ) {
-+        fprintf ( stderr, "write to dot11DesiredSSID not ASN_OCTET_STR\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( string )){
-+        fprintf ( stderr, "write to dot11DesiredSSID: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11DesiredBSSType(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11DesiredBSSType not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11DesiredBSSType: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11OperationalRateSet(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static unsigned char string[SPRINT_MAX_LEN];
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_OCTET_STR ) {
-+        fprintf ( stderr, "write to dot11OperationalRateSet not ASN_OCTET_STR\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( string )){
-+        fprintf ( stderr, "write to dot11OperationalRateSet: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11BeaconPeriod(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11BeaconPeriod not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11BeaconPeriod: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11DTIMPeriod(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11DTIMPeriod not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11DTIMPeriod: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11AssociationResponseTimeOut(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11AssociationResponseTimeOut not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )) {
-+        fprintf ( stderr,"write to dot11AssociationResponseTimeOut: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11AuthenticationAlgorithmsEnable(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11AuthenticationAlgorithmsEnable not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11AuthenticationAlgorithmsEnable: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11WEPDefaultKeyValue(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static unsigned char string[SPRINT_MAX_LEN];
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_OCTET_STR ) {
-+        fprintf ( stderr, "write to dot11WEPDefaultKeyValue not ASN_OCTET_STR\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( string )){
-+        fprintf ( stderr,"write to dot11WEPDefaultKeyValue: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11WEPKeyMappingAddress(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static unsigned char string[SPRINT_MAX_LEN];
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_OCTET_STR ) {
-+        fprintf ( stderr, "write to dot11WEPKeyMappingAddress not ASN_OCTET_STR\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( string )) {
-+        fprintf ( stderr,"write to dot11WEPKeyMappingAddress: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11WEPKeyMappingWEPOn(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11WEPKeyMappingValue(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static unsigned char string[SPRINT_MAX_LEN];
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_OCTET_STR ) {
-+        fprintf ( stderr, "write to dot11WEPKeyMappingValue not ASN_OCTET_STR\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( string )) {
-+        fprintf ( stderr, "write to dot11WEPKeyMappingValue: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11WEPKeyMappingStatus(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11WEPKeyMappingStatus not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11WEPKeyMappingStatus: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11PrivacyInvoked(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11PrivacyInvoked not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11PrivacyInvoked: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11WEPDefaultKeyID(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11WEPDefaultKeyID not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11WEPDefaultKeyID: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11WEPKeyMappingLength(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11WEPKeyMappingLength not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11WEPKeyMappingLength: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11ExcludeUnencrypted(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11ExcludeUnencrypted not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11ExcludeUnencrypted: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11RTSThreshold(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ){
-+        fprintf ( stderr, "write to dot11RTSThreshold not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11RTSThreshold: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11ShortRetryLimit(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11ShortRetryLimit not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11ShortRetryLimit: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11LongRetryLimit(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11LongRetryLimit not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11LongRetryLimit: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11FragmentationThreshold(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11FragmentationThreshold not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11FragmentationThreshold: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11MaxTransmitMSDULifetime(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11MaxReceiveLifetime(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11MaxReceiveLifetime not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11MaxReceiveLifetime: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11Address(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static unsigned char string[SPRINT_MAX_LEN];
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_OCTET_STR ) {
-+        fprintf ( stderr, "write to dot11Address not ASN_OCTET_STR\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( string )){
-+        fprintf ( stderr, "write to dot11Address: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11GroupAddressesStatus(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11GroupAddressesStatus not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11GroupAddressesStatus: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentRegDomain(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentRegDomain not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentRegDomain: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentTxAntenna(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentTxAntenna not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentTxAntenna: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentRxAntenna(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentRxAntenna not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11CurrentRxAntenna: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentTxPowerLevel(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentTxPowerLevel not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentTxPowerLevel: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentChannelNumber(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentChannelNumber not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11CurrentChannelNumber: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentDwellTime(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentDwellTime not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentDwellTime: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentSet(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentSet not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentSet: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentPattern(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentPattern not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentPattern: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentIndex(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentIndex not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentIndex: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentChannel(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentChannel not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CurrentChannel: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CurrentCCAMode(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CurrentCCAMode not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11CurrentCCAMode: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11EDThreshold(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11EDThreshold not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11EDThreshold: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CCAWatchdogTimerMax(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CCAWatchdogCountMax(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CCAWatchdogCountMax not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CCAWatchdogCountMax: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CCAWatchdogTimerMin(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11CCAWatchdogCountMin(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11CCAWatchdogCountMin not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11CCAWatchdogCountMin: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11SupportedTxAntenna(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11SupportedTxAntenna not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11SupportedTxAntenna: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11SupportedRxAntenna(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11SupportedRxAntenna not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr,"write to dot11SupportedRxAntenna: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+int
-+write_dot11DiversitySelectionRx(int      action,
-+            u_char   *var_val,
-+            u_char   var_val_type,
-+            size_t   var_val_len,
-+            u_char   *statP,
-+            oid      *name,
-+            size_t   name_len)
-+{
-+  static long *long_ret;
-+  int size;
-+
-+  switch ( action ) {
-+
-+    case RESERVE1:
-+      if ( var_val_type != ASN_INTEGER ) {
-+        fprintf ( stderr, "write to dot11DiversitySelectionRx not ASN_INTEGER\n" );
-+        return SNMP_ERR_WRONGTYPE;
-+      }
-+      if ( var_val_len > sizeof ( long_ret )){
-+        fprintf ( stderr, "write to dot11DiversitySelectionRx: bad length\n" );
-+        return SNMP_ERR_WRONGLENGTH;
-+      }
-+      break;
-+
-+    case RESERVE2:
-+    case FREE:
-+    case ACTION:
-+    case UNDO:
-+      break;
-+
-+    case COMMIT:
-+      break;
-+  }
-+
-+  return SNMP_ERR_NOERROR;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*                      loadTables() - Load the Tables                       *
-+*                                                                           *
-+****************************************************************************/
-+static void loadTables()
-+{
-+  int skfd;                               // generic raw socket desc
-+  struct iwreq wrq;                       // ioctl request structure
-+  struct ifreq ifr;
-+  struct timeval et;                      // elapsed time
-+  struct wireless_info info;              // workarea for wireless ioctl information
-+  FILE *fp;
-+  char  bfr[1024], ifName[1024];
-+  char *s, *t;
-+
-+  gettimeofday ( &et, ( struct timezone * ) 0 );  // get time-of-day
-+  if ( et.tv_sec < lastLoad + MINLOADFREQ )       // only reload so often
-+    return;
-+  lastLoad = et.tv_sec;
-+
-+  skfd = openSocket();                            // open socket
-+  if ( skfd < 0 ) {
-+    syslog ( LOG_ERR, "SNMP ieee802dot11.loadTables() - %s\n", "socket open failure" );
-+    return;
-+  }
-+
-+  flushLists();
-+
-+  // find interfaces in /proc/net/dev and find the wireless interfaces
-+  fp = fopen ( PROC_NET_DEV, "r" );
-+  if ( fp ) {
-+    while ( fgets ( bfr, sizeof ( bfr ), fp )) {
-+      if ( strstr ( bfr, ":" )) {
-+        s = bfr; t = ifName;
-+        while ( isspace ( *s ))                     // discard white space
-+          *s++;
-+        while ( *s != ':' )                         // get interface name
-+          *t++ = *s++;
-+        *t = '\0';
-+
-+        // verify as a wireless device
-+        memset (( char * ) &info, 0, sizeof ( struct wireless_info ));
-+        strncpy ( wrq.ifr_name, ifName, IFNAMSIZ );
-+        if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
-+          printf ( "%s ifName: %s\n", "loadTables() -", ifName );
-+          initStructs();
-+          loadWiExt( skfd, ifName, &info );
-+          displayWiExt ( info );
-+          load80211Structs ( skfd, ifName, &info );
-+        }
-+      }
-+    }
-+    fclose ( fp );
-+  }
-+
-+  close ( skfd );
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*              load80211Structs() - load the 802.11 structures              *
-+*                                                                           *
-+****************************************************************************/
-+static void 
-+load80211Structs ( int skfd, char *ifName, struct wireless_info *wi )
-+{
-+  int rc, ifIndex = 0;
-+  struct ifreq ifr;
-+  char  MACAddress [ MACADDR_LEN + 1 ];
-+
-+  strcpy ( ifr.ifr_name, ifName );
-+  rc = ioctl ( skfd, SIOCGIFHWADDR, &ifr );
-+  if ( rc >= 0 ) {
-+
-+    sprintf ( MACAddress, "%02X:%02X:%02X:%02X:%02X:%02X\0", 
-+                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[0], ( UCHAR ) ifr.ifr_hwaddr.sa_data[1], 
-+                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[2], ( UCHAR ) ifr.ifr_hwaddr.sa_data[3], 
-+                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[4], ( UCHAR ) ifr.ifr_hwaddr.sa_data[5] );
-+
-+    nSc.haveStationID = TRUE;
-+    strcpy  ( nSc.stationID, MACAddress );
-+    nOp.haveMACAddress = TRUE;
-+    strcpy  ( nOp.MACAddress, MACAddress );
-+    nRi.haveManufacturerOUI = TRUE;
-+    strncpy ( nRi.manufacturerOUI, MACAddress, MAN_OUI_LEN ); 
-+
-+    ifIndex = if_nametoindex ( ifName );
-+    if ( !ifIndex ) {
-+      syslog ( LOG_ERR, "SNMP %s - %s %s\n", 
-+        "ieee802dot11.load80211Structs()", ifName, "has no ifIndex" );
-+      return;
-+    }
-+
-+    loadWiExtTo80211Structs ( ifIndex, ifName, wi );
-+
-+    if ( hasChanged (( char * ) &nSc, sizeof ( nSc ))) {
-+      nSc.ifIndex = ifIndex;
-+      sprintf ( nSc.UID, "%04d\0", nSc.ifIndex );
-+      strcpy ( nSc.ifName, ifName );
-+      addList (( char * ) &scList, ( char * ) &nSc, sizeof ( nSc ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nPr, sizeof ( nPr ))) {
-+      nPr.ifIndex = ifIndex;
-+      sprintf ( nPr.UID, "%04d\0", nPr.ifIndex );
-+      strcpy ( nPr.ifName, ifName );
-+      addList (( char * ) &prList, ( char * ) &nPr, sizeof ( nPr ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nOp, sizeof ( nOp ))) {
-+      nOp.ifIndex = ifIndex;
-+      sprintf ( nOp.UID, "%04d\0", nOp.ifIndex );
-+      strcpy ( nOp.ifName, ifName );
-+      addList (( char * ) &opList, ( char * ) &nOp, sizeof ( nOp ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nCo, sizeof ( nCo ))) {
-+      nCo.ifIndex = ifIndex;
-+      sprintf ( nCo.UID, "%04d\0", nCo.ifIndex );
-+      strcpy ( nCo.ifName, ifName );
-+      addList (( char * ) &coList, ( char * ) &nCo, sizeof ( nCo ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nRi, sizeof ( nRi ))) {
-+      nRi.ifIndex = ifIndex;
-+      sprintf ( nRi.UID, "%04d\0", nRi.ifIndex );
-+      strcpy ( nRi.ifName, ifName );
-+      addList (( char * ) &riList, ( char * ) &nRi, sizeof ( nRi ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nPo, sizeof ( nPo ))) {
-+      nPo.ifIndex = ifIndex;
-+      sprintf ( nPo.UID, "%04d\0", nPo.ifIndex );
-+      strcpy ( nPo.ifName, ifName );
-+      addList (( char * ) &poList, ( char * ) &nPo, sizeof ( nPo ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nPa, sizeof ( nPa ))) {
-+      nPa.ifIndex = ifIndex;
-+      sprintf ( nPa.UID, "%04d\0", nPa.ifIndex );
-+      strcpy ( nPa.ifName, ifName );
-+      addList (( char * ) &paList, ( char * ) &nPa, sizeof ( nPa ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nPt, sizeof ( nPt ))) {
-+      nPt.ifIndex = ifIndex;
-+      sprintf ( nPt.UID, "%04d\0", nPt.ifIndex );
-+      strcpy ( nPt.ifName, ifName );
-+      addList (( char * ) &ptList, ( char * ) &nPt, sizeof ( nPt ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nPf, sizeof ( nPf ))) {
-+      nPf.ifIndex = ifIndex;
-+      sprintf ( nPf.UID, "%04d\0", nPf.ifIndex );
-+      strcpy ( nPf.ifName, ifName );
-+      addList (( char * ) &pfList, ( char * ) &nPf, sizeof ( nPf ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nPd, sizeof ( nPd ))) {
-+      nPd.ifIndex = ifIndex;
-+      sprintf ( nPd.UID, "%04d\0", nPd.ifIndex );
-+      strcpy ( nPd.ifName, ifName );
-+      addList (( char * ) &pdList, ( char * ) &nPd, sizeof ( nPd ));
-+    }
-+
-+    if ( hasChanged (( char * ) &nPi, sizeof ( nPi ))) {
-+      nPi.ifIndex = ifIndex;
-+      sprintf ( nPi.UID, "%04d\0", nPi.ifIndex );
-+      strcpy ( nPi.ifName, ifName );
-+      addList (( char * ) &piList, ( char * ) &nPi, sizeof ( nPi ));
-+    }
-+  }
-+
-+//printf ( "%s - ifIndex: %d ifName: %s UID: %s\n", 
-+//         "load80211Structs() - HASCHANGED", ifIndex, ifName, nSc.UID );
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*                     initStructs() - initialize structures                 *
-+*                                                                           *
-+****************************************************************************/
-+static void initStructs()
-+{
-+  int i;
-+
-+  // 802.11 MIB Stuctures
-+  memset (( char * ) &nSc, 0, sizeof ( nSc ));  memset (( char * ) &nAa, 0, sizeof ( nAa ));
-+  memset (( char * ) &nDf, 0, sizeof ( nDf ));  memset (( char * ) &nKm, 0, sizeof ( nKm ));
-+  memset (( char * ) &nPr, 0, sizeof ( nPr ));  memset (( char * ) &nOp, 0, sizeof ( nOp ));
-+  memset (( char * ) &nCo, 0, sizeof ( nCo ));  memset (( char * ) &nGa, 0, sizeof ( nGa ));
-+  memset (( char * ) &nRi, 0, sizeof ( nRi ));  memset (( char * ) &nPo, 0, sizeof ( nPo ));
-+  memset (( char * ) &nPa, 0, sizeof ( nPa ));  memset (( char * ) &nPt, 0, sizeof ( nPt ));
-+  memset (( char * ) &nPf, 0, sizeof ( nPf ));  memset (( char * ) &nPd, 0, sizeof ( nPd ));
-+  memset (( char * ) &nPi, 0, sizeof ( nPi ));  memset (( char * ) &nRd, 0, sizeof ( nRd ));
-+  memset (( char * ) &nAl, 0, sizeof ( nAl ));  memset (( char * ) &nRt, 0, sizeof ( nRt ));
-+  memset (( char * ) &nRr, 0, sizeof ( nRr ));
-+
-+  // Wireless Extensions
-+  wepCurrentKey = 0;
-+  haveWepCurrentKey = FALSE;
-+  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
-+    wep[i].len = 0;
-+    wep[i].key[0] = '\0';
-+    wep[i].haveKey = FALSE;
-+  }
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*                Wireless Extensions Specific Functions                     *
-+*                                                                           *
-+****************************************************************************/
-+/****************************************************************************
-+*                                                                           *
-+* loadWiExtTo80211Structs() - load wireless extensions to 802.11 structures *
-+*                                                                           *
-+****************************************************************************/
-+static void 
-+loadWiExtTo80211Structs ( int ifIndex, char *ifName, struct wireless_info *wi )
-+{
-+  int i, j = 0;
-+
-+  // dot11Smt Group
-+  // dot11StationConfigTable
-+  nSc.havePrivacyOptionImplemented = TRUE;
-+  nSc.privacyOptionImplemented = 1;           // assume we support WEP
-+
-+  if ( wi->has_power ) {
-+    nSc.havePowerManagementMode = TRUE;
-+    nSc.powerManagementMode = 1;              // assume power is active
-+    if ( !wi->power.disabled && 
-+          wi->power.flags & IW_POWER_MIN )
-+      nSc.powerManagementMode = 2;            // power save mode
-+  }
-+
-+  if ( wi->has_essid && strlen ( wi->essid )) {
-+    nSc.haveDesiredSSID = TRUE;
-+    strcpy ( nSc.desiredSSID, wi->essid ); 
-+  }
-+
-+  if ( wi->has_mode ) {
-+    nSc.haveDesiredBSSType = TRUE;
-+    if ( wi->mode == IW_MODE_ADHOC ) 
-+      nSc.desiredBSSType = 2;         // independent
-+    else if ( wi->has_ap_addr )
-+      nSc.desiredBSSType = 1;         // infrastructure
-+    else
-+      nSc.desiredBSSType = 3;         // any
-+  }
-+
-+  if ( wi->has_range ) {
-+    for ( i = 0; i < wi->range.num_bitrates && j < 126; i++ ) {
-+      nSc.haveOperationalRateSet = TRUE;
-+      nSc.operationalRateSet[j++] = ( char ) ( wi->range.bitrate[i] / 500000L );
-+    }
-+  }
-+
-+  // dot11AuthenticationAlgorithmsTable
-+  nAa.haveAuthenticationAlgorithm = TRUE;           // it's a rule to always have 
-+  nAa.haveAuthenticationAlgorithmsEnable = TRUE;    //    'open' supported
-+  nAa.ifIndex = ifIndex;
-+  nAa.authenticationAlgorithmsIndex = 1;            // index number one
-+  nAa.authenticationAlgorithm = 1;                  // 1 => open key
-+  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
-+  nAa.authenticationAlgorithmsEnable = 1;           // enabled by default
-+  if ( ( wi->has_key                        ) &&
-+       ( wi->key_size  != 0                 ) &&
-+      !( wi->key_flags & IW_ENCODE_DISABLED ))
-+    nAa.authenticationAlgorithmsEnable = 2;
-+  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
-+
-+  nAa.haveAuthenticationAlgorithm = TRUE;           // I'm gonna assume we always support WEP
-+  nAa.haveAuthenticationAlgorithmsEnable = TRUE;
-+  nAa.ifIndex = ifIndex;
-+  nAa.authenticationAlgorithmsIndex = 2;            // index number 2
-+  nAa.authenticationAlgorithm = 2;                  // 2 => shared key
-+  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
-+  nAa.authenticationAlgorithmsEnable = 2;
-+  if ( ( wi->has_key                        ) &&
-+       ( wi->key_size  != 0                 ) &&
-+      !( wi->key_flags & IW_ENCODE_DISABLED ))
-+    nAa.authenticationAlgorithmsEnable = 1;         // disabled by default
-+  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
-+
-+  //dot11WEPDefaultKeysTable
-+  if ( wi->has_range ) {
-+    for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
-+      nDf.haveWEPDefaultKeyValue = TRUE;
-+      nDf.ifIndex = ifIndex;
-+      nDf.WEPDefaultKeyIndex = i + 1;               // index number
-+      sprintf ( nDf.UID, "%04d%04d\0", nDf.ifIndex, nDf.WEPDefaultKeyIndex );
-+      if ( wep[i].haveKey )
-+        strcpy ( nDf.WEPDefaultKeyValue, "*****" );
-+      else
-+        nDf.WEPDefaultKeyValue[0] = '\0';
-+      addList (( char * ) &dfList, ( char * ) &nDf, sizeof ( nDf ));
-+    }
-+  }
-+
-+  // dot11PrivacyTable
-+  nPr.havePrivacyInvoked = TRUE;
-+  nPr.privacyInvoked = 2;                   // 2 => FALSE
-+  nPr.haveWEPDefaultKeyID = TRUE;
-+  nPr.WEPDefaultKeyID = 0;
-+  nPr.haveExcludeUnencrypted = TRUE;
-+  nPr.excludeUnencrypted = 2;               // 2 => FALSE
-+  if ( wi->has_range ) {
-+    if ( ( wi->key_size != 0 ) &&
-+        !( wi->key_flags & IW_ENCODE_DISABLED )) {
-+       nPr.privacyInvoked = 1;
-+       if ( wi->key_flags & IW_ENCODE_RESTRICTED )
-+          nPr.excludeUnencrypted = 1;
-+       nPr.WEPDefaultKeyID = wepCurrentKey;
-+    }
-+  }
-+
-+  // dot11Mac Group
-+  // dot11OperationTable
-+  if ( wi->has_range ) {
-+    nOp.haveRTSThreshold = TRUE;
-+    nOp.RTSThreshold = wi->range.max_rts;
-+  }
-+
-+  if ( wi->has_frag && wi->frag.value ) {
-+    nOp.haveFragmentationThreshold = TRUE;
-+    nOp.fragmentationThreshold = wi->frag.value;
-+  }
-+
-+  // dot11Phy Group
-+  // dot11PhyOperationTable
-+  if ( strstr ( wi->name, "IEEE 802.11-FS"      )) nPo.PHYType = 1;   // So what if I
-+  if ( strstr ( wi->name, "IEEE 802.11-DS"      )) nPo.PHYType = 2;   // made up a couple?
-+  if ( strstr ( wi->name, "IEEE 802.11-IR"      )) nPo.PHYType = 3;   
-+  if ( strstr ( wi->name, "IEEE 802.11-OFDM"    )) nPo.PHYType = 4;   // 802.11a
-+  if ( strstr ( wi->name, "IEEE 802.11-OFDM/DS" )) nPo.PHYType = 5;   // 802.11g
-+  if ( strstr ( wi->name, "IEEE 802.11-TURBO"   )) nPo.PHYType = 6;   // Atheros TURBO mode
-+  if ( nPo.PHYType ) nPo.havePHYType = TRUE;
-+
-+  // dot11PhyDSSSTable
-+  if ( wi->has_range ) { // && wi->freq <= ( double ) 2483000000 ) {  // DSSS frequencies only
-+    for ( i = 0; i < wi->range.num_frequency; i++ ) {
-+      if ((( double ) ( wi->range.freq[i].e * 10 ) * ( double ) wi->range.freq[i].m ) == wi->freq ) {
-+        nPd.haveCurrentChannel = TRUE;
-+        nPd.currentChannel = wi->range.freq[i].i; 
-+      }
-+    }
-+  }
-+
-+  // dot11SupportedDataRatesTxTable
-+  if ( wi->has_range ) {
-+    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
-+      nRt.ifIndex = ifIndex;
-+      nRt.supportedDataRatesTxIndex = i + 1;
-+      nRt.supportedDataRatesTxValue = wi->range.bitrate[i] / 500000L;
-+      nRt.haveSupportedDataRatesTxValue = TRUE;
-+      sprintf ( nRt.UID, "%04d%04d\0", nRt.ifIndex, nRt.supportedDataRatesTxIndex );
-+      strcpy ( nRt.ifName, ifName );
-+      addList (( char * ) &rtList, ( char * ) &nRt, sizeof ( nRt ));
-+    }
-+  }
-+
-+  // dot11SupportedDataRatesRxTable
-+  if ( wi->has_range ) {
-+    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
-+      nRr.ifIndex = ifIndex;
-+      nRr.supportedDataRatesRxIndex = i + 1;
-+      nRr.supportedDataRatesRxValue = wi->range.bitrate[i] / 500000L;
-+      nRr.haveSupportedDataRatesRxValue = TRUE;
-+      sprintf ( nRr.UID, "%04d%04d\0", nRr.ifIndex, nRr.supportedDataRatesRxIndex );
-+      strcpy ( nRr.ifName, ifName );
-+      addList (( char * ) &rrList, ( char * ) &nRr, sizeof ( nRr ));
-+    }
-+  }
-+
-+//printf ( "%s max_encoding_tokens: %d\n", 
-+//          "loadWiExtTo80211Structs() - ", wi->range.max_encoding_tokens );
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*      loadWiExt() - load wireless extensions structures;                   *
-+*                    use ioctl calls and read /proc/net/wireless            *
-+*                                                                           *
-+****************************************************************************/
-+static void loadWiExt ( int skfd, char *ifname, struct wireless_info *wi )
-+{
-+  struct iwreq wrq;                       // ioctl request structure
-+  FILE *fp;
-+  char  bfr[1024];
-+  char  buffer[sizeof ( iwrange ) * 2]; /* Large enough */
-+  char *s, *t;
-+  int i, j;
-+
-+  strncpy ( wrq.ifr_name, ifname, IFNAMSIZ );
-+
-+  /* Get wireless name */
-+  if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
-+    strncpy ( wi->name, wrq.u.name, IFNAMSIZ );
-+    wi->name[IFNAMSIZ] = '\0';
-+  }
-+
-+  /* Get ranges */    // NOTE: some version checking in iwlib.c
-+  memset ( buffer, 0, sizeof ( buffer ));
-+  wrq.u.data.pointer = ( caddr_t ) &buffer;
-+  wrq.u.data.length = sizeof ( buffer );
-+  wrq.u.data.flags = 0;
-+  if ( ioctl ( skfd, SIOCGIWRANGE, &wrq ) >= 0 ) {
-+    memcpy (( char * ) &wi->range, buffer, sizeof ( iwrange ));
-+    wi->has_range = 1;
-+  }
-+
-+  /* Get network ID */
-+  if ( ioctl ( skfd, SIOCGIWNWID, &wrq ) >= 0 ) {
-+    memcpy ( &wi->nwid, &wrq.u.nwid, sizeof ( iwparam ));
-+    wi->has_nwid = 1;
-+  }
-+
-+  /* Get frequency / channel */         // THIS NUMBER LOOKS FUNNY
-+  if ( ioctl ( skfd, SIOCGIWFREQ, &wrq ) >= 0 ) {
-+    wi->has_freq = 1;
-+    wi->freq = (( double ) wrq.u.freq.m ) * pow ( 10, wrq.u.freq.e );
-+  }
-+
-+  /* Get sensitivity */
-+  if ( ioctl ( skfd, SIOCGIWSENS, &wrq ) >= 0 ) {
-+    wi->has_sens = 1;
-+    memcpy ( &wi->sens, &wrq.u.sens, sizeof ( iwparam ));
-+  }
-+
-+  /* Get encryption information */
-+  wrq.u.data.pointer = ( caddr_t ) &wi->key;
-+  wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
-+  wrq.u.data.flags = 0;
-+  if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
-+    wi->has_key = 1;
-+    wi->key_size = wrq.u.data.length;
-+    wi->key_flags = wrq.u.data.flags;
-+    wepCurrentKey = wrq.u.data.flags & IW_ENCODE_INDEX;
-+  }
-+
-+  for ( i = 0; i < wi->range.max_encoding_tokens; i++ ) {
-+    wrq.u.data.pointer = ( caddr_t ) &wi->key;
-+    wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
-+    wrq.u.data.flags = i;
-+    if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
-+      if ( ( wrq.u.data.length != 0 ) &&
-+          !( wrq.u.data.flags & IW_ENCODE_DISABLED )) {
-+        wep[i].len = wrq.u.data.length;
-+        wep[i].haveKey = TRUE;
-+        t = wep[i].key;
-+        for ( j = 0; j < wrq.u.data.length; j++ ) {
-+          if (( j & 0x1 ) == 0 && j != 0 )
-+                strcpy ( t++, "-");
-+          sprintf ( t, "%.2X", wi->key[j] );
-+          t += 2;
-+        }
-+        t = '\0';
-+      }
-+    }
-+  }
-+
-+  /* Get ESSID */
-+  wrq.u.essid.pointer = ( caddr_t ) &wi->essid;
-+  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
-+  wrq.u.essid.flags = 0;
-+  if ( ioctl ( skfd, SIOCGIWESSID, &wrq ) >= 0 ) {
-+    wi->has_essid = 1;
-+    wi->essid_on = wrq.u.data.flags;
-+  }
-+
-+  /* Get AP address */
-+  if ( ioctl ( skfd, SIOCGIWAP, &wrq ) >= 0 ) {
-+    wi->has_ap_addr = 1;
-+    memcpy ( &wi->ap_addr, &wrq.u.ap_addr, sizeof ( sockaddr ));
-+  }
-+
-+  /* Get NickName */
-+  wrq.u.essid.pointer = ( caddr_t ) &wi->nickname;
-+  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
-+  wrq.u.essid.flags = 0;
-+  if ( ioctl ( skfd, SIOCGIWNICKN, &wrq ) >= 0 ) {
-+    if ( wrq.u.data.length > 1 )
-+      wi->has_nickname = 1;
-+  }
-+
-+  /* Get bit rate */
-+  if ( ioctl ( skfd, SIOCGIWRATE, &wrq ) >= 0 ) {
-+    wi->has_bitrate = 1;
-+    memcpy ( &wi->bitrate, &wrq.u.bitrate, sizeof ( iwparam ));
-+  }
-+
-+  /* Get RTS threshold */
-+  if ( ioctl ( skfd, SIOCGIWRTS, &wrq ) >= 0 ) {
-+    wi->has_rts = 1;
-+    memcpy ( &wi->rts, &wrq.u.rts, sizeof ( iwparam ));
-+  }
-+
-+  /* Get fragmentation threshold */
-+  if ( ioctl ( skfd, SIOCGIWFRAG, &wrq ) >= 0 ) {
-+      wi->has_frag = 1;
-+      memcpy ( &wi->frag, &wrq.u.frag, sizeof ( iwparam ));
-+    }
-+
-+  /* Get operation mode */
-+  if ( ioctl ( skfd, SIOCGIWMODE, &wrq ) >= 0 ) {
-+      wi->mode = wrq.u.mode;
-+      if ( wi->mode < IW_NUM_OPER_MODE && wi->mode >= 0 )
-+        wi->has_mode = 1;
-+  }
-+
-+  /* Get Power Management settings */                 // #if WIRELESS_EXT > 9
-+  wrq.u.power.flags = 0;
-+  if ( ioctl ( skfd, SIOCGIWPOWER, &wrq ) >= 0 ) {
-+    wi->has_power = 1;
-+    memcpy ( &wi->power, &wrq.u.power, sizeof ( iwparam ));
-+  }
-+
-+  /* Get retry limit/lifetime */                      // #if WIRELESS_EXT > 10
-+  if ( ioctl ( skfd, SIOCGIWRETRY, &wrq ) >= 0 ) {    
-+    wi->has_retry = 1;
-+    memcpy ( &wi->retry, &wrq.u.retry, sizeof ( iwparam ));
-+  }
-+
-+  /* Get stats */                                     // #if WIRELESS_EXT > 11
-+  wrq.u.data.pointer = ( caddr_t ) &wi->stats;
-+  wrq.u.data.length = 0;
-+  wrq.u.data.flags = 1;   /* Clear updated flag */
-+  if ( ioctl ( skfd, SIOCGIWSTATS, &wrq ) < 0 )
-+    wi->has_stats = 1;
-+
-+  if ( !wi->has_stats ) {                        // no ioctl support, go to file
-+    fp = fopen ( PROC_NET_WIRELESS, "r" );
-+    if ( fp ) {
-+      while ( fgets ( bfr, sizeof ( bfr ), fp )) {
-+        bfr [ sizeof ( bfr ) - 1 ] = '\0';        // no buffer overruns here!
-+        strtok (( char * ) &bfr, "\n" );          // '\n' => '\0'
-+        if ( strstr ( bfr, ifname ) && strstr ( bfr, ":" )) {
-+          wi->has_stats = 1;
-+          s = bfr;
-+          s = strchr ( s, ':' ); s++;             /* Skip ethX:   */
-+          s = strtok ( s, " " );                  /* ' ' => '\0'  */
-+          sscanf ( s, "%X", &wi->stats.status ); // status 
-+
-+          s = strtok ( NULL, " " );               // link quality
-+          if ( strchr ( s, '.' ) != NULL )
-+            wi->stats.qual.updated |= 1;
-+          sscanf ( s, "%d", &wi->stats.qual.qual );
-+
-+          s = strtok ( NULL, " " );               // signal level
-+          if ( strchr ( s,'.' ) != NULL )
-+            wi->stats.qual.updated |= 2;
-+          sscanf ( s, "%d", &wi->stats.qual.level );
-+
-+          s = strtok ( NULL, " " );               // noise level
-+          if ( strchr ( s, '.' ) != NULL )
-+            wi->stats.qual.updated += 4;
-+          sscanf ( s, "%d", &wi->stats.qual.noise );
-+
-+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.nwid     );
-+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.code     );
-+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.fragment );
-+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.retries  );
-+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.misc     );
-+          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.miss.beacon      );
-+        }
-+      }
-+      fclose ( fp );
-+    }
-+  }
-+
-+// printf ( "%s bfr: %s\n", "loadTables()", bfr );
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*       displayWiExt() - show what I got from Wireless Extensions           *
-+*                                                                           *
-+****************************************************************************/
-+static void displayWiExt ( struct wireless_info info )
-+{
-+#ifdef DISPLAYWIEXT
-+  int i;
-+  char title[] = "displayWiExt() -";
-+
-+  printf ( "========================================\n" );
-+  printf ( "===> Wireless Extension IOCTL calls <===\n" );
-+  printf ( "========================================\n" );
-+
-+  if ( strlen ( info.name ))
-+    printf ( "%s name: %s\n", "SIOCGIWNAME", info.name );
-+  else
-+    printf ( "%s\n", "no info.name support" );
-+
-+  if ( info.has_nickname = 1 )
-+    printf ( "%s nickname: %s\n", "SIOCGIWNICKN", info.nickname );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWNICKN", " ===> no info.nickname support" );
-+
-+  if ( info.has_essid ) 
-+    printf ( "%s essid_on: %d essid: %s\n", "SIOCGIWESSID", info.essid_on, info.essid );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWESSID", " ===> no info.essid support" );
-+
-+  if ( info.has_range ) {
-+    printf ( "%s throughput: %d\n",           "SIOCGIWRANGE", info.range.throughput );
-+    printf ( "%s min_nwid: %d\n",             "SIOCGIWRANGE", info.range.min_nwid  );
-+    printf ( "%s max_nwid: %d\n",             "SIOCGIWRANGE", info.range.max_nwid  );
-+    printf ( "%s sensitivity: %d\n",          "SIOCGIWRANGE", info.range.sensitivity );
-+    printf ( "%s num_bitrates: %d\n",         "SIOCGIWRANGE", info.range.num_bitrates );
-+    for ( i = 0; i < info.range.num_bitrates; i++ ) 
-+      printf ( "%s bitrate[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.bitrate[i]  );
-+    printf ( "%s min_rts: %d\n",              "SIOCGIWRANGE", info.range.min_rts );
-+    printf ( "%s max_rts: %d\n",              "SIOCGIWRANGE", info.range.max_rts );
-+    printf ( "%s min_frag: %d\n",             "SIOCGIWRANGE", info.range.min_frag );
-+    printf ( "%s max_frag: %d\n",             "SIOCGIWRANGE", info.range.max_frag );
-+    printf ( "%s min_pmp: %d\n",              "SIOCGIWRANGE", info.range.min_pmp );
-+    printf ( "%s max_pmp: %d\n",              "SIOCGIWRANGE", info.range.max_pmp );
-+    printf ( "%s min_pmt: %d\n",              "SIOCGIWRANGE", info.range.min_pmt );
-+    printf ( "%s max_pmt: %d\n",              "SIOCGIWRANGE", info.range.max_pmt );
-+    printf ( "%s pmp_flags: %d\n",            "SIOCGIWRANGE", info.range.pmp_flags );
-+    printf ( "%s pmt_flags: %d\n",            "SIOCGIWRANGE", info.range.pmt_flags );
-+    printf ( "%s pm_capa: %d\n",              "SIOCGIWRANGE", info.range.pm_capa );
-+    printf ( "%s num_encoding_sizes: %d\n",   "SIOCGIWRANGE", info.range.num_encoding_sizes );
-+    for ( i = 0; i < info.range.num_encoding_sizes; i++ ) 
-+      printf ( "%s encoding_size[%d]: %d\n",  "SIOCGIWRANGE", i, info.range.encoding_size[i]  );
-+    printf ( "%s max_encoding_tokens: %d\n",  "SIOCGIWRANGE", info.range.max_encoding_tokens );
-+//  printf ( "%s encoding_login_index: %d\n", "SIOCGIWRANGE", info.range.encoding_login_index );
-+    printf ( "%s txpower_capa: %d\n",         "SIOCGIWRANGE", info.range.txpower_capa );
-+    printf ( "%s num_txpower: %d dBm\n",      "SIOCGIWRANGE", info.range.num_txpower );
-+    for ( i = 0; i < info.range.num_txpower; i++ ) 
-+      printf ( "%s txpower[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.txpower[i]  );
-+    printf ( "%s we_version_compiled: %d\n",  "SIOCGIWRANGE", info.range.we_version_compiled );
-+    printf ( "%s we_version_source: %d\n",    "SIOCGIWRANGE", info.range.we_version_source );
-+    printf ( "%s retry_capa: %d\n",           "SIOCGIWRANGE", info.range.retry_capa );
-+    printf ( "%s retry_flags: %d\n",          "SIOCGIWRANGE", info.range.retry_flags );
-+    printf ( "%s r_time_flags: %d\n",         "SIOCGIWRANGE", info.range.r_time_flags );
-+    printf ( "%s min_retry: %d\n",            "SIOCGIWRANGE", info.range.min_retry );
-+    printf ( "%s max_retry: %d\n",            "SIOCGIWRANGE", info.range.max_retry );
-+    printf ( "%s min_r_time: %d\n",           "SIOCGIWRANGE", info.range.min_r_time );
-+    printf ( "%s max_r_time: %d\n",           "SIOCGIWRANGE", info.range.max_r_time );
-+    printf ( "%s num_channels: %d\n",         "SIOCGIWRANGE", info.range.num_channels );
-+    printf ( "%s num_frequency: %d\n",        "SIOCGIWRANGE", info.range.num_frequency );
-+    for ( i = 0; i < info.range.num_frequency; i++ ) 
-+      printf ( "%s freq[%d].i: %d freq[%d].e: %d freq[%d].m: %d\n", "SIOCGIWRANGE", 
-+                i, info.range.freq[i].i, i, info.range.freq[i].e, i, info.range.freq[i].m );
-+  }
-+  else
-+    printf ( "%s %s\n", "SIOCGIWRANGE", " ===> no info.range support" );
-+
-+  if ( info.has_nwid ) 
-+    printf ( "%s nwid - disabled: %d value: %X\n", "SIOCGIWNWID", info.nwid.disabled, info.nwid.value );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWNWID", " ===> no info.nwid support" );
-+
-+  if ( info.has_freq ) {
-+//  printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq / GIGA );
-+    printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq );
-+  }
-+  else
-+    printf ( "%s %s\n", "SIOCGIWFREQ", " ===> no info.freq support" );
-+
-+  if ( info.has_sens )
-+    printf ( "%s sens: %d\n", "SIOCGIWSENS", info.sens );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWSENS", " ===> no info.sens support" );
-+
-+  if ( info.has_key ) {
-+    printf ( "%s key_size: %d key_flags: %d wepCurrentKey: %d\n", 
-+              "SIOCGIWENCODE", info.key_size, info.key_flags, wepCurrentKey );
-+    printf ( "%s MODE: %d DISABLED: %d INDEX: %d OPEN: %d RESTRICTED: %d NOKEY: %d TEMP: %d\n",
-+              "SIOCGIWENCODE",                           info.key_flags & IW_ENCODE_MODE,
-+              info.key_flags & IW_ENCODE_DISABLED ? 1:0, info.key_flags & IW_ENCODE_INDEX,
-+              info.key_flags & IW_ENCODE_OPEN     ? 1:0, info.key_flags & IW_ENCODE_RESTRICTED ? 1:0,
-+              info.key_flags & IW_ENCODE_NOKEY    ? 1:0, info.key_flags & IW_ENCODE_TEMP       ? 1:0 );
-+  }
-+  else
-+    printf ( "%s %s\n", "SIOCGIWENCODE", " ===> no info.key support" );
-+
-+  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
-+    if ( wep[i].haveKey )
-+      printf ( "%s wep[%d].len: %d wep[%d].key: %s\n", 
-+                "SIOCGIWENCODE", i, wep[i].len, i, wep[i].key );
-+  }
-+
-+  if ( info.has_ap_addr )
-+    printf ( "%s ap_addr.sa_data: %02X:%02X:%02X:%02X:%02X:%02X ap_addr.sa_family: %d\n", 
-+              "SIOCGIWAP",  ( UCHAR ) info.ap_addr.sa_data[0], ( UCHAR ) info.ap_addr.sa_data[1], 
-+                            ( UCHAR ) info.ap_addr.sa_data[2], ( UCHAR ) info.ap_addr.sa_data[3], 
-+                            ( UCHAR ) info.ap_addr.sa_data[4], ( UCHAR ) info.ap_addr.sa_data[5], 
-+                                      info.ap_addr.sa_family );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWAP", " ===> no ap_addr information" );
-+
-+  if ( info.has_bitrate )
-+    printf ( "%s bitrate: %d value: %d fixed: %d disabled: %d flags: %d\n", 
-+              "SIOCGIWRATE", info.bitrate, info.bitrate.value, info.bitrate.fixed, 
-+                             info.bitrate.disabled, info.bitrate.flags );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWRATE", " ===> no info.bitrate support" );
-+
-+  if ( info.has_rts )
-+    printf ( "%s rts: %d\n", "SIOCGIWRTS", info.rts );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWRTS", " ===> no info.rts support" );
-+
-+  if ( info.has_frag )
-+    printf ( "%s frag: %d\n", "SIOCGIWFRAG", info.frag );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWFRAG", " ===> no info.frag support" );
-+
-+  if ( info.has_mode ) 
-+    printf ( "%s mode: %d\n", "SIOCGIWMODE", info.mode );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWMODE", " ===> no info.mode support" );
-+
-+  if ( info.has_power ) {
-+    printf ( "%s power: %d\n", "SIOCGIWPOWER", info.power );
-+    printf ( "%s disabled: %d MIN: %d MAX: %d TIMEOUT: %d RELATIVE: %d\n",
-+              "SIOCGIWPOWER",
-+              info.power.disabled                  ? 1:0, 
-+              info.power.flags & IW_POWER_MIN      ? 1:0, 
-+              info.power.flags & IW_POWER_MAX      ? 1:0, 
-+              info.power.flags & IW_POWER_TIMEOUT  ? 1:0, 
-+              info.power.flags & IW_POWER_RELATIVE ? 1:0 ); 
-+    printf ( "%s UNICAST: %d MULTICAST: %d ALL: %d FORCE: %d REPEATER: %d\n",
-+              "SIOCGIWPOWER",
-+              info.power.flags & IW_POWER_UNICAST_R   ? 1:0, 
-+              info.power.flags & IW_POWER_MULTICAST_R ? 1:0, 
-+              info.power.flags & IW_POWER_ALL_R       ? 1:0, 
-+              info.power.flags & IW_POWER_FORCE_S     ? 1:0, 
-+              info.power.flags & IW_POWER_REPEATER    ? 1:0 ); 
-+  }
-+  else
-+    printf ( "%s %s\n", "SIOCGIWPOWER", " ===> no info.power support" );
-+
-+  if ( info.has_retry )
-+    printf ( "%s retry: %d\n", "SIOCGIWRETRY", info.retry );
-+  else
-+    printf ( "%s %s\n", "SIOCGIWRETRY", " ===> no info.retry support" );
-+
-+  if ( info.has_stats ) {
-+    printf ( "%s status: %d\n",           "SIOCGIWSTATS", info.stats.status           );
-+    printf ( "%s qual.level: %d\n",       "SIOCGIWSTATS", info.stats.qual.level       );
-+    printf ( "%s qual.noise: %d\n",       "SIOCGIWSTATS", info.stats.qual.noise       );
-+    printf ( "%s qual.qual: %d\n",        "SIOCGIWSTATS", info.stats.qual.qual        );
-+    printf ( "%s qual.updated: %d\n",     "SIOCGIWSTATS", info.stats.qual.updated     );
-+    printf ( "%s discard.code: %d\n",     "SIOCGIWSTATS", info.stats.discard.code     );
-+    printf ( "%s discard.fragment: %d\n", "SIOCGIWSTATS", info.stats.discard.fragment );
-+    printf ( "%s discard.misc: %d\n",     "SIOCGIWSTATS", info.stats.discard.misc     );
-+    printf ( "%s discard.nwid: %d\n",     "SIOCGIWSTATS", info.stats.discard.nwid     );
-+    printf ( "%s discard.retries: %d\n",  "SIOCGIWSTATS", info.stats.discard.retries  );
-+    printf ( "%s miss.beacon: %d\n",      "SIOCGIWSTATS", info.stats.miss.beacon      );
-+  }
-+  else
-+    printf ( "%s %s\n", "SIOCGIWSTATS", " ===> no info.stats support" );
-+
-+  if ( info.txpower.flags & IW_TXPOW_MWATT )
-+    printf ( "%s txpower1: %d dBm disabled: %d fixed: %d flags: %d\n", "SIOCGIWRANGE", 
-+      mWatt2dbm ( info.txpower.value ), info.txpower.disabled, info.txpower.fixed, info.txpower.flags);
-+  else
-+    printf ( "%s txpower2: %d dBm disabled: %d fixed: %d flags: %d\n", "SIOCGIWRANGE", info.txpower.value, info.txpower.disabled, info.txpower.fixed, info.txpower.flags );
-+
-+  if ( info.has_range ) 
-+    if ( info.sens.value < 0 )
-+      printf ( "%s sens: %d dBm\n", "SIOCGIWRANGE", info.sens.value );
-+    else
-+      printf ( "%s sens: %d/%d\n", "SIOCGIWRANGE", info.sens.value, info.range.sensitivity );
-+
-+  if ( info.has_range && ( info.stats.qual.level != 0 ))
-+      if ( info.stats.qual.level > info.range.max_qual.level )
-+        /* Statistics are in dBm (absolute power measurement) */
-+        printf ( "%s Quality: %d/%d Signal level: %d dBm Noise level: %d dBm\n",
-+                  "SIOCGIWRANGE",
-+                  info.stats.qual.qual, info.range.max_qual.qual,
-+                  info.stats.qual.level - 0x100,
-+                  info.stats.qual.noise - 0x100 );
-+      else
-+        printf (  "%s Quality: %d/%d Signal level: %d/%d Noise level: %d/%d",
-+                  "SIOCGIWRANGE",
-+                  info.stats.qual.qual,  info.range.max_qual.qual,
-+                  info.stats.qual.level, info.range.max_qual.level,
-+                  info.stats.qual.noise, info.range.max_qual.noise );
-+
-+#endif // #ifdef DISPLAYWIEXT
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*                        Linked List Functions                              *
-+*                                                                           *
-+****************************************************************************/
-+/****************************************************************************
-+*                                                                           *
-+*                addList() - add an entry to a linked list                  *
-+*                                                                           *
-+****************************************************************************/
-+static void 
-+addList ( char *l, char *data, int len  )
-+{
-+  char uid[256];
-+  LIST_HEAD ( , avNode ) *list;       
-+
-+  // NOTE: this assumes the UID is at the beginning of the 
-+  //       data structure and that UIDs are strings
-+  
-+  list = ( LIST_HEAD ( , avNode ) * ) l;            // NOTE: don't know how to get 
-+  strcpy ( uid, data );                             //  rid of compiler warning on
-+                                                    //  LISTHEAD typecast
-+  // create a new node and the data that goes in it
-+  newNode = malloc ( sizeof ( struct avNode ));
-+  newNode->data = malloc ( len );
-+  memcpy ( newNode->data, data, len );
-+
-+  // this deals with an empty list
-+  if ( LIST_EMPTY ( list )) {
-+    LIST_INSERT_HEAD ( list, newNode, nodes );
-+    return;
-+  }
-+
-+  // this deals with UIDs that match
-+  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    if ( strncmp ( uid, np->data, strlen ( uid )) == 0 ) {                      // found matching UID
-+      LIST_INSERT_AFTER ( np, newNode, nodes );
-+      if ( np->data )
-+        free ( np->data );
-+      LIST_REMOVE ( np, nodes );
-+      free ( np );
-+      return;
-+    }
-+  }
-+
-+  // this deals with inserting a new UID in the list
-+  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
-+    lastNode = np;
-+    if ( strncmp ( np->data, uid, strlen ( uid )) > 0 ) {                       // old ID > new ID AND
-+      LIST_INSERT_BEFORE ( np, newNode, nodes );
-+      return;
-+    }
-+  }
-+
-+  // this deals with a UID that needs to go on the end of the list
-+  LIST_INSERT_AFTER ( lastNode, newNode, nodes );
-+
-+  return;
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*              initLists() - initialize all the linked lists                *
-+*                                                                           *
-+****************************************************************************/
-+static void initLists()
-+{
-+  LIST_INIT ( &scList );  LIST_INIT ( &aaList );  LIST_INIT ( &dfList );
-+  LIST_INIT ( &kmList );  LIST_INIT ( &prList );
-+  LIST_INIT ( &opList );  LIST_INIT ( &coList );
-+  LIST_INIT ( &gaList );  LIST_INIT ( &riList );  LIST_INIT ( &poList );
-+  LIST_INIT ( &paList );  LIST_INIT ( &ptList );  LIST_INIT ( &pfList );
-+  LIST_INIT ( &pdList );  LIST_INIT ( &piList );  LIST_INIT ( &rdList );
-+  LIST_INIT ( &alList );  LIST_INIT ( &rtList );  LIST_INIT ( &rrList );
-+}
-+/****************************************************************************
-+*                                                                           *
-+*                 flushLists() - flush all linked lists                     *
-+*                                                                           *
-+****************************************************************************/
-+static void flushLists()
-+{
-+  flushList (( char * ) &scList );  flushList (( char * ) &aaList );
-+  flushList (( char * ) &dfList );  flushList (( char * ) &kmList );
-+  flushList (( char * ) &prList );
-+  flushList (( char * ) &opList );  flushList (( char * ) &coList );
-+  flushList (( char * ) &gaList );  flushList (( char * ) &riList );
-+  flushList (( char * ) &poList );  flushList (( char * ) &paList );
-+  flushList (( char * ) &ptList );  flushList (( char * ) &pfList );
-+  flushList (( char * ) &pdList );  flushList (( char * ) &piList );
-+  flushList (( char * ) &rdList );  flushList (( char * ) &alList );
-+  flushList (( char * ) &rtList );  flushList (( char * ) &rrList );
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*                   flushList() - flush a linked list                       *
-+*                                                                           *
-+****************************************************************************/
-+static void flushList ( char *l )
-+{
-+  LIST_HEAD ( , avNode ) *list;
-+  
-+  list = ( LIST_HEAD ( , avNode ) * ) l;    // NOTE: don't know how to get 
-+  while ( !LIST_EMPTY ( list )) {           //  rid of compiler warning on
-+    np = LIST_FIRST ( list );               //  LISTHEAD typecast
-+    if ( np->data )
-+      free ( np->data );
-+    LIST_REMOVE ( np, nodes );
-+    free ( np );
-+  }
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*                            Utility Functions                              *
-+*                                                                           *
-+****************************************************************************/
-+/****************************************************************************
-+*                                                                           *
-+*        The following two routines were taken directly from iwlib.c        *
-+*                                                                           *
-+****************************************************************************/
-+ /*
-+ * Open a socket.
-+ * Depending on the protocol present, open the right socket. The socket
-+ * will allow us to talk to the driver.
-+ */
-+static int openSocket ( void )
-+{
-+  static const int families[] = {
-+    AF_INET, AF_IPX, AF_AX25, AF_APPLETALK
-+  };
-+  unsigned int  i;
-+  int   sock;
-+
-+  /*
-+   * Now pick any (exisiting) useful socket family for generic queries
-+   * Note : don't open all the socket, only returns when one matches,
-+   * all protocols might not be valid.
-+   * Workaround by Jim Kaba <jkaba@sarnoff.com>
-+   * Note : in 99% of the case, we will just open the inet_sock.
-+   * The remaining 1% case are not fully correct...
-+   */
-+
-+  /* Try all families we support */
-+  for(i = 0; i < sizeof(families)/sizeof(int); ++i) {
-+      /* Try to open the socket, if success returns it */
-+      sock = socket(families[i], SOCK_DGRAM, 0);
-+      if(sock >= 0)
-+  return sock;
-+  }
-+
-+  return -1;
-+}
-+
-+/*------------------------------------------------------------------*/
-+/*
-+ * Convert a value in milliWatt to a value in dBm.
-+ */
-+static int mWatt2dbm ( int in )
-+{
-+#ifdef WE_NOLIBM
-+  /* Version without libm : slower */
-+  double  fin = (double) in;
-+  int   res = 0;
-+
-+  /* Split integral and floating part to avoid accumulating rounding errors */
-+  while(fin > 10.0)
-+    {
-+      res += 10;
-+      fin /= 10.0;
-+    }
-+  while(fin > 1.000001) /* Eliminate rounding errors, take ceil */
-+    {
-+      res += 1;
-+      fin /= LOG10_MAGIC;
-+    }
-+  return(res);
-+#else /* WE_NOLIBM */
-+  /* Version with libm : faster */
-+  return((int) (ceil(10.0 * log10((double) in))));
-+#endif  /* WE_NOLIBM */
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*                 htob - converts hex string to binary                      *
-+*                                                                           *
-+****************************************************************************/
-+static char *htob ( char *s )
-+{
-+    char nibl, *byt;
-+    static char bin[20];
-+
-+    byt = bin;
-+
-+    while ((nibl = *s++) && nibl != ' ') {    /* While not end of string. */
-+      nibl -= ( nibl > '9') ?  ('A' - 10): '0';
-+      *byt = nibl << 4;                              /* place high nibble */
-+      if((nibl = *s++) && nibl != ' ') {
-+        nibl -= ( nibl > '9') ?  ('A' - 10): '0';
-+        *byt |= nibl;                                /*  place low nibble */
-+      }
-+      else break;
-+      ++byt;
-+    }
-+    *++byt = '\0';
-+    return ( bin );
-+}
-+
-+/****************************************************************************
-+*                                                                           *
-+*           hasChanged() - see if area has been changed from NULLs          *
-+*                                                                           *
-+****************************************************************************/
-+static int hasChanged ( char *loc, int len )
-+{
-+  char *wrk;
-+  int changed = TRUE;
-+
-+  wrk = malloc ( len );
-+  memset ( wrk, 0, len );
-+  if ( memcmp ( loc, wrk, len ) == 0 )
-+    changed = FALSE;
-+  free ( wrk );
-+
-+  return ( changed );
-+}
-+
---- /dev/null
-+++ b/agent/mibgroup/ieee802dot11.h
-@@ -0,0 +1,730 @@
-+/****************************************************************************
-+*                                                                           *
-+*  File Name:           ieee802dot11.h                                      *
-+*  Used By:                                                                 *
-+*                                                                           *
-+*  Operating System:                                                        *
-+*  Purpose:                                                                 *
-+*                                                                           *
-+*  Comments:                                                                *
-+*                                                                           *
-+*  Author:              Larry Simmons                                       *
-+*                       lsimmons@avantcom.com                               *
-+*                       www.avantcom.com                                    *
-+*                                                                           *
-+*  Creation Date:       09/02/03                                            *
-+*                                                                           *
-+*   Ver    Date   Inits Modification                                        *
-+*  ----- -------- ----- ------------                                        *
-+*  0.0.1 09/02/03  LRS  created                                             *
-+*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
-+****************************************************************************/
-+/* This file was generated by mib2c and is intended for use as a mib module
-+  for the ucd-snmp snmpd agent. */
-+#ifndef _MIBGROUP_IEEE802DOT11_H
-+#define _MIBGROUP_IEEE802DOT11_H
-+/* we may use header_generic and header_simple_table from the util_funcs module */
-+
-+/****************************************************************************
-+*                               Includes                                    *
-+****************************************************************************/
-+#include <sys/queue.h>
-+
-+/****************************************************************************
-+*                             Linked List Defines                           *
-+****************************************************************************/
-+// here are some Linked List MACROS I wanted to use, 
-+// but curiously were not in /usr/includes/sys/queue.h
-+
-+#ifndef LIST_EMPTY
-+  #define     LIST_EMPTY(head)        ((head)->lh_first == NULL)
-+#endif
-+
-+#ifndef LIST_NEXT
-+  #define     LIST_NEXT(elm, field)   ((elm)->field.le_next)
-+#endif
-+
-+#ifndef LIST_INSERT_BEFORE
-+  #define     LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
-+        (elm)->field.le_prev = (listelm)->field.le_prev;              \
-+        LIST_NEXT((elm), field) = (listelm);                          \
-+        *(listelm)->field.le_prev = (elm);                            \
-+        (listelm)->field.le_prev = &LIST_NEXT((elm), field);          \
-+  } while (0)
-+#endif
-+
-+#ifndef LIST_FIRST
-+  #define     LIST_FIRST(head)        ((head)->lh_first)
-+#endif
-+
-+/****************************************************************************
-+*                             802.11 MIB Defines                            *
-+****************************************************************************/
-+#define SYS_STRING_LEN                     256
-+#define MACADDR_LEN                        ( 6 * 2 ) + 5
-+#define OPER_RATE_SET_LEN                  126
-+#define MAN_OUI_LEN                        ( 3 * 2 ) + 2
-+#define WEP_STR_LEN                         64
-+#define SNMP_STR_LEN                       128
-+#define TEXT_LEN                            80
-+#define IFINDEX_LEN                          4
-+#define IFNAME_LEN                          16
-+#define MAX_WEP_KEYS                         4
-+
-+#define AUTHENICATION_ALGORITHMS_INDEX_LEN   4
-+#define WEP_DEFAULT_KEY_INDEX_LEN            4
-+#define WEP_KEY_MAPPING_INDEX_LEN            4
-+#define GROUP_ADDRESS_INDEX_LEN              4
-+#define REG_DOMAIN_SUPPORT_INDEX_LEN         4
-+#define ANTENNA_LIST_INDEX_LEN               4
-+#define SUPPORTED_DATA_RATES_TX_INDEX_LEN    4
-+#define SUPPORTED_DATA_RATES_RX_INDEX_LEN    4
-+
-+#define SC_UID_LEN  IFINDEX_LEN
-+#define AA_UID_LEN  IFINDEX_LEN + AUTHENICATION_ALGORITHMS_INDEX_LEN
-+#define DF_UID_LEN  IFINDEX_LEN + WEP_DEFAULT_KEY_INDEX_LEN
-+#define KM_UID_LEN  IFINDEX_LEN + WEP_KEY_MAPPING_INDEX_LEN
-+#define PR_UID_LEN  IFINDEX_LEN
-+#define OP_UID_LEN  IFINDEX_LEN
-+#define CO_UID_LEN  IFINDEX_LEN
-+#define GA_UID_LEN  IFINDEX_LEN + GROUP_ADDRESS_INDEX_LEN
-+#define RI_UID_LEN  IFINDEX_LEN
-+#define PO_UID_LEN  IFINDEX_LEN
-+#define PA_UID_LEN  IFINDEX_LEN
-+#define PT_UID_LEN  IFINDEX_LEN
-+#define PF_UID_LEN  IFINDEX_LEN
-+#define PD_UID_LEN  IFINDEX_LEN
-+#define PI_UID_LEN  IFINDEX_LEN
-+#define RD_UID_LEN  IFINDEX_LEN + REG_DOMAIN_SUPPORT_INDEX_LEN
-+#define AL_UID_LEN  IFINDEX_LEN + ANTENNA_LIST_INDEX_LEN
-+#define RT_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_TX_INDEX_LEN
-+#define RR_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_RX_INDEX_LEN
-+
-+/****************************************************************************
-+*                           Linked List Structure                           *
-+****************************************************************************/
-+static struct avNode {  
-+  LIST_ENTRY ( avNode ) nodes; 
-+  char *data;                                 // pointer to data
-+};
-+
-+typedef LIST_HEAD ( , avNode ) avList_t;
-+
-+/****************************************************************************
-+*                          802.11 MIB structures                            *
-+****************************************************************************/
-+/****************************************************************************
-+*                             dot11Smt Group                                *
-+****************************************************************************/
-+/****************************************************************************
-+*                          dot11StationConfigTable                          *
-+****************************************************************************/
-+static struct scTbl_data {
-+
-+  char  UID       [ SC_UID_LEN + 1 ];               // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  char  stationID [ MACADDR_LEN + 1 ];              // Default actual MacAddr
-+  long  mediumOccupancyLimit;
-+  long  CFPPollable;
-+  long  CFPPeriod;
-+  long  maxDuration;
-+  long  authenticationResponseTimeOut;
-+  long  privacyOptionImplemented;
-+  long  powerManagementMode;
-+  char  desiredSSID             [ SNMP_STR_LEN + 1 ];
-+  long  desiredBSSType;
-+  char  operationalRateSet      [ OPER_RATE_SET_LEN + 1];
-+  long  beaconPeriod;
-+  long  DTIMPeriod;
-+  long  associationResponseTimeOut;
-+  long  disAssociationReason;
-+  char  disAssociationStation   [ MACADDR_LEN + 1 ];
-+  long  deAuthenticationReason;
-+  char  deAuthenticationStation [ MACADDR_LEN + 1 ];
-+  long  authenticateFailStatus;
-+  char  authenticateFailStation [ MACADDR_LEN + 1 ];
-+
-+  long  haveStationID;
-+  long  haveMediumOccupancyLimit;
-+  long  haveCFPPollable;
-+  long  haveCFPPeriod;
-+  long  haveMaxDuration;
-+  long  haveAuthenticationResponseTimeOut;
-+  long  havePrivacyOptionImplemented;
-+  long  havePowerManagementMode;
-+  long  haveDesiredSSID;
-+  long  haveDesiredBSSType;
-+  long  haveOperationalRateSet;
-+  long  haveBeaconPeriod;
-+  long  haveDTIMPeriod;
-+  long  haveAssociationResponseTimeOut;
-+  long  haveDisAssociationReason;
-+  long  haveDisAssociationStation;
-+  long  haveDeAuthenticationReason;
-+  long  haveDeAuthenticationStation;
-+  long  haveAuthenticateFailStatus;
-+  long  haveAuthenticateFailStation;
-+
-+} nSc, *sc = &nSc;
-+
-+static avList_t scList;
-+
-+/****************************************************************************
-+*                    dot11AuthenticationAlgorithmsTable                     *
-+****************************************************************************/
-+static struct aaTbl_data {
-+
-+  char  UID       [ AA_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+  long  authenticationAlgorithmsIndex;
-+
-+  long  authenticationAlgorithm;
-+  long  authenticationAlgorithmsEnable;
-+
-+  long  haveAuthenticationAlgorithm;
-+  long  haveAuthenticationAlgorithmsEnable;
-+
-+} nAa, *aa = &nAa;
-+
-+static avList_t aaList;
-+
-+/****************************************************************************
-+*                           dot11WEPDefaultKeysTable                        *
-+****************************************************************************/
-+static struct dfTbl_data {
-+
-+  char  UID       [ DF_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];
-+
-+  long  ifIndex;                                    // ifindex of card
-+  long  WEPDefaultKeyIndex;
-+
-+  char  WEPDefaultKeyValue [ WEP_STR_LEN + 1 ];
-+  long  haveWEPDefaultKeyValue;
-+
-+} nDf, *df = &nDf;
-+
-+static avList_t dfList;
-+
-+/****************************************************************************
-+*                          dot11WEPKeyMappingsTable                         *
-+****************************************************************************/
-+static struct kmTbl_data {
-+
-+  char  UID       [ KM_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];
-+
-+  long  ifIndex;
-+  long  WEPKeyMappingIndex;
-+
-+  char  WEPKeyMappingAddress  [ MACADDR_LEN + 1 ];
-+  long  WEPKeyMappingWEPOn;
-+  char  WEPKeyMappingValue    [ WEP_STR_LEN + 1 ];
-+  long  WEPKeyMappingStatus;
-+
-+  long  haveWEPKeyMappingIndex;
-+  long  haveWEPKeyMappingAddress;
-+  long  haveWEPKeyMappingWEPOn;
-+  long  haveWEPKeyMappingValue;
-+  long  haveWEPKeyMappingStatus;
-+
-+} nKm, *km = &nKm;
-+
-+static avList_t kmList;
-+
-+/****************************************************************************
-+*                                dot11PrivacyTable                          *
-+****************************************************************************/
-+static struct prTbl_data {
-+
-+  char          UID       [ PR_UID_LEN + 1 ];
-+  char          ifName    [ IFNAME_LEN + 1 ];
-+
-+  long          ifIndex;
-+
-+  long          privacyInvoked;
-+  long          WEPDefaultKeyID;
-+  long          WEPKeyMappingLength;
-+  long          excludeUnencrypted;
-+  unsigned long WEPICVErrorCount;
-+  unsigned long WEPExcludedCount;
-+
-+  long          havePrivacyInvoked;
-+  long          haveWEPDefaultKeyID;
-+  long          haveWEPKeyMappingLength;
-+  long          haveExcludeUnencrypted;
-+  long          haveWEPICVErrorCount;
-+  long          haveWEPExcludedCount;
-+
-+} nPr, *pr = &nPr;
-+
-+static avList_t prList;
-+
-+/****************************************************************************
-+*                               dot11Mac Group                              *
-+****************************************************************************/
-+/****************************************************************************
-+*                              dot11OperationTable                          *
-+****************************************************************************/
-+static struct opTbl_data {
-+
-+  char  UID       [ OP_UID_LEN + 1 ];                 // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];                 // ifName of card
-+
-+  long  ifIndex;                                      // ifindex of card
-+
-+  char  MACAddress      [ MACADDR_LEN + 1 ];
-+  long  RTSThreshold;
-+  long  shortRetryLimit;
-+  long  longRetryLimit;
-+  long  fragmentationThreshold;
-+  long  maxTransmitMSDULifetime;
-+  long  maxReceiveLifetime;
-+  char  manufacturerID  [ SNMP_STR_LEN + 1 ];
-+  char  productID       [ SNMP_STR_LEN + 1 ];
-+
-+  long  haveMACAddress;
-+  long  haveRTSThreshold;
-+  long  haveShortRetryLimit;
-+  long  haveLongRetryLimit;
-+  long  haveFragmentationThreshold;
-+  long  haveMaxTransmitMSDULifetime;
-+  long  haveMaxReceiveLifetime;
-+  long  haveManufacturerID;
-+  long  haveProductID;
-+
-+} nOp, *op = &nOp;
-+
-+static avList_t opList;
-+
-+/****************************************************************************
-+*                            dot11CountersTable                             *
-+****************************************************************************/
-+static struct coTbl_data {
-+
-+  char          UID       [ CO_UID_LEN + 1 ];     // unique ID
-+  char          ifName    [ IFNAME_LEN + 1 ];     // ifName of card
-+
-+  long          ifIndex;                          // ifindex of card
-+
-+  unsigned long  transmittedFragmentCount;
-+  unsigned long  multicastTransmittedFrameCount;
-+  unsigned long  failedCount;
-+  unsigned long  retryCount;
-+  unsigned long  multipleRetryCount;
-+  unsigned long  frameDuplicateCount;
-+  unsigned long  RTSSuccessCount;
-+  unsigned long  RTSFailureCount;
-+  unsigned long  ACKFailureCount;
-+  unsigned long  receivedFragmentCount;
-+  unsigned long  multicastReceivedFrameCount;
-+  unsigned long  FCSErrorCount;
-+  unsigned long  transmittedFrameCount;
-+  unsigned long  WEPUndecryptableCount;
-+
-+  long           haveTransmittedFragmentCount;
-+  long           haveMulticastTransmittedFrameCount;
-+  long           haveFailedCount;
-+  long           haveRetryCount;
-+  long           haveMultipleRetryCount;
-+  long           haveFrameDuplicateCount;
-+  long           haveRTSSuccessCount;
-+  long           haveRTSFailureCount;
-+  long           haveACKFailureCount;
-+  long           haveReceivedFragmentCount;
-+  long           haveMulticastReceivedFrameCount;
-+  long           haveFCSErrorCount;
-+  long           haveTransmittedFrameCount;
-+  long           haveWEPUndecryptableCount;
-+
-+} nCo, *co = &nCo;
-+
-+static avList_t coList;
-+
-+/****************************************************************************
-+*                        dot11GroupAddressesTable                           *
-+****************************************************************************/
-+static struct gaTbl_data {
-+
-+  char  UID       [ GA_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];
-+
-+  long  ifIndex;                                    // ifindex of card
-+  long  groupAddressesIndex;
-+
-+  char  address   [ MACADDR_LEN + 1 ];
-+  long  groupAddressesStatus;
-+
-+  long  haveAddress;
-+  long  haveGroupAddressesStatus;
-+
-+} nGa, *ga = &nGa;
-+
-+static avList_t gaList;
-+
-+/****************************************************************************
-+*                               dot11Res Group                              *
-+****************************************************************************/
-+static char  resourceTypeIDName[] = "RTID";
-+static long  haveResourceTypeIDName = 1;
-+
-+/****************************************************************************
-+*                           dot11ResourceInfoTable                          *
-+****************************************************************************/
-+static struct riTbl_data {
-+
-+  char  UID       [ RI_UID_LEN + 1 ];               // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  char  manufacturerOUI            [ MAN_OUI_LEN    + 1 ];
-+  char  manufacturerName           [ SYS_STRING_LEN + 1 ];
-+  char  manufacturerProductName    [ SYS_STRING_LEN + 1 ];
-+  char  manufacturerProductVersion [ SYS_STRING_LEN + 1 ];
-+
-+  char  haveManufacturerOUI;
-+  char  haveManufacturerName;
-+  char  haveManufacturerProductName;
-+  char  haveManufacturerProductVersion;
-+
-+} nRi, *ri = &nRi;
-+
-+static avList_t riList;
-+
-+/****************************************************************************
-+*                               dot11Phy Group                              *
-+****************************************************************************/
-+/****************************************************************************
-+*                           dot11PhyOperationTable                          *
-+****************************************************************************/
-+static struct poTbl_data {
-+
-+  char  UID       [ PO_UID_LEN + 1 ];               // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  long  PHYType;
-+  long  currentRegDomain;
-+  long  tempType;
-+
-+  long  havePHYType;
-+  long  haveCurrentRegDomain;
-+  long  haveTempType;
-+
-+} nPo, *po = &nPo;
-+
-+static avList_t poList;
-+
-+/****************************************************************************
-+*                           dot11PhyAntennaEntry                            *
-+****************************************************************************/
-+static struct paTbl_data {
-+
-+  char  UID       [ PA_UID_LEN + 1 ];               // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  long  currentTxAntenna;
-+  long  diversitySupport;
-+  long  currentRxAntenna;
-+
-+  long  haveCurrentTxAntenna;
-+  long  haveDiversitySupport;
-+  long  haveCurrentRxAntenna;
-+
-+} nPa, *pa = &nPa;
-+
-+static avList_t paList;
-+
-+/****************************************************************************
-+*                             dot11PhyTxPowerTable                          *
-+****************************************************************************/
-+static struct ptTbl_data {
-+
-+  char  UID       [ PT_UID_LEN + 1 ];               // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  long  numberSupportedPowerLevels;
-+  long  TxPowerLevel1;
-+  long  TxPowerLevel2;
-+  long  TxPowerLevel3;
-+  long  TxPowerLevel4;
-+  long  TxPowerLevel5;
-+  long  TxPowerLevel6;
-+  long  TxPowerLevel7;
-+  long  TxPowerLevel8;
-+  long  currentTxPowerLevel;
-+
-+  long  haveNumberSupportedPowerLevels;
-+  long  haveTxPowerLevel1;
-+  long  haveTxPowerLevel2;
-+  long  haveTxPowerLevel3;
-+  long  haveTxPowerLevel4;
-+  long  haveTxPowerLevel5;
-+  long  haveTxPowerLevel6;
-+  long  haveTxPowerLevel7;
-+  long  haveTxPowerLevel8;
-+  long  haveCurrentTxPowerLevel ;
-+
-+} nPt, *pt = &nPt;
-+
-+static avList_t ptList;
-+
-+/****************************************************************************
-+*                               dot11PhyFHSSTable                           *
-+****************************************************************************/
-+static struct pfTbl_data {
-+
-+  char  UID       [ PF_UID_LEN + 1 ];              // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];              // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  long  hopTime;
-+  long  currentChannelNumber;
-+  long  maxDwellTime;
-+  long  currentDwellTime;
-+  long  currentSet;
-+  long  currentPattern;
-+  long  currentIndex;
-+
-+  long  haveHopTime;
-+  long  haveCurrentChannelNumber;
-+  long  haveMaxDwellTime;
-+  long  haveCurrentDwellTime;
-+  long  haveCurrentSet;
-+  long  haveCurrentPattern;
-+  long  haveCurrentIndex;
-+
-+} nPf, *pf = &nPf;
-+
-+static avList_t pfList;
-+
-+/****************************************************************************
-+*                              dot11PhyDSSSTable                            *
-+****************************************************************************/
-+static struct pdTbl_data {
-+
-+  char  UID       [ PD_UID_LEN + 1 ];               // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  long  currentChannel;
-+  long  CCAModeSupported;
-+  long  currentCCAMode;
-+  long  EDThreshold;
-+
-+  long  haveCurrentChannel;
-+  long  haveCCAModeSupported ;
-+  long  haveCurrentCCAMode;
-+  long  haveEDThreshold;
-+
-+} nPd, *pd = &nPd;
-+
-+static avList_t pdList;
-+
-+/****************************************************************************
-+*                              dot11PhyIRTable                              *
-+****************************************************************************/
-+static struct piTbl_data {
-+
-+  char  UID       [ PI_UID_LEN + 1 ];               // unique ID
-+  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
-+
-+  long  ifIndex;                                    // ifindex of card
-+
-+  long  CCAWatchdogTimerMax;
-+  long  CCAWatchdogCountMax;
-+  long  CCAWatchdogTimerMin;
-+  long  CCAWatchdogCountMin;
-+
-+  long  haveCCAWatchdogTimerMax;
-+  long  haveCCAWatchdogCountMax;
-+  long  haveCCAWatchdogTimerMin;
-+  long  haveCCAWatchdogCountMin;
-+
-+} nPi, *pi = &nPi;
-+
-+static avList_t piList;
-+
-+/****************************************************************************
-+*                      dot11RegDomainsSupportedTable                        *
-+****************************************************************************/
-+static struct rdTbl_data {
-+
-+  char  UID       [ RD_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];
-+
-+  long  ifIndex;                                    // ifindex of card
-+  long  regDomainsSupportIndex;
-+
-+  long  regDomainsSupportValue;
-+  long  haveRegDomainsSupportValue;
-+
-+} nRd, *rd = &nRd;
-+
-+static avList_t rdList;
-+
-+/****************************************************************************
-+*                             dot11AntennasListTable                        *
-+****************************************************************************/
-+static struct alTbl_data {
-+
-+  char  UID       [ AL_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];
-+
-+  long  ifIndex;                                    // ifindex of card
-+  long  antennaListIndex;
-+
-+  long  supportedTxAntenna;
-+  long  supportedRxAntenna;
-+  long  diversitySelectionRx ;
-+
-+  long  haveSupportedTxAntenna;
-+  long  haveSupportedRxAntenna;
-+  long  haveDiversitySelectionRx ;
-+
-+} nAl, *al = &nAl;
-+
-+static avList_t alList;
-+
-+/****************************************************************************
-+*                    dot11SupportedDataRatesTxTable                         *
-+****************************************************************************/
-+static struct rtTbl_data {
-+
-+  char  UID       [ RT_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];
-+
-+  long  ifIndex;                                    // ifindex of card
-+  long  supportedDataRatesTxIndex;
-+
-+  long  supportedDataRatesTxValue;
-+  long  haveSupportedDataRatesTxValue;
-+
-+} nRt, *rt = &nRt;
-+
-+static avList_t rtList;
-+
-+/****************************************************************************
-+*                    dot11SupportedDataRatesRxTable                         *
-+****************************************************************************/
-+static struct rrTbl_data {
-+
-+  char  UID       [ RR_UID_LEN + 1 ];
-+  char  ifName    [ IFNAME_LEN + 1 ];
-+
-+  long  ifIndex;                                    // ifindex of card
-+  long  supportedDataRatesRxIndex;
-+
-+  long  supportedDataRatesRxValue;
-+  long  haveSupportedDataRatesRxValue;
-+
-+} nRr, *rr = &nRr;
-+
-+static avList_t rrList;
-+
-+/****************************************************************************
-+*                       Wireless Extensions Structures                      *
-+****************************************************************************/
-+static long wepCurrentKey;
-+static long haveWepCurrentKey;
-+static struct wepTbl_data {
-+
-+  long len;
-+  char key [ WEP_STR_LEN + 1 ];
-+  long haveKey;
-+
-+} wep[4];
-+
-+/****************************************************************************
-+*                                                                           *
-+****************************************************************************/
-+config_require(util_funcs)
-+
-+/* function prototypes */
-+
-+void   init_ieee802dot11 ( void );
-+FindVarMethod var_ieee802dot11;
-+FindVarMethod var_dot11StationConfigTable;
-+FindVarMethod var_dot11AuthenticationAlgorithmsTable;
-+FindVarMethod var_dot11WEPDefaultKeysTable;
-+FindVarMethod var_dot11WEPKeyMappingsTable;
-+FindVarMethod var_dot11PrivacyTable;
-+FindVarMethod var_dot11OperationTable;
-+FindVarMethod var_dot11CountersTable;
-+FindVarMethod var_dot11GroupAddressesTable;
-+FindVarMethod var_dot11ResourceInfoTable;
-+FindVarMethod var_dot11PhyOperationTable;
-+FindVarMethod var_dot11PhyAntennaTable;
-+FindVarMethod var_dot11PhyTxPowerTable;
-+FindVarMethod var_dot11PhyFHSSTable;
-+FindVarMethod var_dot11PhyDSSSTable;
-+FindVarMethod var_dot11PhyIRTable;
-+FindVarMethod var_dot11RegDomainsSupportedTable;
-+FindVarMethod var_dot11AntennasListTable;
-+FindVarMethod var_dot11SupportedDataRatesTxTable;
-+FindVarMethod var_dot11SupportedDataRatesRxTable;
-+
-+WriteMethod write_dot11StationID;
-+WriteMethod write_dot11MediumOccupancyLimit;
-+WriteMethod write_dot11CFPPeriod;
-+WriteMethod write_dot11CFPMaxDuration;
-+WriteMethod write_dot11AuthenticationResponseTimeOut;
-+WriteMethod write_dot11PowerManagementMode;
-+WriteMethod write_dot11DesiredSSID;
-+WriteMethod write_dot11DesiredBSSType;
-+WriteMethod write_dot11OperationalRateSet;
-+WriteMethod write_dot11BeaconPeriod;
-+WriteMethod write_dot11DTIMPeriod;
-+WriteMethod write_dot11AssociationResponseTimeOut;
-+WriteMethod write_dot11AuthenticationAlgorithmsEnable;
-+WriteMethod write_dot11WEPDefaultKeyValue;
-+WriteMethod write_dot11WEPKeyMappingAddress;
-+WriteMethod write_dot11WEPKeyMappingWEPOn;
-+WriteMethod write_dot11WEPKeyMappingValue;
-+WriteMethod write_dot11WEPKeyMappingStatus;
-+WriteMethod write_dot11PrivacyInvoked;
-+WriteMethod write_dot11WEPDefaultKeyID;
-+WriteMethod write_dot11WEPKeyMappingLength;
-+WriteMethod write_dot11ExcludeUnencrypted;
-+WriteMethod write_dot11RTSThreshold;
-+WriteMethod write_dot11ShortRetryLimit;
-+WriteMethod write_dot11LongRetryLimit;
-+WriteMethod write_dot11FragmentationThreshold;
-+WriteMethod write_dot11MaxTransmitMSDULifetime;
-+WriteMethod write_dot11MaxReceiveLifetime;
-+WriteMethod write_dot11Address;
-+WriteMethod write_dot11GroupAddressesStatus;
-+WriteMethod write_dot11CurrentRegDomain;
-+WriteMethod write_dot11CurrentTxAntenna;
-+WriteMethod write_dot11CurrentRxAntenna;
-+WriteMethod write_dot11CurrentTxPowerLevel;
-+WriteMethod write_dot11CurrentChannelNumber;
-+WriteMethod write_dot11CurrentDwellTime;
-+WriteMethod write_dot11CurrentSet;
-+WriteMethod write_dot11CurrentPattern;
-+WriteMethod write_dot11CurrentIndex;
-+WriteMethod write_dot11CurrentChannel;
-+WriteMethod write_dot11CurrentCCAMode;
-+WriteMethod write_dot11EDThreshold;
-+WriteMethod write_dot11CCAWatchdogTimerMax;
-+WriteMethod write_dot11CCAWatchdogCountMax;
-+WriteMethod write_dot11CCAWatchdogTimerMin;
-+WriteMethod write_dot11CCAWatchdogCountMin;
-+WriteMethod write_dot11SupportedTxAntenna;
-+WriteMethod write_dot11SupportedRxAntenna;
-+WriteMethod write_dot11DiversitySelectionRx;
-+
-+#endif /* _MIBGROUP_IEEE802DOT11_H */
---- /dev/null
-+++ b/agent/mibgroup/iwlib.h
-@@ -0,0 +1,502 @@
-+/*
-+ *    Wireless Tools
-+ *
-+ *            Jean II - HPLB 97->99 - HPL 99->02
-+ *
-+ * Common header for the Wireless Extension library...
-+ *
-+ * This file is released under the GPL license.
-+ *     Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
-+ */
-+
-+#ifndef IWLIB_H
-+#define IWLIB_H
-+
-+/*#include "CHANGELOG.h"*/
-+
-+/***************************** INCLUDES *****************************/
-+
-+/* Standard headers */
-+#include <sys/types.h>
-+#include <sys/ioctl.h>
-+#include <stdio.h>
-+#include <math.h>
-+#include <errno.h>
-+#include <fcntl.h>
-+#include <ctype.h>
-+#include <stdlib.h>
-+#include <string.h>
-+#include <unistd.h>
-+#include <netdb.h>            /* gethostbyname, getnetbyname */
-+#include <net/ethernet.h>     /* struct ether_addr */
-+#include <sys/time.h>         /* struct timeval */
-+#include <unistd.h>
-+
-+/* This is our header selection. Try to hide the mess and the misery :-(
-+ * Don't look, you would go blind ;-) */
-+
-+#ifndef LINUX_VERSION_CODE
-+#include <linux/version.h>
-+#endif
-+
-+/* Kernel headers 2.4.X + Glibc 2.2 - Mandrake 8.0, Debian 2.3, RH 7.1
-+ * Kernel headers 2.2.X + Glibc 2.2 - Slackware 8.0 */
-+#if defined(__GLIBC__) \
-+    && __GLIBC__ == 2 \
-+    && __GLIBC_MINOR__ >= 2 \
-+    && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
-+//#define GLIBC22_HEADERS
-+#define GENERIC_HEADERS
-+
-+/* Kernel headers 2.4.X + Glibc 2.1 - Debian 2.2 upgraded, RH 7.0
-+ * Kernel headers 2.2.X + Glibc 2.1 - Debian 2.2, RH 6.1 */
-+#elif defined(__GLIBC__) \
-+      && __GLIBC__ == 2 \
-+      && __GLIBC_MINOR__ == 1 \
-+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
-+//#define GLIBC_HEADERS
-+#define GENERIC_HEADERS
-+
-+/* Kernel headers 2.2.X + Glibc 2.0 - Debian 2.1 */
-+#elif defined(__GLIBC__) \
-+      && __GLIBC__ == 2 \
-+      && __GLIBC_MINOR__ == 0 \
-+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
-+      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
-+#define GLIBC_HEADERS
-+#define KLUDGE_HEADERS
-+
-+/* Note : is it really worth supporting kernel 2.0.X, knowing that
-+ * we require WE v9, which is only available in 2.2.X and higher ?
-+ * I guess one could use 2.0.x with an upgraded wireless.h... */
-+
-+/* Kernel headers 2.0.X + Glibc 2.0 - Debian 2.0, RH 5 */
-+#elif defined(__GLIBC__) \
-+      && __GLIBC__ == 2 \
-+      && __GLIBC_MINOR__ == 0 \
-+      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) \
-+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)
-+#define GLIBC_HEADERS
-+
-+/* Kernel headers 2.0.X + libc5 - old systems */
-+#elif defined(_LINUX_C_LIB_VERSION_MAJOR) \
-+      && _LINUX_C_LIB_VERSION_MAJOR == 5 \
-+      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
-+      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
-+#define LIBC5_HEADERS
-+
-+/* Unsupported combination */
-+#else
-+#error "Your kernel/libc combination is not supported"
-+#endif
-+
-+#ifdef GENERIC_HEADERS 
-+/* Proposed by Dr. Michael Rietz <rietz@mail.amps.de>, 27.3.2 */
-+/* If this works for all, it might be more stable on the long term - Jean II */
-+#include <net/if_arp.h>               /* For ARPHRD_ETHER */
-+#include <sys/socket.h>               /* For AF_INET & struct sockaddr */
-+#include <netinet/in.h>         /* For struct sockaddr_in */
-+#include <netinet/if_ether.h>
-+#endif /* GENERIC_HEADERS */    
-+
-+#ifdef GLIBC22_HEADERS 
-+/* Added by Ross G. Miller <Ross_Miller@baylor.edu>, 3/28/01 */
-+#include <linux/if_arp.h>     /* For ARPHRD_ETHER */
-+#include <linux/socket.h>     /* For AF_INET & struct sockaddr */
-+#include <sys/socket.h>
-+#endif /* GLIBC22_HEADERS */    
-+
-+#ifdef KLUDGE_HEADERS
-+#include <socketbits.h>
-+#endif        /* KLUDGE_HEADERS */
-+
-+#ifdef GLIBC_HEADERS
-+#include <linux/if_arp.h>     /* For ARPHRD_ETHER */
-+#include <linux/socket.h>     /* For AF_INET & struct sockaddr */
-+#include <linux/in.h>         /* For struct sockaddr_in */
-+#endif        /* KLUDGE_HEADERS || GLIBC_HEADERS */
-+
-+#ifdef LIBC5_HEADERS
-+#include <sys/socket.h>               /* For AF_INET & struct sockaddr & socket() */
-+#include <linux/if_arp.h>     /* For ARPHRD_ETHER */
-+#include <linux/in.h>         /* For struct sockaddr_in */
-+#endif        /* LIBC5_HEADERS */
-+
-+/* Those 3 headers were previously included in wireless.h */
-+#include <linux/types.h>              /* for "caddr_t" et al          */
-+#include <linux/socket.h>             /* for "struct sockaddr" et al  */
-+#include <linux/if.h>                 /* for IFNAMSIZ and co... */
-+
-+#ifdef WEXT_HEADER
-+/* Private copy of Wireless extensions */
-+#include WEXT_HEADER
-+#else /* !WEXT_HEADER */
-+/* System wide Wireless extensions */
-+#include <linux/wireless.h>
-+#endif        /* !WEXT_HEADER */
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+/****************************** DEBUG ******************************/
-+
-+
-+/************************ CONSTANTS & MACROS ************************/
-+
-+/* Paths */
-+#define PROC_NET_WIRELESS     "/proc/net/wireless"
-+#define PROC_NET_DEV          "/proc/net/dev"
-+
-+/* Some useful constants */
-+#define KILO  1e3
-+#define MEGA  1e6
-+#define GIGA  1e9
-+/* For doing log10/exp10 without libm */
-+#define LOG10_MAGIC   1.25892541179
-+
-+/* Backward compatibility for Wireless Extension 9 */
-+#ifndef IW_POWER_MODIFIER
-+#define IW_POWER_MODIFIER     0x000F  /* Modify a parameter */
-+#define IW_POWER_MIN          0x0001  /* Value is a minimum  */
-+#define IW_POWER_MAX          0x0002  /* Value is a maximum */
-+#define IW_POWER_RELATIVE     0x0004  /* Value is not in seconds/ms/us */
-+#endif /* IW_POWER_MODIFIER */
-+
-+#ifndef IW_ENCODE_NOKEY
-+#define IW_ENCODE_NOKEY         0x0800  /* Key is write only, so not here */
-+#define IW_ENCODE_MODE                0xF000  /* Modes defined below */
-+#endif /* IW_ENCODE_NOKEY */
-+#ifndef IW_ENCODE_TEMP
-+#define IW_ENCODE_TEMP                0x0400  /* Temporary key */
-+#endif /* IW_ENCODE_TEMP */
-+
-+/* More backward compatibility */
-+#ifndef SIOCSIWCOMMIT
-+#define SIOCSIWCOMMIT SIOCSIWNAME
-+#endif /* SIOCSIWCOMMIT */
-+
-+/****************************** TYPES ******************************/
-+
-+/* Shortcuts */
-+typedef struct iw_statistics  iwstats;
-+typedef struct iw_range               iwrange;
-+typedef struct iw_param               iwparam;
-+typedef struct iw_freq                iwfreq;
-+typedef struct iw_quality     iwqual;
-+typedef struct iw_priv_args   iwprivargs;
-+typedef struct sockaddr               sockaddr;
-+
-+/* Structure for storing all wireless information for each device
-+ * This is pretty exhaustive... */
-+typedef struct wireless_info
-+{
-+  char                name[IFNAMSIZ + 1];     /* Wireless/protocol name */
-+  int         has_nwid;
-+  iwparam     nwid;                   /* Network ID */
-+  int         has_freq;
-+  double      freq;                   /* Frequency/channel */
-+  int         has_sens;
-+  iwparam     sens;                   /* sensitivity */
-+  int         has_key;
-+  unsigned char       key[IW_ENCODING_TOKEN_MAX];     /* Encoding key used */
-+  int         key_size;               /* Number of bytes */
-+  int         key_flags;              /* Various flags */
-+  int         has_essid;
-+  int         essid_on;
-+  char                essid[IW_ESSID_MAX_SIZE + 1];   /* ESSID (extended network) */
-+  int         has_nickname;
-+  char                nickname[IW_ESSID_MAX_SIZE + 1]; /* NickName */
-+  int         has_ap_addr;
-+  sockaddr    ap_addr;                /* Access point address */
-+  int         has_bitrate;
-+  iwparam     bitrate;                /* Bit rate in bps */
-+  int         has_rts;
-+  iwparam     rts;                    /* RTS threshold in bytes */
-+  int         has_frag;
-+  iwparam     frag;                   /* Fragmentation threshold in bytes */
-+  int         has_mode;
-+  int         mode;                   /* Operation mode */
-+  int         has_power;
-+  iwparam     power;                  /* Power management parameters */
-+  int         has_txpower;
-+  iwparam     txpower;                /* Transmit Power in dBm */
-+  int         has_retry;
-+  iwparam     retry;                  /* Retry limit or lifetime */
-+
-+  /* Stats */
-+  iwstats     stats;
-+  int         has_stats;
-+  iwrange     range;
-+  int         has_range;
-+} wireless_info;
-+
-+/* Structure for storing all wireless information for each device
-+ * This is a cut down version of the one above, containing only
-+ * the things *truly* needed to configure a card.
-+ * Don't add other junk, I'll remove it... */
-+typedef struct wireless_config
-+{
-+  char                name[IFNAMSIZ + 1];     /* Wireless/protocol name */
-+  int         has_nwid;
-+  iwparam     nwid;                   /* Network ID */
-+  int         has_freq;
-+  double      freq;                   /* Frequency/channel */
-+  int         has_key;
-+  unsigned char       key[IW_ENCODING_TOKEN_MAX];     /* Encoding key used */
-+  int         key_size;               /* Number of bytes */
-+  int         key_flags;              /* Various flags */
-+  int         has_essid;
-+  int         essid_on;
-+  char                essid[IW_ESSID_MAX_SIZE + 1];   /* ESSID (extended network) */
-+  int         has_mode;
-+  int         mode;                   /* Operation mode */
-+} wireless_config;
-+
-+typedef struct stream_descr
-+{
-+  char *      end;            /* End of the stream */
-+  char *      current;        /* Current event in stream of events */
-+  char *      value;          /* Current value in event */
-+} stream_descr;
-+
-+/* Prototype for handling display of each single interface on the
-+ * system - see iw_enum_devices() */
-+typedef int (*iw_enum_handler)(int    skfd,
-+                             char *   ifname,
-+                             char *   args[],
-+                             int      count);
-+
-+/**************************** PROTOTYPES ****************************/
-+/*
-+ * All the functions in iwcommon.c
-+ */
-+
-+/* ---------------------- SOCKET SUBROUTINES -----------------------*/
-+int
-+      iw_sockets_open(void);
-+void
-+      iw_enum_devices(int             skfd,
-+                      iw_enum_handler fn,
-+                      char *          args[],
-+                      int             count);
-+/* --------------------- WIRELESS SUBROUTINES ----------------------*/
-+int
-+      iw_get_range_info(int           skfd,
-+                        char *        ifname,
-+                        iwrange *     range);
-+int
-+      iw_print_version_info(char *    toolname);
-+int
-+      iw_get_priv_info(int            skfd,
-+                       char *         ifname,
-+                       iwprivargs *   priv,
-+                       int            maxpriv);
-+int
-+      iw_get_basic_config(int                 skfd,
-+                          char *              ifname,
-+                          wireless_config *   info);
-+int
-+      iw_set_basic_config(int                 skfd,
-+                          char *              ifname,
-+                          wireless_config *   info);
-+/* --------------------- PROTOCOL SUBROUTINES --------------------- */
-+int
-+      iw_protocol_compare(char *      protocol1,
-+                          char *      protocol2);
-+/* -------------------- FREQUENCY SUBROUTINES --------------------- */
-+void
-+      iw_float2freq(double    in,
-+                 iwfreq *     out);
-+double
-+      iw_freq2float(iwfreq *  in);
-+void
-+      iw_print_freq(char *    buffer,
-+                    double    freq);
-+int
-+      iw_freq_to_channel(double               freq,
-+                         struct iw_range *    range);
-+void
-+      iw_print_bitrate(char * buffer,
-+                       int    bitrate);
-+/* ---------------------- POWER SUBROUTINES ----------------------- */
-+int
-+      iw_dbm2mwatt(int        in);
-+int
-+      iw_mwatt2dbm(int        in);
-+/* -------------------- STATISTICS SUBROUTINES -------------------- */
-+int
-+      iw_get_stats(int        skfd,
-+                   char *     ifname,
-+                   iwstats *  stats);
-+void
-+      iw_print_stats(char *           buffer,
-+                     iwqual *         qual,
-+                     iwrange *        range,
-+                     int              has_range);
-+/* --------------------- ENCODING SUBROUTINES --------------------- */
-+void
-+      iw_print_key(char *             buffer,
-+                   unsigned char *    key,
-+                   int                key_size,
-+                   int                key_flags);
-+int
-+      iw_in_key(char *                input,
-+                unsigned char *       key);
-+int
-+      iw_in_key_full(int              skfd,
-+                     char *           ifname,
-+                     char *           input,
-+                     unsigned char *  key,
-+                     __u16 *          flags);
-+/* ----------------- POWER MANAGEMENT SUBROUTINES ----------------- */
-+void
-+      iw_print_pm_value(char *        buffer,
-+                        int           value,
-+                        int           flags);
-+void
-+      iw_print_pm_mode(char *         buffer,
-+                       int            flags);
-+/* --------------- RETRY LIMIT/LIFETIME SUBROUTINES --------------- */
-+#if WIRELESS_EXT > 10
-+void
-+      iw_print_retry_value(char *     buffer,
-+                           int        value,
-+                           int        flags);
-+#endif
-+/* ----------------------- TIME SUBROUTINES ----------------------- */
-+void
-+      iw_print_timeval(char *                 buffer,
-+                       const struct timeval * time);
-+/* --------------------- ADDRESS SUBROUTINES ---------------------- */
-+int
-+      iw_check_mac_addr_type(int      skfd,
-+                             char *   ifname);
-+int
-+      iw_check_if_addr_type(int       skfd,
-+                            char *    ifname);
-+#if 0
-+int
-+      iw_check_addr_type(int          skfd,
-+                         char *       ifname);
-+#endif
-+void
-+      iw_ether_ntop(const struct ether_addr* eth, char* buf);
-+char*
-+      iw_ether_ntoa(const struct ether_addr* eth);
-+int
-+      iw_ether_aton(const char* bufp, struct ether_addr* eth);
-+int
-+      iw_in_inet(char *bufp, struct sockaddr *sap);
-+int
-+      iw_in_addr(int                  skfd,
-+                 char *               ifname,
-+                 char *               bufp,
-+                 struct sockaddr *    sap);
-+/* ----------------------- MISC SUBROUTINES ------------------------ */
-+int
-+      iw_get_priv_size(int            args);
-+
-+#if WIRELESS_EXT > 13
-+/* ---------------------- EVENT SUBROUTINES ---------------------- */
-+void
-+      iw_init_event_stream(struct stream_descr *      stream,
-+                           char *                     data,
-+                           int                        len);
-+int
-+      iw_extract_event_stream(struct stream_descr *   stream,
-+                              struct iw_event *       iwe);
-+#endif /* WIRELESS_EXT > 13 */
-+
-+/**************************** VARIABLES ****************************/
-+
-+extern const char * const     iw_operation_mode[];
-+#define IW_NUM_OPER_MODE      7
-+
-+/************************* INLINE FUNTIONS *************************/
-+/*
-+ * Functions that are so simple that it's more efficient inlining them
-+ */
-+
-+/*
-+ * Note : I've defined wrapper for the ioctl request so that
-+ * it will be easier to migrate to other kernel API if needed
-+ */
-+
-+/*------------------------------------------------------------------*/
-+/*
-+ * Wrapper to push some Wireless Parameter in the driver
-+ */
-+static inline int
-+iw_set_ext(int                        skfd,           /* Socket to the kernel */
-+         char *               ifname,         /* Device name */
-+         int                  request,        /* WE ID */
-+         struct iwreq *       pwrq)           /* Fixed part of the request */
-+{
-+  /* Set device name */
-+  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
-+  /* Do the request */
-+  return(ioctl(skfd, request, pwrq));
-+}
-+
-+/*------------------------------------------------------------------*/
-+/*
-+ * Wrapper to extract some Wireless Parameter out of the driver
-+ */
-+static inline int
-+iw_get_ext(int                        skfd,           /* Socket to the kernel */
-+         char *               ifname,         /* Device name */
-+         int                  request,        /* WE ID */
-+         struct iwreq *       pwrq)           /* Fixed part of the request */
-+{
-+  /* Set device name */
-+  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
-+  /* Do the request */
-+  return(ioctl(skfd, request, pwrq));
-+}
-+
-+/*------------------------------------------------------------------*/
-+/* Backwards compatibility
-+ * Actually, those form are much easier to use when dealing with
-+ * struct sockaddr... */
-+static inline char*
-+iw_pr_ether(char* bufp, const unsigned char* addr)
-+{
-+  iw_ether_ntop((const struct ether_addr *) addr, bufp);
-+  return bufp;
-+}
-+/* Backwards compatibility */
-+static inline int
-+iw_in_ether(const char *bufp, struct sockaddr *sap)
-+{
-+  sap->sa_family = ARPHRD_ETHER;
-+  return iw_ether_aton(bufp, (struct ether_addr *) sap->sa_data) ? 0 : -1;
-+}
-+
-+/*------------------------------------------------------------------*/
-+/*
-+ * Create an Ethernet broadcast address
-+ */
-+static inline void
-+iw_broad_ether(struct sockaddr *sap)
-+{
-+  sap->sa_family = ARPHRD_ETHER;
-+  memset((char *) sap->sa_data, 0xFF, ETH_ALEN);
-+}
-+
-+/*------------------------------------------------------------------*/
-+/*
-+ * Create an Ethernet NULL address
-+ */
-+static inline void
-+iw_null_ether(struct sockaddr *sap)
-+{
-+  sap->sa_family = ARPHRD_ETHER;
-+  memset((char *) sap->sa_data, 0x00, ETH_ALEN);
-+}
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif        /* IWLIB_H */
diff --git a/package/network/net-snmp/patches/900-musl-compat.patch b/package/network/net-snmp/patches/900-musl-compat.patch
deleted file mode 100644 (file)
index fa9a01e..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/agent/mibgroup/iwlib.h
-+++ b/agent/mibgroup/iwlib.h
-@@ -85,6 +85,11 @@
-       && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
- #define LIBC5_HEADERS
-+/* Musl */
-+#elif !defined(__GLIBC__) && !defined(__UCLIBC__) \
-+      && LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
-+#define GENERIC_HEADERS
-+
- /* Unsupported combination */
- #else
- #error "Your kernel/libc combination is not supported"
diff --git a/package/network/services/net-snmp/Makefile b/package/network/services/net-snmp/Makefile
new file mode 100644 (file)
index 0000000..bfcaa90
--- /dev/null
@@ -0,0 +1,290 @@
+#
+# Copyright (C) 2006-2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=net-snmp
+PKG_VERSION:=5.8
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/net-snmp
+PKG_HASH:=b2fc3500840ebe532734c4786b0da4ef0a5f67e51ef4c86b3345d697e4976adf
+PKG_MAINTAINER:=Stijn Tintel <stijn@linux-ipv6.be>
+PKG_LICENSE:=MIT BSD-3-Clause-Clear
+
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/net-snmp/Default
+  SECTION:=net
+  CATEGORY:=Network
+  URL:=http://www.net-snmp.org/
+endef
+
+define Package/net-snmp/Default/description
+ Simple Network Management Protocol (SNMP) is a widely used protocol for
+ monitoring the health and welfare of network equipment (eg. routers),
+ computer equipment and even devices like UPSs. Net-SNMP is a suite of
+ applications used to implement SNMP v1, SNMP v2c and SNMP v3 using both
+ IPv4 and IPv6.
+endef
+
+
+define Package/libnetsnmp
+$(call Package/net-snmp/Default)
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+libnl-tiny +libpci
+  TITLE:=Open source SNMP implementation (libraries)
+endef
+
+define Package/libnetsnmp/description
+$(call Package/net-snmp/Default/description)
+ .
+ This package contains shared libraries, needed by other programs.
+endef
+
+
+define Package/snmp-mibs
+$(call Package/net-snmp/Default)
+  TITLE:=Open source SNMP implementation (MIB-files)
+endef
+
+define Package/snmp-mibs/description
+$(call Package/net-snmp/Default/description)
+ .
+ This package contains SNMP MIB-Files.
+endef
+
+
+define Package/snmp-utils
+$(call Package/net-snmp/Default)
+  DEPENDS:=+libnetsnmp
+  TITLE:=Open source SNMP implementation (utilities)
+endef
+
+define Package/snmp-utils/description
+$(call Package/net-snmp/Default/description)
+ .
+ This package contains SNMP client utilities:
+   - snmpget
+   - snmpset
+   - snmpstatus
+   - snmptest
+   - snmptrap
+   - snmpwalk
+endef
+
+
+define Package/snmpd
+$(call Package/net-snmp/Default)
+  DEPENDS:=+libnetsnmp
+  TITLE:=Open source SNMP implementation (daemon)
+endef
+
+define Package/snmpd/description
+$(call Package/net-snmp/Default/description)
+ .
+ This package contains the SNMP agent, dynamically linked.
+endef
+
+
+define Package/snmpd-static
+$(call Package/net-snmp/Default)
+  DEPENDS:=+snmpd
+  TITLE:=Open source SNMP implementation (daemon)
+endef
+
+
+define Package/snmptrapd
+$(call Package/net-snmp/Default)
+  DEPENDS:=+libnetsnmp
+  TITLE:=Open source SNMP implementation (notification receiver)
+endef
+
+define Package/snmptrapd/description
+$(call Package/net-snmp/Default/description)
+ .
+ This package contains the SNMP notification receiver.
+endef
+
+
+SNMP_MIB_MODULES_INCLUDED = \
+       agent/extend \
+       agentx \
+       host/hr_device \
+       host/hr_disk \
+       host/hr_filesys \
+       host/hr_network \
+       host/hr_partition \
+       host/hr_proc \
+       host/hr_storage \
+       host/hr_system \
+       ieee802dot11 \
+       if-mib/ifXTable \
+       ip-mib/inetNetToMediaTable \
+       mibII/at \
+       mibII/icmp \
+       mibII/ifTable \
+       mibII/ip \
+       mibII/snmp_mib \
+       mibII/sysORTable \
+       mibII/system_mib \
+       mibII/tcp \
+       mibII/udp \
+       mibII/vacm_context \
+       mibII/vacm_vars \
+       snmpv3/snmpEngine \
+       snmpv3/snmpMPDStats \
+       snmpv3/usmConf \
+       snmpv3/usmStats \
+       snmpv3/usmUser \
+       tunnel \
+       ucd-snmp/disk \
+       ucd-snmp/dlmod \
+       ucd-snmp/extensible \
+       ucd-snmp/loadave \
+       ucd-snmp/memory \
+       ucd-snmp/pass \
+       ucd-snmp/pass_persist \
+       ucd-snmp/proc \
+       ucd-snmp/vmstat \
+       util_funcs \
+       utilities/execute \
+
+SNMP_MIB_MODULES_EXCLUDED = \
+       agent_mibs \
+       disman/event \
+       disman/schedule \
+       hardware \
+       host \
+       if-mib \
+       ip-mib \
+       mibII \
+       notification \
+       notification-log-mib \
+       snmpv3mibs \
+       target \
+       tcp-mib \
+       ucd_snmp \
+       udp-mib \
+       utilities \
+
+SNMP_TRANSPORTS_INCLUDED = Callback UDP Unix
+
+SNMP_TRANSPORTS_EXCLUDED = TCP TCPIPv6
+
+TARGET_CFLAGS += $(FPIC)
+TARGET_CPPFLAGS += -I$(STAGING_DIR)/usr/include/libnl-tiny
+
+CONFIGURE_ARGS += \
+       --enable-mfd-rewrites \
+       --enable-shared \
+       --enable-static \
+       --with-endianness=$(if $(CONFIG_BIG_ENDIAN),big,little) \
+       --with-logfile=/var/log/snmpd.log \
+       --with-persistent-directory=/usr/lib/snmp/ \
+       --with-default-snmp-version=1 \
+       --with-sys-contact=root@localhost \
+       --with-sys-location=Unknown \
+       --enable-applications \
+       --disable-debugging \
+       --disable-manuals \
+       --disable-scripts \
+       --with-out-mib-modules="$(SNMP_MIB_MODULES_EXCLUDED)" \
+       --with-mib-modules="$(SNMP_MIB_MODULES_INCLUDED)" \
+       --with-out-transports="$(SNMP_TRANSPORTS_EXCLUDED)" \
+       --with-transports="$(SNMP_TRANSPORTS_INCLUDED)" \
+       --without-openssl \
+       --without-libwrap \
+       --without-mysql \
+       --without-rpm \
+       --without-zlib \
+       --with-nl \
+        $(call autoconf_bool,CONFIG_IPV6,ipv6) \
+       --disable-perl-cc-checks \
+       --disable-embedded-perl \
+       --without-perl-modules
+
+CONFIGURE_VARS += \
+       ac_cv_header_netlink_netlink_h=yes \
+       ac_cv_header_pcre_h=no \
+       netsnmp_cv_func_nl_connect_LIBS=-lnl-tiny \
+
+ifeq ($(CONFIG_IPV6),y)
+SNMP_TRANSPORTS_INCLUDED+= UDPIPv6
+endif
+
+TARGET_LDFLAGS += -L$(TOOLCHAIN_DIR)/usr/lib
+
+define Build/Compile
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               INSTALL_PREFIX="$(PKG_INSTALL_DIR)" \
+               LDFLAGS="$(TARGET_LDFLAGS) -lm -lc" \
+               all install
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(2)/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/net-snmp-config $(2)/bin/
+       $(SED) 's,=/usr,=$(STAGING_DIR)/usr,g' $(2)/bin/net-snmp-config
+       $(INSTALL_DIR) $(STAGING_DIR)/usr/bin
+       $(LN) $(STAGING_DIR)/host/bin/net-snmp-config $(STAGING_DIR)/usr/bin/
+
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/net-snmp $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnetsnmp{,agent,helpers,mibs}.{a,so*} $(1)/usr/lib/
+endef
+
+define Package/libnetsnmp/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnetsnmp{,agent,helpers,mibs}.so.* $(1)/usr/lib/
+endef
+
+define Package/snmp-mibs/install
+       $(INSTALL_DIR) $(1)/usr/share/snmp/mibs
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/share/snmp/mibs/* $(1)/usr/share/snmp/mibs/
+endef
+
+define Package/snmp-utils/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/snmp{get,set,status,test,trap,walk} $(1)/usr/bin/
+endef
+
+define Package/snmpd/conffiles
+/etc/config/snmpd
+endef
+
+define Package/snmpd/install
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_DATA) ./files/snmpd.conf $(1)/etc/config/snmpd
+       $(INSTALL_DIR) $(1)/etc/snmp
+       $(LN) /var/run/snmpd.conf $(1)/etc/snmp/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/snmpd.init $(1)/etc/init.d/snmpd
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/snmpd $(1)/usr/sbin/snmpd
+endef
+
+define Package/snmptrapd/install
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/snmptrapd.init $(1)/etc/init.d/snmptrapd
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnetsnmptrapd.so.* $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/snmptrapd $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,libnetsnmp))
+$(eval $(call BuildPackage,snmp-mibs))
+$(eval $(call BuildPackage,snmp-utils))
+$(eval $(call BuildPackage,snmpd))
+$(eval $(call BuildPackage,snmpd-static))
+$(eval $(call BuildPackage,snmptrapd))
diff --git a/package/network/services/net-snmp/files/snmpd.conf b/package/network/services/net-snmp/files/snmpd.conf
new file mode 100644 (file)
index 0000000..e18864d
--- /dev/null
@@ -0,0 +1,130 @@
+config agent
+       option agentaddress UDP:161,UDP6:161
+
+config agentx
+       option agentxsocket /var/run/agentx.sock
+
+config com2sec public
+       option secname ro
+       option source default
+       option community public
+
+config com2sec private
+       option secname rw
+       option source localhost
+       option community private
+
+config com2sec6 public6
+       option secname ro
+       option source default
+       option community public
+
+config com2sec6 private6
+       option secname rw
+       option source localhost
+       option community private
+
+config group public_v1
+       option group public
+       option version v1
+       option secname ro
+
+config group public_v2c
+       option group public
+       option version v2c
+       option secname ro
+
+config group public_usm
+       option group public
+       option version usm
+       option secname ro
+
+config group private_v1
+       option group private
+       option version v1
+       option secname rw
+
+config group private_v2c
+       option group private
+       option version v2c
+       option secname rw
+
+config group private_usm
+       option group private
+       option version usm
+       option secname rw
+
+config view all
+       option viewname all
+       option type included
+       option oid .1
+
+config access public_access
+       option group public
+       option context none
+       option version any
+       option level noauth
+       option prefix exact
+       option read all
+       option write none
+       option notify none
+
+config access private_access
+       option group private
+       option context none
+       option version any
+       option level noauth
+       option prefix exact
+       option read all
+       option write all
+       option notify all
+
+config system
+       option sysLocation      'office'
+       option sysContact       'bofh@example.com'
+       option sysName          'HeartOfGold'
+#      option sysServices      72
+#      option sysDescr         'adult playground'
+#      option sysObjectID      '1.2.3.4'
+
+config exec
+       option name     filedescriptors
+       option prog     /bin/cat
+       option args     /proc/sys/fs/file-nr
+#      option miboid   1.2.3.4
+
+config engineid
+#      option engineid 'LEDE'
+       option engineidtype '3'
+       option engineidnic 'eth0'
+
+#config trapcommunity 'trapcommunity'
+#      option community 'public'
+
+#config trapsink
+#      option host 'nms.system.com'
+#      option community 'public'
+#      option port '162'
+
+#config trap2sink
+#      option host 'nms.system.com'
+#      option community 'secret'
+#      option port '162'
+
+#config informsink
+#      option host 'nms.sytem.com'
+#      option community 'public'
+#      option port '162'
+
+#config authtrapenable 'authtrapenable'
+#      option enable '1'
+
+#config v1trapaddress 'v1trapaddress'
+#      option host '1.2.3.4'
+
+#config trapsess 'trapsess'
+#      option trapsess '-v 3 -e 0x80001f88808c18d3f7b0000 -u trapuser -a MD5 -A administrator -l authPriv -x DES -X rootpasswd udp:127.0.0.1:162'
+
+config snmpd general
+       option enabled '1'
+#      list network 'wan'
diff --git a/package/network/services/net-snmp/files/snmpd.init b/package/network/services/net-snmp/files/snmpd.init
new file mode 100644 (file)
index 0000000..a765317
--- /dev/null
@@ -0,0 +1,359 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008 OpenWrt.org
+START=50
+
+USE_PROCD=1
+PROG="/usr/sbin/snmpd"
+
+CONFIGFILE="/var/run/snmpd.conf"
+
+snmpd_agent_add() {
+       local cfg="$1"
+
+       config_get agentaddress "$cfg" agentaddress
+       [ -n "$agentaddress" ] || return 0
+       echo "agentaddress $agentaddress" >> $CONFIGFILE
+}
+
+snmpd_agentx_add() {
+       local cfg="$1"
+       echo "master agentx" >> $CONFIGFILE
+       config_get agentxsocket "$cfg" agentxsocket
+       [ -n "$agentxsocket" ] && echo "agentXSocket $agentxsocket" >> $CONFIGFILE
+}
+
+snmpd_system_add() {
+       local cfg="$1"
+       config_get syslocation "$cfg" sysLocation
+       [ -n "$syslocation" ] && echo "sysLocation $syslocation" >> $CONFIGFILE
+       config_get syscontact "$cfg" sysContact
+       [ -n "$syscontact" ] && echo "sysContact $syscontact" >> $CONFIGFILE
+       config_get sysname "$cfg" sysName
+       [ -n "$sysname" ] && echo "sysName $sysname" >> $CONFIGFILE
+       config_get sysservice "$cfg" sysService
+       [ -n "$sysservice" ] && echo "sysService $sysservice" >> $CONFIGFILE
+       config_get sysdescr "$cfg" sysDescr
+       [ -n "$sysdescr" ] && echo "sysDescr $sysdescr" >> $CONFIGFILE
+       config_get sysobjectid "$cfg" sysObjectID
+       [ -n "$sysobjectid" ] && echo "sysObjectID $sysobjectid" >> $CONFIGFILE
+}
+
+snmpd_com2sec_add() {
+       local cfg="$1"
+       config_get secname "$cfg" secname
+       [ -n "$secname" ] || return 0
+       config_get source "$cfg" source
+       [ -n "$source" ] || return 0
+       config_get community "$cfg" community
+       [ -n "$community" ] || return 0
+       echo "com2sec $secname $source $community" >> $CONFIGFILE
+}
+
+snmpd_com2sec6_add() {
+       local cfg="$1"
+       config_get secname "$cfg" secname
+       [ -n "$secname" ] || return 0
+       config_get source "$cfg" source
+       [ -n "$source" ] || return 0
+       config_get community "$cfg" community
+       [ -n "$community" ] || return 0
+       echo "com2sec6 $secname $source $community" >> $CONFIGFILE
+}
+
+snmpd_group_add() {
+       local cfg="$1"
+       config_get group "$cfg" group
+       [ -n "$group" ] || return 0
+       config_get version "$cfg" version
+       [ -n "$version" ] || return 0
+       config_get secname "$cfg" secname
+       [ -n "$secname" ] || return 0
+       echo "group $group $version $secname" >> $CONFIGFILE
+}
+
+snmpd_view_add() {
+       local cfg="$1"
+       config_get viewname "$cfg" viewname
+       [ -n "$viewname" ] || return 0
+       config_get type "$cfg" type
+       [ -n "$type" ] || return 0
+       config_get oid "$cfg" oid
+       [ -n "$oid" ] || return 0
+       # optional mask
+       config_get mask "$cfg" mask
+       echo "view $viewname $type $oid $mask" >> $CONFIGFILE
+}
+
+snmpd_access_add() {
+       local cfg="$1"
+       config_get group "$cfg" group
+       [ -n "$group" ] || return 0
+       config_get context "$cfg" context
+       [ -n $context ] || return 0
+       [ "$context" == "none" ] && context='""'
+       config_get version "$cfg" version
+       [ -n "$version" ] || return 0
+       config_get level "$cfg" level
+       [ -n "$level" ] || return 0
+       config_get prefix "$cfg" prefix
+       [ -n "$prefix" ] || return 0
+       config_get read "$cfg" read
+       [ -n "$read" ] || return 0
+       config_get write "$cfg" write
+       [ -n "$write" ] || return 0
+       config_get notify "$cfg" notify
+       [ -n "$notify" ] || return 0
+       echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE
+}
+
+snmpd_trap_hostname_add() {
+       local cfg="$1"
+       config_get hostname "$cfg" HostName
+       config_get port "$cfg" Port
+       config_get community "$cfg" Community
+       config_get type "$cfg" Type
+       echo "$type $hostname $community $port" >> $CONFIGFILE
+}
+
+snmpd_trap_ip_add() {
+       local cfg="$1"
+       config_get host_ip "$cfg" HostIP
+       config_get port "$cfg" Port
+       config_get community "$cfg" Community
+       config_get type "$cfg" Type
+       echo "$type $host_ip $community $port" >> $CONFIGFILE
+}
+
+snmpd_access_default_add() {
+       local cfg="$1"
+       config_get mode "$cfg" Mode
+       config_get community "$cfg" CommunityName
+       config_get oidrestrict "$cfg" RestrictOID
+       config_get oid "$cfg" RestrictedOID
+       echo -n "$mode $community default" >> $CONFIGFILE
+       [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+       [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_access_HostName_add() {
+       local cfg="$1"
+       config_get hostname "$cfg" HostName
+       config_get mode "$cfg" Mode
+       config_get community "$cfg" CommunityName
+       config_get oidrestrict "$cfg" RestrictOID
+       config_get oid "$cfg" RestrictedOID
+       echo -n "$mode $community $hostname" >> $CONFIGFILE
+       [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+       [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_access_HostIP_add() {
+       local cfg="$1"
+       config_get host_ip "$cfg" HostIP
+       config_get ip_mask "$cfg" IPMask
+       config_get mode "$cfg" Mode
+       config_get community "$cfg" CommunityName
+       config_get oidrestrict "$cfg" RestrictOID
+       config_get oid "$cfg" RestrictedOID
+       echo -n "$mode $community $host_ip/$ip_mask" >> $CONFIGFILE
+       [ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
+       [ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
+}
+
+snmpd_pass_add() {
+       local cfg="$1"
+       local pass='pass'
+
+       config_get miboid "$cfg" miboid
+       [ -n "$miboid" ] || return 0
+       config_get prog "$cfg" prog
+       [ -n "$prog" ] || return 0
+       config_get_bool persist "$cfg" persist 0
+       [ $persist -ne 0 ] && pass='pass_persist'
+       config_get priority "$cfg" priority
+       priority=${priority:+-p $priority}
+       echo "$pass $priority $miboid $prog" >> $CONFIGFILE
+}
+
+snmpd_exec_add() {
+       local cfg="$1"
+
+       config_get name "$cfg" name
+       [ -n "$name" ] || return 0
+       config_get prog "$cfg" prog
+       [ -n "$prog" ] || return 0
+       config_get args "$cfg" args
+       config_get miboid "$cfg" miboid
+       echo "exec $miboid $name $prog $args" >> $CONFIGFILE
+}
+
+snmpd_extend_add() {
+       local cfg="$1"
+
+       config_get name "$cfg" name
+       [ -n "$name" ] || return 0
+       config_get prog "$cfg" prog
+       [ -n "$prog" ] || return 0
+       config_get args "$cfg" args
+       config_get miboid "$cfg" miboid
+       echo "extend $miboid $name $prog $args" >> $CONFIGFILE
+}
+
+snmpd_disk_add() {
+        local cfg="$1"
+        local disk='disk'
+
+        config_get partition "$cfg" partition
+        [ -n "$partition" ] || return 0
+        config_get size "$cfg" size
+        [ -n "$size" ] || return 0
+        echo "$disk $partition $size" >> $CONFIGFILE
+}
+
+snmpd_engineid_add() {
+       local cfg="$1"
+
+       config_get engineid "$cfg" engineid
+       [ -n "$engineid" ] && echo "engineID $engineid" >> $CONFIGFILE
+       config_get engineidtype "$cfg" engineidtype
+       [ "$engineidtype" -ge 1 -a "$engineidtype" -le 3 ] && \
+               echo "engineIDType $engineidtype" >> $CONFIGFILE
+       config_get engineidnic "$cfg" engineidnic
+       [ -n "$engineidnic" ] && echo "engineIDNic $engineidnic" >> $CONFIGFILE
+}
+
+snmpd_sink_add() {
+       local cfg="$1"
+       local section="$2"
+       local community
+       local port
+       local host
+
+       config_get host "$cfg" host
+       [ -n "section" -a -n "$host" ] || return 0
+       # optional community
+       config_get community "$cfg" community
+       # optional port
+       config_get port "$cfg" port
+       port=${port:+:$port}
+       echo "$section $host$port $community" >> $CONFIGFILE
+}
+
+append_parm() {
+       local section="$1"
+       local option="$2"
+       local switch="$3"
+       local _loctmp
+       config_get _loctmp "$section" "$option"
+       [ -z "$_loctmp" ] && return 0
+       echo "$switch $_loctmp" >> $CONFIGFILE
+}
+
+append_authtrapenable() {
+       local section="$1"
+       local option="$2"
+       local switch="$3"
+       local _loctmp
+       config_get_bool _loctmp "$section" "$option"
+       [ -z "$_loctmp" ] && return 0
+       [ "$_loctmp" -gt 0 ] && echo "$switch $_loctmp" >> $CONFIGFILE
+}
+
+snmpd_setup_fw_rules() {
+       local net="$1"
+       local zone
+
+       zone=$(fw3 -q network "$net" 2>/dev/null)
+
+       local handled_zone
+       for handled_zone in $HANDLED_SNMP_ZONES; do
+               [ "$handled_zone" = "$zone" ] && return
+       done
+
+       json_add_object ""
+       json_add_string type rule
+       json_add_string src "$zone"
+       json_add_string proto udp
+       json_add_string dest_port 161
+       json_add_string target ACCEPT
+       json_close_object
+
+       HANDLED_SNMP_ZONES="$HANDLED_SNMP_ZONES $zone"
+}
+
+start_service() {
+       [ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
+
+       config_load snmpd
+
+       config_get_bool snmp_enabled general enabled 1
+       [ "$snmp_enabled" -eq 0 ] && return
+
+       procd_open_instance
+
+       config_foreach snmpd_agent_add agent
+       config_foreach snmpd_agentx_add agentx
+       config_foreach snmpd_system_add system
+       config_foreach snmpd_com2sec_add com2sec
+       config_foreach snmpd_com2sec6_add com2sec6
+       config_foreach snmpd_group_add group
+       config_foreach snmpd_view_add view
+       config_foreach snmpd_access_add access
+       config_foreach snmpd_trap_hostname_add trap_HostName
+       config_foreach snmpd_trap_ip_add trap_HostIP
+       config_foreach snmpd_access_default_add access_default
+       config_foreach snmpd_access_HostName_add access_HostName
+       config_foreach snmpd_access_HostIP_add access_HostIP
+       config_foreach snmpd_pass_add pass
+       config_foreach snmpd_exec_add exec
+       config_foreach snmpd_extend_add extend
+       config_foreach snmpd_disk_add disk
+       config_foreach snmpd_engineid_add engineid
+       append_parm trapcommunity community trapcommunity
+       config_foreach snmpd_sink_add trapsink trapsink
+       config_foreach snmpd_sink_add trap2sink trap2sink
+       config_foreach snmpd_sink_add informsink informsink
+       append_authtrapenable authtrapenable enable authtrapenable
+       append_parm v1trapaddress host v1trapaddress
+       append_parm trapsess trapsess trapsess
+
+       procd_set_param command $PROG -Lf /dev/null -f
+       procd_set_param file $CONFIGFILE
+       procd_set_param respawn
+
+       for iface in $(ls /sys/class/net 2>/dev/null); do
+               procd_append_param netdev "$iface"
+       done
+
+       procd_open_data
+
+       json_add_array firewall
+       config_list_foreach general network snmpd_setup_fw_rules
+       json_close_array
+
+       procd_close_data
+
+       procd_close_instance
+}
+
+stop_service() {
+       [ -f "$CONFIGFILE" ] || return
+       rm -f "$CONFIGFILE"
+       procd_set_config_changed firewall
+}
+
+service_triggers(){
+       local script=$(readlink "$initscript")
+       local name=$(basename ${script:-$initscript})
+
+       procd_open_trigger
+       procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload
+       procd_close_trigger
+
+       procd_add_reload_trigger 'snmpd'
+}
+
+service_started() {
+       [ "$snmp_enabled" -eq 0 ] && return
+       procd_set_config_changed firewall
+}
diff --git a/package/network/services/net-snmp/files/snmptrapd.init b/package/network/services/net-snmp/files/snmptrapd.init
new file mode 100644 (file)
index 0000000..43278a2
--- /dev/null
@@ -0,0 +1,15 @@
+#!/bin/sh /etc/rc.common
+
+START=50
+
+USE_PROCD=1
+PROG="/usr/sbin/snmptrapd"
+
+start_service() {
+       procd_open_instance
+
+       procd_set_param command $PROG -Lf /dev/null -f
+       procd_set_param respawn
+
+       procd_close_instance
+}
diff --git a/package/network/services/net-snmp/patches/000-cross-compile.patch b/package/network/services/net-snmp/patches/000-cross-compile.patch
new file mode 100644 (file)
index 0000000..730bdbc
--- /dev/null
@@ -0,0 +1,47 @@
+From: Jo-Philipp Wich <jo@mein.io>
+Date: Fri, 6 Jan 2017 13:41:00 +0100
+Subject: [PATCH] configure: allow overriding hardcoded /usr/include/libnl3
+
+In a cross-compile setting we do not want to probe the host systems
+/usr/include path, therfore allow to disable this include path by passing
+ac_cv_header_netlink_netlink_h=yes to configure.
+
+Also disable the testing for libraries providing nl_connect when
+netsnmp_cv_func_nl_connect_LIBS is predefined since the proprietary
+NETSNMP_SEARCH_LIBS() macro will clobber the internal link flags upon
+encountering predefined cache variables, causing all subsequent configure
+link tests to fail due to a stray "no" word getting passed to the linker.
+
+Signed-off-by: Jo-Philipp Wich <jo@mein.io>
+--- a/configure.d/config_os_libs2
++++ b/configure.d/config_os_libs2
+@@ -254,14 +254,22 @@ if test "x$with_nl" != "xno"; then
+         )
+         netsnmp_save_CPPFLAGS="$CPPFLAGS"
+-        CPPFLAGS="${LIBNL3_CFLAGS} $CPPFLAGS"
+-        NETSNMP_SEARCH_LIBS(nl_connect, nl-3,
+-            [AC_CHECK_HEADERS(netlink/netlink.h)
+-            EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES ${LIBNL3_CFLAGS}"],
+-            [CPPFLAGS="$netsnmp_save_CPPFLAGS"], [], [], [LMIBLIBS])
++        netsnmp_netlink_include_flags=""
+         if test "x$ac_cv_header_netlink_netlink_h" != xyes; then
+-            NETSNMP_SEARCH_LIBS(nl_connect, nl, [
+-                AC_CHECK_HEADERS(netlink/netlink.h)], [], [], LMIBLIBS)
++            netsnmp_netlink_include_flags="-I/usr/include/libnl3"
++        fi
++        CPPFLAGS="$netsnmp_netlink_include_flags $CPPFLAGS"
++        if test "x$netsnmp_cv_func_nl_connect_LIBS" = x; then
++            NETSNMP_SEARCH_LIBS(nl_connect, nl-3,
++                [AC_CHECK_HEADERS(netlink/netlink.h)
++                EXTERNAL_MIBGROUP_INCLUDES="$EXTERNAL_MIBGROUP_INCLUDES $netsnmp_netlink_include_flags"],
++                [CPPFLAGS="$netsnmp_save_CPPFLAGS"], [], [], [LMIBLIBS])
++            if test "x$ac_cv_header_netlink_netlink_h" != xyes; then
++                NETSNMP_SEARCH_LIBS(nl_connect, nl, [
++                    AC_CHECK_HEADERS(netlink/netlink.h)], [], [], LMIBLIBS)
++            fi
++        else
++            LMIBLIBS="$LMIBLIBS $netsnmp_cv_func_nl_connect_LIBS"
+         fi
+         if test "x$ac_cv_header_netlink_netlink_h" = xyes; then
+             AC_EGREP_HEADER([nl_socket_free], [netlink/socket.h],
diff --git a/package/network/services/net-snmp/patches/100-debian-statistics.patch b/package/network/services/net-snmp/patches/100-debian-statistics.patch
new file mode 100644 (file)
index 0000000..2b24d94
--- /dev/null
@@ -0,0 +1,22 @@
+--- a/agent/mibgroup/mibII/interfaces.c
++++ b/agent/mibgroup/mibII/interfaces.c
+@@ -1588,6 +1588,10 @@ Interface_Scan_Init(void)
+         struct ifnet   *nnew;
+         char           *stats, *ifstart = line;
++      /* Ignore interfaces with no statistics. */
++      if (strstr(line, "No statistics available."))
++          continue;
++
+         if (line[strlen(line) - 1] == '\n')
+             line[strlen(line) - 1] = '\0';
+@@ -1620,7 +1624,7 @@ Interface_Scan_Init(void)
+                                                &coll) != 5)) {
+             if ((scan_line_to_use == scan_line_2_2)
+                 && !strstr(line, "No statistics available"))
+-                snmp_log(LOG_ERR,
++                snmp_log(LOG_DEBUG,
+                          "/proc/net/dev data format error, line ==|%s|",
+                          line);
+             continue;
diff --git a/package/network/services/net-snmp/patches/110-debian-makefiles.patch b/package/network/services/net-snmp/patches/110-debian-makefiles.patch
new file mode 100644 (file)
index 0000000..7b71ed0
--- /dev/null
@@ -0,0 +1,43 @@
+diff -uNr a/local/Makefile.in b/local/Makefile.in
+--- a/local/Makefile.in        2014-02-20 08:36:42.000000000 +0800
++++ b/local/Makefile.in        2014-05-27 13:21:34.245223503 +0800
+@@ -101,7 +101,7 @@
+ mib2c.made: $(srcdir)/mib2c
+       if test "x$(PERL)" != "x" ; then \
+-        $(PERL) -p -e 's%^#!.*/perl.*%#!$(PERL)%;s#/usr/local/share/snmp#$(snmplibdir)#;' ${srcdir}/mib2c > mib2c.made; \
++        $(PERL) -p -e 's%^#!.*/perl.*%#!$(PERL)%;s#/usr/local/share/snmp#$(snmplibdir)#;s#/usr/local/etc/snmp#$(SNMPCONFPATH)#;' ${srcdir}/mib2c > mib2c.made; \
+       else \
+         touch mib2c.made; \
+         fi
+diff -uNr a/Makefile.top b/Makefile.top
+--- a/Makefile.top     2014-02-20 08:36:42.000000000 +0800
++++ b/Makefile.top     2014-05-27 13:26:53.023737120 +0800
+@@ -28,6 +28,7 @@
+ snmplibdir    = $(datadir)/snmp
+ mibdir                = $(snmplibdir)/mibs
+ persistentdir = @PERSISTENT_DIRECTORY@
++sysconfdir    = @sysconfdir@
+ DESTDIR         = @INSTALL_PREFIX@
+ INSTALL_PREFIX  = $(DESTDIR)
+diff -uNr a/mibs/Makefile.in b/mibs/Makefile.in
+--- a/mibs/Makefile.in 2014-02-20 08:36:42.000000000 +0800
++++ b/mibs/Makefile.in 2014-05-27 13:25:07.151988585 +0800
+@@ -47,11 +47,15 @@
+ UCDMIBS = UCD-SNMP-MIB.txt UCD-DEMO-MIB.txt UCD-IPFWACC-MIB.txt \
+       UCD-DLMOD-MIB.txt UCD-DISKIO-MIB.txt
++EXTRAMIBS = BGP4-MIB.txt BRIDGE-MIB.txt GNOME-SMI.txt OSPF-MIB.txt \
++      OSPF-TRAP-MIB.txt RIPv2-MIB.txt SOURCE-ROUTING-MIB.txt \
++      LM-SENSORS-MIB.txt
++
+ DEFAULTMIBS = @default_mibs_install@
+ MIBS  = $(V1MIBS) $(V2MIBS) $(V3MIBS) $(RFCMIBS) \
+       $(AGENTMIBS) $(IANAMIBS) \
+-      $(NETSNMPMIBS) $(UCDMIBS) $(DEFAULTMIBS)
++      $(NETSNMPMIBS) $(UCDMIBS) $(DEFAULTMIBS) $(EXTRAMIBS)
+ all: standardall
diff --git a/package/network/services/net-snmp/patches/120-debian-searchdirs.patch b/package/network/services/net-snmp/patches/120-debian-searchdirs.patch
new file mode 100644 (file)
index 0000000..b5e377f
--- /dev/null
@@ -0,0 +1,14 @@
+--- a/local/mib2c
++++ b/local/mib2c
+@@ -61,8 +61,9 @@ $currentlevel = -1;
+ if($ENV{MIB2C_DIR}) {
+    push @def_search_dirs, split(/:/, $ENV{MIB2C_DIR});
+ }
+-push @def_search_dirs, "/usr/local/share/snmp/";
+-push @def_search_dirs, "/usr/local/share/snmp/mib2c-data";
++push @def_search_dirs, "/etc/snmp/";
++push @def_search_dirs, "/usr/share/snmp/";
++push @def_search_dirs, "/usr/share/snmp/mib2c-data";
+ push @def_search_dirs, "./mib2c-conf.d";
+ sub usage {
diff --git a/package/network/services/net-snmp/patches/130-debian-extramibs.patch b/package/network/services/net-snmp/patches/130-debian-extramibs.patch
new file mode 100644 (file)
index 0000000..48fb907
--- /dev/null
@@ -0,0 +1,5183 @@
+--- /dev/null
++++ b/mibs/BGP4-MIB.txt
+@@ -0,0 +1,929 @@
++    BGP4-MIB DEFINITIONS ::= BEGIN
++
++        IMPORTS
++            MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
++            IpAddress, Integer32, Counter32, Gauge32, mib-2
++                FROM SNMPv2-SMI
++            MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
++                FROM SNMPv2-CONF;
++
++        bgp MODULE-IDENTITY
++            LAST-UPDATED "9902100000Z"
++            ORGANIZATION "IETF IDR Working Group"
++            CONTACT-INFO "E-mail:  idr@merit.net
++
++                          Susan Hares  (Editor)
++                          Merit Network
++                          4251 Plymouth Road
++                          Suite C
++                          Ann Arbor, MI 48105-2785
++                          Tel: +1 734 936 2095
++                          Fax: +1 734 647 3185
++                          E-mail: skh@merit.edu
++
++                          Jeff Johnson (Editor)
++                          RedBack Networks, Inc.
++                          1389 Moffett Park Drive
++                          Sunnyvale, CA  94089-1134
++                          Tel: +1 408 548 3516
++                          Fax: +1 408 548 3599
++                          E-mail: jeff@redback.com"
++            DESCRIPTION
++                    "The MIB module for BGP-4."
++            REVISION    "9902100000Z"
++            DESCRIPTION
++                    "Corrected duplicate OBJECT IDENTIFIER
++                     assignment in the conformance information."
++            REVISION    "9601080000Z"
++            DESCRIPTION
++                    "1) Fixed the definitions of the traps to
++                     make them equivalent to their initial
++                     definition in RFC 1269.
++                     2) Added compliance and conformance info."
++            ::= { mib-2 15 }
++
++        bgpVersion OBJECT-TYPE
++            SYNTAX     OCTET STRING (SIZE (1..255))
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "Vector of supported BGP protocol version
++                    numbers.  Each peer negotiates the version
++                    from this vector.  Versions are identified
++                    via the string of bits contained within this
++                    object.  The first octet contains bits 0 to
++                    7, the second octet contains bits 8 to 15,
++                    and so on, with the most significant bit
++                    referring to the lowest bit number in the
++                    octet (e.g., the MSB of the first octet
++                    refers to bit 0).  If a bit, i, is present
++                    and set, then the version (i+1) of the BGP
++                    is supported."
++            ::= { bgp 1 }
++
++        bgpLocalAs OBJECT-TYPE
++            SYNTAX     INTEGER (0..65535)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The local autonomous system number."
++            ::= { bgp 2 }
++
++
++
++        -- BGP Peer table.  This table contains, one entry per BGP
++        -- peer, information about the BGP peer.
++
++        bgpPeerTable OBJECT-TYPE
++            SYNTAX     SEQUENCE OF BgpPeerEntry
++            MAX-ACCESS not-accessible
++            STATUS     current
++            DESCRIPTION
++                    "BGP peer table.  This table contains,
++                    one entry per BGP peer, information about the
++                    connections with BGP peers."
++            ::= { bgp 3 }
++
++        bgpPeerEntry OBJECT-TYPE
++            SYNTAX     BgpPeerEntry
++            MAX-ACCESS not-accessible
++            STATUS     current
++            DESCRIPTION
++                    "Entry containing information about the
++                    connection with a BGP peer."
++            INDEX { bgpPeerRemoteAddr }
++            ::= { bgpPeerTable 1 }
++
++        BgpPeerEntry ::= SEQUENCE {
++                bgpPeerIdentifier
++                    IpAddress,
++                bgpPeerState
++                    INTEGER,
++                bgpPeerAdminStatus
++                    INTEGER,
++                bgpPeerNegotiatedVersion
++                    Integer32,
++                bgpPeerLocalAddr
++                    IpAddress,
++                bgpPeerLocalPort
++                    INTEGER,
++                bgpPeerRemoteAddr
++                    IpAddress,
++                bgpPeerRemotePort
++                    INTEGER,
++                bgpPeerRemoteAs
++                    INTEGER,
++                bgpPeerInUpdates
++                    Counter32,
++                bgpPeerOutUpdates
++                    Counter32,
++                bgpPeerInTotalMessages
++                    Counter32,
++                bgpPeerOutTotalMessages
++                    Counter32,
++                bgpPeerLastError
++                    OCTET STRING,
++                bgpPeerFsmEstablishedTransitions
++                    Counter32,
++                bgpPeerFsmEstablishedTime
++                    Gauge32,
++                bgpPeerConnectRetryInterval
++                    INTEGER,
++                bgpPeerHoldTime
++                    INTEGER,
++                bgpPeerKeepAlive
++                    INTEGER,
++                bgpPeerHoldTimeConfigured
++                    INTEGER,
++                bgpPeerKeepAliveConfigured
++                    INTEGER,
++                bgpPeerMinASOriginationInterval
++                    INTEGER,
++                bgpPeerMinRouteAdvertisementInterval
++                    INTEGER,
++                bgpPeerInUpdateElapsedTime
++                    Gauge32
++                }
++
++        bgpPeerIdentifier OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The BGP Identifier of this entry's BGP peer."
++            ::= { bgpPeerEntry 1 }
++
++        bgpPeerState OBJECT-TYPE
++            SYNTAX     INTEGER {
++                                idle(1),
++                                connect(2),
++                                active(3),
++                                opensent(4),
++                                openconfirm(5),
++                                established(6)
++                       }
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The BGP peer connection state."
++            ::= { bgpPeerEntry 2 }
++
++        bgpPeerAdminStatus OBJECT-TYPE
++            SYNTAX     INTEGER {
++                                stop(1),
++                                start(2)
++                       }
++            MAX-ACCESS read-write
++            STATUS     current
++            DESCRIPTION
++                    "The desired state of the BGP connection.  A
++                    transition from 'stop' to 'start' will cause
++                    the BGP Start Event to be generated.  A
++                    transition from 'start' to 'stop' will cause
++                    the BGP Stop Event to be generated.  This
++                    parameter can be used to restart BGP peer
++                    connections.  Care should be used in providing
++                    write access to this object without adequate
++                    authentication."
++            ::= { bgpPeerEntry 3 }
++
++        bgpPeerNegotiatedVersion OBJECT-TYPE
++            SYNTAX     Integer32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The negotiated version of BGP running between
++                    the two peers."
++            ::= { bgpPeerEntry 4 }
++
++        bgpPeerLocalAddr OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The local IP address of this entry's BGP
++                    connection."
++            ::= { bgpPeerEntry 5 }
++
++        bgpPeerLocalPort OBJECT-TYPE
++            SYNTAX     INTEGER (0..65535)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The local port for the TCP connection between
++                    the BGP peers."
++            ::= { bgpPeerEntry 6 }
++
++        bgpPeerRemoteAddr OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The remote IP address of this entry's BGP
++                    peer."
++            ::= { bgpPeerEntry 7 }
++
++        bgpPeerRemotePort OBJECT-TYPE
++            SYNTAX     INTEGER (0..65535)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The remote port for the TCP connection between
++                    the BGP peers.  Note that the objects
++                    bgpPeerLocalAddr, bgpPeerLocalPort,
++                    bgpPeerRemoteAddr and bgpPeerRemotePort
++                    provide the appropriate reference to the
++                    standard MIB TCP connection table."
++            ::= { bgpPeerEntry 8 }
++
++        bgpPeerRemoteAs OBJECT-TYPE
++            SYNTAX     INTEGER (0..65535)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The remote autonomous system number."
++            ::= { bgpPeerEntry 9 }
++
++        bgpPeerInUpdates OBJECT-TYPE
++            SYNTAX     Counter32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The number of BGP UPDATE messages received on
++                    this connection.  This object should be
++                    initialized to zero (0) when the connection is
++                    established."
++            ::= { bgpPeerEntry 10 }
++
++        bgpPeerOutUpdates OBJECT-TYPE
++            SYNTAX     Counter32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The number of BGP UPDATE messages transmitted
++                    on this connection.  This object should be
++                    initialized to zero (0) when the connection is
++                    established."
++            ::= { bgpPeerEntry 11 }
++
++        bgpPeerInTotalMessages OBJECT-TYPE
++            SYNTAX     Counter32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The total number of messages received from the
++                    remote peer on this connection.  This object
++                    should be initialized to zero when the
++                    connection is established."
++            ::= { bgpPeerEntry 12 }
++
++        bgpPeerOutTotalMessages OBJECT-TYPE
++            SYNTAX     Counter32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The total number of messages transmitted to
++                    the remote peer on this connection.  This object
++                    should be initialized to zero when the
++                    connection is established."
++            ::= { bgpPeerEntry 13 }
++
++        bgpPeerLastError OBJECT-TYPE
++            SYNTAX     OCTET STRING (SIZE (2))
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The last error code and subcode seen by this
++                    peer on this connection.  If no error has
++                    occurred, this field is zero.  Otherwise, the
++                    first byte of this two byte OCTET STRING
++                    contains the error code, and the second byte
++                    contains the subcode."
++            ::= { bgpPeerEntry 14 }
++
++        bgpPeerFsmEstablishedTransitions OBJECT-TYPE
++            SYNTAX     Counter32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The total number of times the BGP FSM
++                    transitioned into the established state."
++            ::= { bgpPeerEntry 15 }
++
++        bgpPeerFsmEstablishedTime OBJECT-TYPE
++            SYNTAX     Gauge32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "This timer indicates how long (in seconds) this
++                    peer has been in the Established state or how long
++                    since this peer was last in the Established state.
++                    It is set to zero when a new peer is configured or
++                    the router is booted."
++            ::= { bgpPeerEntry 16 }
++
++        bgpPeerConnectRetryInterval OBJECT-TYPE
++            SYNTAX     INTEGER (1..65535)
++            MAX-ACCESS read-write
++            STATUS     current
++            DESCRIPTION
++                    "Time interval in seconds for the ConnectRetry
++                    timer.  The suggested value for this timer is
++                    120 seconds."
++            ::= { bgpPeerEntry 17 }
++
++        bgpPeerHoldTime OBJECT-TYPE
++            SYNTAX     INTEGER  ( 0 | 3..65535 )
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "Time interval in seconds for the Hold Timer
++                    established with the peer.  The value of this
++                    object is calculated by this BGP speaker by
++                    using the smaller of the value in
++                    bgpPeerHoldTimeConfigured and the Hold Time
++                    received in the OPEN message.  This value
++                    must be at lease three seconds if it is not
++                    zero (0) in which case the Hold Timer has
++                    not been established with the peer, or, the
++                    value of bgpPeerHoldTimeConfigured is zero (0)."
++            ::= { bgpPeerEntry 18 }
++
++        bgpPeerKeepAlive OBJECT-TYPE
++            SYNTAX     INTEGER ( 0 | 1..21845 )
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "Time interval in seconds for the KeepAlive
++                    timer established with the peer.  The value of
++                    this object is calculated by this BGP speaker
++                    such that, when compared with bgpPeerHoldTime,
++                    it has the same proportion as what
++                    bgpPeerKeepAliveConfigured has when compared
++                    with bgpPeerHoldTimeConfigured.  If the value
++                    of this object is zero (0), it indicates that
++                    the KeepAlive timer has not been established
++                    with the peer, or, the value of
++                    bgpPeerKeepAliveConfigured is zero (0)."
++            ::= { bgpPeerEntry 19 }
++
++        bgpPeerHoldTimeConfigured OBJECT-TYPE
++            SYNTAX     INTEGER ( 0 | 3..65535 )
++            MAX-ACCESS read-write
++            STATUS     current
++            DESCRIPTION
++                    "Time interval in seconds for the Hold Time
++                    configured for this BGP speaker with this peer.
++                    This value is placed in an OPEN message sent to
++                    this peer by this BGP speaker, and is compared
++                    with the Hold Time field in an OPEN message
++                    received from the peer when determining the Hold
++                    Time (bgpPeerHoldTime) with the peer.  This value
++                    must not be less than three seconds if it is not
++                    zero (0) in which case the Hold Time is NOT to be
++                    established with the peer.  The suggested value for
++                    this timer is 90 seconds."
++            ::= { bgpPeerEntry 20 }
++
++        bgpPeerKeepAliveConfigured OBJECT-TYPE
++            SYNTAX     INTEGER ( 0 | 1..21845 )
++            MAX-ACCESS read-write
++            STATUS     current
++            DESCRIPTION
++                    "Time interval in seconds for the KeepAlive timer
++                    configured for this BGP speaker with this peer.
++                    The value of this object will only determine the
++                    KEEPALIVE messages' frequency relative to the value
++                    specified in bgpPeerHoldTimeConfigured; the actual
++                    time interval for the KEEPALIVE messages is
++                    indicated by bgpPeerKeepAlive.  A reasonable
++                    maximum value for this timer would be configured to
++                    be one third of that of bgpPeerHoldTimeConfigured.
++                    If the value of this object is zero (0), no
++                    periodical KEEPALIVE messages are sent to the peer
++                    after the BGP connection has been established.  The
++                    suggested value for this timer is 30 seconds."
++            ::= { bgpPeerEntry 21 }
++
++        bgpPeerMinASOriginationInterval OBJECT-TYPE
++            SYNTAX     INTEGER (1..65535)
++            MAX-ACCESS read-write
++            STATUS     current
++            DESCRIPTION
++                    "Time interval in seconds for the
++                    MinASOriginationInterval timer.
++                    The suggested value for this timer is 15 seconds."
++            ::= { bgpPeerEntry 22 }
++
++        bgpPeerMinRouteAdvertisementInterval OBJECT-TYPE
++            SYNTAX     INTEGER (1..65535)
++            MAX-ACCESS read-write
++            STATUS     current
++            DESCRIPTION
++                    "Time interval in seconds for the
++                    MinRouteAdvertisementInterval timer.
++                    The suggested value for this timer is 30 seconds."
++            ::= { bgpPeerEntry 23 }
++
++        bgpPeerInUpdateElapsedTime OBJECT-TYPE
++            SYNTAX     Gauge32
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "Elapsed time in seconds since the last BGP
++                    UPDATE message was received from the peer.
++                    Each time bgpPeerInUpdates is incremented,
++                    the value of this object is set to zero (0)."
++            ::= { bgpPeerEntry 24 }
++
++
++
++        bgpIdentifier OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The BGP Identifier of local system."
++            ::= { bgp 4 }
++
++
++
++        -- Received Path Attribute Table.  This table contains,
++        -- one entry per path to a network, path attributes
++        -- received from all peers running BGP version 3 or less.
++        -- This table is obsolete, having been replaced in
++        -- functionality with the bgp4PathAttrTable.
++
++        bgpRcvdPathAttrTable OBJECT-TYPE
++            SYNTAX     SEQUENCE OF BgpPathAttrEntry
++            MAX-ACCESS not-accessible
++            STATUS     obsolete
++            DESCRIPTION
++                    "The BGP Received Path Attribute Table contains
++                    information about paths to destination networks
++                    received from all peers running BGP version 3 or
++                    less."
++            ::= { bgp 5 }
++
++        bgpPathAttrEntry OBJECT-TYPE
++            SYNTAX     BgpPathAttrEntry
++            MAX-ACCESS not-accessible
++            STATUS     obsolete
++            DESCRIPTION
++                    "Information about a path to a network."
++            INDEX { bgpPathAttrDestNetwork,
++                    bgpPathAttrPeer        }
++            ::= { bgpRcvdPathAttrTable 1 }
++
++        BgpPathAttrEntry ::= SEQUENCE {
++            bgpPathAttrPeer
++                 IpAddress,
++            bgpPathAttrDestNetwork
++                 IpAddress,
++            bgpPathAttrOrigin
++                 INTEGER,
++            bgpPathAttrASPath
++                 OCTET STRING,
++            bgpPathAttrNextHop
++                 IpAddress,
++            bgpPathAttrInterASMetric
++                 Integer32
++        }
++
++        bgpPathAttrPeer OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     obsolete
++            DESCRIPTION
++                    "The IP address of the peer where the path
++                    information was learned."
++            ::= { bgpPathAttrEntry 1 }
++
++        bgpPathAttrDestNetwork OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     obsolete
++            DESCRIPTION
++                    "The address of the destination network."
++            ::= { bgpPathAttrEntry 2 }
++
++        bgpPathAttrOrigin OBJECT-TYPE
++            SYNTAX     INTEGER {
++                           igp(1),-- networks are interior
++                           egp(2),-- networks learned via EGP
++                           incomplete(3) -- undetermined
++                       }
++            MAX-ACCESS read-only
++            STATUS     obsolete
++            DESCRIPTION
++                 "The ultimate origin of the path information."
++            ::= { bgpPathAttrEntry 3 }
++
++        bgpPathAttrASPath OBJECT-TYPE
++            SYNTAX     OCTET STRING (SIZE (2..255))
++            MAX-ACCESS read-only
++            STATUS     obsolete
++            DESCRIPTION
++                    "The set of ASs that must be traversed to reach
++                    the network.  This object is probably best
++                    represented as SEQUENCE OF INTEGER.  For SMI
++                    compatibility, though, it is represented as
++                    OCTET STRING.  Each AS is represented as a pair
++                    of octets according to the following algorithm:
++
++                        first-byte-of-pair = ASNumber / 256;
++                        second-byte-of-pair = ASNumber & 255;"
++            ::= { bgpPathAttrEntry 4 }
++
++        bgpPathAttrNextHop OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     obsolete
++            DESCRIPTION
++                    "The address of the border router that should
++                    be used for the destination network."
++            ::= { bgpPathAttrEntry 5 }
++
++        bgpPathAttrInterASMetric OBJECT-TYPE
++            SYNTAX     Integer32
++            MAX-ACCESS read-only
++            STATUS     obsolete
++            DESCRIPTION
++                    "The optional inter-AS metric.  If this
++                    attribute has not been provided for this route,
++                    the value for this object is 0."
++            ::= { bgpPathAttrEntry 6 }
++
++
++
++        -- BGP-4 Received Path Attribute Table.  This table contains,
++        -- one entry per path to a network, path attributes
++        -- received from all peers running BGP-4.
++
++        bgp4PathAttrTable OBJECT-TYPE
++            SYNTAX     SEQUENCE OF Bgp4PathAttrEntry
++            MAX-ACCESS not-accessible
++            STATUS     current
++            DESCRIPTION
++                    "The BGP-4 Received Path Attribute Table contains
++                    information about paths to destination networks
++                    received from all BGP4 peers."
++            ::= { bgp 6 }
++
++        bgp4PathAttrEntry OBJECT-TYPE
++            SYNTAX     Bgp4PathAttrEntry
++            MAX-ACCESS not-accessible
++            STATUS     current
++            DESCRIPTION
++                    "Information about a path to a network."
++            INDEX { bgp4PathAttrIpAddrPrefix,
++                    bgp4PathAttrIpAddrPrefixLen,
++                    bgp4PathAttrPeer            }
++            ::= { bgp4PathAttrTable 1 }
++
++        Bgp4PathAttrEntry ::= SEQUENCE {
++            bgp4PathAttrPeer
++                 IpAddress,
++            bgp4PathAttrIpAddrPrefixLen
++                 INTEGER,
++            bgp4PathAttrIpAddrPrefix
++                 IpAddress,
++            bgp4PathAttrOrigin
++                 INTEGER,
++            bgp4PathAttrASPathSegment
++                 OCTET STRING,
++            bgp4PathAttrNextHop
++                 IpAddress,
++            bgp4PathAttrMultiExitDisc
++                 INTEGER,
++            bgp4PathAttrLocalPref
++                 INTEGER,
++            bgp4PathAttrAtomicAggregate
++                 INTEGER,
++            bgp4PathAttrAggregatorAS
++                 INTEGER,
++            bgp4PathAttrAggregatorAddr
++                 IpAddress,
++            bgp4PathAttrCalcLocalPref
++                 INTEGER,
++            bgp4PathAttrBest
++                 INTEGER,
++            bgp4PathAttrUnknown
++                 OCTET STRING
++        }
++
++        bgp4PathAttrPeer OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The IP address of the peer where the path
++                    information was learned."
++            ::= { bgp4PathAttrEntry 1 }
++        bgp4PathAttrIpAddrPrefixLen OBJECT-TYPE
++            SYNTAX     INTEGER (0..32)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "Length in bits of the IP address prefix in the
++                    Network Layer Reachability Information field."
++            ::= { bgp4PathAttrEntry 2 }
++
++        bgp4PathAttrIpAddrPrefix OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "An IP address prefix in the Network Layer
++                    Reachability Information field.  This object
++                    is an IP address containing the prefix with
++                    length specified by bgp4PathAttrIpAddrPrefixLen.
++                    Any bits beyond the length specified by
++                    bgp4PathAttrIpAddrPrefixLen are zeroed."
++            ::= { bgp4PathAttrEntry 3 }
++
++        bgp4PathAttrOrigin OBJECT-TYPE
++            SYNTAX     INTEGER {
++                                 igp(1),-- networks are interior
++                                 egp(2),-- networks learned via EGP
++                                 incomplete(3) -- undetermined
++                               }
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The ultimate origin of the path information."
++            ::= { bgp4PathAttrEntry 4 }
++
++        bgp4PathAttrASPathSegment OBJECT-TYPE
++            SYNTAX     OCTET STRING (SIZE (2..255))
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The sequence of AS path segments.  Each AS
++                    path segment is represented by a triple
++                    <type, length, value>.
++
++                    The type is a 1-octet field which has two
++                    possible values:
++                         1      AS_SET: unordered set of ASs a
++                                     route in the UPDATE message
++                                     has traversed
++                         2      AS_SEQUENCE: ordered set of ASs
++                                     a route in the UPDATE message
++                                     has traversed.
++
++                    The length is a 1-octet field containing the
++                    number of ASs in the value field.
++
++                    The value field contains one or more AS
++                    numbers, each AS is represented in the octet
++                    string as a pair of octets according to the
++                    following algorithm:
++
++                        first-byte-of-pair = ASNumber / 256;
++                        second-byte-of-pair = ASNumber & 255;"
++            ::= { bgp4PathAttrEntry 5 }
++
++        bgp4PathAttrNextHop OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The address of the border router that should
++                    be used for the destination network."
++            ::= { bgp4PathAttrEntry 6 }
++
++        bgp4PathAttrMultiExitDisc OBJECT-TYPE
++            SYNTAX     INTEGER (-1..2147483647)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "This metric is used to discriminate between
++                    multiple exit points to an adjacent autonomous
++                    system.  A value of -1 indicates the absence of
++                    this attribute."
++            ::= { bgp4PathAttrEntry 7 }
++
++        bgp4PathAttrLocalPref OBJECT-TYPE
++            SYNTAX     INTEGER (-1..2147483647)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The originating BGP4 speaker's degree of
++                    preference for an advertised route.  A value of
++                    -1 indicates the absence of this attribute."
++            ::= { bgp4PathAttrEntry 8 }
++
++        bgp4PathAttrAtomicAggregate OBJECT-TYPE
++            SYNTAX     INTEGER {
++                           lessSpecificRrouteNotSelected(1),
++                           lessSpecificRouteSelected(2)
++                       }
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "Whether or not a system has selected
++                    a less specific route without selecting a
++                    more specific route."
++            ::= { bgp4PathAttrEntry 9 }
++
++        bgp4PathAttrAggregatorAS OBJECT-TYPE
++            SYNTAX     INTEGER (0..65535)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The AS number of the last BGP4 speaker that
++                    performed route aggregation.  A value of zero (0)
++                    indicates the absence of this attribute."
++            ::= { bgp4PathAttrEntry 10 }
++
++        bgp4PathAttrAggregatorAddr OBJECT-TYPE
++            SYNTAX     IpAddress
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The IP address of the last BGP4 speaker that
++                     performed route aggregation.  A value of
++                     0.0.0.0 indicates the absence of this attribute."
++            ::= { bgp4PathAttrEntry 11 }
++
++        bgp4PathAttrCalcLocalPref OBJECT-TYPE
++            SYNTAX     INTEGER (-1..2147483647)
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "The degree of preference calculated by the
++                    receiving BGP4 speaker for an advertised route.
++                    A value of -1 indicates the absence of this
++                    attribute."
++            ::= { bgp4PathAttrEntry 12 }
++
++        bgp4PathAttrBest OBJECT-TYPE
++            SYNTAX     INTEGER {
++                           false(1),-- not chosen as best route
++                           true(2) -- chosen as best route
++                       }
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "An indication of whether or not this route
++                    was chosen as the best BGP4 route."
++            ::= { bgp4PathAttrEntry 13 }
++
++        bgp4PathAttrUnknown OBJECT-TYPE
++            SYNTAX     OCTET STRING (SIZE(0..255))
++            MAX-ACCESS read-only
++            STATUS     current
++            DESCRIPTION
++                    "One or more path attributes not understood
++                     by this BGP4 speaker.  Size zero (0) indicates
++                     the absence of such attribute(s).  Octets
++                     beyond the maximum size, if any, are not
++                     recorded by this object."
++            ::= { bgp4PathAttrEntry 14 }
++
++
++        -- Traps.
++
++        -- note that in RFC 1657, bgpTraps was incorrectly
++        -- assigned a value of { bgp 7 }, and each of the
++        -- traps had the bgpPeerRemoteAddr object inappropriately
++        -- removed from their OBJECTS clause.  The following
++        -- definitions restore the semantics of the traps as
++        -- they were initially defined in RFC 1269.
++
++        -- { bgp 7 } is unused
++
++        bgpTraps          OBJECT IDENTIFIER ::= { bgp 0 }
++
++        bgpEstablished NOTIFICATION-TYPE
++            OBJECTS { bgpPeerRemoteAddr,
++                      bgpPeerLastError,
++                      bgpPeerState      }
++            STATUS  current
++            DESCRIPTION
++                    "The BGP Established event is generated when
++                    the BGP FSM enters the ESTABLISHED state."
++            ::= { bgpTraps 1 }
++
++        bgpBackwardTransition NOTIFICATION-TYPE
++            OBJECTS { bgpPeerRemoteAddr,
++                      bgpPeerLastError,
++                      bgpPeerState      }
++            STATUS  current
++            DESCRIPTION
++                    "The BGPBackwardTransition Event is generated
++                    when the BGP FSM moves from a higher numbered
++                    state to a lower numbered state."
++            ::= { bgpTraps 2 }
++
++        -- conformance information
++
++        bgpMIBConformance OBJECT IDENTIFIER ::= { bgp 8 }
++        bgpMIBCompliances OBJECT IDENTIFIER ::= { bgpMIBConformance 1 }
++        bgpMIBGroups      OBJECT IDENTIFIER ::= { bgpMIBConformance 2 }
++
++        -- compliance statements
++
++        bgpMIBCompliance MODULE-COMPLIANCE
++            STATUS  current
++            DESCRIPTION
++                    "The compliance statement for entities which
++                     implement the BGP4 mib."
++            MODULE  -- this module
++                MANDATORY-GROUPS { bgp4MIBGlobalsGroup,
++                                   bgp4MIBPeerGroup,
++                                   bgp4MIBPathAttrGroup,
++                                   bgp4MIBNotificationGroup }
++            ::= { bgpMIBCompliances 1 }
++
++        -- units of conformance
++
++        bgp4MIBGlobalsGroup OBJECT-GROUP
++            OBJECTS { bgpVersion,
++                      bgpLocalAs,
++                      bgpIdentifier }
++            STATUS  current
++            DESCRIPTION
++                    "A collection of objects providing information
++                     on global BGP state."
++            ::= { bgpMIBGroups 1 }
++
++        bgp4MIBPeerGroup OBJECT-GROUP
++            OBJECTS { bgpPeerIdentifier,
++                      bgpPeerState,
++                      bgpPeerAdminStatus,
++                      bgpPeerNegotiatedVersion,
++                      bgpPeerLocalAddr,
++                      bgpPeerLocalPort,
++                      bgpPeerRemoteAddr,
++                      bgpPeerRemotePort,
++                      bgpPeerRemoteAs,
++                      bgpPeerInUpdates,
++                      bgpPeerOutUpdates,
++                      bgpPeerInTotalMessages,
++                      bgpPeerOutTotalMessages,
++                      bgpPeerLastError,
++                      bgpPeerFsmEstablishedTransitions,
++                      bgpPeerFsmEstablishedTime,
++                      bgpPeerConnectRetryInterval,
++                      bgpPeerHoldTime,
++                      bgpPeerKeepAlive,
++                      bgpPeerHoldTimeConfigured,
++                      bgpPeerKeepAliveConfigured,
++                      bgpPeerMinASOriginationInterval,
++                      bgpPeerMinRouteAdvertisementInterval,
++                      bgpPeerInUpdateElapsedTime }
++            STATUS  current
++            DESCRIPTION
++                    "A collection of objects for managing
++                     BGP peers."
++            ::= { bgpMIBGroups 2 }
++
++        bgp4MIBRcvdPathAttrGroup OBJECT-GROUP
++            OBJECTS { bgpPathAttrPeer,
++                      bgpPathAttrDestNetwork,
++                      bgpPathAttrOrigin,
++                      bgpPathAttrASPath,
++                      bgpPathAttrNextHop,
++                      bgpPathAttrInterASMetric }
++            STATUS  obsolete
++            DESCRIPTION
++                    "A collection of objects for managing BGP
++                     path entries.
++
++                     This conformance group is obsolete,
++                     replaced by bgp4MIBPathAttrGroup."
++            ::= { bgpMIBGroups 3 }
++
++        bgp4MIBPathAttrGroup OBJECT-GROUP
++            OBJECTS { bgp4PathAttrPeer,
++                      bgp4PathAttrIpAddrPrefixLen,
++                      bgp4PathAttrIpAddrPrefix,
++                      bgp4PathAttrOrigin,
++                      bgp4PathAttrASPathSegment,
++                      bgp4PathAttrNextHop,
++                      bgp4PathAttrMultiExitDisc,
++                      bgp4PathAttrLocalPref,
++                      bgp4PathAttrAtomicAggregate,
++                      bgp4PathAttrAggregatorAS,
++                      bgp4PathAttrAggregatorAddr,
++                      bgp4PathAttrCalcLocalPref,
++                      bgp4PathAttrBest,
++                      bgp4PathAttrUnknown }
++            STATUS  current
++            DESCRIPTION
++                    "A collection of objects for managing
++                     BGP path entries."
++            ::= { bgpMIBGroups 4 }
++
++        bgp4MIBNotificationGroup NOTIFICATION-GROUP
++            NOTIFICATIONS { bgpEstablished,
++                            bgpBackwardTransition }
++            STATUS  current
++            DESCRIPTION
++                    "A collection of notifications for signaling
++                    changes in BGP peer relationships."
++            ::= { bgpMIBGroups 5 }
++
++    END
+--- /dev/null
++++ b/mibs/GNOME-SMI.txt
+@@ -0,0 +1,88 @@
++GNOME-SMI DEFINITIONS ::= BEGIN
++
++IMPORTS
++      MODULE-IDENTITY,
++      OBJECT-IDENTITY,
++      enterprises
++              FROM SNMPv2-SMI;
++
++gnome MODULE-IDENTITY
++      LAST-UPDATED "200709070000Z"
++      ORGANIZATION "GNOME project"
++      CONTACT-INFO
++              "GNU Network Object Model Environment project
++              
++              see http://www.gnome.org for contact persons of a particular
++              area or subproject of GNOME.
++
++              Administrative contact for MIB module:
++
++              Jochen Friedrich
++              Ramsaystr. 9
++              63450 Hanau
++              Germany 
++
++              email: jochen@scram.de"
++      DESCRIPTION
++              "The Structure of GNOME."
++
++      -- revision history
++
++      REVISION "200709070000Z"  -- Sep 07, 2007
++      DESCRIPTION
++              "Fixed wrong enterprise number (how comes this
++              typo was unnoticed for so long?)."
++
++      REVISION "200505070000Z"  -- May 07, 2005
++      DESCRIPTION
++              "Added gnomeLDAP subtree for LDAP definitions."
++
++      REVISION "200312070000Z"  -- December 07, 2003
++      DESCRIPTION
++              "Added gnomeSysadmin subtree for GNOME project system administration.
++              Updated contact info."
++
++      REVISION "9809010000Z"  -- September 01, 1998
++      DESCRIPTION
++              "Initial version."
++
++      ::= { enterprises 3319 }        -- assigned by IANA
++
++gnomeProducts OBJECT-IDENTITY
++      STATUS  current
++      DESCRIPTION
++              "gnomeProducts is the root OBJECT IDENTIFIER from
++              which sysObjectID values are assigned."
++      ::= { gnome 1 }
++
++gnomeMgmt OBJECT-IDENTITY
++      STATUS  current
++      DESCRIPTION
++              "gnomeMgmt defines the subtree for production GNOME related
++              MIB registrations."
++      ::= { gnome 2 }
++
++gnomeTest OBJECT-IDENTITY
++      STATUS  current
++      DESCRIPTION
++              "gnomeTest defines the subtree for testing GNOME related
++              MIB registrations."
++      ::= { gnome 3 }
++
++gnomeSysadmin OBJECT-IDENTITY
++      STATUS  current
++      DESCRIPTION
++              "gnomeSysadmin defines the subtree for GNOME related Sysadmin
++              MIB registrations."
++      ::= { gnome 4 }
++
++gnomeLDAP OBJECT-IDENTITY
++      STATUS  current
++      DESCRIPTION
++              "gnomeLDAP defines the subtree for GNOME related LDAP
++              registrations."
++      ::= { gnome 5 }
++
++-- more to come if necessary.
++
++END
+--- /dev/null
++++ b/mibs/OSPF-MIB.txt
+@@ -0,0 +1,2723 @@
++OSPF-MIB DEFINITIONS ::= BEGIN
++
++    IMPORTS
++            MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32,
++            Integer32, IpAddress
++                FROM SNMPv2-SMI
++            TEXTUAL-CONVENTION, TruthValue, RowStatus
++                FROM SNMPv2-TC
++            MODULE-COMPLIANCE, OBJECT-GROUP          FROM SNMPv2-CONF
++            mib-2                                    FROM RFC1213-MIB;
++
++--  This MIB module uses the extended OBJECT-TYPE macro as
++--  defined in [9].
++
++ospf MODULE-IDENTITY
++        LAST-UPDATED "9501201225Z" -- Fri Jan 20 12:25:50 PST 1995
++        ORGANIZATION "IETF OSPF Working Group"
++        CONTACT-INFO
++       "       Fred Baker
++       Postal: Cisco Systems
++               519 Lado Drive
++               Santa Barbara, California 93111
++       Tel:    +1 805 681 0115
++       E-Mail: fred@cisco.com
++
++               Rob Coltun
++       Postal: RainbowBridge Communications
++       Tel:    (301) 340-9416
++       E-Mail: rcoltun@rainbow-bridge.com"
++    DESCRIPTION
++       "The MIB module to describe the OSPF Version 2
++       Protocol"
++    ::= { mib-2 14 }
++
++--  The Area ID, in OSPF, has the same format as an IP Address,
++--  but has the function of defining a summarization point for
++--  Link State Advertisements
++
++AreaID ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "An OSPF Area Identifier."
++    SYNTAX      IpAddress
++
++
++--  The Router ID, in OSPF, has the same format as an IP Address,
++--  but identifies the router independent of its IP Address.
++
++RouterID ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "A OSPF Router Identifier."
++    SYNTAX      IpAddress
++
++
++--  The OSPF Metric is defined as an unsigned value in the range
++
++Metric ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "The OSPF Internal Metric."
++    SYNTAX      Integer32 (0..'FFFF'h)
++
++BigMetric ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "The OSPF External Metric."
++    SYNTAX      Integer32 (0..'FFFFFF'h)
++
++--  Status Values
++
++Status ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "The status of an interface: 'enabled' indicates that
++       it is willing to communicate with other OSPF Routers,
++       while 'disabled' indicates that it is not."
++    SYNTAX      INTEGER { enabled (1), disabled (2) }
++
++--  Time Durations measured in seconds
++
++PositiveInteger ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "A positive integer. Values in excess are precluded as
++       unnecessary and prone to interoperability issues."
++    SYNTAX      Integer32 (0..'7FFFFFFF'h)
++
++HelloRange ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "The range of intervals on which hello messages are
++       exchanged."
++    SYNTAX      Integer32 (1..'FFFF'h)
++
++UpToMaxAge ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "The values that one might find or configure for
++       variables bounded by the maximum age of an LSA."
++    SYNTAX      Integer32 (0..3600)
++
++
++--  The range of ifIndex
++
++InterfaceIndex ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "The range of ifIndex."
++    SYNTAX      Integer32
++
++
++--  Potential Priorities for the Designated Router Election
++
++DesignatedRouterPriority ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "The values defined for the priority of a system for
++       becoming the designated router."
++    SYNTAX      Integer32 (0..'FF'h)
++
++TOSType ::= TEXTUAL-CONVENTION
++    STATUS      current
++    DESCRIPTION
++       "Type of Service is defined as a mapping to the IP Type of
++       Service Flags as defined in the IP Forwarding Table MIB
++
++       +-----+-----+-----+-----+-----+-----+-----+-----+
++       |                 |                       |     |
++       |   PRECEDENCE    |    TYPE OF SERVICE    |  0  |
++       |                 |                       |     |
++       +-----+-----+-----+-----+-----+-----+-----+-----+
++
++                IP TOS                IP TOS
++           Field     Policy      Field     Policy
++
++           Contents    Code      Contents    Code
++           0 0 0 0  ==>   0      0 0 0 1  ==>   2
++           0 0 1 0  ==>   4      0 0 1 1  ==>   6
++           0 1 0 0  ==>   8      0 1 0 1  ==>  10
++           0 1 1 0  ==>  12      0 1 1 1  ==>  14
++           1 0 0 0  ==>  16      1 0 0 1  ==>  18
++           1 0 1 0  ==>  20      1 0 1 1  ==>  22
++           1 1 0 0  ==>  24      1 1 0 1  ==>  26
++           1 1 1 0  ==>  28      1 1 1 1  ==>  30
++
++       The remaining values are left for future definition."
++    SYNTAX      Integer32 (0..30)
++
++
++--  OSPF General Variables
++
++--      These parameters apply globally to the Router's
++--      OSPF Process.
++
++ospfGeneralGroup OBJECT IDENTIFIER ::= { ospf 1 }
++
++
++    ospfRouterId OBJECT-TYPE
++        SYNTAX   RouterID
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "A  32-bit  integer  uniquely  identifying  the
++           router in the Autonomous System.
++
++           By  convention,  to  ensure  uniqueness,   this
++           should  default  to  the  value  of  one of the
++           router's IP interface addresses."
++       REFERENCE
++          "OSPF Version 2, C.1 Global parameters"
++      ::= { ospfGeneralGroup 1 }
++
++
++    ospfAdminStat OBJECT-TYPE
++        SYNTAX   Status
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "The  administrative  status  of  OSPF  in  the
++           router.   The  value 'enabled' denotes that the
++           OSPF Process is active on at least  one  inter-
++           face;  'disabled'  disables  it  on  all inter-
++           faces."
++       ::= { ospfGeneralGroup 2 }
++
++    ospfVersionNumber OBJECT-TYPE
++        SYNTAX   INTEGER    { version2 (2) }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The current version number of the OSPF  proto-
++           col is 2."
++       REFERENCE
++          "OSPF Version 2, Title"
++      ::= { ospfGeneralGroup 3 }
++
++
++    ospfAreaBdrRtrStatus OBJECT-TYPE
++        SYNTAX   TruthValue
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "A flag to note whether this router is an  area
++           border router."
++       REFERENCE
++          "OSPF Version 2, Section 3 Splitting the AS into
++          Areas"
++      ::= { ospfGeneralGroup 4 }
++
++
++    ospfASBdrRtrStatus OBJECT-TYPE
++        SYNTAX   TruthValue
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "A flag to note whether this router is  config-
++           ured as an Autonomous System border router."
++       REFERENCE
++          "OSPF Version 2, Section 3.3  Classification  of
++          routers"
++      ::= { ospfGeneralGroup 5 }
++
++    ospfExternLsaCount OBJECT-TYPE
++        SYNTAX   Gauge32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of external (LS type 5)  link-state
++           advertisements in the link-state database."
++       REFERENCE
++          "OSPF Version 2, Appendix A.4.5 AS external link
++          advertisements"
++      ::= { ospfGeneralGroup 6 }
++
++
++    ospfExternLsaCksumSum OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The 32-bit unsigned sum of the LS checksums of
++           the  external  link-state  advertisements  con-
++           tained in the link-state  database.   This  sum
++           can  be  used  to determine if there has been a
++           change in a router's link state  database,  and
++           to  compare  the  link-state  database  of  two
++           routers."
++       ::= { ospfGeneralGroup 7 }
++
++
++    ospfTOSSupport OBJECT-TYPE
++        SYNTAX   TruthValue
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "The router's support for type-of-service rout-
++           ing."
++       REFERENCE
++          "OSPF Version 2,  Appendix  F.1.2  Optional  TOS
++          support"
++      ::= { ospfGeneralGroup 8 }
++
++    ospfOriginateNewLsas OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of  new  link-state  advertisements
++           that  have been originated.  This number is in-
++           cremented each time the router originates a new
++           LSA."
++       ::= { ospfGeneralGroup 9 }
++
++
++    ospfRxNewLsas OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of  link-state  advertisements  re-
++           ceived  determined  to  be  new instantiations.
++           This number does not include  newer  instantia-
++           tions  of self-originated link-state advertise-
++           ments."
++       ::= { ospfGeneralGroup 10 }
++
++    ospfExtLsdbLimit OBJECT-TYPE
++        SYNTAX   Integer32 (-1..'7FFFFFFF'h)
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "The  maximum   number   of   non-default   AS-
++           external-LSAs entries that can be stored in the
++           link-state database.  If the value is -1,  then
++           there is no limit.
++
++           When the number of non-default AS-external-LSAs
++           in   a  router's  link-state  database  reaches
++           ospfExtLsdbLimit, the router  enters  Overflow-
++           State.   The   router  never  holds  more  than
++           ospfExtLsdbLimit  non-default  AS-external-LSAs
++           in  its  database. OspfExtLsdbLimit MUST be set
++           identically in all routers attached to the OSPF
++           backbone  and/or  any regular OSPF area. (i.e.,
++           OSPF stub areas and NSSAs are excluded)."
++       DEFVAL { -1 }
++       ::= { ospfGeneralGroup 11 }
++
++    ospfMulticastExtensions OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "A Bit Mask indicating whether  the  router  is
++           forwarding  IP  multicast  (Class  D) datagrams
++           based on the algorithms defined in  the  Multi-
++           cast Extensions to OSPF.
++
++           Bit 0, if set, indicates that  the  router  can
++           forward  IP multicast datagrams in the router's
++           directly attached areas (called intra-area mul-
++           ticast routing).
++
++           Bit 1, if set, indicates that  the  router  can
++           forward  IP  multicast  datagrams  between OSPF
++           areas (called inter-area multicast routing).
++
++           Bit 2, if set, indicates that  the  router  can
++           forward  IP  multicast  datagrams between Auto-
++           nomous Systems (called inter-AS multicast rout-
++           ing).
++
++           Only certain combinations of bit  settings  are
++           allowed,  namely: 0 (no multicast forwarding is
++           enabled), 1 (intra-area multicasting  only),  3
++           (intra-area  and  inter-area  multicasting),  5
++           (intra-area and inter-AS  multicasting)  and  7
++           (multicasting  everywhere). By default, no mul-
++           ticast forwarding is enabled."
++       DEFVAL { 0 }
++       ::= { ospfGeneralGroup 12 }
++
++    ospfExitOverflowInterval OBJECT-TYPE
++        SYNTAX   PositiveInteger
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "The number of  seconds  that,  after  entering
++           OverflowState,  a  router will attempt to leave
++           OverflowState. This allows the router to  again
++           originate  non-default  AS-external-LSAs.  When
++           set to 0, the router will not  leave  Overflow-
++           State until restarted."
++       DEFVAL { 0 }
++       ::= { ospfGeneralGroup 13 }
++
++
++    ospfDemandExtensions OBJECT-TYPE
++        SYNTAX   TruthValue
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "The router's support for demand routing."
++       REFERENCE
++          "OSPF Version 2, Appendix on Demand Routing"
++      ::= { ospfGeneralGroup 14 }
++
++
++--      The OSPF Area Data Structure contains information
++--      regarding the various areas. The interfaces and
++--      virtual links are configured as part of these areas.
++--      Area 0.0.0.0, by definition, is the Backbone Area
++
++
++    ospfAreaTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfAreaEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "Information describing the configured  parame-
++           ters  and cumulative statistics of the router's
++           attached areas."
++       REFERENCE
++          "OSPF Version 2, Section 6  The Area Data Struc-
++          ture"
++      ::= { ospf 2 }
++
++
++    ospfAreaEntry OBJECT-TYPE
++        SYNTAX   OspfAreaEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "Information describing the configured  parame-
++           ters  and  cumulative  statistics of one of the
++           router's attached areas."
++       INDEX { ospfAreaId }
++       ::= { ospfAreaTable 1 }
++
++OspfAreaEntry ::=
++    SEQUENCE {
++        ospfAreaId
++            AreaID,
++        ospfAuthType
++            Integer32,
++        ospfImportAsExtern
++            INTEGER,
++        ospfSpfRuns
++            Counter32,
++        ospfAreaBdrRtrCount
++            Gauge32,
++        ospfAsBdrRtrCount
++            Gauge32,
++        ospfAreaLsaCount
++            Gauge32,
++        ospfAreaLsaCksumSum
++            Integer32,
++        ospfAreaSummary
++            INTEGER,
++        ospfAreaStatus
++            RowStatus
++              }
++
++    ospfAreaId OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "A 32-bit integer uniquely identifying an area.
++           Area ID 0.0.0.0 is used for the OSPF backbone."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfAreaEntry 1 }
++
++
++    ospfAuthType OBJECT-TYPE
++        SYNTAX   Integer32
++                    -- none (0),
++                    -- simplePassword (1)
++                    -- md5 (2)
++                    -- reserved for specification by IANA (> 2)
++        MAX-ACCESS   read-create
++        STATUS   obsolete
++        DESCRIPTION
++           "The authentication type specified for an area.
++           Additional authentication types may be assigned
++           locally on a per Area basis."
++       REFERENCE
++          "OSPF Version 2, Appendix E Authentication"
++      DEFVAL { 0 }        -- no authentication, by default
++      ::= { ospfAreaEntry 2 }
++
++    ospfImportAsExtern OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    importExternal (1),
++                    importNoExternal (2),
++                    importNssa (3)
++                  }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The area's support for importing  AS  external
++           link- state advertisements."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      DEFVAL { importExternal }
++      ::= { ospfAreaEntry 3 }
++
++
++    ospfSpfRuns OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of times that the intra-area  route
++           table  has  been  calculated  using this area's
++           link-state database.  This  is  typically  done
++           using Dijkstra's algorithm."
++       ::= { ospfAreaEntry 4 }
++
++
++    ospfAreaBdrRtrCount OBJECT-TYPE
++        SYNTAX   Gauge32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The total number of area border routers reach-
++           able within this area.  This is initially zero,
++           and is calculated in each SPF Pass."
++       ::= { ospfAreaEntry 5 }
++
++    ospfAsBdrRtrCount OBJECT-TYPE
++        SYNTAX   Gauge32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The total number of Autonomous  System  border
++           routers  reachable  within  this area.  This is
++           initially zero, and is calculated in  each  SPF
++           Pass."
++       ::= { ospfAreaEntry 6 }
++
++
++    ospfAreaLsaCount OBJECT-TYPE
++        SYNTAX   Gauge32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The total number of link-state  advertisements
++           in  this  area's link-state database, excluding
++           AS External LSA's."
++       ::= { ospfAreaEntry 7 }
++
++
++    ospfAreaLsaCksumSum OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The 32-bit unsigned sum of the link-state  ad-
++           vertisements'  LS  checksums  contained in this
++           area's link-state database.  This sum  excludes
++           external (LS type 5) link-state advertisements.
++           The sum can be used to determine if  there  has
++           been  a  change  in a router's link state data-
++           base, and to compare the link-state database of
++           two routers."
++       DEFVAL   { 0 }
++       ::= { ospfAreaEntry 8 }
++
++    ospfAreaSummary OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    noAreaSummary (1),
++                    sendAreaSummary (2)
++                  }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The variable ospfAreaSummary controls the  im-
++           port  of  summary LSAs into stub areas.  It has
++           no effect on other areas.
++
++           If it is noAreaSummary, the router will neither
++           originate  nor  propagate summary LSAs into the
++           stub area.  It will rely entirely  on  its  de-
++           fault route.
++
++           If it is sendAreaSummary, the router will  both
++           summarize and propagate summary LSAs."
++       DEFVAL   { noAreaSummary }
++       ::= { ospfAreaEntry 9 }
++
++
++    ospfAreaStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfAreaEntry 10 }
++
++
++--  OSPF Area Default Metric Table
++
++--      The OSPF Area Default Metric Table describes the metrics
++--      that a default Area Border Router will advertise into a
++--      Stub area.
++
++
++    ospfStubAreaTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfStubAreaEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The set of metrics that will be advertised  by
++           a default Area Border Router into a stub area."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2, Area Parameters"
++      ::= { ospf 3 }
++
++
++    ospfStubAreaEntry OBJECT-TYPE
++        SYNTAX   OspfStubAreaEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The metric for a given Type  of  Service  that
++           will  be  advertised  by  a default Area Border
++           Router into a stub area."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2, Area Parameters"
++      INDEX { ospfStubAreaId, ospfStubTOS }
++      ::= { ospfStubAreaTable 1 }
++
++OspfStubAreaEntry ::=
++    SEQUENCE {
++        ospfStubAreaId
++            AreaID,
++        ospfStubTOS
++            TOSType,
++        ospfStubMetric
++            BigMetric,
++        ospfStubStatus
++            RowStatus,
++        ospfStubMetricType
++            INTEGER
++              }
++
++    ospfStubAreaId OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The 32 bit identifier for the Stub  Area.   On
++           creation,  this  can  be  derived  from the in-
++           stance."
++       ::= { ospfStubAreaEntry 1 }
++
++
++    ospfStubTOS OBJECT-TYPE
++        SYNTAX   TOSType
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The  Type  of  Service  associated  with   the
++           metric.   On creation, this can be derived from
++           the instance."
++       ::= { ospfStubAreaEntry 2 }
++
++
++    ospfStubMetric OBJECT-TYPE
++        SYNTAX   BigMetric
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The metric value applied at the indicated type
++           of  service.  By default, this equals the least
++           metric at the type of service among the  inter-
++           faces to other areas."
++       ::= { ospfStubAreaEntry 3 }
++
++
++    ospfStubStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfStubAreaEntry 4 }
++
++    ospfStubMetricType OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    ospfMetric (1),                -- OSPF Metric
++                    comparableCost (2),        -- external type 1
++                    nonComparable  (3)        -- external type 2
++                  }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the type of metric  ad-
++           vertised as a default route."
++       DEFVAL   { ospfMetric }
++       ::= { ospfStubAreaEntry 5 }
++
++--  OSPF Link State Database
++
++--      The Link State Database contains the Link State
++--      Advertisements from throughout the areas that the
++--      device is attached to.
++
++
++    ospfLsdbTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfLsdbEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The OSPF Process's Link State Database."
++       REFERENCE
++          "OSPF Version 2, Section 12  Link  State  Adver-
++          tisements"
++      ::= { ospf 4 }
++
++
++    ospfLsdbEntry OBJECT-TYPE
++        SYNTAX   OspfLsdbEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A single Link State Advertisement."
++       INDEX { ospfLsdbAreaId, ospfLsdbType,
++               ospfLsdbLsid, ospfLsdbRouterId }
++       ::= { ospfLsdbTable 1 }
++
++OspfLsdbEntry ::=
++    SEQUENCE {
++        ospfLsdbAreaId
++            AreaID,
++        ospfLsdbType
++            INTEGER,
++        ospfLsdbLsid
++            IpAddress,
++        ospfLsdbRouterId
++            RouterID,
++        ospfLsdbSequence
++            Integer32,
++        ospfLsdbAge
++            Integer32,
++        ospfLsdbChecksum
++            Integer32,
++        ospfLsdbAdvertisement
++            OCTET STRING
++              }
++    ospfLsdbAreaId OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The 32 bit identifier of the Area  from  which
++           the LSA was received."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfLsdbEntry 1 }
++
++-- External Link State Advertisements are permitted
++-- for backward compatibility, but should be displayed in
++-- the ospfExtLsdbTable rather than here.
++
++    ospfLsdbType OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    routerLink (1),
++                    networkLink (2),
++                    summaryLink (3),
++                    asSummaryLink (4),
++                    asExternalLink (5), -- but see ospfExtLsdbTable
++                    multicastLink (6),
++                    nssaExternalLink (7)
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The type  of  the  link  state  advertisement.
++           Each  link state type has a separate advertise-
++           ment format."
++       REFERENCE
++          "OSPF Version 2, Appendix A.4.1 The  Link  State
++          Advertisement header"
++      ::= { ospfLsdbEntry 2 }
++
++    ospfLsdbLsid OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Link State ID is an LS Type Specific field
++           containing either a Router ID or an IP Address;
++           it identifies the piece of the  routing  domain
++           that is being described by the advertisement."
++       REFERENCE
++          "OSPF Version 2, Section 12.1.4 Link State ID"
++      ::= { ospfLsdbEntry 3 }
++    ospfLsdbRouterId OBJECT-TYPE
++        SYNTAX   RouterID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The 32 bit number that uniquely identifies the
++           originating router in the Autonomous System."
++       REFERENCE
++          "OSPF Version 2, Appendix C.1 Global parameters"
++      ::= { ospfLsdbEntry 4 }
++
++--  Note that the OSPF Sequence Number is a 32 bit signed
++--  integer.  It starts with the value '80000001'h,
++--  or -'7FFFFFFF'h, and increments until '7FFFFFFF'h
++--  Thus, a typical sequence number will be very negative.
++
++    ospfLsdbSequence OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The sequence number field is a  signed  32-bit
++           integer.   It  is used to detect old and dupli-
++           cate link state advertisements.  The  space  of
++           sequence  numbers  is  linearly  ordered.   The
++           larger the sequence number the more recent  the
++           advertisement."
++       REFERENCE
++          "OSPF Version  2,  Section  12.1.6  LS  sequence
++          number"
++      ::= { ospfLsdbEntry 5 }
++
++
++    ospfLsdbAge OBJECT-TYPE
++        SYNTAX   Integer32    -- Should be 0..MaxAge
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "This field is the age of the link state adver-
++           tisement in seconds."
++       REFERENCE
++          "OSPF Version 2, Section 12.1.1 LS age"
++      ::= { ospfLsdbEntry 6 }
++
++    ospfLsdbChecksum OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "This field is the  checksum  of  the  complete
++           contents  of  the  advertisement, excepting the
++           age field.  The age field is excepted  so  that
++           an   advertisement's  age  can  be  incremented
++           without updating the  checksum.   The  checksum
++           used  is  the same that is used for ISO connec-
++           tionless datagrams; it is commonly referred  to
++           as the Fletcher checksum."
++       REFERENCE
++          "OSPF Version 2, Section 12.1.7 LS checksum"
++      ::= { ospfLsdbEntry 7 }
++
++
++    ospfLsdbAdvertisement OBJECT-TYPE
++        SYNTAX   OCTET STRING (SIZE (1..65535))
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The entire Link State Advertisement, including
++           its header."
++       REFERENCE
++          "OSPF Version 2, Section 12  Link  State  Adver-
++          tisements"
++      ::= { ospfLsdbEntry 8 }
++
++
++--  Address Range Table
++
++--      The Address Range Table acts as an adjunct to the Area
++--      Table; It describes those Address Range Summaries that
++--      are configured to be propagated from an Area to reduce
++--      the amount of information about it which is known beyond
++--      its borders.
++
++    ospfAreaRangeTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfAreaRangeEntry
++        MAX-ACCESS   not-accessible
++        STATUS   obsolete
++        DESCRIPTION
++           "A range if IP addresses  specified  by  an  IP
++           address/IP  network  mask  pair.   For example,
++           class B address range of X.X.X.X with a network
++           mask  of  255.255.0.0 includes all IP addresses
++           from X.X.0.0 to X.X.255.255"
++       REFERENCE
++          "OSPF Version 2, Appendix C.2  Area parameters"
++      ::= { ospf 5 }
++    ospfAreaRangeEntry OBJECT-TYPE
++        SYNTAX   OspfAreaRangeEntry
++        MAX-ACCESS   not-accessible
++        STATUS   obsolete
++        DESCRIPTION
++           "A range if IP addresses  specified  by  an  IP
++           address/IP  network  mask  pair.   For example,
++           class B address range of X.X.X.X with a network
++           mask  of  255.255.0.0 includes all IP addresses
++           from X.X.0.0 to X.X.255.255"
++       REFERENCE
++          "OSPF Version 2, Appendix C.2  Area parameters"
++      INDEX { ospfAreaRangeAreaId, ospfAreaRangeNet }
++      ::= { ospfAreaRangeTable 1 }
++
++OspfAreaRangeEntry ::=
++    SEQUENCE {
++        ospfAreaRangeAreaId
++            AreaID,
++        ospfAreaRangeNet
++            IpAddress,
++        ospfAreaRangeMask
++            IpAddress,
++        ospfAreaRangeStatus
++            RowStatus,
++        ospfAreaRangeEffect
++            INTEGER
++              }
++
++    ospfAreaRangeAreaId OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   obsolete
++        DESCRIPTION
++           "The Area the Address  Range  is  to  be  found
++           within."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfAreaRangeEntry 1 }
++
++
++    ospfAreaRangeNet OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   obsolete
++        DESCRIPTION
++           "The IP Address of the Net or Subnet  indicated
++           by the range."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfAreaRangeEntry 2 }
++
++
++    ospfAreaRangeMask OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-create
++        STATUS   obsolete
++        DESCRIPTION
++           "The Subnet Mask that pertains to  the  Net  or
++           Subnet."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfAreaRangeEntry 3 }
++
++    ospfAreaRangeStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   obsolete
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfAreaRangeEntry 4 }
++
++
++    ospfAreaRangeEffect OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    advertiseMatching (1),
++                    doNotAdvertiseMatching (2)
++                  }
++        MAX-ACCESS   read-create
++        STATUS   obsolete
++        DESCRIPTION
++           "Subnets subsumed by ranges either trigger  the
++           advertisement  of the indicated summary (adver-
++           tiseMatching), or result in  the  subnet's  not
++           being advertised at all outside the area."
++       DEFVAL   { advertiseMatching }
++       ::= { ospfAreaRangeEntry 5 }
++
++
++
++--  OSPF Host Table
++
++--      The Host/Metric Table indicates what hosts are directly
++--      attached to the Router, and what metrics and types of
++--      service should be advertised for them.
++
++    ospfHostTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfHostEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The list of Hosts, and their metrics, that the
++           router will advertise as host routes."
++       REFERENCE
++          "OSPF Version 2, Appendix C.6  Host route param-
++          eters"
++      ::= { ospf 6 }
++
++
++    ospfHostEntry OBJECT-TYPE
++        SYNTAX   OspfHostEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A metric to be advertised, for a given type of
++           service, when a given host is reachable."
++       INDEX { ospfHostIpAddress, ospfHostTOS }
++       ::= { ospfHostTable 1 }
++
++OspfHostEntry ::=
++    SEQUENCE {
++        ospfHostIpAddress
++            IpAddress,
++        ospfHostTOS
++            TOSType,
++        ospfHostMetric
++            Metric,
++        ospfHostStatus
++            RowStatus,
++        ospfHostAreaID
++            AreaID
++              }
++
++    ospfHostIpAddress OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP Address of the Host."
++       REFERENCE
++          "OSPF Version 2, Appendix C.6 Host route parame-
++          ters"
++      ::= { ospfHostEntry 1 }
++
++
++    ospfHostTOS OBJECT-TYPE
++        SYNTAX   TOSType
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Type of Service of the route being config-
++           ured."
++       REFERENCE
++          "OSPF Version 2, Appendix C.6 Host route parame-
++          ters"
++      ::= { ospfHostEntry 2 }
++
++
++    ospfHostMetric OBJECT-TYPE
++        SYNTAX   Metric
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The Metric to be advertised."
++       REFERENCE
++          "OSPF Version 2, Appendix C.6 Host route parame-
++          ters"
++      ::= { ospfHostEntry 3 }
++
++    ospfHostStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfHostEntry 4 }
++
++
++    ospfHostAreaID OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Area the Host Entry is to be found within.
++           By  default, the area that a subsuming OSPF in-
++           terface is in, or 0.0.0.0"
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfHostEntry 5 }
++
++
++--  OSPF Interface Table
++
++--      The OSPF Interface Table augments the ipAddrTable
++--             with OSPF specific information.
++
++    ospfIfTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfIfEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The OSPF Interface Table describes the  inter-
++           faces from the viewpoint of OSPF."
++       REFERENCE
++          "OSPF Version 2, Appendix C.3  Router  interface
++          parameters"
++      ::= { ospf 7 }
++
++
++    ospfIfEntry OBJECT-TYPE
++        SYNTAX   OspfIfEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The OSPF Interface Entry describes one  inter-
++           face from the viewpoint of OSPF."
++       INDEX { ospfIfIpAddress, ospfAddressLessIf }
++       ::= { ospfIfTable 1 }
++
++OspfIfEntry ::=
++    SEQUENCE {
++        ospfIfIpAddress
++            IpAddress,
++        ospfAddressLessIf
++            Integer32,
++        ospfIfAreaId
++            AreaID,
++        ospfIfType
++            INTEGER,
++        ospfIfAdminStat
++            Status,
++        ospfIfRtrPriority
++            DesignatedRouterPriority,
++        ospfIfTransitDelay
++            UpToMaxAge,
++        ospfIfRetransInterval
++            UpToMaxAge,
++        ospfIfHelloInterval
++            HelloRange,
++        ospfIfRtrDeadInterval
++            PositiveInteger,
++        ospfIfPollInterval
++            PositiveInteger,
++        ospfIfState
++            INTEGER,
++        ospfIfDesignatedRouter
++            IpAddress,
++        ospfIfBackupDesignatedRouter
++            IpAddress,
++        ospfIfEvents
++            Counter32,
++        ospfIfAuthType
++            INTEGER,
++        ospfIfAuthKey
++            OCTET STRING,
++        ospfIfStatus
++            RowStatus,
++        ospfIfMulticastForwarding
++            INTEGER,
++        ospfIfDemand
++            TruthValue
++              }
++
++    ospfIfIpAddress OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP address of this OSPF interface."
++       ::= { ospfIfEntry 1 }
++
++    ospfAddressLessIf OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "For the purpose of easing  the  instancing  of
++           addressed   and  addressless  interfaces;  This
++           variable takes the value 0 on  interfaces  with
++           IP  Addresses,  and  the corresponding value of
++           ifIndex for interfaces having no IP Address."
++       ::= { ospfIfEntry 2 }
++    ospfIfAreaId OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "A 32-bit integer uniquely identifying the area
++           to  which  the  interface  connects.   Area  ID
++           0.0.0.0 is used for the OSPF backbone."
++       DEFVAL   { '00000000'H }    -- 0.0.0.0
++       ::= { ospfIfEntry 3 }
++
++    ospfIfType OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    broadcast (1),
++                    nbma (2),
++                    pointToPoint (3),
++                    pointToMultipoint (5)
++                  }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The OSPF interface type.
++
++           By way of a default, this field may be intuited
++           from the corresponding value of ifType.  Broad-
++           cast LANs, such as  Ethernet  and  IEEE  802.5,
++           take  the  value  'broadcast', X.25 and similar
++           technologies take the value 'nbma',  and  links
++           that  are  definitively point to point take the
++           value 'pointToPoint'."
++       ::= { ospfIfEntry 4 }
++
++
++    ospfIfAdminStat OBJECT-TYPE
++        SYNTAX   Status
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The OSPF  interface's  administrative  status.
++           The  value formed on the interface, and the in-
++           terface will be advertised as an internal route
++           to  some  area.   The  value 'disabled' denotes
++           that the interface is external to OSPF."
++       DEFVAL { enabled }
++       ::= { ospfIfEntry 5 }
++
++    ospfIfRtrPriority OBJECT-TYPE
++        SYNTAX   DesignatedRouterPriority
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The  priority  of  this  interface.   Used  in
++           multi-access  networks,  this  field is used in
++           the designated router election algorithm.   The
++           value 0 signifies that the router is not eligi-
++           ble to become the  designated  router  on  this
++           particular  network.   In the event of a tie in
++           this value, routers will use their Router ID as
++           a tie breaker."
++       DEFVAL { 1 }
++       ::= { ospfIfEntry 6 }
++
++
++    ospfIfTransitDelay OBJECT-TYPE
++        SYNTAX   UpToMaxAge
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The estimated number of seconds  it  takes  to
++           transmit  a  link state update packet over this
++           interface."
++       DEFVAL { 1 }
++       ::= { ospfIfEntry 7 }
++
++
++    ospfIfRetransInterval OBJECT-TYPE
++        SYNTAX   UpToMaxAge
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The number of seconds between  link-state  ad-
++           vertisement  retransmissions,  for  adjacencies
++           belonging to this  interface.   This  value  is
++           also used when retransmitting database descrip-
++           tion and link-state request packets."
++       DEFVAL { 5 }
++       ::= { ospfIfEntry 8 }
++
++
++    ospfIfHelloInterval OBJECT-TYPE
++        SYNTAX   HelloRange
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The length of time, in  seconds,  between  the
++           Hello  packets that the router sends on the in-
++           terface.  This value must be the same  for  all
++           routers attached to a common network."
++       DEFVAL { 10 }
++       ::= { ospfIfEntry 9 }
++
++
++    ospfIfRtrDeadInterval OBJECT-TYPE
++        SYNTAX   PositiveInteger
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The number of seconds that  a  router's  Hello
++           packets  have  not been seen before it's neigh-
++           bors declare the router down.  This  should  be
++           some  multiple  of  the  Hello  interval.  This
++           value must be the same for all routers attached
++           to a common network."
++       DEFVAL { 40 }
++       ::= { ospfIfEntry 10 }
++
++
++    ospfIfPollInterval OBJECT-TYPE
++        SYNTAX   PositiveInteger
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The larger time interval, in seconds,  between
++           the  Hello  packets  sent  to  an inactive non-
++           broadcast multi- access neighbor."
++       DEFVAL { 120 }
++       ::= { ospfIfEntry 11 }
++
++
++    ospfIfState OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    down (1),
++                    loopback (2),
++                    waiting (3),
++                    pointToPoint (4),
++                    designatedRouter (5),
++                    backupDesignatedRouter (6),
++                    otherDesignatedRouter (7)
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The OSPF Interface State."
++       DEFVAL { down }
++       ::= { ospfIfEntry 12 }
++
++
++    ospfIfDesignatedRouter OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP Address of the Designated Router."
++       DEFVAL   { '00000000'H }    -- 0.0.0.0
++       ::= { ospfIfEntry 13 }
++
++
++    ospfIfBackupDesignatedRouter OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The  IP  Address  of  the  Backup   Designated
++           Router."
++       DEFVAL   { '00000000'H }    -- 0.0.0.0
++       ::= { ospfIfEntry 14 }
++
++    ospfIfEvents OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of times this  OSPF  interface  has
++           changed its state, or an error has occurred."
++       ::= { ospfIfEntry 15 }
++
++
++    ospfIfAuthKey OBJECT-TYPE
++        SYNTAX   OCTET STRING (SIZE (0..256))
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The Authentication Key.  If the Area's Author-
++           ization  Type  is  simplePassword,  and the key
++           length is shorter than 8 octets, the agent will
++           left adjust and zero fill to 8 octets.
++
++           Note that unauthenticated  interfaces  need  no
++           authentication key, and simple password authen-
++           tication cannot use a key of more  than  8  oc-
++           tets.  Larger keys are useful only with authen-
++           tication mechanisms not specified in this docu-
++           ment.
++
++           When read, ospfIfAuthKey always returns an  Oc-
++           tet String of length zero."
++       REFERENCE
++          "OSPF Version 2, Section 9  The  Interface  Data
++          Structure"
++      DEFVAL   { '0000000000000000'H }    -- 0.0.0.0.0.0.0.0
++      ::= { ospfIfEntry 16 }
++
++    ospfIfStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfIfEntry 17 }
++
++
++    ospfIfMulticastForwarding OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                            blocked (1),        -- no multicast forwarding
++                            multicast (2),        -- using multicast address
++                            unicast (3)        -- to each OSPF neighbor
++                  }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The way multicasts should  forwarded  on  this
++           interface;  not  forwarded,  forwarded  as data
++           link multicasts, or forwarded as data link uni-
++           casts.   Data link multicasting is not meaning-
++           ful on point to point and NBMA interfaces,  and
++           setting ospfMulticastForwarding to 0 effective-
++           ly disables all multicast forwarding."
++       DEFVAL { blocked }
++       ::= { ospfIfEntry 18 }
++
++
++    ospfIfDemand OBJECT-TYPE
++        SYNTAX   TruthValue
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "Indicates whether Demand OSPF procedures (hel-
++           lo supression to FULL neighbors and setting the
++           DoNotAge flag on proogated LSAs) should be per-
++           formed on this interface."
++       DEFVAL { false }
++       ::= { ospfIfEntry 19 }
++
++
++    ospfIfAuthType OBJECT-TYPE
++        SYNTAX   INTEGER (0..255)
++                    -- none (0),
++                    -- simplePassword (1)
++                    -- md5 (2)
++                    -- reserved for specification by IANA (> 2)
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The authentication type specified for  an  in-
++           terface.   Additional  authentication types may
++           be assigned locally."
++       REFERENCE
++          "OSPF Version 2, Appendix E Authentication"
++      DEFVAL { 0 }        -- no authentication, by default
++      ::= { ospfIfEntry 20 }
++
++
++--  OSPF Interface Metric Table
++
++--      The Metric Table describes the metrics to be advertised
++--      for a specified interface at the various types of service.
++--      As such, this table is an adjunct of the OSPF Interface
++--      Table.
++
++-- Types of service, as defined by RFC 791, have the ability
++-- to request low delay, high bandwidth, or reliable linkage.
++
++-- For the purposes of this specification, the measure of
++-- bandwidth
++
++--      Metric = 10^8 / ifSpeed
++
++-- is the default value.  For multiple link interfaces, note
++-- that ifSpeed is the sum of the individual link speeds.
++-- This yields a number having the following typical values:
++
++--      Network Type/bit rate   Metric
++
++--      >= 100 MBPS                 1
++--      Ethernet/802.3             10
++--      E1                         48
++--      T1 (ESF)                   65
++--       64 KBPS                 1562
++--       56 KBPS                 1785
++--       19.2 KBPS               5208
++--        9.6 KBPS              10416
++
++-- Routes that are not specified use the default (TOS 0) metric
++
++    ospfIfMetricTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfIfMetricEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The TOS metrics for  a  non-virtual  interface
++           identified by the interface index."
++       REFERENCE
++          "OSPF Version 2, Appendix C.3  Router  interface
++          parameters"
++      ::= { ospf 8 }
++
++    ospfIfMetricEntry OBJECT-TYPE
++        SYNTAX   OspfIfMetricEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A particular TOS metric for a non-virtual  in-
++           terface identified by the interface index."
++       REFERENCE
++          "OSPF Version 2, Appendix C.3  Router  interface
++          parameters"
++      INDEX { ospfIfMetricIpAddress,
++  ospfIfMetricAddressLessIf,
++  ospfIfMetricTOS }
++      ::= { ospfIfMetricTable 1 }
++
++OspfIfMetricEntry ::=
++    SEQUENCE {
++        ospfIfMetricIpAddress
++            IpAddress,
++        ospfIfMetricAddressLessIf
++            Integer32,
++        ospfIfMetricTOS
++            TOSType,
++        ospfIfMetricValue
++            Metric,
++        ospfIfMetricStatus
++            RowStatus
++              }
++
++    ospfIfMetricIpAddress OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP address of this OSPF interface.  On row
++           creation,  this  can  be  derived  from the in-
++           stance."
++       ::= { ospfIfMetricEntry 1 }
++
++    ospfIfMetricAddressLessIf OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "For the purpose of easing  the  instancing  of
++           addressed   and  addressless  interfaces;  This
++           variable takes the value 0 on  interfaces  with
++           IP  Addresses, and the value of ifIndex for in-
++           terfaces having no IP Address.   On  row  crea-
++           tion, this can be derived from the instance."
++       ::= { ospfIfMetricEntry 2 }
++
++
++    ospfIfMetricTOS OBJECT-TYPE
++        SYNTAX   TOSType
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The type of service metric  being  referenced.
++           On  row  creation, this can be derived from the
++           instance."
++       ::= { ospfIfMetricEntry 3 }
++
++
++    ospfIfMetricValue OBJECT-TYPE
++        SYNTAX   Metric
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The metric of using this type  of  service  on
++           this interface.  The default value of the TOS 0
++           Metric is 10^8 / ifSpeed."
++       ::= { ospfIfMetricEntry 4 }
++
++    ospfIfMetricStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfIfMetricEntry 5 }
++
++
++--  OSPF Virtual Interface Table
++
++--      The Virtual Interface Table describes the virtual
++--      links that the OSPF Process is configured to
++--      carry on.
++
++    ospfVirtIfTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfVirtIfEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "Information about this router's virtual inter-
++           faces."
++       REFERENCE
++          "OSPF Version  2,  Appendix  C.4   Virtual  link
++          parameters"
++      ::= { ospf 9 }
++
++
++    ospfVirtIfEntry OBJECT-TYPE
++        SYNTAX   OspfVirtIfEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "Information about a single Virtual Interface."
++       INDEX { ospfVirtIfAreaId, ospfVirtIfNeighbor }
++       ::= { ospfVirtIfTable 1 }
++
++OspfVirtIfEntry ::=
++    SEQUENCE {
++        ospfVirtIfAreaId
++            AreaID,
++        ospfVirtIfNeighbor
++            RouterID,
++        ospfVirtIfTransitDelay
++            UpToMaxAge,
++        ospfVirtIfRetransInterval
++            UpToMaxAge,
++        ospfVirtIfHelloInterval
++            HelloRange,
++        ospfVirtIfRtrDeadInterval
++            PositiveInteger,
++        ospfVirtIfState
++            INTEGER,
++        ospfVirtIfEvents
++            Counter32,
++        ospfVirtIfAuthType
++            INTEGER,
++        ospfVirtIfAuthKey
++            OCTET STRING,
++        ospfVirtIfStatus
++            RowStatus
++              }
++
++    ospfVirtIfAreaId OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The  Transit  Area  that  the   Virtual   Link
++           traverses.  By definition, this is not 0.0.0.0"
++       ::= { ospfVirtIfEntry 1 }
++
++
++    ospfVirtIfNeighbor OBJECT-TYPE
++        SYNTAX   RouterID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Router ID of the Virtual Neighbor."
++       ::= { ospfVirtIfEntry 2 }
++
++
++    ospfVirtIfTransitDelay OBJECT-TYPE
++        SYNTAX   UpToMaxAge
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The estimated number of seconds  it  takes  to
++           transmit  a link- state update packet over this
++           interface."
++       DEFVAL { 1 }
++       ::= { ospfVirtIfEntry 3 }
++
++
++    ospfVirtIfRetransInterval OBJECT-TYPE
++        SYNTAX   UpToMaxAge
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The number of seconds between  link-state  ad-
++           vertisement  retransmissions,  for  adjacencies
++           belonging to this  interface.   This  value  is
++           also used when retransmitting database descrip-
++           tion  and  link-state  request  packets.   This
++           value  should  be well over the expected round-
++           trip time."
++       DEFVAL { 5 }
++       ::= { ospfVirtIfEntry 4 }
++
++
++    ospfVirtIfHelloInterval OBJECT-TYPE
++        SYNTAX   HelloRange
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The length of time, in  seconds,  between  the
++           Hello  packets that the router sends on the in-
++           terface.  This value must be the same  for  the
++           virtual neighbor."
++       DEFVAL { 10 }
++       ::= { ospfVirtIfEntry 5 }
++
++
++    ospfVirtIfRtrDeadInterval OBJECT-TYPE
++        SYNTAX   PositiveInteger
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The number of seconds that  a  router's  Hello
++           packets  have  not been seen before it's neigh-
++           bors declare the router down.  This  should  be
++           some  multiple  of  the  Hello  interval.  This
++           value must be the same for the  virtual  neigh-
++           bor."
++       DEFVAL { 60 }
++       ::= { ospfVirtIfEntry 6 }
++
++
++    ospfVirtIfState OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    down (1),            -- these use the same encoding
++                    pointToPoint (4)     -- as the ospfIfTable
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "OSPF virtual interface states."
++       DEFVAL   { down }
++       ::= { ospfVirtIfEntry 7 }
++
++
++    ospfVirtIfEvents OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of state changes or error events on
++           this Virtual Link"
++       ::= { ospfVirtIfEntry 8 }
++
++
++    ospfVirtIfAuthKey OBJECT-TYPE
++        SYNTAX   OCTET STRING (SIZE(0..256))
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "If Authentication Type is simplePassword,  the
++           device  will left adjust and zero fill to 8 oc-
++           tets.
++
++           Note that unauthenticated  interfaces  need  no
++           authentication key, and simple password authen-
++           tication cannot use a key of more  than  8  oc-
++           tets.  Larger keys are useful only with authen-
++           tication mechanisms not specified in this docu-
++           ment.
++
++           When  read,  ospfVifAuthKey  always  returns  a
++           string of length zero."
++       REFERENCE
++          "OSPF Version 2, Section 9  The  Interface  Data
++          Structure"
++      DEFVAL   { '0000000000000000'H }    -- 0.0.0.0.0.0.0.0
++      ::= { ospfVirtIfEntry 9 }
++
++
++    ospfVirtIfStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfVirtIfEntry 10 }
++
++
++    ospfVirtIfAuthType OBJECT-TYPE
++        SYNTAX   INTEGER (0..255)
++                    -- none (0),
++                    -- simplePassword (1)
++                    -- md5 (2)
++                    -- reserved for specification by IANA (> 2)
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The authentication type specified for a virtu-
++           al  interface.  Additional authentication types
++           may be assigned locally."
++       REFERENCE
++          "OSPF Version 2, Appendix E Authentication"
++      DEFVAL { 0 }        -- no authentication, by default
++      ::= { ospfVirtIfEntry 11 }
++
++
++--  OSPF Neighbor Table
++
++--      The OSPF Neighbor Table describes all neighbors in
++--      the locality of the subject router.
++
++    ospfNbrTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfNbrEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A table of non-virtual neighbor information."
++       REFERENCE
++          "OSPF Version 2, Section 10  The  Neighbor  Data
++          Structure"
++      ::= { ospf 10 }
++
++
++    ospfNbrEntry OBJECT-TYPE
++        SYNTAX   OspfNbrEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The information regarding a single neighbor."
++       REFERENCE
++          "OSPF Version 2, Section 10  The  Neighbor  Data
++          Structure"
++      INDEX { ospfNbrIpAddr, ospfNbrAddressLessIndex }
++      ::= { ospfNbrTable 1 }
++
++OspfNbrEntry ::=
++    SEQUENCE {
++        ospfNbrIpAddr
++            IpAddress,
++        ospfNbrAddressLessIndex
++            InterfaceIndex,
++        ospfNbrRtrId
++            RouterID,
++        ospfNbrOptions
++            Integer32,
++        ospfNbrPriority
++            DesignatedRouterPriority,
++        ospfNbrState
++            INTEGER,
++        ospfNbrEvents
++            Counter32,
++        ospfNbrLsRetransQLen
++            Gauge32,
++        ospfNbmaNbrStatus
++            RowStatus,
++        ospfNbmaNbrPermanence
++            INTEGER,
++        ospfNbrHelloSuppressed
++            TruthValue
++              }
++
++    ospfNbrIpAddr OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP address this neighbor is using  in  its
++           IP  Source  Address.  Note that, on addressless
++           links, this will not be 0.0.0.0,  but  the  ad-
++           dress of another of the neighbor's interfaces."
++       ::= { ospfNbrEntry 1 }
++
++
++    ospfNbrAddressLessIndex OBJECT-TYPE
++        SYNTAX   InterfaceIndex
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "On an interface having an  IP  Address,  zero.
++           On  addressless  interfaces,  the corresponding
++           value of ifIndex in the Internet Standard  MIB.
++           On  row  creation, this can be derived from the
++           instance."
++       ::= { ospfNbrEntry 2 }
++
++
++    ospfNbrRtrId OBJECT-TYPE
++        SYNTAX   RouterID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "A 32-bit integer (represented as a type  IpAd-
++           dress)  uniquely  identifying  the  neighboring
++           router in the Autonomous System."
++       DEFVAL   { '00000000'H }    -- 0.0.0.0
++       ::= { ospfNbrEntry 3 }
++
++
++    ospfNbrOptions OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "A Bit Mask corresponding to the neighbor's op-
++           tions field.
++
++           Bit 0, if set, indicates that the  system  will
++           operate  on  Type of Service metrics other than
++           TOS 0.  If zero, the neighbor will  ignore  all
++           metrics except the TOS 0 metric.
++
++           Bit 1, if set, indicates  that  the  associated
++           area  accepts and operates on external informa-
++           tion; if zero, it is a stub area.
++
++           Bit 2, if set, indicates that the system is ca-
++           pable  of routing IP Multicast datagrams; i.e.,
++           that it implements the Multicast Extensions  to
++           OSPF.
++
++           Bit 3, if set, indicates  that  the  associated
++           area  is  an  NSSA.  These areas are capable of
++           carrying type 7 external advertisements,  which
++           are  translated into type 5 external advertise-
++           ments at NSSA borders."
++       REFERENCE
++          "OSPF Version 2, Section 12.1.2 Options"
++      DEFVAL { 0 }
++      ::= { ospfNbrEntry 4 }
++
++
++    ospfNbrPriority OBJECT-TYPE
++        SYNTAX   DesignatedRouterPriority
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The priority of this neighbor in the designat-
++           ed router election algorithm.  The value 0 sig-
++           nifies that the neighbor is not eligible to be-
++           come  the  designated router on this particular
++           network."
++       DEFVAL { 1 }
++       ::= { ospfNbrEntry 5 }
++
++
++    ospfNbrState OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    down (1),
++                    attempt (2),
++                    init (3),
++                    twoWay (4),
++                    exchangeStart (5),
++                    exchange (6),
++                    loading (7),
++                    full (8)
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The State of the relationship with this Neigh-
++           bor."
++       REFERENCE
++          "OSPF Version 2, Section 10.1 Neighbor States"
++      DEFVAL   { down }
++      ::= { ospfNbrEntry 6 }
++
++
++    ospfNbrEvents OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of times this neighbor relationship
++           has changed state, or an error has occurred."
++       ::= { ospfNbrEntry 7 }
++
++
++    ospfNbrLsRetransQLen OBJECT-TYPE
++        SYNTAX   Gauge32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The  current  length  of  the   retransmission
++           queue."
++       ::= { ospfNbrEntry 8 }
++
++
++    ospfNbmaNbrStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfNbrEntry 9 }
++
++
++    ospfNbmaNbrPermanence OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    dynamic (1),        -- learned through protocol
++                    permanent (2)       -- configured address
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.   'dynamic'  and  'permanent' refer to how
++           the neighbor became known."
++       DEFVAL { permanent }
++       ::= { ospfNbrEntry 10 }
++
++
++    ospfNbrHelloSuppressed OBJECT-TYPE
++        SYNTAX   TruthValue
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "Indicates whether Hellos are being  suppressed
++           to the neighbor"
++       ::= { ospfNbrEntry 11 }
++
++
++--  OSPF Virtual Neighbor Table
++
++--      This table describes all virtual neighbors.
++--      Since Virtual Links are configured in the
++--      virtual interface table, this table is read-only.
++
++    ospfVirtNbrTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfVirtNbrEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A table of virtual neighbor information."
++       REFERENCE
++          "OSPF Version 2, Section 15  Virtual Links"
++      ::= { ospf 11 }
++
++
++    ospfVirtNbrEntry OBJECT-TYPE
++        SYNTAX   OspfVirtNbrEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "Virtual neighbor information."
++       INDEX { ospfVirtNbrArea, ospfVirtNbrRtrId }
++       ::= { ospfVirtNbrTable 1 }
++
++OspfVirtNbrEntry ::=
++    SEQUENCE {
++        ospfVirtNbrArea
++            AreaID,
++        ospfVirtNbrRtrId
++            RouterID,
++        ospfVirtNbrIpAddr
++            IpAddress,
++        ospfVirtNbrOptions
++            Integer32,
++        ospfVirtNbrState
++            INTEGER,
++        ospfVirtNbrEvents
++            Counter32,
++        ospfVirtNbrLsRetransQLen
++            Gauge32,
++        ospfVirtNbrHelloSuppressed
++                TruthValue
++              }
++
++    ospfVirtNbrArea OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Transit Area Identifier."
++       ::= { ospfVirtNbrEntry 1 }
++
++
++    ospfVirtNbrRtrId OBJECT-TYPE
++        SYNTAX   RouterID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "A  32-bit  integer  uniquely  identifying  the
++           neighboring router in the Autonomous System."
++       ::= { ospfVirtNbrEntry 2 }
++
++
++    ospfVirtNbrIpAddr OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP address this Virtual  Neighbor  is  us-
++           ing."
++       ::= { ospfVirtNbrEntry 3 }
++
++
++    ospfVirtNbrOptions OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "A Bit Mask corresponding to the neighbor's op-
++           tions field.
++
++           Bit 1, if set, indicates that the  system  will
++           operate  on  Type of Service metrics other than
++           TOS 0.  If zero, the neighbor will  ignore  all
++           metrics except the TOS 0 metric.
++
++           Bit 2, if set, indicates  that  the  system  is
++           Network  Multicast  capable; ie, that it imple-
++           ments OSPF Multicast Routing."
++       ::= { ospfVirtNbrEntry 4 }
++    ospfVirtNbrState OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    down (1),
++                    attempt (2),
++                    init (3),
++                    twoWay (4),
++                    exchangeStart (5),
++                    exchange (6),
++                    loading (7),
++                    full (8)
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The state of the  Virtual  Neighbor  Relation-
++           ship."
++       ::= { ospfVirtNbrEntry 5 }
++
++
++    ospfVirtNbrEvents OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of  times  this  virtual  link  has
++           changed its state, or an error has occurred."
++       ::= { ospfVirtNbrEntry 6 }
++
++
++    ospfVirtNbrLsRetransQLen OBJECT-TYPE
++        SYNTAX   Gauge32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The  current  length  of  the   retransmission
++           queue."
++       ::= { ospfVirtNbrEntry 7 }
++
++
++    ospfVirtNbrHelloSuppressed OBJECT-TYPE
++        SYNTAX   TruthValue
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "Indicates whether Hellos are being  suppressed
++           to the neighbor"
++       ::= { ospfVirtNbrEntry 8 }
++
++--  OSPF Link State Database, External
++
++--      The Link State Database contains the Link State
++--      Advertisements from throughout the areas that the
++--      device is attached to.
++
++--             This table is identical to the OSPF LSDB Table in
++--      format, but contains only External Link State
++--             Advertisements.  The purpose is to allow external
++--      LSAs to be displayed once for the router rather
++--      than once in each non-stub area.
++
++    ospfExtLsdbTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfExtLsdbEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "The OSPF Process's Links State Database."
++       REFERENCE
++          "OSPF Version 2, Section 12  Link  State  Adver-
++          tisements"
++      ::= { ospf 12 }
++
++
++    ospfExtLsdbEntry OBJECT-TYPE
++        SYNTAX   OspfExtLsdbEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A single Link State Advertisement."
++       INDEX { ospfExtLsdbType, ospfExtLsdbLsid, ospfExtLsdbRouterId }
++       ::= { ospfExtLsdbTable 1 }
++
++OspfExtLsdbEntry ::=
++    SEQUENCE {
++        ospfExtLsdbType
++            INTEGER,
++        ospfExtLsdbLsid
++            IpAddress,
++        ospfExtLsdbRouterId
++            RouterID,
++        ospfExtLsdbSequence
++            Integer32,
++        ospfExtLsdbAge
++            Integer32,
++        ospfExtLsdbChecksum
++            Integer32,
++        ospfExtLsdbAdvertisement
++            OCTET STRING
++              }
++
++    ospfExtLsdbType OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    asExternalLink (5)
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The type  of  the  link  state  advertisement.
++           Each  link state type has a separate advertise-
++           ment format."
++       REFERENCE
++          "OSPF Version 2, Appendix A.4.1 The  Link  State
++          Advertisement header"
++      ::= { ospfExtLsdbEntry 1 }
++
++
++    ospfExtLsdbLsid OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Link State ID is an LS Type Specific field
++           containing either a Router ID or an IP Address;
++           it identifies the piece of the  routing  domain
++           that is being described by the advertisement."
++       REFERENCE
++          "OSPF Version 2, Section 12.1.4 Link State ID"
++      ::= { ospfExtLsdbEntry 2 }
++
++
++    ospfExtLsdbRouterId OBJECT-TYPE
++        SYNTAX   RouterID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The 32 bit number that uniquely identifies the
++           originating router in the Autonomous System."
++       REFERENCE
++          "OSPF Version 2, Appendix C.1 Global parameters"
++      ::= { ospfExtLsdbEntry 3 }
++
++--  Note that the OSPF Sequence Number is a 32 bit signed
++--  integer.  It starts with the value '80000001'h,
++--  or -'7FFFFFFF'h, and increments until '7FFFFFFF'h
++--  Thus, a typical sequence number will be very negative.
++    ospfExtLsdbSequence OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The sequence number field is a  signed  32-bit
++           integer.   It  is used to detect old and dupli-
++           cate link state advertisements.  The  space  of
++           sequence  numbers  is  linearly  ordered.   The
++           larger the sequence number the more recent  the
++           advertisement."
++       REFERENCE
++          "OSPF Version  2,  Section  12.1.6  LS  sequence
++          number"
++      ::= { ospfExtLsdbEntry 4 }
++
++
++    ospfExtLsdbAge OBJECT-TYPE
++        SYNTAX   Integer32    -- Should be 0..MaxAge
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "This field is the age of the link state adver-
++           tisement in seconds."
++       REFERENCE
++          "OSPF Version 2, Section 12.1.1 LS age"
++      ::= { ospfExtLsdbEntry 5 }
++
++
++    ospfExtLsdbChecksum OBJECT-TYPE
++        SYNTAX   Integer32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "This field is the  checksum  of  the  complete
++           contents  of  the  advertisement, excepting the
++           age field.  The age field is excepted  so  that
++           an   advertisement's  age  can  be  incremented
++           without updating the  checksum.   The  checksum
++           used  is  the same that is used for ISO connec-
++           tionless datagrams; it is commonly referred  to
++           as the Fletcher checksum."
++       REFERENCE
++          "OSPF Version 2, Section 12.1.7 LS checksum"
++      ::= { ospfExtLsdbEntry 6 }
++
++
++    ospfExtLsdbAdvertisement OBJECT-TYPE
++        SYNTAX   OCTET STRING (SIZE(36))
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The entire Link State Advertisement, including
++           its header."
++       REFERENCE
++          "OSPF Version 2, Section 12  Link  State  Adver-
++          tisements"
++      ::= { ospfExtLsdbEntry 7 }
++
++
++--  OSPF Use of the CIDR Route Table
++
++ospfRouteGroup           OBJECT IDENTIFIER ::= { ospf 13 }
++
++-- The IP Forwarding Table defines a number of objects for use by
++-- the routing protocol to externalize its information.  Most of
++-- the variables (ipForwardDest, ipForwardMask, ipForwardPolicy,
++-- ipForwardNextHop, ipForwardIfIndex, ipForwardType,
++-- ipForwardProto, ipForwardAge, and ipForwardNextHopAS) are
++-- defined there.
++
++-- Those that leave some discretion are defined here.
++
++-- ipCidrRouteProto is, of course, ospf (13).
++
++-- ipCidrRouteAge is the time since the route was first calculated,
++-- as opposed to the time since the last SPF run.
++
++-- ipCidrRouteInfo is an OBJECT IDENTIFIER for use by the routing
++-- protocol.  The following values shall be found there depending
++-- on the way the route was calculated.
++
++ospfIntraArea      OBJECT IDENTIFIER ::= { ospfRouteGroup 1 }
++ospfInterArea      OBJECT IDENTIFIER ::= { ospfRouteGroup 2 }
++ospfExternalType1  OBJECT IDENTIFIER ::= { ospfRouteGroup 3 }
++ospfExternalType2  OBJECT IDENTIFIER ::= { ospfRouteGroup 4 }
++
++-- ipCidrRouteMetric1 is, by definition, the primary routing
++-- metric.  Therefore, it should be the metric that route
++-- selection is based on.  For intra-area and inter-area routes,
++-- it is an OSPF metric.  For External Type 1 (comparable value)
++-- routes, it is an OSPF metric plus the External Metric.  For
++-- external Type 2 (non-comparable value) routes, it is the
++-- external metric.
++
++-- ipCidrRouteMetric2 is, by definition, a secondary routing
++-- metric.  Therefore, it should be the metric that breaks a tie
++-- among routes having equal metric1 values and the same
++-- calculation rule.  For intra-area, inter-area routes, and
++-- External Type 1 (comparable value) routes, it is unused.  For
++-- external Type 2 (non-comparable value) routes, it is the metric
++-- to the AS border router.
++
++-- ipCidrRouteMetric3, ipCidrRouteMetric4, and ipCidrRouteMetric5 are
++-- unused.
++
++--
++--      The OSPF Area Aggregate Table
++--
++--      This table replaces the OSPF Area Summary Table, being an
++--      extension of that for CIDR routers.
++
++    ospfAreaAggregateTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF OspfAreaAggregateEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A range of IP addresses  specified  by  an  IP
++           address/IP  network  mask  pair.   For example,
++           class B address range of X.X.X.X with a network
++           mask  of  255.255.0.0 includes all IP addresses
++           from X.X.0.0  to  X.X.255.255.   Note  that  if
++           ranges  are configured such that one range sub-
++           sumes  another  range  (e.g.,   10.0.0.0   mask
++           255.0.0.0  and  10.1.0.0 mask 255.255.0.0), the
++           most specific match is the preferred one."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2  Area parameters"
++      ::= { ospf 14 }
++
++
++    ospfAreaAggregateEntry OBJECT-TYPE
++        SYNTAX   OspfAreaAggregateEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A range of IP addresses  specified  by  an  IP
++           address/IP  network  mask  pair.   For example,
++           class B address range of X.X.X.X with a network
++           mask  of  255.255.0.0 includes all IP addresses
++           from X.X.0.0  to  X.X.255.255.   Note  that  if
++           ranges are range configured such that one range
++           subsumes another  range  (e.g.,  10.0.0.0  mask
++           255.0.0.0  and  10.1.0.0 mask 255.255.0.0), the
++           most specific match is the preferred one."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2  Area parameters"
++      INDEX { ospfAreaAggregateAreaID, ospfAreaAggregateLsdbType,
++              ospfAreaAggregateNet, ospfAreaAggregateMask }
++      ::= { ospfAreaAggregateTable 1 }
++
++
++OspfAreaAggregateEntry ::=
++    SEQUENCE {
++        ospfAreaAggregateAreaID
++            AreaID,
++        ospfAreaAggregateLsdbType
++            INTEGER,
++        ospfAreaAggregateNet
++            IpAddress,
++        ospfAreaAggregateMask
++            IpAddress,
++        ospfAreaAggregateStatus
++            RowStatus,
++        ospfAreaAggregateEffect
++            INTEGER
++              }
++
++    ospfAreaAggregateAreaID OBJECT-TYPE
++        SYNTAX   AreaID
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Area the Address Aggregate is to be  found
++           within."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfAreaAggregateEntry 1 }
++
++
++    ospfAreaAggregateLsdbType OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    summaryLink (3),
++                    nssaExternalLink (7)
++                  }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The type of the Address Aggregate.  This field
++           specifies  the  Lsdb type that this Address Ag-
++           gregate applies to."
++       REFERENCE
++          "OSPF Version 2, Appendix A.4.1 The  Link  State
++          Advertisement header"
++      ::= { ospfAreaAggregateEntry 2 }
++
++
++    ospfAreaAggregateNet OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP Address of the Net or Subnet  indicated
++           by the range."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfAreaAggregateEntry 3 }
++
++
++    ospfAreaAggregateMask OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The Subnet Mask that pertains to  the  Net  or
++           Subnet."
++       REFERENCE
++          "OSPF Version 2, Appendix C.2 Area parameters"
++      ::= { ospfAreaAggregateEntry 4 }
++
++
++    ospfAreaAggregateStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable displays the status of  the  en-
++           try.  Setting it to 'invalid' has the effect of
++           rendering it inoperative.  The internal  effect
++           (row removal) is implementation dependent."
++       ::= { ospfAreaAggregateEntry 5 }
++
++
++    ospfAreaAggregateEffect OBJECT-TYPE
++        SYNTAX   INTEGER    {
++                    advertiseMatching (1),
++                    doNotAdvertiseMatching (2)
++                  }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "Subnets subsumed by ranges either trigger  the
++           advertisement  of  the indicated aggregate (ad-
++           vertiseMatching), or result in the subnet's not
++           being advertised at all outside the area."
++       DEFVAL   { advertiseMatching }
++       ::= { ospfAreaAggregateEntry 6 }
++
++
++-- conformance information
++
++ospfConformance OBJECT IDENTIFIER ::= { ospf 15 }
++
++ospfGroups      OBJECT IDENTIFIER ::= { ospfConformance 1 }
++ospfCompliances OBJECT IDENTIFIER ::= { ospfConformance 2 }
++
++-- compliance statements
++
++    ospfCompliance MODULE-COMPLIANCE
++        STATUS  current
++        DESCRIPTION
++           "The compliance statement "
++       MODULE  -- this module
++       MANDATORY-GROUPS {
++                    ospfBasicGroup,
++                    ospfAreaGroup,
++                    ospfStubAreaGroup,
++                    ospfIfGroup,
++                    ospfIfMetricGroup,
++                    ospfVirtIfGroup,
++                    ospfNbrGroup,
++                    ospfVirtNbrGroup,
++                    ospfAreaAggregateGroup
++           }
++       ::= { ospfCompliances 1 }
++
++
++-- units of conformance
++
++    ospfBasicGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfRouterId,
++                    ospfAdminStat,
++                    ospfVersionNumber,
++                    ospfAreaBdrRtrStatus,
++                    ospfASBdrRtrStatus,
++                    ospfExternLsaCount,
++                    ospfExternLsaCksumSum,
++                    ospfTOSSupport,
++                    ospfOriginateNewLsas,
++                    ospfRxNewLsas,
++                    ospfExtLsdbLimit,
++                    ospfMulticastExtensions,
++                    ospfExitOverflowInterval,
++                    ospfDemandExtensions
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required for OSPF systems."
++       ::= { ospfGroups 1 }
++
++
++    ospfAreaGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfAreaId,
++                    ospfImportAsExtern,
++                    ospfSpfRuns,
++                    ospfAreaBdrRtrCount,
++                    ospfAsBdrRtrCount,
++                    ospfAreaLsaCount,
++                    ospfAreaLsaCksumSum,
++                    ospfAreaSummary,
++                    ospfAreaStatus
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required  for  OSPF  systems
++           supporting areas."
++       ::= { ospfGroups 2 }
++
++
++    ospfStubAreaGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfStubAreaId,
++                    ospfStubTOS,
++                    ospfStubMetric,
++                    ospfStubStatus,
++                    ospfStubMetricType
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required  for  OSPF  systems
++           supporting stub areas."
++       ::= { ospfGroups 3 }
++
++
++    ospfLsdbGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfLsdbAreaId,
++                    ospfLsdbType,
++                    ospfLsdbLsid,
++                    ospfLsdbRouterId,
++                    ospfLsdbSequence,
++                    ospfLsdbAge,
++                    ospfLsdbChecksum,
++                    ospfLsdbAdvertisement
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required  for  OSPF  systems
++           that display their link state database."
++       ::= { ospfGroups 4 }
++
++
++    ospfAreaRangeGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfAreaRangeAreaId,
++                    ospfAreaRangeNet,
++                    ospfAreaRangeMask,
++                    ospfAreaRangeStatus,
++                    ospfAreaRangeEffect
++        }
++        STATUS  obsolete
++        DESCRIPTION
++           "These objects are required for  non-CIDR  OSPF
++           systems that support multiple areas."
++       ::= { ospfGroups 5 }
++
++
++    ospfHostGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfHostIpAddress,
++                    ospfHostTOS,
++                    ospfHostMetric,
++                    ospfHostStatus,
++                    ospfHostAreaID
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required  for  OSPF  systems
++           that support attached hosts."
++       ::= { ospfGroups 6 }
++
++
++    ospfIfGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfIfIpAddress,
++                    ospfAddressLessIf,
++                    ospfIfAreaId,
++                    ospfIfType,
++                    ospfIfAdminStat,
++                    ospfIfRtrPriority,
++                    ospfIfTransitDelay,
++                    ospfIfRetransInterval,
++                    ospfIfHelloInterval,
++                    ospfIfRtrDeadInterval,
++                    ospfIfPollInterval,
++                    ospfIfState,
++                    ospfIfDesignatedRouter,
++                    ospfIfBackupDesignatedRouter,
++                    ospfIfEvents,
++                    ospfIfAuthType,
++                    ospfIfAuthKey,
++                    ospfIfStatus,
++                    ospfIfMulticastForwarding,
++                    ospfIfDemand
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required for OSPF systems."
++       ::= { ospfGroups 7 }
++
++
++    ospfIfMetricGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfIfMetricIpAddress,
++                    ospfIfMetricAddressLessIf,
++                    ospfIfMetricTOS,
++                    ospfIfMetricValue,
++                    ospfIfMetricStatus
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required for OSPF systems."
++       ::= { ospfGroups 8 }
++
++
++    ospfVirtIfGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfVirtIfAreaId,
++                    ospfVirtIfNeighbor,
++                    ospfVirtIfTransitDelay,
++                    ospfVirtIfRetransInterval,
++                    ospfVirtIfHelloInterval,
++                    ospfVirtIfRtrDeadInterval,
++                    ospfVirtIfState,
++                    ospfVirtIfEvents,
++                    ospfVirtIfAuthType,
++                    ospfVirtIfAuthKey,
++                    ospfVirtIfStatus
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required for OSPF systems."
++       ::= { ospfGroups 9 }
++
++
++    ospfNbrGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfNbrIpAddr,
++                    ospfNbrAddressLessIndex,
++                    ospfNbrRtrId,
++                    ospfNbrOptions,
++                    ospfNbrPriority,
++                    ospfNbrState,
++                    ospfNbrEvents,
++                    ospfNbrLsRetransQLen,
++                    ospfNbmaNbrStatus,
++                    ospfNbmaNbrPermanence,
++                    ospfNbrHelloSuppressed
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required for OSPF systems."
++       ::= { ospfGroups 10 }
++
++
++    ospfVirtNbrGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfVirtNbrArea,
++                    ospfVirtNbrRtrId,
++                    ospfVirtNbrIpAddr,
++                    ospfVirtNbrOptions,
++                    ospfVirtNbrState,
++                    ospfVirtNbrEvents,
++                    ospfVirtNbrLsRetransQLen,
++                    ospfVirtNbrHelloSuppressed
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required for OSPF systems."
++       ::= { ospfGroups 11 }
++
++
++    ospfExtLsdbGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfExtLsdbType,
++                    ospfExtLsdbLsid,
++                    ospfExtLsdbRouterId,
++                    ospfExtLsdbSequence,
++                    ospfExtLsdbAge,
++                    ospfExtLsdbChecksum,
++                    ospfExtLsdbAdvertisement
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required  for  OSPF  systems
++           that display their link state database."
++       ::= { ospfGroups 12 }
++
++
++    ospfAreaAggregateGroup    OBJECT-GROUP
++        OBJECTS {
++                    ospfAreaAggregateAreaID,
++                    ospfAreaAggregateLsdbType,
++                    ospfAreaAggregateNet,
++                    ospfAreaAggregateMask,
++                    ospfAreaAggregateStatus,
++                    ospfAreaAggregateEffect
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required for OSPF systems."
++       ::= { ospfGroups 13 }
++
++END
+--- /dev/null
++++ b/mibs/OSPF-TRAP-MIB.txt
+@@ -0,0 +1,443 @@
++OSPF-TRAP-MIB DEFINITIONS ::= BEGIN
++
++    IMPORTS
++            MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE, IpAddress
++                FROM SNMPv2-SMI
++            MODULE-COMPLIANCE, OBJECT-GROUP
++                FROM SNMPv2-CONF
++            ospfRouterId, ospfIfIpAddress, ospfAddressLessIf, ospfIfState,
++            ospfVirtIfAreaId, ospfVirtIfNeighbor, ospfVirtIfState,
++            ospfNbrIpAddr, ospfNbrAddressLessIndex, ospfNbrRtrId,
++            ospfNbrState, ospfVirtNbrArea, ospfVirtNbrRtrId, ospfVirtNbrState,
++            ospfLsdbType, ospfLsdbLsid, ospfLsdbRouterId, ospfLsdbAreaId,
++            ospfExtLsdbLimit, ospf
++                FROM OSPF-MIB;
++
++    ospfTrap MODULE-IDENTITY
++           LAST-UPDATED "9501201225Z" -- Fri Jan 20 12:25:50 PST 1995
++           ORGANIZATION "IETF OSPF Working Group"
++           CONTACT-INFO
++           "                      Fred Baker
++           Postal:                Cisco Systems
++                                  519 Lado Drive
++                                  Santa Barbara, California 93111
++           Tel:                   +1 805 681 0115
++           E-Mail:                fred@cisco.com
++
++                                  Rob Coltun
++           Postal:                RainbowBridge Communications
++           Tel:                   (301) 340-9416
++           E-Mail:                rcoltun@rainbow-bridge.com"
++       DESCRIPTION
++          "The MIB module to describe traps for  the  OSPF
++          Version 2 Protocol."
++      ::= { ospf 16 }
++
++-- Trap Support Objects
++
++--         The following are support objects for the OSPF traps.
++
++ospfTrapControl OBJECT IDENTIFIER ::= { ospfTrap 1 }
++ospfTraps OBJECT IDENTIFIER ::= { ospfTrap 2 }
++
++    ospfSetTrap OBJECT-TYPE
++        SYNTAX   OCTET STRING (SIZE(4))
++        MAX-ACCESS   read-write
++        STATUS   current
++        DESCRIPTION
++           "A four-octet string serving as a bit  map  for
++           the trap events defined by the OSPF traps. This
++           object is used to enable and  disable  specific
++           OSPF   traps   where  a  1  in  the  bit  field
++           represents enabled.  The right-most bit  (least
++           significant) represents trap 0."
++       ::= { ospfTrapControl 1 }
++
++
++    ospfConfigErrorType OBJECT-TYPE
++        SYNTAX   INTEGER   {
++                    badVersion (1),
++                    areaMismatch (2),
++                    unknownNbmaNbr (3), -- Router is Dr eligible
++                    unknownVirtualNbr (4),
++                    authTypeMismatch(5),
++                    authFailure (6),
++                    netMaskMismatch (7),
++                    helloIntervalMismatch (8),
++                    deadIntervalMismatch (9),
++                    optionMismatch (10) }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "Potential types  of  configuration  conflicts.
++           Used  by the ospfConfigError and ospfConfigVir-
++           tError traps."
++   ::= { ospfTrapControl 2 }
++
++
++    ospfPacketType OBJECT-TYPE
++        SYNTAX   INTEGER   {
++                    hello (1),
++                    dbDescript (2),
++                    lsReq (3),
++                    lsUpdate (4),
++                    lsAck (5) }
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "OSPF packet types."
++   ::= { ospfTrapControl 3 }
++
++
++    ospfPacketSrc OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP address of an inbound packet that  can-
++           not be identified by a neighbor instance."
++       ::= { ospfTrapControl 4 }
++
++
++-- Traps
++
++
++    ospfIfStateChange NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfIfIpAddress,
++                    ospfAddressLessIf,
++                    ospfIfState   -- The new state
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfIfStateChange trap signifies that there
++           has been a change in the state of a non-virtual
++           OSPF interface. This trap should  be  generated
++           when  the interface state regresses (e.g., goes
++           from Dr to Down) or progresses  to  a  terminal
++           state  (i.e.,  Point-to-Point, DR Other, Dr, or
++           Backup)."
++   ::= { ospfTraps 16 }
++
++
++    ospfVirtIfStateChange NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfVirtIfAreaId,
++                    ospfVirtIfNeighbor,
++                    ospfVirtIfState  -- The new state
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfIfStateChange trap signifies that there
++           has  been a change in the state of an OSPF vir-
++           tual interface.
++           This trap should be generated when  the  inter-
++           face  state  regresses  (e.g., goes from Point-
++           to-Point to Down) or progresses to  a  terminal
++           state (i.e., Point-to-Point)."
++   ::= { ospfTraps 1 }
++
++
++    ospfNbrStateChange NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfNbrIpAddr,
++                    ospfNbrAddressLessIndex,
++                    ospfNbrRtrId,
++                    ospfNbrState  -- The new state
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An  ospfNbrStateChange  trap  signifies   that
++           there  has been a change in the state of a non-
++           virtual OSPF neighbor.   This  trap  should  be
++           generated  when  the  neighbor  state regresses
++           (e.g., goes from Attempt or Full  to  1-Way  or
++           Down)  or progresses to a terminal state (e.g.,
++           2-Way or Full).  When an  neighbor  transitions
++           from  or  to Full on non-broadcast multi-access
++           and broadcast networks, the trap should be gen-
++           erated  by the designated router.  A designated
++           router transitioning to Down will be  noted  by
++           ospfIfStateChange."
++   ::= { ospfTraps 2 }
++
++
++    ospfVirtNbrStateChange NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfVirtNbrArea,
++                    ospfVirtNbrRtrId,
++                    ospfVirtNbrState  -- The new state
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfIfStateChange trap signifies that there
++           has  been a change in the state of an OSPF vir-
++           tual neighbor.  This trap should  be  generated
++           when  the  neighbor state regresses (e.g., goes
++           from Attempt or  Full  to  1-Way  or  Down)  or
++           progresses to a terminal state (e.g., Full)."
++   ::= { ospfTraps 3 }
++    ospfIfConfigError NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfIfIpAddress,
++                    ospfAddressLessIf,
++                    ospfPacketSrc,  -- The source IP address
++                    ospfConfigErrorType, -- Type of error
++                    ospfPacketType
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfIfConfigError  trap  signifies  that  a
++           packet  has  been received on a non-virtual in-
++           terface  from  a  router  whose   configuration
++           parameters  conflict  with this router's confi-
++           guration parameters.  Note that the  event  op-
++           tionMismatch  should  cause  a  trap only if it
++           prevents an adjacency from forming."
++                  ::= { ospfTraps 4 }
++
++
++    ospfVirtIfConfigError NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfVirtIfAreaId,
++                    ospfVirtIfNeighbor,
++                    ospfConfigErrorType, -- Type of error
++                    ospfPacketType
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfConfigError trap signifies that a pack-
++           et  has  been  received  on a virtual interface
++           from a router  whose  configuration  parameters
++           conflict   with   this  router's  configuration
++           parameters.  Note that the event optionMismatch
++           should  cause a trap only if it prevents an ad-
++           jacency from forming."
++   ::= { ospfTraps 5 }
++
++
++    ospfIfAuthFailure NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfIfIpAddress,
++                    ospfAddressLessIf,
++                    ospfPacketSrc,  -- The source IP address
++                    ospfConfigErrorType, -- authTypeMismatch or
++                                         -- authFailure
++                    ospfPacketType
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfIfAuthFailure  trap  signifies  that  a
++           packet  has  been received on a non-virtual in-
++           terface from a router whose authentication  key
++           or  authentication  type  conflicts  with  this
++           router's authentication key  or  authentication
++           type."
++   ::= { ospfTraps 6 }
++
++
++    ospfVirtIfAuthFailure NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfVirtIfAreaId,
++                    ospfVirtIfNeighbor,
++                    ospfConfigErrorType, -- authTypeMismatch or
++                                         -- authFailure
++                    ospfPacketType
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfVirtIfAuthFailure trap signifies that a
++           packet has been received on a virtual interface
++           from a router whose authentication key  or  au-
++           thentication  type conflicts with this router's
++           authentication key or authentication type."
++   ::= { ospfTraps 7 }
++
++
++    ospfIfRxBadPacket NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfIfIpAddress,
++                    ospfAddressLessIf,
++                    ospfPacketSrc,  -- The source IP address
++                    ospfPacketType
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfIfRxBadPacket trap  signifies  that  an
++           OSPF  packet has been received on a non-virtual
++           interface that cannot be parsed."
++   ::= { ospfTraps 8 }
++
++    ospfVirtIfRxBadPacket NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfVirtIfAreaId,
++                    ospfVirtIfNeighbor,
++                    ospfPacketType
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfRxBadPacket trap signifies that an OSPF
++           packet has been received on a virtual interface
++           that cannot be parsed."
++   ::= { ospfTraps 9 }
++
++
++    ospfTxRetransmit NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfIfIpAddress,
++                    ospfAddressLessIf,
++                    ospfNbrRtrId, -- Destination
++                    ospfPacketType,
++                    ospfLsdbType,
++                    ospfLsdbLsid,
++                    ospfLsdbRouterId
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfTxRetransmit  trap  signifies  than  an
++           OSPF  packet  has  been retransmitted on a non-
++           virtual interface.  All packets that may be re-
++           transmitted  are associated with an LSDB entry.
++           The LS type, LS ID, and Router ID are  used  to
++           identify the LSDB entry."
++   ::= { ospfTraps 10 }
++
++
++    ospfVirtIfTxRetransmit NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfVirtIfAreaId,
++                    ospfVirtIfNeighbor,
++                    ospfPacketType,
++                    ospfLsdbType,
++                    ospfLsdbLsid,
++                    ospfLsdbRouterId
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfTxRetransmit  trap  signifies  than  an
++           OSPF packet has been retransmitted on a virtual
++           interface.  All packets that may be retransmit-
++           ted  are  associated with an LSDB entry. The LS
++           type, LS ID, and Router ID are used to identify
++           the LSDB entry."
++   ::= { ospfTraps 11 }
++
++
++    ospfOriginateLsa NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfLsdbAreaId,  -- 0.0.0.0 for AS Externals
++                    ospfLsdbType,
++                    ospfLsdbLsid,
++                    ospfLsdbRouterId
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfOriginateLsa trap signifies that a  new
++           LSA  has  been originated by this router.  This
++           trap should not be invoked for simple refreshes
++           of  LSAs  (which happesn every 30 minutes), but
++           instead will only be invoked  when  an  LSA  is
++           (re)originated due to a topology change.  Addi-
++           tionally, this trap does not include LSAs  that
++           are  being  flushed  because  they have reached
++           MaxAge."
++   ::= { ospfTraps 12 }
++
++
++    ospfMaxAgeLsa NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfLsdbAreaId,  -- 0.0.0.0 for AS Externals
++                    ospfLsdbType,
++                    ospfLsdbLsid,
++                    ospfLsdbRouterId
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfMaxAgeLsa trap signifies  that  one  of
++           the LSA in the router's link-state database has
++           aged to MaxAge."
++   ::= { ospfTraps 13 }
++
++
++    ospfLsdbOverflow NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfExtLsdbLimit
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfLsdbOverflow trap  signifies  that  the
++           number of LSAs in the router's link-state data-
++           base has exceeded ospfExtLsdbLimit."
++   ::= { ospfTraps 14 }
++
++
++    ospfLsdbApproachingOverflow NOTIFICATION-TYPE
++        OBJECTS {
++                    ospfRouterId, -- The originator of the trap
++                    ospfExtLsdbLimit
++                  }
++        STATUS             current
++        DESCRIPTION
++           "An ospfLsdbApproachingOverflow trap  signifies
++           that  the  number of LSAs in the router's link-
++           state database has exceeded ninety  percent  of
++           ospfExtLsdbLimit."
++   ::= { ospfTraps 15 }
++
++
++-- conformance information
++
++ospfTrapConformance OBJECT IDENTIFIER ::= { ospfTrap 3 }
++
++ospfTrapGroups      OBJECT IDENTIFIER ::= { ospfTrapConformance 1 }
++ospfTrapCompliances OBJECT IDENTIFIER ::= { ospfTrapConformance 2 }
++
++-- compliance statements
++
++    ospfTrapCompliance MODULE-COMPLIANCE
++        STATUS  current
++        DESCRIPTION
++           "The compliance statement "
++       MODULE  -- this module
++       MANDATORY-GROUPS { ospfTrapControlGroup }
++
++
++        GROUP       ospfTrapControlGroup
++        DESCRIPTION
++           "This group is optional but recommended for all
++           OSPF systems"
++       ::= { ospfTrapCompliances 1 }
++
++
++-- units of conformance
++
++    ospfTrapControlGroup    OBJECT-GROUP
++        OBJECTS {
++                           ospfSetTrap,
++                           ospfConfigErrorType,
++                           ospfPacketType,
++                           ospfPacketSrc
++        }
++        STATUS  current
++        DESCRIPTION
++           "These objects are required  to  control  traps
++           from OSPF systems."
++       ::= { ospfTrapGroups 1 }
++
++
++END
+--- /dev/null
++++ b/mibs/RIPv2-MIB.txt
+@@ -0,0 +1,530 @@
++   RIPv2-MIB DEFINITIONS ::= BEGIN
++
++   IMPORTS
++       MODULE-IDENTITY, OBJECT-TYPE, Counter32,
++       TimeTicks, IpAddress                     FROM SNMPv2-SMI
++       TEXTUAL-CONVENTION, RowStatus            FROM SNMPv2-TC
++       MODULE-COMPLIANCE, OBJECT-GROUP          FROM SNMPv2-CONF
++       mib-2                                    FROM RFC1213-MIB;
++
++   --  This MIB module uses the extended OBJECT-TYPE macro as
++   --  defined in [9].
++
++   rip2  MODULE-IDENTITY
++           LAST-UPDATED "9407272253Z"      -- Wed Jul 27 22:53:04 PDT 1994
++           ORGANIZATION "IETF RIP-II Working Group"
++           CONTACT-INFO
++          "       Fred Baker
++          Postal: Cisco Systems
++                  519 Lado Drive
++                  Santa Barbara, California 93111
++          Tel:    +1 805 681 0115
++          E-Mail: fbaker@cisco.com
++
++          Postal: Gary Malkin
++                  Xylogics, Inc.
++                  53 Third Avenue
++                  Burlington, MA  01803
++
++          Phone:  (617) 272-8140
++          EMail:  gmalkin@Xylogics.COM"
++      DESCRIPTION
++         "The MIB module to describe the RIP2 Version 2 Protocol"
++     ::= { mib-2 23 }
++
++ --  RIP-2 Management Information Base
++
++ -- the RouteTag type represents the contents of the
++ -- Route Domain field in the packet header or route entry.
++ -- The use of the Route Domain is deprecated.
++
++ RouteTag ::= TEXTUAL-CONVENTION
++     STATUS      current
++     DESCRIPTION
++        "the RouteTag type represents the contents of the Route Domain
++        field in the packet header or route entry"
++    SYNTAX      OCTET STRING (SIZE (2))
++
++--4.1 Global Counters
++
++--      The RIP-2 Globals Group.
++--      Implementation of this group is mandatory for systems
++--      which implement RIP-2.
++
++-- These counters are intended to facilitate debugging quickly
++-- changing routes or failing neighbors
++
++rip2Globals OBJECT IDENTIFIER ::= { rip2 1 }
++
++    rip2GlobalRouteChanges OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of route changes made to the IP Route
++           Database by RIP.  This does not include the refresh
++           of a route's age."
++       ::= { rip2Globals 1 }
++
++    rip2GlobalQueries OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of responses sent to RIP queries
++           from other systems."
++       ::= { rip2Globals 2 }
++
++--4.2 RIP Interface Tables
++
++--  RIP Interfaces Groups
++--  Implementation of these Groups is mandatory for systems
++--  which implement RIP-2.
++
++-- The RIP Interface Status Table.
++
++    rip2IfStatTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF Rip2IfStatEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A list of subnets which require separate
++           status monitoring in RIP."
++       ::= { rip2 2 }
++
++   rip2IfStatEntry OBJECT-TYPE
++       SYNTAX   Rip2IfStatEntry
++       MAX-ACCESS   not-accessible
++       STATUS   current
++       DESCRIPTION
++          "A Single Routing Domain in a single Subnet."
++      INDEX { rip2IfStatAddress }
++      ::= { rip2IfStatTable 1 }
++
++    Rip2IfStatEntry ::=
++        SEQUENCE {
++            rip2IfStatAddress
++                IpAddress,
++            rip2IfStatRcvBadPackets
++                Counter32,
++            rip2IfStatRcvBadRoutes
++                Counter32,
++            rip2IfStatSentUpdates
++                Counter32,
++            rip2IfStatStatus
++                RowStatus
++    }
++
++    rip2IfStatAddress OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP Address of this system on the indicated
++           subnet. For unnumbered interfaces, the value 0.0.0.N,
++           where the least significant 24 bits (N) is the ifIndex
++           for the IP Interface in network byte order."
++       ::= { rip2IfStatEntry 1 }
++
++    rip2IfStatRcvBadPackets OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of RIP response packets received by
++           the RIP process which were subsequently discarded
++           for any reason (e.g. a version 0 packet, or an
++           unknown command type)."
++       ::= { rip2IfStatEntry 2 }
++
++    rip2IfStatRcvBadRoutes OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of routes, in valid RIP packets,
++           which were ignored for any reason (e.g. unknown
++           address family, or invalid metric)."
++       ::= { rip2IfStatEntry 3 }
++
++    rip2IfStatSentUpdates OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of triggered RIP updates actually
++           sent on this interface.  This explicitly does
++           NOT include full updates sent containing new
++           information."
++       ::= { rip2IfStatEntry 4 }
++
++    rip2IfStatStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "Writing invalid has the effect of deleting
++           this interface."
++       ::= { rip2IfStatEntry 5 }
++
++-- The RIP Interface Configuration Table.
++
++    rip2IfConfTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF Rip2IfConfEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A list of subnets which require separate
++           configuration in RIP."
++       ::= { rip2 3 }
++
++   rip2IfConfEntry OBJECT-TYPE
++       SYNTAX   Rip2IfConfEntry
++       MAX-ACCESS   not-accessible
++       STATUS   current
++       DESCRIPTION
++          "A Single Routing Domain in a single Subnet."
++      INDEX { rip2IfConfAddress }
++      ::= { rip2IfConfTable 1 }
++
++    Rip2IfConfEntry ::=
++        SEQUENCE {
++            rip2IfConfAddress
++                IpAddress,
++            rip2IfConfDomain
++                RouteTag,
++            rip2IfConfAuthType
++                INTEGER,
++            rip2IfConfAuthKey
++                OCTET STRING (SIZE(0..16)),
++            rip2IfConfSend
++                INTEGER,
++            rip2IfConfReceive
++                INTEGER,
++            rip2IfConfDefaultMetric
++                INTEGER,
++            rip2IfConfStatus
++                RowStatus,
++            rip2IfConfSrcAddress
++                IpAddress
++    }
++
++    rip2IfConfAddress OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP Address of this system on the indicated
++           subnet.  For unnumbered interfaces, the value 0.0.0.N,
++           where the least significant 24 bits (N) is the ifIndex
++           for the IP Interface in network byte order."
++       ::= { rip2IfConfEntry 1 }
++
++    rip2IfConfDomain OBJECT-TYPE
++        SYNTAX   RouteTag
++        MAX-ACCESS   read-create
++        STATUS   obsolete
++        DESCRIPTION
++           "Value inserted into the Routing Domain field
++           of all RIP packets sent on this interface."
++       DEFVAL { '0000'h }
++       ::= { rip2IfConfEntry 2 }
++
++    rip2IfConfAuthType OBJECT-TYPE
++        SYNTAX   INTEGER {
++                    noAuthentication (1),
++                    simplePassword (2),
++                    md5 (3)
++                 }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The type of Authentication used on this
++           interface."
++       DEFVAL { noAuthentication }
++       ::= { rip2IfConfEntry 3 }
++
++    rip2IfConfAuthKey OBJECT-TYPE
++        SYNTAX   OCTET STRING (SIZE(0..16))
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The value to be used as the Authentication Key
++           whenever the corresponding instance of
++           rip2IfConfAuthType has a value other than
++           noAuthentication.  A modification of the corresponding
++           instance of rip2IfConfAuthType does not modify
++           the rip2IfConfAuthKey value.  If a string shorter
++           than 16 octets is supplied, it will be left-
++           justified and padded to 16 octets, on the right,
++           with nulls (0x00).
++
++           Reading this object always results in an  OCTET
++           STRING of length zero; authentication may not
++           be bypassed by reading the MIB object."
++       DEFVAL { ''h }
++       ::= { rip2IfConfEntry 4 }
++
++    rip2IfConfSend OBJECT-TYPE
++        SYNTAX   INTEGER {
++                    doNotSend (1),
++                    ripVersion1 (2),
++                    rip1Compatible (3),
++                    ripVersion2 (4),
++                    ripV1Demand (5),
++                    ripV2Demand (6)
++                 }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "What the router sends on this interface.
++           ripVersion1 implies sending RIP updates compliant
++           with  RFC  1058.   rip1Compatible implies
++           broadcasting RIP-2 updates using RFC 1058 route
++           subsumption rules.  ripVersion2 implies
++           multicasting RIP-2 updates.  ripV1Demand indicates
++           the use of Demand RIP on a WAN interface under RIP
++           Version 1 rules.  ripV2Demand indicates the use of
++           Demand RIP on a WAN interface under Version 2 rules."
++       DEFVAL { rip1Compatible }
++       ::= { rip2IfConfEntry 5 }
++
++    rip2IfConfReceive OBJECT-TYPE
++        SYNTAX   INTEGER {
++                    rip1 (1),
++                    rip2 (2),
++                    rip1OrRip2 (3),
++                    doNotRecieve (4)
++                 }
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This indicates which version of RIP updates
++           are to be accepted.  Note that rip2 and
++           rip1OrRip2 implies reception of multicast
++           packets."
++       DEFVAL { rip1OrRip2 }
++       ::= { rip2IfConfEntry 6 }
++
++    rip2IfConfDefaultMetric OBJECT-TYPE
++        SYNTAX   INTEGER ( 0..15 )
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "This variable indicates the metric that is to
++           be used for the default route entry in RIP updates
++           originated on this interface.  A value of zero
++           indicates that no default route should be
++           originated; in this case, a default route via
++           another router may be propagated."
++       ::= { rip2IfConfEntry 7 }
++
++    rip2IfConfStatus OBJECT-TYPE
++        SYNTAX   RowStatus
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "Writing invalid has  the  effect  of  deleting
++           this interface."
++       ::= { rip2IfConfEntry 8 }
++
++    rip2IfConfSrcAddress OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-create
++        STATUS   current
++        DESCRIPTION
++           "The IP Address this system will use as a source
++            address on this interface.  If it is a numbered
++            interface, this MUST be the same value as
++            rip2IfConfAddress.  On unnumbered interfaces,
++            it must be the value of rip2IfConfAddress for
++            some interface on the system."
++       ::= { rip2IfConfEntry 9 }
++
++--4.3 Peer Table
++
++--  Peer Table
++
++--      The RIP Peer Group
++--      Implementation of this Group is Optional
++
++--      This group provides information about active peer
++--      relationships intended to assist in debugging.  An
++--      active peer is a router from which a valid RIP
++--      updated has been heard in the last 180 seconds.
++
++    rip2PeerTable OBJECT-TYPE
++        SYNTAX   SEQUENCE OF Rip2PeerEntry
++        MAX-ACCESS   not-accessible
++        STATUS   current
++        DESCRIPTION
++           "A list of RIP Peers."
++       ::= { rip2 4 }
++
++   rip2PeerEntry OBJECT-TYPE
++       SYNTAX   Rip2PeerEntry
++       MAX-ACCESS   not-accessible
++       STATUS   current
++       DESCRIPTION
++          "Information regarding a single routing peer."
++      INDEX { rip2PeerAddress, rip2PeerDomain }
++      ::= { rip2PeerTable 1 }
++
++    Rip2PeerEntry ::=
++        SEQUENCE {
++            rip2PeerAddress
++                IpAddress,
++            rip2PeerDomain
++                RouteTag,
++            rip2PeerLastUpdate
++                TimeTicks,
++            rip2PeerVersion
++                INTEGER,
++            rip2PeerRcvBadPackets
++                Counter32,
++            rip2PeerRcvBadRoutes
++                Counter32
++            }
++
++    rip2PeerAddress OBJECT-TYPE
++        SYNTAX   IpAddress
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The IP Address that the peer is using as its source
++            address.  Note that on an unnumbered link, this may
++            not be a member of any subnet on the system."
++       ::= { rip2PeerEntry 1 }
++
++    rip2PeerDomain OBJECT-TYPE
++        SYNTAX   RouteTag
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The value in the Routing Domain field  in  RIP
++           packets received from the peer.  As domain suuport
++           is deprecated, this must be zero."
++       ::= { rip2PeerEntry 2 }
++
++    rip2PeerLastUpdate OBJECT-TYPE
++        SYNTAX   TimeTicks
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The value of sysUpTime when the most recent
++           RIP update was received from this system."
++       ::= { rip2PeerEntry 3 }
++
++    rip2PeerVersion OBJECT-TYPE
++        SYNTAX   INTEGER ( 0..255 )
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The RIP version number in the header of the
++           last RIP packet received."
++       ::= { rip2PeerEntry 4 }
++
++    rip2PeerRcvBadPackets OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of RIP response packets from this
++           peer discarded as invalid."
++       ::= { rip2PeerEntry 5 }
++
++
++    rip2PeerRcvBadRoutes OBJECT-TYPE
++        SYNTAX   Counter32
++        MAX-ACCESS   read-only
++        STATUS   current
++        DESCRIPTION
++           "The number of routes from this peer that were
++           ignored because the entry format was invalid."
++       ::= { rip2PeerEntry 6 }
++
++-- conformance information
++
++rip2Conformance OBJECT IDENTIFIER ::= { rip2 5 }
++
++rip2Groups      OBJECT IDENTIFIER ::= { rip2Conformance 1 }
++rip2Compliances OBJECT IDENTIFIER ::= { rip2Conformance 2 }
++
++-- compliance statements
++rip2Compliance MODULE-COMPLIANCE
++    STATUS  current
++    DESCRIPTION
++       "The compliance statement "
++    MODULE  -- this module
++    MANDATORY-GROUPS {
++                 rip2GlobalGroup,
++                 rip2IfStatGroup,
++                 rip2IfConfGroup,
++                 rip2PeerGroup
++        }
++    GROUP       rip2GlobalGroup
++    DESCRIPTION
++       "This group defines global controls for RIP-II systems."
++    GROUP       rip2IfStatGroup
++    DESCRIPTION
++       "This group defines interface statistics for RIP-II systems."
++    GROUP       rip2IfConfGroup
++    DESCRIPTION
++       "This group defines interface configuration for RIP-II systems."
++    GROUP       rip2PeerGroup
++    DESCRIPTION
++       "This group defines peer information for RIP-II systems."
++    ::= { rip2Compliances 1 }
++
++-- units of conformance
++
++rip2GlobalGroup    OBJECT-GROUP
++    OBJECTS {
++                rip2GlobalRouteChanges,
++                rip2GlobalQueries
++    }
++    STATUS  current
++    DESCRIPTION
++       "This group defines global controls for RIP-II systems."
++    ::= { rip2Groups 1 }
++rip2IfStatGroup    OBJECT-GROUP
++    OBJECTS {
++            rip2IfStatAddress,
++            rip2IfStatRcvBadPackets,
++            rip2IfStatRcvBadRoutes,
++            rip2IfStatSentUpdates,
++            rip2IfStatStatus
++    }
++    STATUS  current
++    DESCRIPTION
++       "This group defines interface statistics for RIP-II systems."
++    ::= { rip2Groups 2 }
++rip2IfConfGroup    OBJECT-GROUP
++    OBJECTS {
++            rip2IfConfAddress,
++            rip2IfConfAuthType,
++            rip2IfConfAuthKey,
++            rip2IfConfSend,
++            rip2IfConfReceive,
++            rip2IfConfDefaultMetric,
++            rip2IfConfStatus,
++            rip2IfConfSrcAddress
++    }
++    STATUS  current
++    DESCRIPTION
++       "This group defines interface configuration for RIP-II systems."
++    ::= { rip2Groups 3 }
++rip2PeerGroup    OBJECT-GROUP
++    OBJECTS {
++            rip2PeerAddress,
++            rip2PeerDomain,
++            rip2PeerLastUpdate,
++            rip2PeerVersion,
++            rip2PeerRcvBadPackets,
++            rip2PeerRcvBadRoutes
++    }
++    STATUS  current
++    DESCRIPTION
++       "This group defines peer information for RIP-II systems."
++    ::= { rip2Groups 4 }
++END
+--- /dev/null
++++ b/mibs/SOURCE-ROUTING-MIB.txt
+@@ -0,0 +1,452 @@
++SOURCE-ROUTING-MIB DEFINITIONS ::= BEGIN
++
++IMPORTS
++        Counter, Gauge
++                FROM RFC1155-SMI
++        dot1dBridge, dot1dSr
++                FROM BRIDGE-MIB
++        OBJECT-TYPE
++                FROM RFC-1212;
++
++-- groups in the SR MIB
++
++-- dot1dSr is imported from the Bridge MIB
++
++dot1dPortPair   OBJECT IDENTIFIER ::= { dot1dBridge 10 }
++
++-- the dot1dSr group
++
++-- this group is implemented by those bridges that
++-- support the source route bridging mode, including Source
++-- Routing and SRT bridges.
++
++dot1dSrPortTable OBJECT-TYPE
++    SYNTAX  SEQUENCE OF Dot1dSrPortEntry
++    ACCESS  not-accessible
++    STATUS  mandatory
++    DESCRIPTION
++            "A table that contains information about every
++            port that is associated with this source route
++            bridge."
++    ::= { dot1dSr 1 }
++
++dot1dSrPortEntry OBJECT-TYPE
++    SYNTAX  Dot1dSrPortEntry
++    ACCESS  not-accessible
++    STATUS  mandatory
++    DESCRIPTION
++            "A list of information for each port of a source
++            route bridge."
++    INDEX   { dot1dSrPort }
++
++    ::= { dot1dSrPortTable 1 }
++
++Dot1dSrPortEntry ::=
++    SEQUENCE {
++        dot1dSrPort
++            INTEGER,
++        dot1dSrPortHopCount
++            INTEGER,
++        dot1dSrPortLocalSegment
++            INTEGER,
++        dot1dSrPortBridgeNum
++            INTEGER,
++        dot1dSrPortTargetSegment
++            INTEGER,
++        dot1dSrPortLargestFrame
++            INTEGER,
++        dot1dSrPortSTESpanMode
++            INTEGER,
++        dot1dSrPortSpecInFrames
++            Counter,
++        dot1dSrPortSpecOutFrames
++            Counter,
++        dot1dSrPortApeInFrames
++            Counter,
++        dot1dSrPortApeOutFrames
++            Counter,
++        dot1dSrPortSteInFrames
++            Counter,
++        dot1dSrPortSteOutFrames
++            Counter,
++        dot1dSrPortSegmentMismatchDiscards
++            Counter,
++        dot1dSrPortDuplicateSegmentDiscards
++            Counter,
++        dot1dSrPortHopCountExceededDiscards
++            Counter,
++        dot1dSrPortDupLanIdOrTreeErrors
++            Counter,
++        dot1dSrPortLanIdMismatches
++            Counter
++    }
++
++dot1dSrPort OBJECT-TYPE
++    SYNTAX  INTEGER (1..65535)
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The port number of the port for which this entry
++
++            contains Source Route management information."
++    ::= { dot1dSrPortEntry 1 }
++
++dot1dSrPortHopCount OBJECT-TYPE
++    SYNTAX  INTEGER
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "The maximum number of routing descriptors allowed
++            in an All Paths or Spanning Tree Explorer frames."
++    ::= { dot1dSrPortEntry 2 }
++
++dot1dSrPortLocalSegment OBJECT-TYPE
++    SYNTAX  INTEGER
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "The segment number that uniquely identifies the
++            segment to which this port is connected. Current
++            source routing protocols limit this value to the
++            range: 0 through 4095. (The value 0 is used by
++            some management applications for special test
++            cases.) A value of 65535 signifies that no segment
++            number is assigned to this port."
++    ::= { dot1dSrPortEntry 3 }
++
++dot1dSrPortBridgeNum OBJECT-TYPE
++    SYNTAX  INTEGER
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "A bridge number uniquely identifies a bridge when
++            more than one bridge is used to span the same two
++            segments.  Current source routing protocols limit
++            this value to the range: 0 through 15. A value of
++            65535 signifies that no bridge number is assigned
++            to this bridge."
++    ::= { dot1dSrPortEntry 4 }
++
++dot1dSrPortTargetSegment OBJECT-TYPE
++    SYNTAX  INTEGER
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "The segment number that corresponds to the target
++            segment this port is considered to be connected to
++            by the bridge.  Current source routing protocols
++            limit this value to the range: 0 through 4095.
++
++            (The value 0 is used by some management
++            applications for special test cases.) A value of
++            65535 signifies that no target segment is assigned
++            to this port."
++    ::= { dot1dSrPortEntry 5 }
++
++-- It would be nice if we could use ifMtu as the size of the
++-- largest frame, but we can't because ifMtu is defined to be
++-- the size that the (inter-)network layer can use which can
++-- differ from the MAC layer (especially if several layers of
++-- encapsulation are used).
++
++dot1dSrPortLargestFrame OBJECT-TYPE
++    SYNTAX  INTEGER
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "The maximum size of the INFO field (LLC and
++            above) that this port can send/receive.  It does
++            not include any MAC level (framing) octets.  The
++            value of this object is used by this bridge to
++            determine whether a modification of the
++            LargestFrame (LF, see [14]) field of the Routing
++            Control field of the Routing Information Field is
++            necessary.
++
++            64 valid values are defined by the IEEE 802.5M SRT
++            Addendum: 516, 635, 754, 873, 993, 1112, 1231,
++            1350, 1470, 1542, 1615, 1688, 1761, 1833, 1906,
++            1979, 2052, 2345, 2638, 2932, 3225, 3518, 3812,
++            4105, 4399, 4865, 5331, 5798, 6264, 6730, 7197,
++            7663, 8130, 8539, 8949, 9358, 9768, 10178, 10587,
++            10997, 11407, 12199, 12992, 13785, 14578, 15370,
++            16163, 16956, 17749, 20730, 23711, 26693, 29674,
++            32655, 35637, 38618, 41600, 44591, 47583, 50575,
++            53567, 56559, 59551, and 65535.
++
++            An illegal value will not be accepted by the
++            bridge."
++    ::= { dot1dSrPortEntry 6 }
++
++dot1dSrPortSTESpanMode OBJECT-TYPE
++    SYNTAX  INTEGER {
++                auto-span(1),
++                disabled(2),
++                forced(3)
++            }
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "Determines how this port behaves when presented
++            with a Spanning Tree Explorer frame.  The value
++            'disabled(2)' indicates that the port will not
++            accept or send Spanning Tree Explorer packets; any
++            STE packets received will be silently discarded.
++            The value 'forced(3)' indicates the port will
++            always accept and propagate Spanning Tree Explorer
++            frames.  This allows a manually configured
++            Spanning Tree for this class of packet to be
++            configured.  Note that unlike transparent
++            bridging, this is not catastrophic to the network
++            if there are loops.  The value 'auto-span(1)' can
++            only be returned by a bridge that both implements
++            the Spanning Tree Protocol and has use of the
++            protocol enabled on this port. The behavior of the
++            port for Spanning Tree Explorer frames is
++            determined by the state of dot1dStpPortState.  If
++            the port is in the 'forwarding' state, the frame
++            will be accepted or propagated.  Otherwise, it
++            will be silently discarded."
++    ::= { dot1dSrPortEntry 7 }
++
++dot1dSrPortSpecInFrames OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of Specifically Routed frames, also
++            referred to as Source Routed Frames, that have
++            been received from this port's segment."
++    ::= { dot1dSrPortEntry 8 }
++
++dot1dSrPortSpecOutFrames OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of Specifically Routed frames, also
++            referred to as Source Routed Frames, that this
++            port has transmitted on its segment."
++    ::= { dot1dSrPortEntry 9 }
++
++dot1dSrPortApeInFrames OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of All Paths Explorer frames, also
++            referred to as All Routes Explorer frames, that
++            have been received by this port from its segment."
++    ::= { dot1dSrPortEntry 10 }
++
++dot1dSrPortApeOutFrames OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of all Paths Explorer Frames, also
++            referred to as All Routes Explorer frames, that
++            have been transmitted by this port on its
++            segment."
++    ::= { dot1dSrPortEntry 11 }
++
++dot1dSrPortSteInFrames OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of spanning tree explorer frames that
++            have been received by this port from its segment."
++    ::= { dot1dSrPortEntry 12 }
++
++dot1dSrPortSteOutFrames OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of spanning tree explorer frames that
++            have been transmitted by this port on its
++            segment."
++    ::= { dot1dSrPortEntry 13 }
++
++dot1dSrPortSegmentMismatchDiscards OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of explorer frames that have been
++            discarded by this port because the routing
++            descriptor field contained an invalid adjacent
++            segment value."
++    ::= { dot1dSrPortEntry 14 }
++
++dot1dSrPortDuplicateSegmentDiscards OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of frames that have been discarded by
++            this port because the routing descriptor field
++            contained a duplicate segment identifier."
++    ::= { dot1dSrPortEntry 15 }
++
++dot1dSrPortHopCountExceededDiscards OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of explorer frames that have been
++            discarded by this port because the Routing
++            Information Field has exceeded the maximum route
++            descriptor length."
++    ::= { dot1dSrPortEntry 16 }
++
++dot1dSrPortDupLanIdOrTreeErrors OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of duplicate LAN IDs or Tree errors.
++            This helps in detection of problems in networks
++            containing older IBM Source Routing Bridges."
++    ::= { dot1dSrPortEntry 17 }
++
++dot1dSrPortLanIdMismatches OBJECT-TYPE
++    SYNTAX  Counter
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The number of ARE and STE frames that were
++            discarded because the last LAN ID in the routing
++            information field did not equal the LAN-in ID.
++            This error can occur in implementations which do
++            only a LAN-in ID and Bridge Number check instead
++            of a LAN-in ID, Bridge Number, and LAN-out ID
++            check before they forward broadcast frames."
++    ::= { dot1dSrPortEntry 18 }
++
++-- scalar object in dot1dSr
++
++dot1dSrBridgeLfMode OBJECT-TYPE
++    SYNTAX  INTEGER {
++                mode3(1),
++                mode6(2)
++            }
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "Indicates whether the bridge operates using older
++            3 bit length negotiation fields or the newer 6 bit
++            length field in its RIF."
++    ::= { dot1dSr 2 }
++
++-- The Port-Pair Database
++
++-- Implementation of this group is optional.
++
++-- This group is implemented by those bridges that support
++-- the direct multiport model of the source route bridging
++-- mode as defined in the IEEE 802.5 SRT Addendum to
++-- 802.1d.
++
++-- Bridges implementing this group may report 65535 for
++-- dot1dSrPortBridgeNumber and dot1dSrPortTargetSegment,
++-- indicating that those objects are not applicable.
++
++dot1dPortPairTableSize OBJECT-TYPE
++    SYNTAX  Gauge
++    ACCESS  read-only
++    STATUS  mandatory
++    DESCRIPTION
++            "The total number of entries in the Bridge Port
++            Pair Database."
++    ::= { dot1dPortPair 1 }
++
++-- the Bridge Port-Pair table
++
++-- this table represents port pairs within a bridge forming
++-- a unique bridge path, as defined in the IEEE 802.5M SRT
++-- Addendum.
++
++dot1dPortPairTable OBJECT-TYPE
++    SYNTAX  SEQUENCE OF Dot1dPortPairEntry
++    ACCESS  not-accessible
++    STATUS  mandatory
++    DESCRIPTION
++            "A table that contains information about every
++
++            port pair database entity associated with this
++            source routing bridge."
++    ::= { dot1dPortPair 2 }
++
++dot1dPortPairEntry OBJECT-TYPE
++    SYNTAX  Dot1dPortPairEntry
++    ACCESS  not-accessible
++    STATUS  mandatory
++    DESCRIPTION
++            "A list of information for each port pair entity
++            of a bridge."
++    INDEX   { dot1dPortPairLowPort, dot1dPortPairHighPort }
++    ::= { dot1dPortPairTable 1 }
++
++Dot1dPortPairEntry ::=
++    SEQUENCE {
++        dot1dPortPairLowPort
++            INTEGER,
++        dot1dPortPairHighPort
++            INTEGER,
++        dot1dPortPairBridgeNum
++            INTEGER,
++        dot1dPortPairBridgeState
++            INTEGER
++    }
++
++dot1dPortPairLowPort OBJECT-TYPE
++    SYNTAX  INTEGER (1..65535)
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "The port number of the lower numbered port for
++            which this entry contains port pair database
++            information."
++    ::= { dot1dPortPairEntry 1 }
++
++dot1dPortPairHighPort OBJECT-TYPE
++    SYNTAX  INTEGER (1..65535)
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "The port number of the higher numbered port for
++            which this entry contains port pair database
++            information."
++    ::= { dot1dPortPairEntry 2 }
++
++dot1dPortPairBridgeNum OBJECT-TYPE
++    SYNTAX  INTEGER
++
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "A bridge number that uniquely identifies the path
++            provided by this source routing bridge between the
++            segments connected to dot1dPortPairLowPort and
++            dot1dPortPairHighPort.  The purpose of bridge
++            number is to disambiguate between multiple paths
++            connecting the same two LANs."
++    ::= { dot1dPortPairEntry 3 }
++
++dot1dPortPairBridgeState OBJECT-TYPE
++    SYNTAX  INTEGER {
++                enabled(1),
++                disabled(2),
++                invalid(3)
++            }
++    ACCESS  read-write
++    STATUS  mandatory
++    DESCRIPTION
++            "The state of dot1dPortPairBridgeNum.  Writing
++            'invalid(3)' to this object removes the
++            corresponding entry."
++    ::= { dot1dPortPairEntry 4 }
++
++END
diff --git a/package/network/services/net-snmp/patches/160-no_ldconfig.patch b/package/network/services/net-snmp/patches/160-no_ldconfig.patch
new file mode 100644 (file)
index 0000000..d9de73e
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/configure
++++ b/configure
+@@ -15097,7 +15097,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
+   need_version=no
+   library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
+   soname_spec='${libname}${release}${shared_ext}$major'
+-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++  finish_cmds=''
+   shlibpath_var=LD_LIBRARY_PATH
+   shlibpath_overrides_runpath=no
diff --git a/package/network/services/net-snmp/patches/170-ldflags.patch b/package/network/services/net-snmp/patches/170-ldflags.patch
new file mode 100644 (file)
index 0000000..656fded
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.top
++++ b/Makefile.top
+@@ -87,7 +87,7 @@ LIBCURRENT  = 30
+ LIBAGE      = 0
+ LIBREVISION = 0
+-LIB_LD_CMD      = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
++LIB_LD_CMD      = $(LIBTOOL) --mode=link $(LINKCC) $(CFLAGS) -rpath $(libdir) $(LDFLAGS) -version-info $(LIBCURRENT):$(LIBREVISION):$(LIBAGE) -o
+ LIB_EXTENSION   = la
+ LIB_VERSION     =
+ LIB_LDCONFIG_CMD = $(LIBTOOL) --mode=finish $(INSTALL_PREFIX)$(libdir)
diff --git a/package/network/services/net-snmp/patches/750-ieee802dot11.patch b/package/network/services/net-snmp/patches/750-ieee802dot11.patch
new file mode 100644 (file)
index 0000000..a3c5c0a
--- /dev/null
@@ -0,0 +1,6156 @@
+--- /dev/null
++++ b/agent/mibgroup/ieee802dot11.c
+@@ -0,0 +1,4915 @@
++/****************************************************************************
++*                                                                           *
++*  File Name:           ieee802dot11.c                                      *
++*  Used By:                                                                 *
++*                                                                           *
++*  Operating System:                                                        *
++*  Purpose:                                                                 *
++*                                                                           *
++*  Comments:                                                                *
++*                                                                           *
++*  Author:              Larry Simmons                                       *
++*                       lsimmons@avantcom.com                               *
++*                       www.avantcom.com                                    *
++*                                                                           *
++*  Creation Date:       09/02/03                                            *
++*                                                                           *
++*   Ver    Date   Inits Modification                                        *
++*  ----- -------- ----- ------------                                        *
++*  0.0.1 09/02/03  LRS  created                                             *
++*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
++****************************************************************************/
++/****************************************************************************
++*                               Includes                                    *
++****************************************************************************/
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++#include "ieee802dot11.h"
++#include "iwlib.h"
++
++/****************************************************************************
++*                                Defines                                    *
++****************************************************************************/
++#define DISPLAYWIEXT                        // display wireless ext info
++#define TABLE_SIZE   1
++//#define MINLOADFREQ 15                    // min reload frequency in seconds
++#define MINLOADFREQ 5                       // min reload frequency in seconds      // for testing
++#define PROC_NET_DEV      "/proc/net/dev"
++#define PROC_NET_WIRELESS "/proc/net/wireless"
++
++#ifndef UCHAR
++  typedef unsigned char UCHAR;
++#endif
++
++/****************************************************************************
++*                            Private Functions                              *
++****************************************************************************/
++static void loadTables();
++static void loadWiExt ( int, char *, struct wireless_info * );
++static void load80211Structs ( int, char *, struct wireless_info * );
++static void initStructs();
++
++// Wireless Extensions Specific Functions
++static void loadWiExtTo80211Structs ( int, char *, struct wireless_info * );
++static void displayWiExt ( struct wireless_info );
++
++// Linked List Functions
++static void addList ( char *, char *, int );
++static void initLists();                    // initialize all the linked lists
++static void flushLists();                   // flush all the linked lists
++static void flushList ( char * );           // flush a single linked list
++
++// Utility Functions
++static int  openSocket ( void );
++static int  mWatt2dbm ( int );
++static char *htob ( char * );
++static int  hasChanged ( char *, int );
++
++/****************************************************************************
++*                            Private Variables                              *
++****************************************************************************/
++static unsigned long lastLoad = 0;          // ET in secs at last table load
++
++static struct avNode *lastNode, *newNode, *np;
++
++/****************************************************************************
++*                            External Functions                             *
++****************************************************************************/
++
++/****************************************************************************
++*   ieee802dot11_variables_oid:                                             *
++*       this is the top level oid that we want to register under.  This     *
++*       is essentially a prefix, with the suffix appearing in the           *
++*       variable below.                                                     *
++****************************************************************************/
++oid ieee802dot11_variables_oid[] = { 1,2,840,10036 };
++
++/****************************************************************************
++*   variable7 ieee802dot11_variables:                                       *
++*     this variable defines function callbacks and type return information  *
++*     for the ieee802dot11 mib section                                      *
++****************************************************************************/
++struct variable7 ieee802dot11_variables[] = {
++/*  magic number        , variable type , ro/rw , callback fn  , L, oidsuffix */
++#define   DOT11STATIONID        3
++  { DOT11STATIONID      , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,1 } },
++#define   DOT11MEDIUMOCCUPANCYLIMIT  4
++  { DOT11MEDIUMOCCUPANCYLIMIT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,2 } },
++#define   DOT11CFPOLLABLE       5
++  { DOT11CFPOLLABLE     , ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,3 } },
++#define   DOT11CFPPERIOD        6
++  { DOT11CFPPERIOD      , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,4 } },
++#define   DOT11CFPMAXDURATION   7
++  { DOT11CFPMAXDURATION , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,5 } },
++#define   DOT11AUTHENTICATIONRESPONSETIMEOUT  8
++  { DOT11AUTHENTICATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,6 } },
++#define   DOT11PRIVACYOPTIONIMPLEMENTED  9
++  { DOT11PRIVACYOPTIONIMPLEMENTED, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,7 } },
++#define   DOT11POWERMANAGEMENTMODE  10
++  { DOT11POWERMANAGEMENTMODE, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,8 } },
++#define   DOT11DESIREDSSID      11
++  { DOT11DESIREDSSID    , ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,9 } },
++#define   DOT11DESIREDBSSTYPE   12
++  { DOT11DESIREDBSSTYPE , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,10 } },
++#define   DOT11OPERATIONALRATESET  13
++  { DOT11OPERATIONALRATESET, ASN_OCTET_STR , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,11 } },
++#define   DOT11BEACONPERIOD     14
++  { DOT11BEACONPERIOD   , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,12 } },
++#define   DOT11DTIMPERIOD       15
++  { DOT11DTIMPERIOD     , ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,13 } },
++#define   DOT11ASSOCIATIONRESPONSETIMEOUT  16
++  { DOT11ASSOCIATIONRESPONSETIMEOUT, ASN_INTEGER   , RWRITE, var_dot11StationConfigTable, 4, { 1,1,1,14 } },
++#define   DOT11DISASSOCIATEREASON  17
++  { DOT11DISASSOCIATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,15 } },
++#define   DOT11DISASSOCIATESTATION  18
++  { DOT11DISASSOCIATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,16 } },
++#define   DOT11DEAUTHENTICATEREASON  19
++  { DOT11DEAUTHENTICATEREASON, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,17 } },
++#define   DOT11DEAUTHENTICATESTATION  20
++  { DOT11DEAUTHENTICATESTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,18 } },
++#define   DOT11AUTHENTICATEFAILSTATUS  21
++  { DOT11AUTHENTICATEFAILSTATUS, ASN_INTEGER   , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,19 } },
++#define   DOT11AUTHENTICATEFAILSTATION  22
++  { DOT11AUTHENTICATEFAILSTATION, ASN_OCTET_STR , RONLY , var_dot11StationConfigTable, 4, { 1,1,1,20 } },
++
++#define   DOT11AUTHENTICATIONALGORITHM  26
++  { DOT11AUTHENTICATIONALGORITHM, ASN_INTEGER   , RONLY , var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,2 } },
++#define   DOT11AUTHENTICATIONALGORITHMSENABLE  27
++  { DOT11AUTHENTICATIONALGORITHMSENABLE, ASN_INTEGER   , RWRITE, var_dot11AuthenticationAlgorithmsTable, 4, { 1,2,1,3 } },
++
++#define   DOT11WEPDEFAULTKEYVALUE  31
++  { DOT11WEPDEFAULTKEYVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPDefaultKeysTable, 4, { 1,3,1,2 } },
++
++#define   DOT11WEPKEYMAPPINGADDRESS  35
++  { DOT11WEPKEYMAPPINGADDRESS, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,2 } },
++#define   DOT11WEPKEYMAPPINGWEPON  36
++  { DOT11WEPKEYMAPPINGWEPON, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,3 } },
++#define   DOT11WEPKEYMAPPINGVALUE  37
++  { DOT11WEPKEYMAPPINGVALUE, ASN_OCTET_STR , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,4 } },
++#define   DOT11WEPKEYMAPPINGSTATUS  38
++  { DOT11WEPKEYMAPPINGSTATUS, ASN_INTEGER   , RWRITE, var_dot11WEPKeyMappingsTable, 4, { 1,4,1,5 } },
++
++#define   DOT11PRIVACYINVOKED   41
++  { DOT11PRIVACYINVOKED , ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,1 } },
++#define   DOT11WEPDEFAULTKEYID  42
++  { DOT11WEPDEFAULTKEYID, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,2 } },
++#define   DOT11WEPKEYMAPPINGLENGTH  43
++  { DOT11WEPKEYMAPPINGLENGTH, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,3 } },
++#define   DOT11EXCLUDEUNENCRYPTED  44
++  { DOT11EXCLUDEUNENCRYPTED, ASN_INTEGER   , RWRITE, var_dot11PrivacyTable, 4, { 1,5,1,4 } },
++#define   DOT11WEPICVERRORCOUNT  45
++  { DOT11WEPICVERRORCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,5 } },
++#define   DOT11WEPEXCLUDEDCOUNT  46
++  { DOT11WEPEXCLUDEDCOUNT, ASN_COUNTER   , RONLY , var_dot11PrivacyTable, 4, { 1,5,1,6 } },
++
++#define   DOT11MACADDRESS       49
++  { DOT11MACADDRESS     , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,1 } },
++#define   DOT11RTSTHRESHOLD     50
++  { DOT11RTSTHRESHOLD   , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,2 } },
++#define   DOT11SHORTRETRYLIMIT  51
++  { DOT11SHORTRETRYLIMIT, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,3 } },
++#define   DOT11LONGRETRYLIMIT   52
++  { DOT11LONGRETRYLIMIT , ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,4 } },
++#define   DOT11FRAGMENTATIONTHRESHOLD  53
++  { DOT11FRAGMENTATIONTHRESHOLD, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,5 } },
++#define   DOT11MAXTRANSMITMSDULIFETIME  54
++  { DOT11MAXTRANSMITMSDULIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,6 } },
++#define   DOT11MAXRECEIVELIFETIME  55
++  { DOT11MAXRECEIVELIFETIME, ASN_INTEGER   , RWRITE, var_dot11OperationTable, 4, { 2,1,1,7 } },
++#define   DOT11MANUFACTURERID   56
++  { DOT11MANUFACTURERID , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,8 } },
++#define   DOT11PRODUCTID        57
++  { DOT11PRODUCTID      , ASN_OCTET_STR , RONLY , var_dot11OperationTable, 4, { 2,1,1,9 } },
++
++#define   DOT11TRANSMITTEDFRAGMENTCOUNT  60
++  { DOT11TRANSMITTEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,1 } },
++#define   DOT11MULTICASTTRANSMITTEDFRAMECOUNT  61
++  { DOT11MULTICASTTRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,2 } },
++#define   DOT11FAILEDCOUNT      62
++  { DOT11FAILEDCOUNT    , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,3 } },
++#define   DOT11RETRYCOUNT       63
++  { DOT11RETRYCOUNT     , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,4 } },
++#define   DOT11MULTIPLERETRYCOUNT  64
++  { DOT11MULTIPLERETRYCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,5 } },
++#define   DOT11FRAMEDUPLICATECOUNT  65
++  { DOT11FRAMEDUPLICATECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,6 } },
++#define   DOT11RTSSUCCESSCOUNT  66
++  { DOT11RTSSUCCESSCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,7 } },
++#define   DOT11RTSFAILURECOUNT  67
++  { DOT11RTSFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,8 } },
++#define   DOT11ACKFAILURECOUNT  68
++  { DOT11ACKFAILURECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,9 } },
++#define   DOT11RECEIVEDFRAGMENTCOUNT  69
++  { DOT11RECEIVEDFRAGMENTCOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,10 } },
++#define   DOT11MULTICASTRECEIVEDFRAMECOUNT  70
++  { DOT11MULTICASTRECEIVEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,11 } },
++#define   DOT11FCSERRORCOUNT    71
++  { DOT11FCSERRORCOUNT  , ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,12 } },
++#define   DOT11TRANSMITTEDFRAMECOUNT  72
++  { DOT11TRANSMITTEDFRAMECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,13 } },
++#define   DOT11WEPUNDECRYPTABLECOUNT  73
++  { DOT11WEPUNDECRYPTABLECOUNT, ASN_COUNTER   , RONLY , var_dot11CountersTable, 4, { 2,2,1,14 } },
++
++#define   DOT11ADDRESS          77
++  { DOT11ADDRESS        , ASN_OCTET_STR , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,2 } },
++#define   DOT11GROUPADDRESSESSTATUS  78
++  { DOT11GROUPADDRESSESSTATUS, ASN_INTEGER   , RWRITE, var_dot11GroupAddressesTable, 4, { 2,3,1,3 } },
++
++#define   DOT11RESOURCETYPEIDNAME  79
++  { DOT11RESOURCETYPEIDNAME, ASN_OCTET_STR , RONLY , var_ieee802dot11, 3, { 3,1,1 } },
++#define   DOT11MANUFACTUREROUI  82
++  { DOT11MANUFACTUREROUI, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,1 } },
++#define   DOT11MANUFACTURERNAME  83
++  { DOT11MANUFACTURERNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,2 } },
++#define   DOT11MANUFACTURERPRODUCTNAME  84
++  { DOT11MANUFACTURERPRODUCTNAME, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,3 } },
++#define   DOT11MANUFACTURERPRODUCTVERSION  85
++  { DOT11MANUFACTURERPRODUCTVERSION, ASN_OCTET_STR , RONLY , var_dot11ResourceInfoTable, 5, { 3,1,2,1,4 } },
++
++#define   DOT11PHYTYPE          88
++  { DOT11PHYTYPE        , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,1 } },
++#define   DOT11CURRENTREGDOMAIN  89
++  { DOT11CURRENTREGDOMAIN, ASN_INTEGER   , RWRITE, var_dot11PhyOperationTable, 4, { 4,1,1,2 } },
++#define   DOT11TEMPTYPE         90
++  { DOT11TEMPTYPE       , ASN_INTEGER   , RONLY , var_dot11PhyOperationTable, 4, { 4,1,1,3 } },
++#define   DOT11CURRENTTXANTENNA  93
++  { DOT11CURRENTTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,1 } },
++#define   DOT11DIVERSITYSUPPORT  94
++  { DOT11DIVERSITYSUPPORT, ASN_INTEGER   , RONLY , var_dot11PhyAntennaTable, 4, { 4,2,1,2 } },
++#define   DOT11CURRENTRXANTENNA  95
++  { DOT11CURRENTRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11PhyAntennaTable, 4, { 4,2,1,3 } },
++#define   DOT11NUMBERSUPPORTEDPOWERLEVELS  98
++  { DOT11NUMBERSUPPORTEDPOWERLEVELS, ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,1 } },
++#define   DOT11TXPOWERLEVEL1    99
++  { DOT11TXPOWERLEVEL1  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,2 } },
++#define   DOT11TXPOWERLEVEL2    100
++  { DOT11TXPOWERLEVEL2  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,3 } },
++#define   DOT11TXPOWERLEVEL3    101
++  { DOT11TXPOWERLEVEL3  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,4 } },
++#define   DOT11TXPOWERLEVEL4    102
++  { DOT11TXPOWERLEVEL4  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,5 } },
++#define   DOT11TXPOWERLEVEL5    103
++  { DOT11TXPOWERLEVEL5  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,6 } },
++#define   DOT11TXPOWERLEVEL6    104
++  { DOT11TXPOWERLEVEL6  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,7 } },
++#define   DOT11TXPOWERLEVEL7    105
++  { DOT11TXPOWERLEVEL7  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,8 } },
++#define   DOT11TXPOWERLEVEL8    106
++  { DOT11TXPOWERLEVEL8  , ASN_INTEGER   , RONLY , var_dot11PhyTxPowerTable, 4, { 4,3,1,9 } },
++#define   DOT11CURRENTTXPOWERLEVEL  107
++  { DOT11CURRENTTXPOWERLEVEL, ASN_INTEGER   , RWRITE, var_dot11PhyTxPowerTable, 4, { 4,3,1,10 } },
++
++#define   DOT11HOPTIME          110
++  { DOT11HOPTIME        , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,1 } },
++#define   DOT11CURRENTCHANNELNUMBER  111
++  { DOT11CURRENTCHANNELNUMBER, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,2 } },
++#define   DOT11MAXDWELLTIME     112
++  { DOT11MAXDWELLTIME   , ASN_INTEGER   , RONLY , var_dot11PhyFHSSTable, 4, { 4,4,1,3 } },
++#define   DOT11CURRENTDWELLTIME  113
++  { DOT11CURRENTDWELLTIME, ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,4 } },
++#define   DOT11CURRENTSET       114
++  { DOT11CURRENTSET     , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,5 } },
++#define   DOT11CURRENTPATTERN   115
++  { DOT11CURRENTPATTERN , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,6 } },
++#define   DOT11CURRENTINDEX     116
++  { DOT11CURRENTINDEX   , ASN_INTEGER   , RWRITE, var_dot11PhyFHSSTable, 4, { 4,4,1,7 } },
++
++#define   DOT11CURRENTCHANNEL   119
++  { DOT11CURRENTCHANNEL , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,1 } },
++#define   DOT11CCAMODESUPPORTED  120
++  { DOT11CCAMODESUPPORTED, ASN_INTEGER   , RONLY , var_dot11PhyDSSSTable, 4, { 4,5,1,2 } },
++#define   DOT11CURRENTCCAMODE   121
++  { DOT11CURRENTCCAMODE , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,3 } },
++#define   DOT11EDTHRESHOLD      122
++  { DOT11EDTHRESHOLD    , ASN_INTEGER   , RWRITE, var_dot11PhyDSSSTable, 4, { 4,5,1,4 } },
++
++#define   DOT11CCAWATCHDOGTIMERMAX  125
++  { DOT11CCAWATCHDOGTIMERMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,1 } },
++#define   DOT11CCAWATCHDOGCOUNTMAX  126
++  { DOT11CCAWATCHDOGCOUNTMAX, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,2 } },
++#define   DOT11CCAWATCHDOGTIMERMIN  127
++  { DOT11CCAWATCHDOGTIMERMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,3 } },
++#define   DOT11CCAWATCHDOGCOUNTMIN  128
++  { DOT11CCAWATCHDOGCOUNTMIN, ASN_INTEGER   , RWRITE, var_dot11PhyIRTable, 4, { 4,6,1,4 } },
++
++#define   DOT11REGDOMAINSSUPPORTVALUE  132
++  { DOT11REGDOMAINSSUPPORTVALUE, ASN_INTEGER   , RONLY , var_dot11RegDomainsSupportedTable, 4, { 4,7,1,2 } },
++
++#define   DOT11SUPPORTEDTXANTENNA  136
++  { DOT11SUPPORTEDTXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,2 } },
++#define   DOT11SUPPORTEDRXANTENNA  137
++  { DOT11SUPPORTEDRXANTENNA, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,3 } },
++#define   DOT11DIVERSITYSELECTIONRX  138
++  { DOT11DIVERSITYSELECTIONRX, ASN_INTEGER   , RWRITE, var_dot11AntennasListTable, 4, { 4,8,1,4 } },
++
++#define   DOT11SUPPORTEDDATARATESTXVALUE  142
++  { DOT11SUPPORTEDDATARATESTXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesTxTable, 4, { 4,9,1,2 } },
++
++#define   DOT11SUPPORTEDDATARATESRXVALUE  146
++  { DOT11SUPPORTEDDATARATESRXVALUE, ASN_INTEGER   , RONLY , var_dot11SupportedDataRatesRxTable, 4, { 4,10,1,2 } },
++};
++// ( L = length of the oidsuffix )
++
++/****************************************************************************
++*                                                                           *
++*         init_ieee802dot11() - perform any required initialization         *
++*                                                                           *
++****************************************************************************/
++void init_ieee802dot11 ( void ) {
++
++  /* register ourselves with the agent to handle our mib tree */
++  REGISTER_MIB("ieee802dot11", ieee802dot11_variables, variable7,
++               ieee802dot11_variables_oid);
++
++  initLists();
++}
++
++/****************************************************************************
++*                                                                           *
++*    shutdown_ieee802dot11() - perform any required cleanup @ shutdown      *
++*                                                                           *
++****************************************************************************/
++void shutdown_ieee802dot11 ( void )
++{
++  flushLists();
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_ieee802dot11() -                                                    *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_ieee802dot11 ( struct variable *vp, 
++                    oid     *name, 
++                    size_t  *length, 
++                    int     exact, 
++                    size_t  *var_len, 
++                    WriteMethod **write_method)
++{
++  loadTables();                                               
++
++  if ( header_generic ( vp, name, length, exact,var_len,write_method )
++                                  == MATCH_FAILED )
++    return NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11RESOURCETYPEIDNAME:
++      if ( !haveResourceTypeIDName )
++        return NULL;
++      *var_len = strlen ( resourceTypeIDName );
++      return ( UCHAR * ) resourceTypeIDName;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*  var_dot11StationConfigTable() - return a variable value from the table   *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11StationConfigTable ( struct variable *vp,
++                              oid     *name,
++                              size_t  *length,
++                              int     exact,
++                              size_t  *var_len,
++                              WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++  static char MACWork[17];
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &scList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    sc = ( struct scTbl_data * ) np->data;
++    rName[vp->namelen] = sc->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) || 
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++
++      switch ( vp->magic ) {      // found requested OID, now check for requested variable
++        case DOT11STATIONID: 
++          if ( sc->haveStationID                     ) found = TRUE; break;
++        case DOT11MEDIUMOCCUPANCYLIMIT:
++          if ( sc->haveMediumOccupancyLimit          ) found = TRUE; break;
++        case DOT11CFPOLLABLE:
++          if ( sc->haveCFPPollable                   ) found = TRUE; break;
++        case DOT11CFPPERIOD:
++          if ( sc->haveCFPPeriod                     ) found = TRUE; break;
++        case DOT11CFPMAXDURATION:
++          if ( sc->haveMaxDuration                   ) found = TRUE; break;
++        case DOT11AUTHENTICATIONRESPONSETIMEOUT:
++          if ( sc->haveAuthenticationResponseTimeOut ) found = TRUE; break;
++        case DOT11PRIVACYOPTIONIMPLEMENTED:
++          if ( sc->havePrivacyOptionImplemented      ) found = TRUE; break;
++        case DOT11POWERMANAGEMENTMODE:
++          if ( sc->havePowerManagementMode           ) found = TRUE; break;
++        case DOT11DESIREDSSID:
++          if ( sc->haveDesiredSSID                   ) found = TRUE; break;
++        case DOT11DESIREDBSSTYPE:
++          if ( sc->haveDesiredBSSType                ) found = TRUE; break;
++        case DOT11OPERATIONALRATESET:
++          if ( sc->haveOperationalRateSet            ) found = TRUE; break;
++        case DOT11BEACONPERIOD: 
++          if ( sc->haveBeaconPeriod                  ) found = TRUE; break;
++        case DOT11DTIMPERIOD:
++          if ( sc->haveDTIMPeriod                    ) found = TRUE; break;
++        case DOT11ASSOCIATIONRESPONSETIMEOUT:
++          if ( sc->haveAssociationResponseTimeOut    ) found = TRUE; break;
++        case DOT11DISASSOCIATEREASON:
++          if ( sc->disAssociationReason              ) found = TRUE; break;
++        case DOT11DISASSOCIATESTATION:
++          if ( sc->haveDisAssociationStation         ) found = TRUE; break;
++        case DOT11DEAUTHENTICATEREASON:
++          if ( sc->deAuthenticationReason            ) found = TRUE; break;
++        case DOT11DEAUTHENTICATESTATION:
++          if ( sc->haveDeAuthenticationStation       ) found = TRUE; break;
++        case DOT11AUTHENTICATEFAILSTATUS:
++          if ( sc->authenticateFailStatus            ) found = TRUE; break;
++        case DOT11AUTHENTICATEFAILSTATION:
++          if ( sc->haveAuthenticateFailStation       ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11STATIONID: 
++//    *write_method = write_dot11StationID;
++      MACWork[ 0] = sc->stationID [ 0];
++      MACWork[ 1] = sc->stationID [ 1];
++      MACWork[ 2] = sc->stationID [ 3];
++      MACWork[ 3] = sc->stationID [ 4];
++      MACWork[ 4] = sc->stationID [ 6];
++      MACWork[ 5] = sc->stationID [ 7];
++      MACWork[ 6] = sc->stationID [ 9];
++      MACWork[ 7] = sc->stationID [10];
++      MACWork[ 8] = sc->stationID [12];
++      MACWork[ 9] = sc->stationID [13];
++      MACWork[10] = sc->stationID [15];
++      MACWork[11] = sc->stationID [16];
++      MACWork[12] = '\0';
++      *var_len = 6;
++      return ( UCHAR * ) htob ( MACWork );
++
++    case DOT11MEDIUMOCCUPANCYLIMIT:
++//    *write_method = write_dot11MediumOccupancyLimit;
++      sc->mediumOccupancyLimit = 5;
++      return ( UCHAR * ) &sc->mediumOccupancyLimit;
++
++    case DOT11CFPOLLABLE:
++      return ( UCHAR * ) &sc->CFPPollable;
++
++    case DOT11CFPPERIOD:
++//    *write_method = write_dot11CFPPeriod;
++      return ( UCHAR * ) &sc->CFPPeriod;
++
++    case DOT11CFPMAXDURATION:
++//    *write_method = write_dot11CFPMaxDuration;
++      return ( UCHAR * ) &sc->maxDuration;
++
++    case DOT11AUTHENTICATIONRESPONSETIMEOUT:
++//    *write_method = write_dot11AuthenticationResponseTimeOut;
++      return ( UCHAR * ) &sc->authenticationResponseTimeOut;
++
++    case DOT11PRIVACYOPTIONIMPLEMENTED:
++      return ( UCHAR * ) &sc->privacyOptionImplemented;
++
++    case DOT11POWERMANAGEMENTMODE:
++//    *write_method = write_dot11PowerManagementMode;
++      return ( UCHAR * ) &sc->powerManagementMode;
++
++    case DOT11DESIREDSSID:
++//    *write_method = write_dot11DesiredSSID;
++      *var_len = strlen ( sc->desiredSSID );
++      return ( UCHAR * ) sc->desiredSSID;
++
++    case DOT11DESIREDBSSTYPE:
++//    *write_method = write_dot11DesiredBSSType;
++      return ( UCHAR * ) &sc->desiredBSSType;
++
++    case DOT11OPERATIONALRATESET:
++//    *write_method = write_dot11OperationalRateSet;
++      *var_len = strlen ( sc->operationalRateSet );
++      return ( UCHAR * ) sc->operationalRateSet;
++
++    case DOT11BEACONPERIOD: 
++//    *write_method = write_dot11BeaconPeriod;
++      return ( UCHAR * ) &sc->beaconPeriod;
++
++    case DOT11DTIMPERIOD:
++//    *write_method = write_dot11DTIMPeriod;
++      return ( UCHAR * ) &sc->DTIMPeriod;
++
++    case DOT11ASSOCIATIONRESPONSETIMEOUT:
++//    *write_method = write_dot11AssociationResponseTimeOut;
++      return ( UCHAR * ) &sc->associationResponseTimeOut;
++
++    case DOT11DISASSOCIATEREASON:
++      return ( UCHAR * ) &sc->disAssociationReason;
++
++    case DOT11DISASSOCIATESTATION:
++      MACWork[ 0] = sc->disAssociationStation[ 0];
++      MACWork[ 1] = sc->disAssociationStation[ 1];
++      MACWork[ 2] = sc->disAssociationStation[ 3];
++      MACWork[ 3] = sc->disAssociationStation[ 4];
++      MACWork[ 4] = sc->disAssociationStation[ 6];
++      MACWork[ 5] = sc->disAssociationStation[ 7];
++      MACWork[ 6] = sc->disAssociationStation[ 9];
++      MACWork[ 7] = sc->disAssociationStation[10];
++      MACWork[ 8] = sc->disAssociationStation[12];
++      MACWork[ 9] = sc->disAssociationStation[13];
++      MACWork[10] = sc->disAssociationStation[15];
++      MACWork[11] = sc->disAssociationStation[16];
++      MACWork[12] = '\0';
++      *var_len = 6;
++      return ( UCHAR * ) htob ( MACWork );
++
++    case DOT11DEAUTHENTICATEREASON:
++      return ( UCHAR * ) &sc->deAuthenticationReason;
++
++    case DOT11DEAUTHENTICATESTATION:
++      MACWork[ 0] = sc->deAuthenticationStation[ 0];
++      MACWork[ 1] = sc->deAuthenticationStation[ 1];
++      MACWork[ 2] = sc->deAuthenticationStation[ 3];
++      MACWork[ 3] = sc->deAuthenticationStation[ 4];
++      MACWork[ 4] = sc->deAuthenticationStation[ 6];
++      MACWork[ 5] = sc->deAuthenticationStation[ 7];
++      MACWork[ 6] = sc->deAuthenticationStation[ 9];
++      MACWork[ 7] = sc->deAuthenticationStation[10];
++      MACWork[ 8] = sc->deAuthenticationStation[12];
++      MACWork[ 9] = sc->deAuthenticationStation[13];
++      MACWork[10] = sc->deAuthenticationStation[15];
++      MACWork[11] = sc->deAuthenticationStation[16];
++      MACWork[12] = '\0';
++      *var_len = 6;
++      return ( UCHAR * ) htob ( MACWork );
++
++    case DOT11AUTHENTICATEFAILSTATUS:
++      return ( UCHAR * ) &sc->authenticateFailStatus;
++
++    case DOT11AUTHENTICATEFAILSTATION:
++      MACWork[ 0] = sc->authenticateFailStation[ 0];
++      MACWork[ 1] = sc->authenticateFailStation[ 1];
++      MACWork[ 2] = sc->authenticateFailStation[ 3];
++      MACWork[ 3] = sc->authenticateFailStation[ 4];
++      MACWork[ 4] = sc->authenticateFailStation[ 6];
++      MACWork[ 5] = sc->authenticateFailStation[ 7];
++      MACWork[ 6] = sc->authenticateFailStation[ 9];
++      MACWork[ 7] = sc->authenticateFailStation[10];
++      MACWork[ 8] = sc->authenticateFailStation[12];
++      MACWork[ 9] = sc->authenticateFailStation[13];
++      MACWork[10] = sc->authenticateFailStation[15];
++      MACWork[11] = sc->authenticateFailStation[16];
++      MACWork[12] = '\0';
++      *var_len = 6;
++      return ( UCHAR * ) htob ( MACWork );
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*  var_dot11AuthenticationAlgorithmsTable() -                               *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11AuthenticationAlgorithmsTable (  struct variable *vp,
++                                          oid     *name,
++                                          size_t  *length,
++                                          int     exact,
++                                          size_t  *var_len,
++                                          WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &aaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    aa = ( struct aaTbl_data * ) np->data;
++    rName[vp->namelen + 0] = aa->ifIndex;
++    rName[vp->namelen + 1] = aa->authenticationAlgorithmsIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11AUTHENTICATIONALGORITHM:
++          if ( aa->haveAuthenticationAlgorithm    ) found = TRUE; break;
++        case DOT11AUTHENTICATIONALGORITHMSENABLE:
++          if ( aa->authenticationAlgorithmsEnable ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11AUTHENTICATIONALGORITHM:
++      return ( UCHAR * ) &aa->authenticationAlgorithm;
++        
++    case DOT11AUTHENTICATIONALGORITHMSENABLE:
++//    *write_method = write_dot11AuthenticationAlgorithmsEnable;
++      return ( UCHAR * ) &aa->authenticationAlgorithmsEnable;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*  var_dot11WEPDefaultKeysTable() -                                         *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11WEPDefaultKeysTable ( struct variable *vp,
++                                oid     *name,
++                                size_t  *length,
++                                int     exact,
++                                size_t  *var_len,
++                                WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &dfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    df = ( struct dfTbl_data * ) np->data;
++    rName[vp->namelen + 0] = df->ifIndex;
++    rName[vp->namelen + 1] = df->WEPDefaultKeyIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11WEPDEFAULTKEYVALUE:
++          if ( df->haveWEPDefaultKeyValue ) found = TRUE; break;
++      }          
++    }          
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11WEPDEFAULTKEYVALUE:
++//    *write_method = write_dot11WEPDefaultKeyValue;
++      *var_len = strlen ( df->WEPDefaultKeyValue );
++      return ( UCHAR * ) df->WEPDefaultKeyValue;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*  var_dot11WEPKeyMappingsTable() -                                         *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11WEPKeyMappingsTable ( struct variable *vp,
++                                oid     *name,
++                                size_t  *length,
++                                int     exact,
++                                size_t  *var_len,
++                                WriteMethod **write_method)
++{
++  static char MACWork[17];
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &kmList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    km = ( struct kmTbl_data * ) np->data;
++    rName[vp->namelen + 0] = km->ifIndex;
++    rName[vp->namelen + 1] = km->WEPKeyMappingIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11WEPKEYMAPPINGADDRESS:
++          if ( km->haveWEPKeyMappingAddress ) found = TRUE; break;
++        case DOT11WEPKEYMAPPINGWEPON:
++          if ( km->haveWEPKeyMappingWEPOn   ) found = TRUE; break;
++        case DOT11WEPKEYMAPPINGVALUE:
++          if ( km->haveWEPKeyMappingValue   ) found = TRUE; break;
++        case DOT11WEPKEYMAPPINGSTATUS:
++          if ( km->haveWEPKeyMappingStatus  ) found = TRUE; break; 
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11WEPKEYMAPPINGADDRESS:
++//    *write_method = write_dot11WEPKeyMappingAddress;
++      MACWork[ 0] = km->WEPKeyMappingAddress[ 0];
++      MACWork[ 1] = km->WEPKeyMappingAddress[ 1];
++      MACWork[ 2] = km->WEPKeyMappingAddress[ 3];
++      MACWork[ 3] = km->WEPKeyMappingAddress[ 4];
++      MACWork[ 4] = km->WEPKeyMappingAddress[ 6];
++      MACWork[ 5] = km->WEPKeyMappingAddress[ 7];
++      MACWork[ 6] = km->WEPKeyMappingAddress[ 9];
++      MACWork[ 7] = km->WEPKeyMappingAddress[10];
++      MACWork[ 8] = km->WEPKeyMappingAddress[12];
++      MACWork[ 9] = km->WEPKeyMappingAddress[13];
++      MACWork[10] = km->WEPKeyMappingAddress[15];
++      MACWork[11] = km->WEPKeyMappingAddress[16];
++      MACWork[12] = '\0';
++      *var_len = 6;
++      return ( UCHAR * ) htob ( MACWork );
++
++    case DOT11WEPKEYMAPPINGWEPON:
++//    *write_method = write_dot11WEPKeyMappingWEPOn;
++      return ( UCHAR * ) &km->WEPKeyMappingWEPOn;
++
++    case DOT11WEPKEYMAPPINGVALUE:
++//    *write_method = write_dot11WEPKeyMappingValue;
++      *var_len = strlen ( km->WEPKeyMappingValue );
++      return ( UCHAR * ) km->WEPKeyMappingValue;
++
++    case DOT11WEPKEYMAPPINGSTATUS:
++//    *write_method = write_dot11WEPKeyMappingStatus;
++      return ( UCHAR * ) &km->WEPKeyMappingStatus;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11PrivacyTable() -                                               *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11PrivacyTable ( struct variable *vp,
++                        oid     *name,
++                        size_t  *length,
++                        int     exact,
++                        size_t  *var_len,
++                        WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &prList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    pr = ( struct prTbl_data * ) np->data;
++    rName[vp->namelen] = pr->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11PRIVACYINVOKED:
++          if ( pr->havePrivacyInvoked      ) found = TRUE; break;
++        case DOT11WEPDEFAULTKEYID:
++          if ( pr->haveWEPDefaultKeyID     ) found = TRUE; break;
++        case DOT11WEPKEYMAPPINGLENGTH:
++          if ( pr->haveWEPKeyMappingLength ) found = TRUE; break;
++        case DOT11EXCLUDEUNENCRYPTED:
++          if ( pr->haveExcludeUnencrypted  ) found = TRUE; break;
++        case DOT11WEPICVERRORCOUNT:
++          if ( pr->haveWEPICVErrorCount    ) found = TRUE; break;
++        case DOT11WEPEXCLUDEDCOUNT:
++          if ( pr->haveWEPExcludedCount    ) found = TRUE; break;
++      }      
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11PRIVACYINVOKED:
++//    *write_method = write_dot11PrivacyInvoked;
++      return ( UCHAR * ) &pr->privacyInvoked;
++
++    case DOT11WEPDEFAULTKEYID:
++//    *write_method = write_dot11WEPDefaultKeyID;
++      return ( UCHAR * ) &pr->WEPDefaultKeyID;
++
++    case DOT11WEPKEYMAPPINGLENGTH:
++//    *write_method = write_dot11WEPKeyMappingLength;
++      return ( UCHAR * ) &pr->WEPKeyMappingLength;
++
++    case DOT11EXCLUDEUNENCRYPTED:
++//    *write_method = write_dot11ExcludeUnencrypted;
++      return ( UCHAR * ) &pr->excludeUnencrypted;
++
++    case DOT11WEPICVERRORCOUNT:
++      return ( UCHAR * ) &pr->WEPICVErrorCount;
++        
++    case DOT11WEPEXCLUDEDCOUNT:
++      return ( UCHAR * ) &pr->WEPExcludedCount;
++        
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11OperationTable() -                                             *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11OperationTable ( struct variable *vp,
++                          oid     *name,
++                          size_t  *length,
++                          int     exact,
++                          size_t  *var_len,
++                          WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++  static char MACWork[17];
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &opList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    op = ( struct opTbl_data * ) np->data;
++    rName[vp->namelen] = op->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++
++      switch ( vp->magic ) {      // found requested OID, now check for requested variable
++        case DOT11MACADDRESS:             
++          if ( op->haveMACAddress              ) found = TRUE; break;
++        case DOT11RTSTHRESHOLD:           
++          if ( op->haveRTSThreshold            ) found = TRUE; break;
++        case DOT11SHORTRETRYLIMIT: 
++          if ( op->haveShortRetryLimit         ) found = TRUE; break;
++        case DOT11LONGRETRYLIMIT:
++          if ( op->haveLongRetryLimit          ) found = TRUE; break;
++        case DOT11FRAGMENTATIONTHRESHOLD: 
++          if ( op->haveFragmentationThreshold  ) found = TRUE; break;
++        case DOT11MAXTRANSMITMSDULIFETIME: 
++          if ( op->haveMaxTransmitMSDULifetime ) found = TRUE; break;
++        case DOT11MAXRECEIVELIFETIME:
++          if ( op->haveMaxReceiveLifetime      ) found = TRUE; break;
++        case DOT11MANUFACTURERID:
++          if ( op->haveManufacturerID          ) found = TRUE; break;
++        case DOT11PRODUCTID:
++          if ( op->haveProductID               ) found = TRUE; break;
++      }
++    }
++    if ( found ) 
++      break;
++  }
++
++  if ( !found )
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11MACADDRESS:
++      MACWork[ 0] = op->MACAddress[ 0];
++      MACWork[ 1] = op->MACAddress[ 1];
++      MACWork[ 2] = op->MACAddress[ 3];
++      MACWork[ 3] = op->MACAddress[ 4];
++      MACWork[ 4] = op->MACAddress[ 6];
++      MACWork[ 5] = op->MACAddress[ 7];
++      MACWork[ 6] = op->MACAddress[ 9];
++      MACWork[ 7] = op->MACAddress[10];
++      MACWork[ 8] = op->MACAddress[12];
++      MACWork[ 9] = op->MACAddress[13];
++      MACWork[10] = op->MACAddress[15];
++      MACWork[11] = op->MACAddress[16];
++      MACWork[12] = '\0';
++      *var_len = 6;
++      return ( UCHAR * ) htob ( MACWork );
++        
++    case DOT11RTSTHRESHOLD:
++//    *write_method = write_dot11RTSThreshold;
++      return ( UCHAR * ) &op->RTSThreshold;
++
++    case DOT11SHORTRETRYLIMIT:
++//    *write_method = write_dot11ShortRetryLimit;
++      return ( UCHAR * ) &op->shortRetryLimit;
++
++    case DOT11LONGRETRYLIMIT:
++//    *write_method = write_dot11LongRetryLimit;
++      return ( UCHAR * ) &op->longRetryLimit;
++
++    case DOT11FRAGMENTATIONTHRESHOLD:
++//    *write_method = write_dot11FragmentationThreshold;
++      return ( UCHAR * ) &op->fragmentationThreshold;
++
++    case DOT11MAXTRANSMITMSDULIFETIME:
++//    *write_method = write_dot11MaxTransmitMSDULifetime;
++      return ( UCHAR * ) &op->maxTransmitMSDULifetime;
++
++    case DOT11MAXRECEIVELIFETIME:
++//    *write_method = write_dot11MaxReceiveLifetime;
++      return ( UCHAR * ) &op->maxReceiveLifetime;
++
++    case DOT11MANUFACTURERID:
++      *var_len = strlen ( op->manufacturerID );
++      return ( UCHAR * ) op->manufacturerID;
++
++    case DOT11PRODUCTID:
++      *var_len = strlen ( op->productID );
++      return ( UCHAR * ) op->productID;
++        
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11CountersTable() -                                              *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11CountersTable(struct variable *vp,
++          oid     *name,
++          size_t  *length,
++          int     exact,
++          size_t  *var_len,
++          WriteMethod **write_method)
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &coList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    co = ( struct coTbl_data * ) np->data;
++    rName[vp->namelen] = co->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11TRANSMITTEDFRAGMENTCOUNT:
++          if ( co->haveTransmittedFragmentCount    ) found = TRUE; break;
++        case DOT11MULTICASTTRANSMITTEDFRAMECOUNT:
++          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
++        case DOT11FAILEDCOUNT:
++          if ( co->haveFailedCount                 ) found = TRUE; break;
++        case DOT11RETRYCOUNT:
++          if ( co->haveRetryCount                  ) found = TRUE; break;
++        case DOT11MULTIPLERETRYCOUNT:
++          if ( co->haveMultipleRetryCount          ) found = TRUE; break;
++        case DOT11FRAMEDUPLICATECOUNT:
++          if ( co->haveFrameDuplicateCount         ) found = TRUE; break;
++        case DOT11RTSSUCCESSCOUNT:
++          if ( co->haveRTSSuccessCount             ) found = TRUE; break;
++        case DOT11RTSFAILURECOUNT:
++          if ( co->haveRTSFailureCount             ) found = TRUE; break;
++        case DOT11ACKFAILURECOUNT:
++          if ( co->haveACKFailureCount             ) found = TRUE; break;
++        case DOT11RECEIVEDFRAGMENTCOUNT:
++          if ( co->haveReceivedFragmentCount       ) found = TRUE; break;
++        case DOT11MULTICASTRECEIVEDFRAMECOUNT:
++          if ( co->haveMulticastReceivedFrameCount ) found = TRUE; break;
++        case DOT11FCSERRORCOUNT:
++          if ( co->haveFCSErrorCount               ) found = TRUE; break;
++        case DOT11TRANSMITTEDFRAMECOUNT:
++          if ( co->haveTransmittedFrameCount       ) found = TRUE; break;
++        case DOT11WEPUNDECRYPTABLECOUNT:
++          if ( co->haveWEPUndecryptableCount       ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11TRANSMITTEDFRAGMENTCOUNT:       return ( UCHAR * ) &co->transmittedFragmentCount;
++    case DOT11MULTICASTTRANSMITTEDFRAMECOUNT: return ( UCHAR * ) &co->transmittedFrameCount;
++    case DOT11FAILEDCOUNT:                    return ( UCHAR * ) &co->failedCount;
++    case DOT11RETRYCOUNT:                     return ( UCHAR * ) &co->retryCount;
++    case DOT11MULTIPLERETRYCOUNT:             return ( UCHAR * ) &co->multipleRetryCount;
++    case DOT11FRAMEDUPLICATECOUNT:            return ( UCHAR * ) &co->frameDuplicateCount;
++    case DOT11RTSSUCCESSCOUNT:                return ( UCHAR * ) &co->RTSSuccessCount;
++    case DOT11RTSFAILURECOUNT:                return ( UCHAR * ) &co->RTSFailureCount;
++    case DOT11ACKFAILURECOUNT:                return ( UCHAR * ) &co->ACKFailureCount;
++    case DOT11RECEIVEDFRAGMENTCOUNT:          return ( UCHAR * ) &co->receivedFragmentCount;
++    case DOT11MULTICASTRECEIVEDFRAMECOUNT:    return ( UCHAR * ) &co->multicastReceivedFrameCount;
++    case DOT11FCSERRORCOUNT:                  return ( UCHAR * ) &co->FCSErrorCount;
++    case DOT11TRANSMITTEDFRAMECOUNT:          return ( UCHAR * ) &co->transmittedFrameCount;
++    case DOT11WEPUNDECRYPTABLECOUNT:          return ( UCHAR * ) &co->WEPUndecryptableCount;
++        
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11GroupAddressesTable() -                                        *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11GroupAddressesTable(struct variable *vp,
++          oid     *name,
++          size_t  *length,
++          int     exact,
++          size_t  *var_len,
++          WriteMethod **write_method)
++{
++  static char MACWork[17];
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &gaList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    ga = ( struct gaTbl_data * ) np->data;
++    rName[vp->namelen + 0] = ga->ifIndex;
++    rName[vp->namelen + 1] = ga->groupAddressesIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11ADDRESS:
++          if ( ga->haveAddress              ) found = TRUE; break;
++        case DOT11GROUPADDRESSESSTATUS:
++          if ( ga->haveGroupAddressesStatus ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11ADDRESS:
++//    *write_method = write_dot11Address;
++      MACWork[ 0] = ga->address[ 0];
++      MACWork[ 1] = ga->address[ 1];
++      MACWork[ 2] = ga->address[ 3];
++      MACWork[ 3] = ga->address[ 4];
++      MACWork[ 4] = ga->address[ 6];
++      MACWork[ 5] = ga->address[ 7];
++      MACWork[ 6] = ga->address[ 9];
++      MACWork[ 7] = ga->address[10];
++      MACWork[ 8] = ga->address[12];
++      MACWork[ 9] = ga->address[13];
++      MACWork[10] = ga->address[15];
++      MACWork[11] = ga->address[16];
++      MACWork[12] = '\0';
++      *var_len = 6;
++      return ( UCHAR * ) htob ( MACWork );
++
++    case DOT11GROUPADDRESSESSTATUS:
++//    *write_method = write_dot11GroupAddressesStatus;
++      return ( UCHAR * ) &ga->groupAddressesStatus;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11ResourceInfoTable() -                                          *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11ResourceInfoTable ( struct variable *vp,
++                              oid     *name,
++                              size_t  *length,
++                              int     exact,
++                              size_t  *var_len,
++                              WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &riList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    ri = ( struct riTbl_data * ) np->data;
++    rName[vp->namelen] = ri->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11MANUFACTUREROUI:
++          if ( ri->haveManufacturerOUI            ) found = TRUE; break;
++        case DOT11MANUFACTURERNAME:
++          if ( ri->haveManufacturerName           ) found = TRUE; break;
++        case DOT11MANUFACTURERPRODUCTNAME:
++          if ( ri->haveManufacturerProductName    ) found = TRUE; break;
++        case DOT11MANUFACTURERPRODUCTVERSION:
++          if ( ri->haveManufacturerProductVersion ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11MANUFACTUREROUI:
++      *var_len = strlen ( ri->manufacturerOUI );
++      return ( UCHAR * ) ri->manufacturerOUI;
++        
++    case DOT11MANUFACTURERNAME:
++      *var_len = strlen ( ri->manufacturerName );
++      return ( UCHAR * ) ri->manufacturerName;
++        
++    case DOT11MANUFACTURERPRODUCTNAME:
++      *var_len = strlen ( ri->manufacturerProductName );
++      return ( UCHAR * ) ri->manufacturerProductName;
++        
++    case DOT11MANUFACTURERPRODUCTVERSION:
++      *var_len = strlen ( ri->manufacturerProductVersion );
++      return ( UCHAR * ) ri->manufacturerProductVersion;
++        
++    default: 
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11PhyOperationTable() -                                          *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11PhyOperationTable ( struct variable *vp,
++                              oid     *name,
++                              size_t  *length,
++                              int     exact,
++                              size_t  *var_len,
++                              WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &poList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    po = ( struct poTbl_data * ) np->data;
++    rName[vp->namelen] = po->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11PHYTYPE:
++          if ( po->havePHYType          ) found = TRUE; break;
++        case DOT11CURRENTREGDOMAIN:
++          if ( po->haveCurrentRegDomain ) found = TRUE; break;
++        case DOT11TEMPTYPE:
++          if ( po->haveTempType         ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11PHYTYPE:
++      return ( UCHAR * ) &po->PHYType;
++        
++    case DOT11CURRENTREGDOMAIN:
++//    *write_method = write_dot11CurrentRegDomain;
++      return ( UCHAR * ) &po->currentRegDomain;
++
++    case DOT11TEMPTYPE:
++      return ( UCHAR * ) &po->tempType;
++        
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11PhyAntennaTable() -                                            *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11PhyAntennaTable ( struct variable *vp,
++                            oid     *name,
++                            size_t  *length,
++                            int     exact,
++                            size_t  *var_len,
++                            WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &paList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    pa = ( struct paTbl_data * ) np->data;
++    rName[vp->namelen] = pa->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11CURRENTTXANTENNA:
++          if ( pa->haveCurrentTxAntenna ) found = TRUE; break;
++        case DOT11DIVERSITYSUPPORT:
++          if ( pa->haveDiversitySupport ) found = TRUE; break;
++        case DOT11CURRENTRXANTENNA:
++          if ( pa->haveCurrentRxAntenna ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11CURRENTTXANTENNA:
++//    *write_method = write_dot11CurrentTxAntenna;
++      return ( UCHAR * ) &pa->currentTxAntenna;
++
++    case DOT11DIVERSITYSUPPORT:
++      return ( UCHAR * ) &pa->diversitySupport;
++        
++    case DOT11CURRENTRXANTENNA:
++//    *write_method = write_dot11CurrentRxAntenna;
++      return ( UCHAR * ) &pa->currentRxAntenna;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*   var_dot11PhyTxPowerTable() -                                            *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11PhyTxPowerTable ( struct variable *vp,
++                            oid     *name,
++                            size_t  *length,
++                            int     exact,
++                            size_t  *var_len,
++                            WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &ptList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    pt = ( struct ptTbl_data * ) np->data;
++    rName[vp->namelen] = pt->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11NUMBERSUPPORTEDPOWERLEVELS:
++          if ( pt->haveNumberSupportedPowerLevels ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL1:
++          if ( pt->haveTxPowerLevel1   ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL2:
++          if ( pt->haveTxPowerLevel2   ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL3:
++          if ( pt->haveTxPowerLevel3   ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL4:
++          if ( pt->haveTxPowerLevel4   ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL5:
++          if ( pt->haveTxPowerLevel5   ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL6:
++          if ( pt->haveTxPowerLevel6   ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL7:
++          if ( pt->haveTxPowerLevel7   ) found = TRUE; break;
++        case DOT11TXPOWERLEVEL8:
++          if ( pt->haveTxPowerLevel8   ) found = TRUE; break;
++        case DOT11CURRENTTXPOWERLEVEL:
++          if ( pt->currentTxPowerLevel ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11NUMBERSUPPORTEDPOWERLEVELS: 
++      return ( UCHAR * ) &pt->numberSupportedPowerLevels;
++
++    case DOT11TXPOWERLEVEL1: return ( UCHAR * ) &pt->TxPowerLevel1;
++    case DOT11TXPOWERLEVEL2: return ( UCHAR * ) &pt->TxPowerLevel2;
++    case DOT11TXPOWERLEVEL3: return ( UCHAR * ) &pt->TxPowerLevel3;
++    case DOT11TXPOWERLEVEL4: return ( UCHAR * ) &pt->TxPowerLevel4;
++    case DOT11TXPOWERLEVEL5: return ( UCHAR * ) &pt->TxPowerLevel5;
++    case DOT11TXPOWERLEVEL6: return ( UCHAR * ) &pt->TxPowerLevel6;
++    case DOT11TXPOWERLEVEL7: return ( UCHAR * ) &pt->TxPowerLevel7;
++    case DOT11TXPOWERLEVEL8: return ( UCHAR * ) &pt->TxPowerLevel8;
++        
++    case DOT11CURRENTTXPOWERLEVEL:
++//    *write_method = write_dot11CurrentTxPowerLevel;
++      return ( UCHAR * ) &pt->currentTxPowerLevel;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*     var_dot11PhyFHSSTable() -                                             *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11PhyFHSSTable ( struct variable *vp,
++                        oid     *name,
++                        size_t  *length,
++                        int     exact,
++                        size_t  *var_len,
++                        WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &pfList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    pf = ( struct pfTbl_data * ) np->data;
++    rName[vp->namelen] = pf->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11HOPTIME:
++          if ( pf->haveHopTime              ) found = TRUE; break;
++        case DOT11CURRENTCHANNELNUMBER:
++          if ( pf->haveCurrentChannelNumber ) found = TRUE; break;
++        case DOT11MAXDWELLTIME:
++          if ( pf->haveMaxDwellTime         ) found = TRUE; break;
++        case DOT11CURRENTDWELLTIME:
++          if ( pf->haveCurrentDwellTime     ) found = TRUE; break;
++        case DOT11CURRENTSET:
++          if ( pf->haveCurrentSet           ) found = TRUE; break;
++        case DOT11CURRENTPATTERN:
++          if ( pf->haveCurrentPattern       ) found = TRUE; break;
++        case DOT11CURRENTINDEX:
++          if ( pf->haveCurrentIndex         ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11HOPTIME:
++      return ( UCHAR * ) &pf->hopTime;
++        
++    case DOT11CURRENTCHANNELNUMBER:
++//    *write_method = write_dot11CurrentChannelNumber;
++      return ( UCHAR * ) &pf->currentChannelNumber;
++
++    case DOT11MAXDWELLTIME:
++      return ( UCHAR * ) &pf->maxDwellTime;
++        
++    case DOT11CURRENTDWELLTIME:
++//    *write_method = write_dot11CurrentDwellTime;
++      return ( UCHAR * ) &pf->currentDwellTime;
++
++    case DOT11CURRENTSET:
++//    *write_method = write_dot11CurrentSet;
++      return ( UCHAR * ) &pf->currentSet;
++
++    case DOT11CURRENTPATTERN:
++//    *write_method = write_dot11CurrentPattern;
++      return ( UCHAR * ) &pf->currentPattern;
++
++    case DOT11CURRENTINDEX:
++//    *write_method = write_dot11CurrentIndex;
++      return ( UCHAR * ) &pf->currentIndex;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*     var_dot11PhyDSSSTable() -                                             *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11PhyDSSSTable ( struct variable *vp,
++                        oid     *name,
++                        size_t  *length,
++                        int     exact,
++                        size_t  *var_len,
++                        WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &pdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    pd = ( struct pdTbl_data * ) np->data;
++    rName[vp->namelen] = pd->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11CURRENTCHANNEL:
++          if ( pd->haveCurrentChannel   ) found = TRUE; break;
++        case DOT11CCAMODESUPPORTED:
++          if ( pd->haveCCAModeSupported ) found = TRUE; break;
++        case DOT11CURRENTCCAMODE:
++          if ( pd->haveCurrentCCAMode   ) found = TRUE; break;
++        case DOT11EDTHRESHOLD:
++          if ( pd->haveEDThreshold      ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11CURRENTCHANNEL:
++//    *write_method = write_dot11CurrentChannel;
++      return ( UCHAR * ) &pd->currentChannel;
++
++    case DOT11CCAMODESUPPORTED:
++      return ( UCHAR * ) &pd->CCAModeSupported;
++        
++    case DOT11CURRENTCCAMODE:
++//    *write_method = write_dot11CurrentCCAMode;
++      return ( UCHAR * ) &pd->currentCCAMode;
++
++    case DOT11EDTHRESHOLD:
++//    *write_method = write_dot11EDThreshold;
++      return ( UCHAR * ) &pd->EDThreshold;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*     var_dot11PhyIRTable() -                                             *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11PhyIRTable ( struct variable *vp,
++                      oid     *name,
++                      size_t  *length,
++                      int     exact,
++                      size_t  *var_len,
++                      WriteMethod **write_method)
++{
++
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &piList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    pi = ( struct piTbl_data * ) np->data;
++    rName[vp->namelen] = pi->ifIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 1, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11CCAWATCHDOGTIMERMAX:
++          if ( pi->CCAWatchdogTimerMax ) found = TRUE; break;
++        case DOT11CCAWATCHDOGCOUNTMAX:
++          if ( pi->CCAWatchdogCountMax ) found = TRUE; break;
++        case DOT11CCAWATCHDOGTIMERMIN:
++          if ( pi->CCAWatchdogTimerMin ) found = TRUE; break;
++        case DOT11CCAWATCHDOGCOUNTMIN:
++          if ( pi->CCAWatchdogCountMin ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 1 ) * sizeof ( oid ));
++  *length = vp->namelen + 1;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11CCAWATCHDOGTIMERMAX:
++//    *write_method = write_dot11CCAWatchdogTimerMax;
++      return ( UCHAR * ) &pi->CCAWatchdogTimerMax;
++
++    case DOT11CCAWATCHDOGCOUNTMAX:
++//   *write_method = write_dot11CCAWatchdogCountMax;
++      return ( UCHAR * ) &pi->CCAWatchdogCountMax;
++
++    case DOT11CCAWATCHDOGTIMERMIN:
++//    *write_method = write_dot11CCAWatchdogTimerMin;
++      return ( UCHAR * ) &pi->CCAWatchdogTimerMin;
++
++    case DOT11CCAWATCHDOGCOUNTMIN:
++//    *write_method = write_dot11CCAWatchdogCountMin;
++      return ( UCHAR * ) &pi->CCAWatchdogCountMin;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*     var_dot11RegDomainsSupportedTable() -                                 *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11RegDomainsSupportedTable ( struct variable *vp,
++                                    oid     *name,
++                                    size_t  *length,
++                                    int     exact,
++                                    size_t  *var_len,
++                                    WriteMethod **write_method)
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &rdList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    rd = ( struct rdTbl_data * ) np->data;
++    rName[vp->namelen + 0] = rd->ifIndex;
++    rName[vp->namelen + 1] = rd->regDomainsSupportIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11REGDOMAINSSUPPORTVALUE:
++          if ( rd->haveRegDomainsSupportValue ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11REGDOMAINSSUPPORTVALUE:
++      return ( UCHAR * ) &rd->regDomainsSupportValue;
++        
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*     var_dot11AntennasListTable() -                                        *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11AntennasListTable(struct variable *vp,
++          oid     *name,
++          size_t  *length,
++          int     exact,
++          size_t  *var_len,
++          WriteMethod **write_method)
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &alList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    al = ( struct alTbl_data * ) np->data;
++    rName[vp->namelen + 0] = al->ifIndex;
++    rName[vp->namelen + 1] = al->antennaListIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11SUPPORTEDTXANTENNA:
++          if ( al->haveSupportedTxAntenna   ) found = TRUE; break;
++        case DOT11SUPPORTEDRXANTENNA:
++          if ( al->haveSupportedRxAntenna   ) found = TRUE; break;
++        case DOT11DIVERSITYSELECTIONRX:
++          if ( al->haveDiversitySelectionRx ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11SUPPORTEDTXANTENNA:
++//    *write_method = write_dot11SupportedTxAntenna;
++      return ( UCHAR * ) &al->supportedTxAntenna;
++
++    case DOT11SUPPORTEDRXANTENNA:
++//    *write_method = write_dot11SupportedRxAntenna;
++      return ( UCHAR * ) &al->supportedRxAntenna;
++
++    case DOT11DIVERSITYSELECTIONRX:
++//    *write_method = write_dot11DiversitySelectionRx;
++      return ( UCHAR * ) &al->diversitySelectionRx;
++
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*     var_dot11SupportedDataRatesTxTable() -                                *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11SupportedDataRatesTxTable ( struct variable *vp,
++                                      oid     *name,
++                                      size_t  *length,
++                                      int     exact,
++                                      size_t  *var_len,
++                                      WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &rtList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    rt = ( struct rtTbl_data * ) np->data;
++    rName[vp->namelen + 0] = rt->ifIndex;
++    rName[vp->namelen + 1] = rt->supportedDataRatesTxIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++         case DOT11SUPPORTEDDATARATESTXVALUE:
++          if ( rt->haveSupportedDataRatesTxValue ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11SUPPORTEDDATARATESTXVALUE:
++      return ( UCHAR * ) &rt->supportedDataRatesTxValue;
++        
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++*     var_dot11SupportedDataRatesRxTable() -                                *
++*                                                                           *
++****************************************************************************/
++unsigned char *
++var_dot11SupportedDataRatesRxTable ( struct variable *vp,
++                                      oid     *name,
++                                      size_t  *length,
++                                      int     exact,
++                                      size_t  *var_len,
++                                      WriteMethod **write_method )
++{
++  int found = FALSE;
++  oid rName [ MAX_OID_LEN ];                            // OID to be returned
++
++  loadTables();
++  memcpy (( char * ) rName, ( char * ) vp->name, ( int ) vp->namelen * sizeof ( oid ));
++  for ( np = LIST_FIRST ( &rrList ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    rr = ( struct rrTbl_data * ) np->data;
++    rName[vp->namelen + 0] = rr->ifIndex;
++    rName[vp->namelen + 1] = rr->supportedDataRatesRxIndex;
++    if ((  exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) == 0 )) ||
++        ( !exact && ( snmp_oid_compare ( rName, vp->namelen + 2, name, *length ) >  0 ))) {
++      switch ( vp->magic ) {
++        case DOT11SUPPORTEDDATARATESRXVALUE:
++          if ( rr->haveSupportedDataRatesRxValue ) found = TRUE; break;
++      }
++    }
++    if ( found )
++      break;
++  }
++
++  if ( !found ) 
++    return NULL;
++
++  memcpy (( char * ) name, ( char * ) rName, ( vp->namelen + 2 ) * sizeof ( oid ));
++  *length = vp->namelen + 2;
++  *var_len = sizeof ( long );
++  *write_method = NULL;
++
++  switch ( vp->magic ) {
++
++    case DOT11SUPPORTEDDATARATESRXVALUE:
++      return ( UCHAR * ) &rr->supportedDataRatesRxValue;
++        
++    default:
++      ERROR_MSG ( "" );
++  }
++
++  return NULL;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11StationID(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static unsigned char string[SPRINT_MAX_LEN];
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_OCTET_STR ) {
++        fprintf ( stderr, "write to dot11StationID not ASN_OCTET_STR\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( string )) {
++        fprintf ( stderr,"write to dot11StationID: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11MediumOccupancyLimit(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11MediumOccupancyLimit not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11MediumOccupancyLimit: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CFPPeriod(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CFPPeriod not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CFPPeriod: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CFPMaxDuration(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CFPMaxDuration not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CFPMaxDuration: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11AuthenticationResponseTimeOut(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11AuthenticationResponseTimeOut: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11PowerManagementMode(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11PowerManagementMode not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )) {
++        fprintf ( stderr, "write to dot11PowerManagementMode: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11DesiredSSID(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static unsigned char string[SPRINT_MAX_LEN];
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_OCTET_STR ) {
++        fprintf ( stderr, "write to dot11DesiredSSID not ASN_OCTET_STR\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( string )){
++        fprintf ( stderr, "write to dot11DesiredSSID: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11DesiredBSSType(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11DesiredBSSType not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11DesiredBSSType: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11OperationalRateSet(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static unsigned char string[SPRINT_MAX_LEN];
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_OCTET_STR ) {
++        fprintf ( stderr, "write to dot11OperationalRateSet not ASN_OCTET_STR\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( string )){
++        fprintf ( stderr, "write to dot11OperationalRateSet: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11BeaconPeriod(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11BeaconPeriod not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11BeaconPeriod: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11DTIMPeriod(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11DTIMPeriod not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11DTIMPeriod: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11AssociationResponseTimeOut(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11AssociationResponseTimeOut not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )) {
++        fprintf ( stderr,"write to dot11AssociationResponseTimeOut: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11AuthenticationAlgorithmsEnable(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11AuthenticationAlgorithmsEnable not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11AuthenticationAlgorithmsEnable: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11WEPDefaultKeyValue(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static unsigned char string[SPRINT_MAX_LEN];
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_OCTET_STR ) {
++        fprintf ( stderr, "write to dot11WEPDefaultKeyValue not ASN_OCTET_STR\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( string )){
++        fprintf ( stderr,"write to dot11WEPDefaultKeyValue: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11WEPKeyMappingAddress(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static unsigned char string[SPRINT_MAX_LEN];
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_OCTET_STR ) {
++        fprintf ( stderr, "write to dot11WEPKeyMappingAddress not ASN_OCTET_STR\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( string )) {
++        fprintf ( stderr,"write to dot11WEPKeyMappingAddress: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11WEPKeyMappingWEPOn(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11WEPKeyMappingWEPOn: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11WEPKeyMappingValue(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static unsigned char string[SPRINT_MAX_LEN];
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_OCTET_STR ) {
++        fprintf ( stderr, "write to dot11WEPKeyMappingValue not ASN_OCTET_STR\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( string )) {
++        fprintf ( stderr, "write to dot11WEPKeyMappingValue: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11WEPKeyMappingStatus(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11WEPKeyMappingStatus not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11WEPKeyMappingStatus: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11PrivacyInvoked(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11PrivacyInvoked not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11PrivacyInvoked: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11WEPDefaultKeyID(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11WEPDefaultKeyID not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11WEPDefaultKeyID: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11WEPKeyMappingLength(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11WEPKeyMappingLength not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11WEPKeyMappingLength: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11ExcludeUnencrypted(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11ExcludeUnencrypted not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11ExcludeUnencrypted: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11RTSThreshold(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ){
++        fprintf ( stderr, "write to dot11RTSThreshold not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11RTSThreshold: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11ShortRetryLimit(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11ShortRetryLimit not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11ShortRetryLimit: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11LongRetryLimit(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11LongRetryLimit not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11LongRetryLimit: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11FragmentationThreshold(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11FragmentationThreshold not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11FragmentationThreshold: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11MaxTransmitMSDULifetime(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11MaxTransmitMSDULifetime: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11MaxReceiveLifetime(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11MaxReceiveLifetime not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11MaxReceiveLifetime: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11Address(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static unsigned char string[SPRINT_MAX_LEN];
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_OCTET_STR ) {
++        fprintf ( stderr, "write to dot11Address not ASN_OCTET_STR\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( string )){
++        fprintf ( stderr, "write to dot11Address: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11GroupAddressesStatus(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11GroupAddressesStatus not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11GroupAddressesStatus: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentRegDomain(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentRegDomain not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentRegDomain: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentTxAntenna(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentTxAntenna not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentTxAntenna: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentRxAntenna(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentRxAntenna not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11CurrentRxAntenna: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentTxPowerLevel(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentTxPowerLevel not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentTxPowerLevel: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentChannelNumber(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentChannelNumber not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11CurrentChannelNumber: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentDwellTime(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentDwellTime not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentDwellTime: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentSet(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentSet not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentSet: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentPattern(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentPattern not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentPattern: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentIndex(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentIndex not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentIndex: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentChannel(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentChannel not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CurrentChannel: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CurrentCCAMode(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CurrentCCAMode not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11CurrentCCAMode: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11EDThreshold(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11EDThreshold not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11EDThreshold: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CCAWatchdogTimerMax(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CCAWatchdogTimerMax: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CCAWatchdogCountMax(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CCAWatchdogCountMax not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CCAWatchdogCountMax: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CCAWatchdogTimerMin(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CCAWatchdogTimerMin: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11CCAWatchdogCountMin(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11CCAWatchdogCountMin not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11CCAWatchdogCountMin: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11SupportedTxAntenna(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11SupportedTxAntenna not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11SupportedTxAntenna: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11SupportedRxAntenna(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11SupportedRxAntenna not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr,"write to dot11SupportedRxAntenna: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++int
++write_dot11DiversitySelectionRx(int      action,
++            u_char   *var_val,
++            u_char   var_val_type,
++            size_t   var_val_len,
++            u_char   *statP,
++            oid      *name,
++            size_t   name_len)
++{
++  static long *long_ret;
++  int size;
++
++  switch ( action ) {
++
++    case RESERVE1:
++      if ( var_val_type != ASN_INTEGER ) {
++        fprintf ( stderr, "write to dot11DiversitySelectionRx not ASN_INTEGER\n" );
++        return SNMP_ERR_WRONGTYPE;
++      }
++      if ( var_val_len > sizeof ( long_ret )){
++        fprintf ( stderr, "write to dot11DiversitySelectionRx: bad length\n" );
++        return SNMP_ERR_WRONGLENGTH;
++      }
++      break;
++
++    case RESERVE2:
++    case FREE:
++    case ACTION:
++    case UNDO:
++      break;
++
++    case COMMIT:
++      break;
++  }
++
++  return SNMP_ERR_NOERROR;
++}
++
++/****************************************************************************
++*                                                                           *
++*                      loadTables() - Load the Tables                       *
++*                                                                           *
++****************************************************************************/
++static void loadTables()
++{
++  int skfd;                               // generic raw socket desc
++  struct iwreq wrq;                       // ioctl request structure
++  struct ifreq ifr;
++  struct timeval et;                      // elapsed time
++  struct wireless_info info;              // workarea for wireless ioctl information
++  FILE *fp;
++  char  bfr[1024], ifName[1024];
++  char *s, *t;
++
++  gettimeofday ( &et, ( struct timezone * ) 0 );  // get time-of-day
++  if ( et.tv_sec < lastLoad + MINLOADFREQ )       // only reload so often
++    return;
++  lastLoad = et.tv_sec;
++
++  skfd = openSocket();                            // open socket
++  if ( skfd < 0 ) {
++    syslog ( LOG_ERR, "SNMP ieee802dot11.loadTables() - %s\n", "socket open failure" );
++    return;
++  }
++
++  flushLists();
++
++  // find interfaces in /proc/net/dev and find the wireless interfaces
++  fp = fopen ( PROC_NET_DEV, "r" );
++  if ( fp ) {
++    while ( fgets ( bfr, sizeof ( bfr ), fp )) {
++      if ( strstr ( bfr, ":" )) {
++        s = bfr; t = ifName;
++        while ( isspace ( *s ))                     // discard white space
++          *s++;
++        while ( *s != ':' )                         // get interface name
++          *t++ = *s++;
++        *t = '\0';
++
++        // verify as a wireless device
++        memset (( char * ) &info, 0, sizeof ( struct wireless_info ));
++        strncpy ( wrq.ifr_name, ifName, IFNAMSIZ );
++        if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
++          printf ( "%s ifName: %s\n", "loadTables() -", ifName );
++          initStructs();
++          loadWiExt( skfd, ifName, &info );
++          displayWiExt ( info );
++          load80211Structs ( skfd, ifName, &info );
++        }
++      }
++    }
++    fclose ( fp );
++  }
++
++  close ( skfd );
++}
++
++/****************************************************************************
++*                                                                           *
++*              load80211Structs() - load the 802.11 structures              *
++*                                                                           *
++****************************************************************************/
++static void 
++load80211Structs ( int skfd, char *ifName, struct wireless_info *wi )
++{
++  int rc, ifIndex = 0;
++  struct ifreq ifr;
++  char  MACAddress [ MACADDR_LEN + 1 ];
++
++  strcpy ( ifr.ifr_name, ifName );
++  rc = ioctl ( skfd, SIOCGIFHWADDR, &ifr );
++  if ( rc >= 0 ) {
++
++    sprintf ( MACAddress, "%02X:%02X:%02X:%02X:%02X:%02X\0", 
++                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[0], ( UCHAR ) ifr.ifr_hwaddr.sa_data[1], 
++                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[2], ( UCHAR ) ifr.ifr_hwaddr.sa_data[3], 
++                 ( UCHAR ) ifr.ifr_hwaddr.sa_data[4], ( UCHAR ) ifr.ifr_hwaddr.sa_data[5] );
++
++    nSc.haveStationID = TRUE;
++    strcpy  ( nSc.stationID, MACAddress );
++    nOp.haveMACAddress = TRUE;
++    strcpy  ( nOp.MACAddress, MACAddress );
++    nRi.haveManufacturerOUI = TRUE;
++    strncpy ( nRi.manufacturerOUI, MACAddress, MAN_OUI_LEN ); 
++
++    ifIndex = if_nametoindex ( ifName );
++    if ( !ifIndex ) {
++      syslog ( LOG_ERR, "SNMP %s - %s %s\n", 
++        "ieee802dot11.load80211Structs()", ifName, "has no ifIndex" );
++      return;
++    }
++
++    loadWiExtTo80211Structs ( ifIndex, ifName, wi );
++
++    if ( hasChanged (( char * ) &nSc, sizeof ( nSc ))) {
++      nSc.ifIndex = ifIndex;
++      sprintf ( nSc.UID, "%04d\0", nSc.ifIndex );
++      strcpy ( nSc.ifName, ifName );
++      addList (( char * ) &scList, ( char * ) &nSc, sizeof ( nSc ));
++    }
++
++    if ( hasChanged (( char * ) &nPr, sizeof ( nPr ))) {
++      nPr.ifIndex = ifIndex;
++      sprintf ( nPr.UID, "%04d\0", nPr.ifIndex );
++      strcpy ( nPr.ifName, ifName );
++      addList (( char * ) &prList, ( char * ) &nPr, sizeof ( nPr ));
++    }
++
++    if ( hasChanged (( char * ) &nOp, sizeof ( nOp ))) {
++      nOp.ifIndex = ifIndex;
++      sprintf ( nOp.UID, "%04d\0", nOp.ifIndex );
++      strcpy ( nOp.ifName, ifName );
++      addList (( char * ) &opList, ( char * ) &nOp, sizeof ( nOp ));
++    }
++
++    if ( hasChanged (( char * ) &nCo, sizeof ( nCo ))) {
++      nCo.ifIndex = ifIndex;
++      sprintf ( nCo.UID, "%04d\0", nCo.ifIndex );
++      strcpy ( nCo.ifName, ifName );
++      addList (( char * ) &coList, ( char * ) &nCo, sizeof ( nCo ));
++    }
++
++    if ( hasChanged (( char * ) &nRi, sizeof ( nRi ))) {
++      nRi.ifIndex = ifIndex;
++      sprintf ( nRi.UID, "%04d\0", nRi.ifIndex );
++      strcpy ( nRi.ifName, ifName );
++      addList (( char * ) &riList, ( char * ) &nRi, sizeof ( nRi ));
++    }
++
++    if ( hasChanged (( char * ) &nPo, sizeof ( nPo ))) {
++      nPo.ifIndex = ifIndex;
++      sprintf ( nPo.UID, "%04d\0", nPo.ifIndex );
++      strcpy ( nPo.ifName, ifName );
++      addList (( char * ) &poList, ( char * ) &nPo, sizeof ( nPo ));
++    }
++
++    if ( hasChanged (( char * ) &nPa, sizeof ( nPa ))) {
++      nPa.ifIndex = ifIndex;
++      sprintf ( nPa.UID, "%04d\0", nPa.ifIndex );
++      strcpy ( nPa.ifName, ifName );
++      addList (( char * ) &paList, ( char * ) &nPa, sizeof ( nPa ));
++    }
++
++    if ( hasChanged (( char * ) &nPt, sizeof ( nPt ))) {
++      nPt.ifIndex = ifIndex;
++      sprintf ( nPt.UID, "%04d\0", nPt.ifIndex );
++      strcpy ( nPt.ifName, ifName );
++      addList (( char * ) &ptList, ( char * ) &nPt, sizeof ( nPt ));
++    }
++
++    if ( hasChanged (( char * ) &nPf, sizeof ( nPf ))) {
++      nPf.ifIndex = ifIndex;
++      sprintf ( nPf.UID, "%04d\0", nPf.ifIndex );
++      strcpy ( nPf.ifName, ifName );
++      addList (( char * ) &pfList, ( char * ) &nPf, sizeof ( nPf ));
++    }
++
++    if ( hasChanged (( char * ) &nPd, sizeof ( nPd ))) {
++      nPd.ifIndex = ifIndex;
++      sprintf ( nPd.UID, "%04d\0", nPd.ifIndex );
++      strcpy ( nPd.ifName, ifName );
++      addList (( char * ) &pdList, ( char * ) &nPd, sizeof ( nPd ));
++    }
++
++    if ( hasChanged (( char * ) &nPi, sizeof ( nPi ))) {
++      nPi.ifIndex = ifIndex;
++      sprintf ( nPi.UID, "%04d\0", nPi.ifIndex );
++      strcpy ( nPi.ifName, ifName );
++      addList (( char * ) &piList, ( char * ) &nPi, sizeof ( nPi ));
++    }
++  }
++
++//printf ( "%s - ifIndex: %d ifName: %s UID: %s\n", 
++//         "load80211Structs() - HASCHANGED", ifIndex, ifName, nSc.UID );
++}
++
++/****************************************************************************
++*                                                                           *
++*                     initStructs() - initialize structures                 *
++*                                                                           *
++****************************************************************************/
++static void initStructs()
++{
++  int i;
++
++  // 802.11 MIB Stuctures
++  memset (( char * ) &nSc, 0, sizeof ( nSc ));  memset (( char * ) &nAa, 0, sizeof ( nAa ));
++  memset (( char * ) &nDf, 0, sizeof ( nDf ));  memset (( char * ) &nKm, 0, sizeof ( nKm ));
++  memset (( char * ) &nPr, 0, sizeof ( nPr ));  memset (( char * ) &nOp, 0, sizeof ( nOp ));
++  memset (( char * ) &nCo, 0, sizeof ( nCo ));  memset (( char * ) &nGa, 0, sizeof ( nGa ));
++  memset (( char * ) &nRi, 0, sizeof ( nRi ));  memset (( char * ) &nPo, 0, sizeof ( nPo ));
++  memset (( char * ) &nPa, 0, sizeof ( nPa ));  memset (( char * ) &nPt, 0, sizeof ( nPt ));
++  memset (( char * ) &nPf, 0, sizeof ( nPf ));  memset (( char * ) &nPd, 0, sizeof ( nPd ));
++  memset (( char * ) &nPi, 0, sizeof ( nPi ));  memset (( char * ) &nRd, 0, sizeof ( nRd ));
++  memset (( char * ) &nAl, 0, sizeof ( nAl ));  memset (( char * ) &nRt, 0, sizeof ( nRt ));
++  memset (( char * ) &nRr, 0, sizeof ( nRr ));
++
++  // Wireless Extensions
++  wepCurrentKey = 0;
++  haveWepCurrentKey = FALSE;
++  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
++    wep[i].len = 0;
++    wep[i].key[0] = '\0';
++    wep[i].haveKey = FALSE;
++  }
++}
++
++/****************************************************************************
++*                                                                           *
++*                Wireless Extensions Specific Functions                     *
++*                                                                           *
++****************************************************************************/
++/****************************************************************************
++*                                                                           *
++* loadWiExtTo80211Structs() - load wireless extensions to 802.11 structures *
++*                                                                           *
++****************************************************************************/
++static void 
++loadWiExtTo80211Structs ( int ifIndex, char *ifName, struct wireless_info *wi )
++{
++  int i, j = 0;
++
++  // dot11Smt Group
++  // dot11StationConfigTable
++  nSc.havePrivacyOptionImplemented = TRUE;
++  nSc.privacyOptionImplemented = 1;           // assume we support WEP
++
++  if ( wi->has_power ) {
++    nSc.havePowerManagementMode = TRUE;
++    nSc.powerManagementMode = 1;              // assume power is active
++    if ( !wi->power.disabled && 
++          wi->power.flags & IW_POWER_MIN )
++      nSc.powerManagementMode = 2;            // power save mode
++  }
++
++  if ( wi->has_essid && strlen ( wi->essid )) {
++    nSc.haveDesiredSSID = TRUE;
++    strcpy ( nSc.desiredSSID, wi->essid ); 
++  }
++
++  if ( wi->has_mode ) {
++    nSc.haveDesiredBSSType = TRUE;
++    if ( wi->mode == IW_MODE_ADHOC ) 
++      nSc.desiredBSSType = 2;         // independent
++    else if ( wi->has_ap_addr )
++      nSc.desiredBSSType = 1;         // infrastructure
++    else
++      nSc.desiredBSSType = 3;         // any
++  }
++
++  if ( wi->has_range ) {
++    for ( i = 0; i < wi->range.num_bitrates && j < 126; i++ ) {
++      nSc.haveOperationalRateSet = TRUE;
++      nSc.operationalRateSet[j++] = ( char ) ( wi->range.bitrate[i] / 500000L );
++    }
++  }
++
++  // dot11AuthenticationAlgorithmsTable
++  nAa.haveAuthenticationAlgorithm = TRUE;           // it's a rule to always have 
++  nAa.haveAuthenticationAlgorithmsEnable = TRUE;    //    'open' supported
++  nAa.ifIndex = ifIndex;
++  nAa.authenticationAlgorithmsIndex = 1;            // index number one
++  nAa.authenticationAlgorithm = 1;                  // 1 => open key
++  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
++  nAa.authenticationAlgorithmsEnable = 1;           // enabled by default
++  if ( ( wi->has_key                        ) &&
++       ( wi->key_size  != 0                 ) &&
++      !( wi->key_flags & IW_ENCODE_DISABLED ))
++    nAa.authenticationAlgorithmsEnable = 2;
++  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
++
++  nAa.haveAuthenticationAlgorithm = TRUE;           // I'm gonna assume we always support WEP
++  nAa.haveAuthenticationAlgorithmsEnable = TRUE;
++  nAa.ifIndex = ifIndex;
++  nAa.authenticationAlgorithmsIndex = 2;            // index number 2
++  nAa.authenticationAlgorithm = 2;                  // 2 => shared key
++  sprintf ( nAa.UID, "%04d%04d\0", nAa.ifIndex, nAa.authenticationAlgorithmsIndex );
++  nAa.authenticationAlgorithmsEnable = 2;
++  if ( ( wi->has_key                        ) &&
++       ( wi->key_size  != 0                 ) &&
++      !( wi->key_flags & IW_ENCODE_DISABLED ))
++    nAa.authenticationAlgorithmsEnable = 1;         // disabled by default
++  addList (( char * ) &aaList, ( char * ) &nAa, sizeof ( nAa ));
++
++  //dot11WEPDefaultKeysTable
++  if ( wi->has_range ) {
++    for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
++      nDf.haveWEPDefaultKeyValue = TRUE;
++      nDf.ifIndex = ifIndex;
++      nDf.WEPDefaultKeyIndex = i + 1;               // index number
++      sprintf ( nDf.UID, "%04d%04d\0", nDf.ifIndex, nDf.WEPDefaultKeyIndex );
++      if ( wep[i].haveKey )
++        strcpy ( nDf.WEPDefaultKeyValue, "*****" );
++      else
++        nDf.WEPDefaultKeyValue[0] = '\0';
++      addList (( char * ) &dfList, ( char * ) &nDf, sizeof ( nDf ));
++    }
++  }
++
++  // dot11PrivacyTable
++  nPr.havePrivacyInvoked = TRUE;
++  nPr.privacyInvoked = 2;                   // 2 => FALSE
++  nPr.haveWEPDefaultKeyID = TRUE;
++  nPr.WEPDefaultKeyID = 0;
++  nPr.haveExcludeUnencrypted = TRUE;
++  nPr.excludeUnencrypted = 2;               // 2 => FALSE
++  if ( wi->has_range ) {
++    if ( ( wi->key_size != 0 ) &&
++        !( wi->key_flags & IW_ENCODE_DISABLED )) {
++       nPr.privacyInvoked = 1;
++       if ( wi->key_flags & IW_ENCODE_RESTRICTED )
++          nPr.excludeUnencrypted = 1;
++       nPr.WEPDefaultKeyID = wepCurrentKey;
++    }
++  }
++
++  // dot11Mac Group
++  // dot11OperationTable
++  if ( wi->has_range ) {
++    nOp.haveRTSThreshold = TRUE;
++    nOp.RTSThreshold = wi->range.max_rts;
++  }
++
++  if ( wi->has_frag && wi->frag.value ) {
++    nOp.haveFragmentationThreshold = TRUE;
++    nOp.fragmentationThreshold = wi->frag.value;
++  }
++
++  // dot11Phy Group
++  // dot11PhyOperationTable
++  if ( strstr ( wi->name, "IEEE 802.11-FS"      )) nPo.PHYType = 1;   // So what if I
++  if ( strstr ( wi->name, "IEEE 802.11-DS"      )) nPo.PHYType = 2;   // made up a couple?
++  if ( strstr ( wi->name, "IEEE 802.11-IR"      )) nPo.PHYType = 3;   
++  if ( strstr ( wi->name, "IEEE 802.11-OFDM"    )) nPo.PHYType = 4;   // 802.11a
++  if ( strstr ( wi->name, "IEEE 802.11-OFDM/DS" )) nPo.PHYType = 5;   // 802.11g
++  if ( strstr ( wi->name, "IEEE 802.11-TURBO"   )) nPo.PHYType = 6;   // Atheros TURBO mode
++  if ( nPo.PHYType ) nPo.havePHYType = TRUE;
++
++  // dot11PhyDSSSTable
++  if ( wi->has_range ) { // && wi->freq <= ( double ) 2483000000 ) {  // DSSS frequencies only
++    for ( i = 0; i < wi->range.num_frequency; i++ ) {
++      if ((( double ) ( wi->range.freq[i].e * 10 ) * ( double ) wi->range.freq[i].m ) == wi->freq ) {
++        nPd.haveCurrentChannel = TRUE;
++        nPd.currentChannel = wi->range.freq[i].i; 
++      }
++    }
++  }
++
++  // dot11SupportedDataRatesTxTable
++  if ( wi->has_range ) {
++    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
++      nRt.ifIndex = ifIndex;
++      nRt.supportedDataRatesTxIndex = i + 1;
++      nRt.supportedDataRatesTxValue = wi->range.bitrate[i] / 500000L;
++      nRt.haveSupportedDataRatesTxValue = TRUE;
++      sprintf ( nRt.UID, "%04d%04d\0", nRt.ifIndex, nRt.supportedDataRatesTxIndex );
++      strcpy ( nRt.ifName, ifName );
++      addList (( char * ) &rtList, ( char * ) &nRt, sizeof ( nRt ));
++    }
++  }
++
++  // dot11SupportedDataRatesRxTable
++  if ( wi->has_range ) {
++    for ( i = 0; i < wi->range.num_bitrates; i++ ) {
++      nRr.ifIndex = ifIndex;
++      nRr.supportedDataRatesRxIndex = i + 1;
++      nRr.supportedDataRatesRxValue = wi->range.bitrate[i] / 500000L;
++      nRr.haveSupportedDataRatesRxValue = TRUE;
++      sprintf ( nRr.UID, "%04d%04d\0", nRr.ifIndex, nRr.supportedDataRatesRxIndex );
++      strcpy ( nRr.ifName, ifName );
++      addList (( char * ) &rrList, ( char * ) &nRr, sizeof ( nRr ));
++    }
++  }
++
++//printf ( "%s max_encoding_tokens: %d\n", 
++//          "loadWiExtTo80211Structs() - ", wi->range.max_encoding_tokens );
++}
++
++/****************************************************************************
++*                                                                           *
++*      loadWiExt() - load wireless extensions structures;                   *
++*                    use ioctl calls and read /proc/net/wireless            *
++*                                                                           *
++****************************************************************************/
++static void loadWiExt ( int skfd, char *ifname, struct wireless_info *wi )
++{
++  struct iwreq wrq;                       // ioctl request structure
++  FILE *fp;
++  char  bfr[1024];
++  char  buffer[sizeof ( iwrange ) * 2]; /* Large enough */
++  char *s, *t;
++  int i, j;
++
++  strncpy ( wrq.ifr_name, ifname, IFNAMSIZ );
++
++  /* Get wireless name */
++  if ( ioctl ( skfd, SIOCGIWNAME, &wrq ) >= 0 ) {
++    strncpy ( wi->name, wrq.u.name, IFNAMSIZ );
++    wi->name[IFNAMSIZ] = '\0';
++  }
++
++  /* Get ranges */    // NOTE: some version checking in iwlib.c
++  memset ( buffer, 0, sizeof ( buffer ));
++  wrq.u.data.pointer = ( caddr_t ) &buffer;
++  wrq.u.data.length = sizeof ( buffer );
++  wrq.u.data.flags = 0;
++  if ( ioctl ( skfd, SIOCGIWRANGE, &wrq ) >= 0 ) {
++    memcpy (( char * ) &wi->range, buffer, sizeof ( iwrange ));
++    wi->has_range = 1;
++  }
++
++  /* Get network ID */
++  if ( ioctl ( skfd, SIOCGIWNWID, &wrq ) >= 0 ) {
++    memcpy ( &wi->nwid, &wrq.u.nwid, sizeof ( iwparam ));
++    wi->has_nwid = 1;
++  }
++
++  /* Get frequency / channel */         // THIS NUMBER LOOKS FUNNY
++  if ( ioctl ( skfd, SIOCGIWFREQ, &wrq ) >= 0 ) {
++    wi->has_freq = 1;
++    wi->freq = (( double ) wrq.u.freq.m ) * pow ( 10, wrq.u.freq.e );
++  }
++
++  /* Get sensitivity */
++  if ( ioctl ( skfd, SIOCGIWSENS, &wrq ) >= 0 ) {
++    wi->has_sens = 1;
++    memcpy ( &wi->sens, &wrq.u.sens, sizeof ( iwparam ));
++  }
++
++  /* Get encryption information */
++  wrq.u.data.pointer = ( caddr_t ) &wi->key;
++  wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
++  wrq.u.data.flags = 0;
++  if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
++    wi->has_key = 1;
++    wi->key_size = wrq.u.data.length;
++    wi->key_flags = wrq.u.data.flags;
++    wepCurrentKey = wrq.u.data.flags & IW_ENCODE_INDEX;
++  }
++
++  for ( i = 0; i < wi->range.max_encoding_tokens; i++ ) {
++    wrq.u.data.pointer = ( caddr_t ) &wi->key;
++    wrq.u.data.length = IW_ENCODING_TOKEN_MAX;
++    wrq.u.data.flags = i;
++    if ( ioctl ( skfd, SIOCGIWENCODE, &wrq ) >= 0 ) {
++      if ( ( wrq.u.data.length != 0 ) &&
++          !( wrq.u.data.flags & IW_ENCODE_DISABLED )) {
++        wep[i].len = wrq.u.data.length;
++        wep[i].haveKey = TRUE;
++        t = wep[i].key;
++        for ( j = 0; j < wrq.u.data.length; j++ ) {
++          if (( j & 0x1 ) == 0 && j != 0 )
++                strcpy ( t++, "-");
++          sprintf ( t, "%.2X", wi->key[j] );
++          t += 2;
++        }
++        t = '\0';
++      }
++    }
++  }
++
++  /* Get ESSID */
++  wrq.u.essid.pointer = ( caddr_t ) &wi->essid;
++  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
++  wrq.u.essid.flags = 0;
++  if ( ioctl ( skfd, SIOCGIWESSID, &wrq ) >= 0 ) {
++    wi->has_essid = 1;
++    wi->essid_on = wrq.u.data.flags;
++  }
++
++  /* Get AP address */
++  if ( ioctl ( skfd, SIOCGIWAP, &wrq ) >= 0 ) {
++    wi->has_ap_addr = 1;
++    memcpy ( &wi->ap_addr, &wrq.u.ap_addr, sizeof ( sockaddr ));
++  }
++
++  /* Get NickName */
++  wrq.u.essid.pointer = ( caddr_t ) &wi->nickname;
++  wrq.u.essid.length = IW_ESSID_MAX_SIZE + 1;
++  wrq.u.essid.flags = 0;
++  if ( ioctl ( skfd, SIOCGIWNICKN, &wrq ) >= 0 ) {
++    if ( wrq.u.data.length > 1 )
++      wi->has_nickname = 1;
++  }
++
++  /* Get bit rate */
++  if ( ioctl ( skfd, SIOCGIWRATE, &wrq ) >= 0 ) {
++    wi->has_bitrate = 1;
++    memcpy ( &wi->bitrate, &wrq.u.bitrate, sizeof ( iwparam ));
++  }
++
++  /* Get RTS threshold */
++  if ( ioctl ( skfd, SIOCGIWRTS, &wrq ) >= 0 ) {
++    wi->has_rts = 1;
++    memcpy ( &wi->rts, &wrq.u.rts, sizeof ( iwparam ));
++  }
++
++  /* Get fragmentation threshold */
++  if ( ioctl ( skfd, SIOCGIWFRAG, &wrq ) >= 0 ) {
++      wi->has_frag = 1;
++      memcpy ( &wi->frag, &wrq.u.frag, sizeof ( iwparam ));
++    }
++
++  /* Get operation mode */
++  if ( ioctl ( skfd, SIOCGIWMODE, &wrq ) >= 0 ) {
++      wi->mode = wrq.u.mode;
++      if ( wi->mode < IW_NUM_OPER_MODE && wi->mode >= 0 )
++        wi->has_mode = 1;
++  }
++
++  /* Get Power Management settings */                 // #if WIRELESS_EXT > 9
++  wrq.u.power.flags = 0;
++  if ( ioctl ( skfd, SIOCGIWPOWER, &wrq ) >= 0 ) {
++    wi->has_power = 1;
++    memcpy ( &wi->power, &wrq.u.power, sizeof ( iwparam ));
++  }
++
++  /* Get retry limit/lifetime */                      // #if WIRELESS_EXT > 10
++  if ( ioctl ( skfd, SIOCGIWRETRY, &wrq ) >= 0 ) {    
++    wi->has_retry = 1;
++    memcpy ( &wi->retry, &wrq.u.retry, sizeof ( iwparam ));
++  }
++
++  /* Get stats */                                     // #if WIRELESS_EXT > 11
++  wrq.u.data.pointer = ( caddr_t ) &wi->stats;
++  wrq.u.data.length = 0;
++  wrq.u.data.flags = 1;   /* Clear updated flag */
++  if ( ioctl ( skfd, SIOCGIWSTATS, &wrq ) < 0 )
++    wi->has_stats = 1;
++
++  if ( !wi->has_stats ) {                        // no ioctl support, go to file
++    fp = fopen ( PROC_NET_WIRELESS, "r" );
++    if ( fp ) {
++      while ( fgets ( bfr, sizeof ( bfr ), fp )) {
++        bfr [ sizeof ( bfr ) - 1 ] = '\0';        // no buffer overruns here!
++        strtok (( char * ) &bfr, "\n" );          // '\n' => '\0'
++        if ( strstr ( bfr, ifname ) && strstr ( bfr, ":" )) {
++          wi->has_stats = 1;
++          s = bfr;
++          s = strchr ( s, ':' ); s++;             /* Skip ethX:   */
++          s = strtok ( s, " " );                  /* ' ' => '\0'  */
++          sscanf ( s, "%X", &wi->stats.status ); // status 
++
++          s = strtok ( NULL, " " );               // link quality
++          if ( strchr ( s, '.' ) != NULL )
++            wi->stats.qual.updated |= 1;
++          sscanf ( s, "%d", &wi->stats.qual.qual );
++
++          s = strtok ( NULL, " " );               // signal level
++          if ( strchr ( s,'.' ) != NULL )
++            wi->stats.qual.updated |= 2;
++          sscanf ( s, "%d", &wi->stats.qual.level );
++
++          s = strtok ( NULL, " " );               // noise level
++          if ( strchr ( s, '.' ) != NULL )
++            wi->stats.qual.updated += 4;
++          sscanf ( s, "%d", &wi->stats.qual.noise );
++
++          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.nwid     );
++          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.code     );
++          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.fragment );
++          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.retries  );
++          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.discard.misc     );
++          s = strtok ( NULL, " " ); sscanf ( s, "%d", &wi->stats.miss.beacon      );
++        }
++      }
++      fclose ( fp );
++    }
++  }
++
++// printf ( "%s bfr: %s\n", "loadTables()", bfr );
++}
++
++/****************************************************************************
++*                                                                           *
++*       displayWiExt() - show what I got from Wireless Extensions           *
++*                                                                           *
++****************************************************************************/
++static void displayWiExt ( struct wireless_info info )
++{
++#ifdef DISPLAYWIEXT
++  int i;
++  char title[] = "displayWiExt() -";
++
++  printf ( "========================================\n" );
++  printf ( "===> Wireless Extension IOCTL calls <===\n" );
++  printf ( "========================================\n" );
++
++  if ( strlen ( info.name ))
++    printf ( "%s name: %s\n", "SIOCGIWNAME", info.name );
++  else
++    printf ( "%s\n", "no info.name support" );
++
++  if ( info.has_nickname = 1 )
++    printf ( "%s nickname: %s\n", "SIOCGIWNICKN", info.nickname );
++  else
++    printf ( "%s %s\n", "SIOCGIWNICKN", " ===> no info.nickname support" );
++
++  if ( info.has_essid ) 
++    printf ( "%s essid_on: %d essid: %s\n", "SIOCGIWESSID", info.essid_on, info.essid );
++  else
++    printf ( "%s %s\n", "SIOCGIWESSID", " ===> no info.essid support" );
++
++  if ( info.has_range ) {
++    printf ( "%s throughput: %d\n",           "SIOCGIWRANGE", info.range.throughput );
++    printf ( "%s min_nwid: %d\n",             "SIOCGIWRANGE", info.range.min_nwid  );
++    printf ( "%s max_nwid: %d\n",             "SIOCGIWRANGE", info.range.max_nwid  );
++    printf ( "%s sensitivity: %d\n",          "SIOCGIWRANGE", info.range.sensitivity );
++    printf ( "%s num_bitrates: %d\n",         "SIOCGIWRANGE", info.range.num_bitrates );
++    for ( i = 0; i < info.range.num_bitrates; i++ ) 
++      printf ( "%s bitrate[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.bitrate[i]  );
++    printf ( "%s min_rts: %d\n",              "SIOCGIWRANGE", info.range.min_rts );
++    printf ( "%s max_rts: %d\n",              "SIOCGIWRANGE", info.range.max_rts );
++    printf ( "%s min_frag: %d\n",             "SIOCGIWRANGE", info.range.min_frag );
++    printf ( "%s max_frag: %d\n",             "SIOCGIWRANGE", info.range.max_frag );
++    printf ( "%s min_pmp: %d\n",              "SIOCGIWRANGE", info.range.min_pmp );
++    printf ( "%s max_pmp: %d\n",              "SIOCGIWRANGE", info.range.max_pmp );
++    printf ( "%s min_pmt: %d\n",              "SIOCGIWRANGE", info.range.min_pmt );
++    printf ( "%s max_pmt: %d\n",              "SIOCGIWRANGE", info.range.max_pmt );
++    printf ( "%s pmp_flags: %d\n",            "SIOCGIWRANGE", info.range.pmp_flags );
++    printf ( "%s pmt_flags: %d\n",            "SIOCGIWRANGE", info.range.pmt_flags );
++    printf ( "%s pm_capa: %d\n",              "SIOCGIWRANGE", info.range.pm_capa );
++    printf ( "%s num_encoding_sizes: %d\n",   "SIOCGIWRANGE", info.range.num_encoding_sizes );
++    for ( i = 0; i < info.range.num_encoding_sizes; i++ ) 
++      printf ( "%s encoding_size[%d]: %d\n",  "SIOCGIWRANGE", i, info.range.encoding_size[i]  );
++    printf ( "%s max_encoding_tokens: %d\n",  "SIOCGIWRANGE", info.range.max_encoding_tokens );
++//  printf ( "%s encoding_login_index: %d\n", "SIOCGIWRANGE", info.range.encoding_login_index );
++    printf ( "%s txpower_capa: %d\n",         "SIOCGIWRANGE", info.range.txpower_capa );
++    printf ( "%s num_txpower: %d dBm\n",      "SIOCGIWRANGE", info.range.num_txpower );
++    for ( i = 0; i < info.range.num_txpower; i++ ) 
++      printf ( "%s txpower[%d]: %d\n",        "SIOCGIWRANGE", i, info.range.txpower[i]  );
++    printf ( "%s we_version_compiled: %d\n",  "SIOCGIWRANGE", info.range.we_version_compiled );
++    printf ( "%s we_version_source: %d\n",    "SIOCGIWRANGE", info.range.we_version_source );
++    printf ( "%s retry_capa: %d\n",           "SIOCGIWRANGE", info.range.retry_capa );
++    printf ( "%s retry_flags: %d\n",          "SIOCGIWRANGE", info.range.retry_flags );
++    printf ( "%s r_time_flags: %d\n",         "SIOCGIWRANGE", info.range.r_time_flags );
++    printf ( "%s min_retry: %d\n",            "SIOCGIWRANGE", info.range.min_retry );
++    printf ( "%s max_retry: %d\n",            "SIOCGIWRANGE", info.range.max_retry );
++    printf ( "%s min_r_time: %d\n",           "SIOCGIWRANGE", info.range.min_r_time );
++    printf ( "%s max_r_time: %d\n",           "SIOCGIWRANGE", info.range.max_r_time );
++    printf ( "%s num_channels: %d\n",         "SIOCGIWRANGE", info.range.num_channels );
++    printf ( "%s num_frequency: %d\n",        "SIOCGIWRANGE", info.range.num_frequency );
++    for ( i = 0; i < info.range.num_frequency; i++ ) 
++      printf ( "%s freq[%d].i: %d freq[%d].e: %d freq[%d].m: %d\n", "SIOCGIWRANGE", 
++                i, info.range.freq[i].i, i, info.range.freq[i].e, i, info.range.freq[i].m );
++  }
++  else
++    printf ( "%s %s\n", "SIOCGIWRANGE", " ===> no info.range support" );
++
++  if ( info.has_nwid ) 
++    printf ( "%s nwid - disabled: %d value: %X\n", "SIOCGIWNWID", info.nwid.disabled, info.nwid.value );
++  else
++    printf ( "%s %s\n", "SIOCGIWNWID", " ===> no info.nwid support" );
++
++  if ( info.has_freq ) {
++//  printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq / GIGA );
++    printf ( "%s freq: %g\n", "SIOCGIWFREQ", info.freq );
++  }
++  else
++    printf ( "%s %s\n", "SIOCGIWFREQ", " ===> no info.freq support" );
++
++  if ( info.has_sens )
++    printf ( "%s sens: %d\n", "SIOCGIWSENS", info.sens );
++  else
++    printf ( "%s %s\n", "SIOCGIWSENS", " ===> no info.sens support" );
++
++  if ( info.has_key ) {
++    printf ( "%s key_size: %d key_flags: %d wepCurrentKey: %d\n", 
++              "SIOCGIWENCODE", info.key_size, info.key_flags, wepCurrentKey );
++    printf ( "%s MODE: %d DISABLED: %d INDEX: %d OPEN: %d RESTRICTED: %d NOKEY: %d TEMP: %d\n",
++              "SIOCGIWENCODE",                           info.key_flags & IW_ENCODE_MODE,
++              info.key_flags & IW_ENCODE_DISABLED ? 1:0, info.key_flags & IW_ENCODE_INDEX,
++              info.key_flags & IW_ENCODE_OPEN     ? 1:0, info.key_flags & IW_ENCODE_RESTRICTED ? 1:0,
++              info.key_flags & IW_ENCODE_NOKEY    ? 1:0, info.key_flags & IW_ENCODE_TEMP       ? 1:0 );
++  }
++  else
++    printf ( "%s %s\n", "SIOCGIWENCODE", " ===> no info.key support" );
++
++  for ( i = 0; i < MAX_WEP_KEYS; i++ ) {
++    if ( wep[i].haveKey )
++      printf ( "%s wep[%d].len: %d wep[%d].key: %s\n", 
++                "SIOCGIWENCODE", i, wep[i].len, i, wep[i].key );
++  }
++
++  if ( info.has_ap_addr )
++    printf ( "%s ap_addr.sa_data: %02X:%02X:%02X:%02X:%02X:%02X ap_addr.sa_family: %d\n", 
++              "SIOCGIWAP",  ( UCHAR ) info.ap_addr.sa_data[0], ( UCHAR ) info.ap_addr.sa_data[1], 
++                            ( UCHAR ) info.ap_addr.sa_data[2], ( UCHAR ) info.ap_addr.sa_data[3], 
++                            ( UCHAR ) info.ap_addr.sa_data[4], ( UCHAR ) info.ap_addr.sa_data[5], 
++                                      info.ap_addr.sa_family );
++  else
++    printf ( "%s %s\n", "SIOCGIWAP", " ===> no ap_addr information" );
++
++  if ( info.has_bitrate )
++    printf ( "%s bitrate: %d value: %d fixed: %d disabled: %d flags: %d\n", 
++              "SIOCGIWRATE", info.bitrate, info.bitrate.value, info.bitrate.fixed, 
++                             info.bitrate.disabled, info.bitrate.flags );
++  else
++    printf ( "%s %s\n", "SIOCGIWRATE", " ===> no info.bitrate support" );
++
++  if ( info.has_rts )
++    printf ( "%s rts: %d\n", "SIOCGIWRTS", info.rts );
++  else
++    printf ( "%s %s\n", "SIOCGIWRTS", " ===> no info.rts support" );
++
++  if ( info.has_frag )
++    printf ( "%s frag: %d\n", "SIOCGIWFRAG", info.frag );
++  else
++    printf ( "%s %s\n", "SIOCGIWFRAG", " ===> no info.frag support" );
++
++  if ( info.has_mode ) 
++    printf ( "%s mode: %d\n", "SIOCGIWMODE", info.mode );
++  else
++    printf ( "%s %s\n", "SIOCGIWMODE", " ===> no info.mode support" );
++
++  if ( info.has_power ) {
++    printf ( "%s power: %d\n", "SIOCGIWPOWER", info.power );
++    printf ( "%s disabled: %d MIN: %d MAX: %d TIMEOUT: %d RELATIVE: %d\n",
++              "SIOCGIWPOWER",
++              info.power.disabled                  ? 1:0, 
++              info.power.flags & IW_POWER_MIN      ? 1:0, 
++              info.power.flags & IW_POWER_MAX      ? 1:0, 
++              info.power.flags & IW_POWER_TIMEOUT  ? 1:0, 
++              info.power.flags & IW_POWER_RELATIVE ? 1:0 ); 
++    printf ( "%s UNICAST: %d MULTICAST: %d ALL: %d FORCE: %d REPEATER: %d\n",
++              "SIOCGIWPOWER",
++              info.power.flags & IW_POWER_UNICAST_R   ? 1:0, 
++              info.power.flags & IW_POWER_MULTICAST_R ? 1:0, 
++              info.power.flags & IW_POWER_ALL_R       ? 1:0, 
++              info.power.flags & IW_POWER_FORCE_S     ? 1:0, 
++              info.power.flags & IW_POWER_REPEATER    ? 1:0 ); 
++  }
++  else
++    printf ( "%s %s\n", "SIOCGIWPOWER", " ===> no info.power support" );
++
++  if ( info.has_retry )
++    printf ( "%s retry: %d\n", "SIOCGIWRETRY", info.retry );
++  else
++    printf ( "%s %s\n", "SIOCGIWRETRY", " ===> no info.retry support" );
++
++  if ( info.has_stats ) {
++    printf ( "%s status: %d\n",           "SIOCGIWSTATS", info.stats.status           );
++    printf ( "%s qual.level: %d\n",       "SIOCGIWSTATS", info.stats.qual.level       );
++    printf ( "%s qual.noise: %d\n",       "SIOCGIWSTATS", info.stats.qual.noise       );
++    printf ( "%s qual.qual: %d\n",        "SIOCGIWSTATS", info.stats.qual.qual        );
++    printf ( "%s qual.updated: %d\n",     "SIOCGIWSTATS", info.stats.qual.updated     );
++    printf ( "%s discard.code: %d\n",     "SIOCGIWSTATS", info.stats.discard.code     );
++    printf ( "%s discard.fragment: %d\n", "SIOCGIWSTATS", info.stats.discard.fragment );
++    printf ( "%s discard.misc: %d\n",     "SIOCGIWSTATS", info.stats.discard.misc     );
++    printf ( "%s discard.nwid: %d\n",     "SIOCGIWSTATS", info.stats.discard.nwid     );
++    printf ( "%s discard.retries: %d\n",  "SIOCGIWSTATS", info.stats.discard.retries  );
++    printf ( "%s miss.beacon: %d\n",      "SIOCGIWSTATS", info.stats.miss.beacon      );
++  }
++  else
++    printf ( "%s %s\n", "SIOCGIWSTATS", " ===> no info.stats support" );
++
++  if ( info.txpower.flags & IW_TXPOW_MWATT )
++    printf ( "%s txpower1: %d dBm disabled: %d fixed: %d flags: %d\n", "SIOCGIWRANGE", 
++      mWatt2dbm ( info.txpower.value ), info.txpower.disabled, info.txpower.fixed, info.txpower.flags);
++  else
++    printf ( "%s txpower2: %d dBm disabled: %d fixed: %d flags: %d\n", "SIOCGIWRANGE", info.txpower.value, info.txpower.disabled, info.txpower.fixed, info.txpower.flags );
++
++  if ( info.has_range ) 
++    if ( info.sens.value < 0 )
++      printf ( "%s sens: %d dBm\n", "SIOCGIWRANGE", info.sens.value );
++    else
++      printf ( "%s sens: %d/%d\n", "SIOCGIWRANGE", info.sens.value, info.range.sensitivity );
++
++  if ( info.has_range && ( info.stats.qual.level != 0 ))
++      if ( info.stats.qual.level > info.range.max_qual.level )
++        /* Statistics are in dBm (absolute power measurement) */
++        printf ( "%s Quality: %d/%d Signal level: %d dBm Noise level: %d dBm\n",
++                  "SIOCGIWRANGE",
++                  info.stats.qual.qual, info.range.max_qual.qual,
++                  info.stats.qual.level - 0x100,
++                  info.stats.qual.noise - 0x100 );
++      else
++        printf (  "%s Quality: %d/%d Signal level: %d/%d Noise level: %d/%d",
++                  "SIOCGIWRANGE",
++                  info.stats.qual.qual,  info.range.max_qual.qual,
++                  info.stats.qual.level, info.range.max_qual.level,
++                  info.stats.qual.noise, info.range.max_qual.noise );
++
++#endif // #ifdef DISPLAYWIEXT
++}
++
++/****************************************************************************
++*                                                                           *
++*                        Linked List Functions                              *
++*                                                                           *
++****************************************************************************/
++/****************************************************************************
++*                                                                           *
++*                addList() - add an entry to a linked list                  *
++*                                                                           *
++****************************************************************************/
++static void 
++addList ( char *l, char *data, int len  )
++{
++  char uid[256];
++  LIST_HEAD ( , avNode ) *list;       
++
++  // NOTE: this assumes the UID is at the beginning of the 
++  //       data structure and that UIDs are strings
++  
++  list = ( LIST_HEAD ( , avNode ) * ) l;            // NOTE: don't know how to get 
++  strcpy ( uid, data );                             //  rid of compiler warning on
++                                                    //  LISTHEAD typecast
++  // create a new node and the data that goes in it
++  newNode = malloc ( sizeof ( struct avNode ));
++  newNode->data = malloc ( len );
++  memcpy ( newNode->data, data, len );
++
++  // this deals with an empty list
++  if ( LIST_EMPTY ( list )) {
++    LIST_INSERT_HEAD ( list, newNode, nodes );
++    return;
++  }
++
++  // this deals with UIDs that match
++  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    if ( strncmp ( uid, np->data, strlen ( uid )) == 0 ) {                      // found matching UID
++      LIST_INSERT_AFTER ( np, newNode, nodes );
++      if ( np->data )
++        free ( np->data );
++      LIST_REMOVE ( np, nodes );
++      free ( np );
++      return;
++    }
++  }
++
++  // this deals with inserting a new UID in the list
++  for ( np = LIST_FIRST ( list ); np != NULL; np = LIST_NEXT ( np, nodes )) {
++    lastNode = np;
++    if ( strncmp ( np->data, uid, strlen ( uid )) > 0 ) {                       // old ID > new ID AND
++      LIST_INSERT_BEFORE ( np, newNode, nodes );
++      return;
++    }
++  }
++
++  // this deals with a UID that needs to go on the end of the list
++  LIST_INSERT_AFTER ( lastNode, newNode, nodes );
++
++  return;
++}
++
++/****************************************************************************
++*                                                                           *
++*              initLists() - initialize all the linked lists                *
++*                                                                           *
++****************************************************************************/
++static void initLists()
++{
++  LIST_INIT ( &scList );  LIST_INIT ( &aaList );  LIST_INIT ( &dfList );
++  LIST_INIT ( &kmList );  LIST_INIT ( &prList );
++  LIST_INIT ( &opList );  LIST_INIT ( &coList );
++  LIST_INIT ( &gaList );  LIST_INIT ( &riList );  LIST_INIT ( &poList );
++  LIST_INIT ( &paList );  LIST_INIT ( &ptList );  LIST_INIT ( &pfList );
++  LIST_INIT ( &pdList );  LIST_INIT ( &piList );  LIST_INIT ( &rdList );
++  LIST_INIT ( &alList );  LIST_INIT ( &rtList );  LIST_INIT ( &rrList );
++}
++/****************************************************************************
++*                                                                           *
++*                 flushLists() - flush all linked lists                     *
++*                                                                           *
++****************************************************************************/
++static void flushLists()
++{
++  flushList (( char * ) &scList );  flushList (( char * ) &aaList );
++  flushList (( char * ) &dfList );  flushList (( char * ) &kmList );
++  flushList (( char * ) &prList );
++  flushList (( char * ) &opList );  flushList (( char * ) &coList );
++  flushList (( char * ) &gaList );  flushList (( char * ) &riList );
++  flushList (( char * ) &poList );  flushList (( char * ) &paList );
++  flushList (( char * ) &ptList );  flushList (( char * ) &pfList );
++  flushList (( char * ) &pdList );  flushList (( char * ) &piList );
++  flushList (( char * ) &rdList );  flushList (( char * ) &alList );
++  flushList (( char * ) &rtList );  flushList (( char * ) &rrList );
++}
++
++/****************************************************************************
++*                                                                           *
++*                   flushList() - flush a linked list                       *
++*                                                                           *
++****************************************************************************/
++static void flushList ( char *l )
++{
++  LIST_HEAD ( , avNode ) *list;
++  
++  list = ( LIST_HEAD ( , avNode ) * ) l;    // NOTE: don't know how to get 
++  while ( !LIST_EMPTY ( list )) {           //  rid of compiler warning on
++    np = LIST_FIRST ( list );               //  LISTHEAD typecast
++    if ( np->data )
++      free ( np->data );
++    LIST_REMOVE ( np, nodes );
++    free ( np );
++  }
++}
++
++/****************************************************************************
++*                                                                           *
++*                            Utility Functions                              *
++*                                                                           *
++****************************************************************************/
++/****************************************************************************
++*                                                                           *
++*        The following two routines were taken directly from iwlib.c        *
++*                                                                           *
++****************************************************************************/
++ /*
++ * Open a socket.
++ * Depending on the protocol present, open the right socket. The socket
++ * will allow us to talk to the driver.
++ */
++static int openSocket ( void )
++{
++  static const int families[] = {
++    AF_INET, AF_IPX, AF_AX25, AF_APPLETALK
++  };
++  unsigned int  i;
++  int   sock;
++
++  /*
++   * Now pick any (exisiting) useful socket family for generic queries
++   * Note : don't open all the socket, only returns when one matches,
++   * all protocols might not be valid.
++   * Workaround by Jim Kaba <jkaba@sarnoff.com>
++   * Note : in 99% of the case, we will just open the inet_sock.
++   * The remaining 1% case are not fully correct...
++   */
++
++  /* Try all families we support */
++  for(i = 0; i < sizeof(families)/sizeof(int); ++i) {
++      /* Try to open the socket, if success returns it */
++      sock = socket(families[i], SOCK_DGRAM, 0);
++      if(sock >= 0)
++  return sock;
++  }
++
++  return -1;
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Convert a value in milliWatt to a value in dBm.
++ */
++static int mWatt2dbm ( int in )
++{
++#ifdef WE_NOLIBM
++  /* Version without libm : slower */
++  double  fin = (double) in;
++  int   res = 0;
++
++  /* Split integral and floating part to avoid accumulating rounding errors */
++  while(fin > 10.0)
++    {
++      res += 10;
++      fin /= 10.0;
++    }
++  while(fin > 1.000001) /* Eliminate rounding errors, take ceil */
++    {
++      res += 1;
++      fin /= LOG10_MAGIC;
++    }
++  return(res);
++#else /* WE_NOLIBM */
++  /* Version with libm : faster */
++  return((int) (ceil(10.0 * log10((double) in))));
++#endif  /* WE_NOLIBM */
++}
++
++/****************************************************************************
++*                                                                           *
++*                 htob - converts hex string to binary                      *
++*                                                                           *
++****************************************************************************/
++static char *htob ( char *s )
++{
++    char nibl, *byt;
++    static char bin[20];
++
++    byt = bin;
++
++    while ((nibl = *s++) && nibl != ' ') {    /* While not end of string. */
++      nibl -= ( nibl > '9') ?  ('A' - 10): '0';
++      *byt = nibl << 4;                              /* place high nibble */
++      if((nibl = *s++) && nibl != ' ') {
++        nibl -= ( nibl > '9') ?  ('A' - 10): '0';
++        *byt |= nibl;                                /*  place low nibble */
++      }
++      else break;
++      ++byt;
++    }
++    *++byt = '\0';
++    return ( bin );
++}
++
++/****************************************************************************
++*                                                                           *
++*           hasChanged() - see if area has been changed from NULLs          *
++*                                                                           *
++****************************************************************************/
++static int hasChanged ( char *loc, int len )
++{
++  char *wrk;
++  int changed = TRUE;
++
++  wrk = malloc ( len );
++  memset ( wrk, 0, len );
++  if ( memcmp ( loc, wrk, len ) == 0 )
++    changed = FALSE;
++  free ( wrk );
++
++  return ( changed );
++}
++
+--- /dev/null
++++ b/agent/mibgroup/ieee802dot11.h
+@@ -0,0 +1,730 @@
++/****************************************************************************
++*                                                                           *
++*  File Name:           ieee802dot11.h                                      *
++*  Used By:                                                                 *
++*                                                                           *
++*  Operating System:                                                        *
++*  Purpose:                                                                 *
++*                                                                           *
++*  Comments:                                                                *
++*                                                                           *
++*  Author:              Larry Simmons                                       *
++*                       lsimmons@avantcom.com                               *
++*                       www.avantcom.com                                    *
++*                                                                           *
++*  Creation Date:       09/02/03                                            *
++*                                                                           *
++*   Ver    Date   Inits Modification                                        *
++*  ----- -------- ----- ------------                                        *
++*  0.0.1 09/02/03  LRS  created                                             *
++*  0.0.2 09/24/03  LRS  wouldn't build after fresh ./configure              *
++****************************************************************************/
++/* This file was generated by mib2c and is intended for use as a mib module
++  for the ucd-snmp snmpd agent. */
++#ifndef _MIBGROUP_IEEE802DOT11_H
++#define _MIBGROUP_IEEE802DOT11_H
++/* we may use header_generic and header_simple_table from the util_funcs module */
++
++/****************************************************************************
++*                               Includes                                    *
++****************************************************************************/
++#include <sys/queue.h>
++
++/****************************************************************************
++*                             Linked List Defines                           *
++****************************************************************************/
++// here are some Linked List MACROS I wanted to use, 
++// but curiously were not in /usr/includes/sys/queue.h
++
++#ifndef LIST_EMPTY
++  #define     LIST_EMPTY(head)        ((head)->lh_first == NULL)
++#endif
++
++#ifndef LIST_NEXT
++  #define     LIST_NEXT(elm, field)   ((elm)->field.le_next)
++#endif
++
++#ifndef LIST_INSERT_BEFORE
++  #define     LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
++        (elm)->field.le_prev = (listelm)->field.le_prev;              \
++        LIST_NEXT((elm), field) = (listelm);                          \
++        *(listelm)->field.le_prev = (elm);                            \
++        (listelm)->field.le_prev = &LIST_NEXT((elm), field);          \
++  } while (0)
++#endif
++
++#ifndef LIST_FIRST
++  #define     LIST_FIRST(head)        ((head)->lh_first)
++#endif
++
++/****************************************************************************
++*                             802.11 MIB Defines                            *
++****************************************************************************/
++#define SYS_STRING_LEN                     256
++#define MACADDR_LEN                        ( 6 * 2 ) + 5
++#define OPER_RATE_SET_LEN                  126
++#define MAN_OUI_LEN                        ( 3 * 2 ) + 2
++#define WEP_STR_LEN                         64
++#define SNMP_STR_LEN                       128
++#define TEXT_LEN                            80
++#define IFINDEX_LEN                          4
++#define IFNAME_LEN                          16
++#define MAX_WEP_KEYS                         4
++
++#define AUTHENICATION_ALGORITHMS_INDEX_LEN   4
++#define WEP_DEFAULT_KEY_INDEX_LEN            4
++#define WEP_KEY_MAPPING_INDEX_LEN            4
++#define GROUP_ADDRESS_INDEX_LEN              4
++#define REG_DOMAIN_SUPPORT_INDEX_LEN         4
++#define ANTENNA_LIST_INDEX_LEN               4
++#define SUPPORTED_DATA_RATES_TX_INDEX_LEN    4
++#define SUPPORTED_DATA_RATES_RX_INDEX_LEN    4
++
++#define SC_UID_LEN  IFINDEX_LEN
++#define AA_UID_LEN  IFINDEX_LEN + AUTHENICATION_ALGORITHMS_INDEX_LEN
++#define DF_UID_LEN  IFINDEX_LEN + WEP_DEFAULT_KEY_INDEX_LEN
++#define KM_UID_LEN  IFINDEX_LEN + WEP_KEY_MAPPING_INDEX_LEN
++#define PR_UID_LEN  IFINDEX_LEN
++#define OP_UID_LEN  IFINDEX_LEN
++#define CO_UID_LEN  IFINDEX_LEN
++#define GA_UID_LEN  IFINDEX_LEN + GROUP_ADDRESS_INDEX_LEN
++#define RI_UID_LEN  IFINDEX_LEN
++#define PO_UID_LEN  IFINDEX_LEN
++#define PA_UID_LEN  IFINDEX_LEN
++#define PT_UID_LEN  IFINDEX_LEN
++#define PF_UID_LEN  IFINDEX_LEN
++#define PD_UID_LEN  IFINDEX_LEN
++#define PI_UID_LEN  IFINDEX_LEN
++#define RD_UID_LEN  IFINDEX_LEN + REG_DOMAIN_SUPPORT_INDEX_LEN
++#define AL_UID_LEN  IFINDEX_LEN + ANTENNA_LIST_INDEX_LEN
++#define RT_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_TX_INDEX_LEN
++#define RR_UID_LEN  IFINDEX_LEN + SUPPORTED_DATA_RATES_RX_INDEX_LEN
++
++/****************************************************************************
++*                           Linked List Structure                           *
++****************************************************************************/
++static struct avNode {  
++  LIST_ENTRY ( avNode ) nodes; 
++  char *data;                                 // pointer to data
++};
++
++typedef LIST_HEAD ( , avNode ) avList_t;
++
++/****************************************************************************
++*                          802.11 MIB structures                            *
++****************************************************************************/
++/****************************************************************************
++*                             dot11Smt Group                                *
++****************************************************************************/
++/****************************************************************************
++*                          dot11StationConfigTable                          *
++****************************************************************************/
++static struct scTbl_data {
++
++  char  UID       [ SC_UID_LEN + 1 ];               // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  char  stationID [ MACADDR_LEN + 1 ];              // Default actual MacAddr
++  long  mediumOccupancyLimit;
++  long  CFPPollable;
++  long  CFPPeriod;
++  long  maxDuration;
++  long  authenticationResponseTimeOut;
++  long  privacyOptionImplemented;
++  long  powerManagementMode;
++  char  desiredSSID             [ SNMP_STR_LEN + 1 ];
++  long  desiredBSSType;
++  char  operationalRateSet      [ OPER_RATE_SET_LEN + 1];
++  long  beaconPeriod;
++  long  DTIMPeriod;
++  long  associationResponseTimeOut;
++  long  disAssociationReason;
++  char  disAssociationStation   [ MACADDR_LEN + 1 ];
++  long  deAuthenticationReason;
++  char  deAuthenticationStation [ MACADDR_LEN + 1 ];
++  long  authenticateFailStatus;
++  char  authenticateFailStation [ MACADDR_LEN + 1 ];
++
++  long  haveStationID;
++  long  haveMediumOccupancyLimit;
++  long  haveCFPPollable;
++  long  haveCFPPeriod;
++  long  haveMaxDuration;
++  long  haveAuthenticationResponseTimeOut;
++  long  havePrivacyOptionImplemented;
++  long  havePowerManagementMode;
++  long  haveDesiredSSID;
++  long  haveDesiredBSSType;
++  long  haveOperationalRateSet;
++  long  haveBeaconPeriod;
++  long  haveDTIMPeriod;
++  long  haveAssociationResponseTimeOut;
++  long  haveDisAssociationReason;
++  long  haveDisAssociationStation;
++  long  haveDeAuthenticationReason;
++  long  haveDeAuthenticationStation;
++  long  haveAuthenticateFailStatus;
++  long  haveAuthenticateFailStation;
++
++} nSc, *sc = &nSc;
++
++static avList_t scList;
++
++/****************************************************************************
++*                    dot11AuthenticationAlgorithmsTable                     *
++****************************************************************************/
++static struct aaTbl_data {
++
++  char  UID       [ AA_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++  long  authenticationAlgorithmsIndex;
++
++  long  authenticationAlgorithm;
++  long  authenticationAlgorithmsEnable;
++
++  long  haveAuthenticationAlgorithm;
++  long  haveAuthenticationAlgorithmsEnable;
++
++} nAa, *aa = &nAa;
++
++static avList_t aaList;
++
++/****************************************************************************
++*                           dot11WEPDefaultKeysTable                        *
++****************************************************************************/
++static struct dfTbl_data {
++
++  char  UID       [ DF_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];
++
++  long  ifIndex;                                    // ifindex of card
++  long  WEPDefaultKeyIndex;
++
++  char  WEPDefaultKeyValue [ WEP_STR_LEN + 1 ];
++  long  haveWEPDefaultKeyValue;
++
++} nDf, *df = &nDf;
++
++static avList_t dfList;
++
++/****************************************************************************
++*                          dot11WEPKeyMappingsTable                         *
++****************************************************************************/
++static struct kmTbl_data {
++
++  char  UID       [ KM_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];
++
++  long  ifIndex;
++  long  WEPKeyMappingIndex;
++
++  char  WEPKeyMappingAddress  [ MACADDR_LEN + 1 ];
++  long  WEPKeyMappingWEPOn;
++  char  WEPKeyMappingValue    [ WEP_STR_LEN + 1 ];
++  long  WEPKeyMappingStatus;
++
++  long  haveWEPKeyMappingIndex;
++  long  haveWEPKeyMappingAddress;
++  long  haveWEPKeyMappingWEPOn;
++  long  haveWEPKeyMappingValue;
++  long  haveWEPKeyMappingStatus;
++
++} nKm, *km = &nKm;
++
++static avList_t kmList;
++
++/****************************************************************************
++*                                dot11PrivacyTable                          *
++****************************************************************************/
++static struct prTbl_data {
++
++  char          UID       [ PR_UID_LEN + 1 ];
++  char          ifName    [ IFNAME_LEN + 1 ];
++
++  long          ifIndex;
++
++  long          privacyInvoked;
++  long          WEPDefaultKeyID;
++  long          WEPKeyMappingLength;
++  long          excludeUnencrypted;
++  unsigned long WEPICVErrorCount;
++  unsigned long WEPExcludedCount;
++
++  long          havePrivacyInvoked;
++  long          haveWEPDefaultKeyID;
++  long          haveWEPKeyMappingLength;
++  long          haveExcludeUnencrypted;
++  long          haveWEPICVErrorCount;
++  long          haveWEPExcludedCount;
++
++} nPr, *pr = &nPr;
++
++static avList_t prList;
++
++/****************************************************************************
++*                               dot11Mac Group                              *
++****************************************************************************/
++/****************************************************************************
++*                              dot11OperationTable                          *
++****************************************************************************/
++static struct opTbl_data {
++
++  char  UID       [ OP_UID_LEN + 1 ];                 // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];                 // ifName of card
++
++  long  ifIndex;                                      // ifindex of card
++
++  char  MACAddress      [ MACADDR_LEN + 1 ];
++  long  RTSThreshold;
++  long  shortRetryLimit;
++  long  longRetryLimit;
++  long  fragmentationThreshold;
++  long  maxTransmitMSDULifetime;
++  long  maxReceiveLifetime;
++  char  manufacturerID  [ SNMP_STR_LEN + 1 ];
++  char  productID       [ SNMP_STR_LEN + 1 ];
++
++  long  haveMACAddress;
++  long  haveRTSThreshold;
++  long  haveShortRetryLimit;
++  long  haveLongRetryLimit;
++  long  haveFragmentationThreshold;
++  long  haveMaxTransmitMSDULifetime;
++  long  haveMaxReceiveLifetime;
++  long  haveManufacturerID;
++  long  haveProductID;
++
++} nOp, *op = &nOp;
++
++static avList_t opList;
++
++/****************************************************************************
++*                            dot11CountersTable                             *
++****************************************************************************/
++static struct coTbl_data {
++
++  char          UID       [ CO_UID_LEN + 1 ];     // unique ID
++  char          ifName    [ IFNAME_LEN + 1 ];     // ifName of card
++
++  long          ifIndex;                          // ifindex of card
++
++  unsigned long  transmittedFragmentCount;
++  unsigned long  multicastTransmittedFrameCount;
++  unsigned long  failedCount;
++  unsigned long  retryCount;
++  unsigned long  multipleRetryCount;
++  unsigned long  frameDuplicateCount;
++  unsigned long  RTSSuccessCount;
++  unsigned long  RTSFailureCount;
++  unsigned long  ACKFailureCount;
++  unsigned long  receivedFragmentCount;
++  unsigned long  multicastReceivedFrameCount;
++  unsigned long  FCSErrorCount;
++  unsigned long  transmittedFrameCount;
++  unsigned long  WEPUndecryptableCount;
++
++  long           haveTransmittedFragmentCount;
++  long           haveMulticastTransmittedFrameCount;
++  long           haveFailedCount;
++  long           haveRetryCount;
++  long           haveMultipleRetryCount;
++  long           haveFrameDuplicateCount;
++  long           haveRTSSuccessCount;
++  long           haveRTSFailureCount;
++  long           haveACKFailureCount;
++  long           haveReceivedFragmentCount;
++  long           haveMulticastReceivedFrameCount;
++  long           haveFCSErrorCount;
++  long           haveTransmittedFrameCount;
++  long           haveWEPUndecryptableCount;
++
++} nCo, *co = &nCo;
++
++static avList_t coList;
++
++/****************************************************************************
++*                        dot11GroupAddressesTable                           *
++****************************************************************************/
++static struct gaTbl_data {
++
++  char  UID       [ GA_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];
++
++  long  ifIndex;                                    // ifindex of card
++  long  groupAddressesIndex;
++
++  char  address   [ MACADDR_LEN + 1 ];
++  long  groupAddressesStatus;
++
++  long  haveAddress;
++  long  haveGroupAddressesStatus;
++
++} nGa, *ga = &nGa;
++
++static avList_t gaList;
++
++/****************************************************************************
++*                               dot11Res Group                              *
++****************************************************************************/
++static char  resourceTypeIDName[] = "RTID";
++static long  haveResourceTypeIDName = 1;
++
++/****************************************************************************
++*                           dot11ResourceInfoTable                          *
++****************************************************************************/
++static struct riTbl_data {
++
++  char  UID       [ RI_UID_LEN + 1 ];               // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  char  manufacturerOUI            [ MAN_OUI_LEN    + 1 ];
++  char  manufacturerName           [ SYS_STRING_LEN + 1 ];
++  char  manufacturerProductName    [ SYS_STRING_LEN + 1 ];
++  char  manufacturerProductVersion [ SYS_STRING_LEN + 1 ];
++
++  char  haveManufacturerOUI;
++  char  haveManufacturerName;
++  char  haveManufacturerProductName;
++  char  haveManufacturerProductVersion;
++
++} nRi, *ri = &nRi;
++
++static avList_t riList;
++
++/****************************************************************************
++*                               dot11Phy Group                              *
++****************************************************************************/
++/****************************************************************************
++*                           dot11PhyOperationTable                          *
++****************************************************************************/
++static struct poTbl_data {
++
++  char  UID       [ PO_UID_LEN + 1 ];               // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  long  PHYType;
++  long  currentRegDomain;
++  long  tempType;
++
++  long  havePHYType;
++  long  haveCurrentRegDomain;
++  long  haveTempType;
++
++} nPo, *po = &nPo;
++
++static avList_t poList;
++
++/****************************************************************************
++*                           dot11PhyAntennaEntry                            *
++****************************************************************************/
++static struct paTbl_data {
++
++  char  UID       [ PA_UID_LEN + 1 ];               // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  long  currentTxAntenna;
++  long  diversitySupport;
++  long  currentRxAntenna;
++
++  long  haveCurrentTxAntenna;
++  long  haveDiversitySupport;
++  long  haveCurrentRxAntenna;
++
++} nPa, *pa = &nPa;
++
++static avList_t paList;
++
++/****************************************************************************
++*                             dot11PhyTxPowerTable                          *
++****************************************************************************/
++static struct ptTbl_data {
++
++  char  UID       [ PT_UID_LEN + 1 ];               // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  long  numberSupportedPowerLevels;
++  long  TxPowerLevel1;
++  long  TxPowerLevel2;
++  long  TxPowerLevel3;
++  long  TxPowerLevel4;
++  long  TxPowerLevel5;
++  long  TxPowerLevel6;
++  long  TxPowerLevel7;
++  long  TxPowerLevel8;
++  long  currentTxPowerLevel;
++
++  long  haveNumberSupportedPowerLevels;
++  long  haveTxPowerLevel1;
++  long  haveTxPowerLevel2;
++  long  haveTxPowerLevel3;
++  long  haveTxPowerLevel4;
++  long  haveTxPowerLevel5;
++  long  haveTxPowerLevel6;
++  long  haveTxPowerLevel7;
++  long  haveTxPowerLevel8;
++  long  haveCurrentTxPowerLevel ;
++
++} nPt, *pt = &nPt;
++
++static avList_t ptList;
++
++/****************************************************************************
++*                               dot11PhyFHSSTable                           *
++****************************************************************************/
++static struct pfTbl_data {
++
++  char  UID       [ PF_UID_LEN + 1 ];              // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];              // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  long  hopTime;
++  long  currentChannelNumber;
++  long  maxDwellTime;
++  long  currentDwellTime;
++  long  currentSet;
++  long  currentPattern;
++  long  currentIndex;
++
++  long  haveHopTime;
++  long  haveCurrentChannelNumber;
++  long  haveMaxDwellTime;
++  long  haveCurrentDwellTime;
++  long  haveCurrentSet;
++  long  haveCurrentPattern;
++  long  haveCurrentIndex;
++
++} nPf, *pf = &nPf;
++
++static avList_t pfList;
++
++/****************************************************************************
++*                              dot11PhyDSSSTable                            *
++****************************************************************************/
++static struct pdTbl_data {
++
++  char  UID       [ PD_UID_LEN + 1 ];               // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  long  currentChannel;
++  long  CCAModeSupported;
++  long  currentCCAMode;
++  long  EDThreshold;
++
++  long  haveCurrentChannel;
++  long  haveCCAModeSupported ;
++  long  haveCurrentCCAMode;
++  long  haveEDThreshold;
++
++} nPd, *pd = &nPd;
++
++static avList_t pdList;
++
++/****************************************************************************
++*                              dot11PhyIRTable                              *
++****************************************************************************/
++static struct piTbl_data {
++
++  char  UID       [ PI_UID_LEN + 1 ];               // unique ID
++  char  ifName    [ IFNAME_LEN + 1 ];               // ifName of card
++
++  long  ifIndex;                                    // ifindex of card
++
++  long  CCAWatchdogTimerMax;
++  long  CCAWatchdogCountMax;
++  long  CCAWatchdogTimerMin;
++  long  CCAWatchdogCountMin;
++
++  long  haveCCAWatchdogTimerMax;
++  long  haveCCAWatchdogCountMax;
++  long  haveCCAWatchdogTimerMin;
++  long  haveCCAWatchdogCountMin;
++
++} nPi, *pi = &nPi;
++
++static avList_t piList;
++
++/****************************************************************************
++*                      dot11RegDomainsSupportedTable                        *
++****************************************************************************/
++static struct rdTbl_data {
++
++  char  UID       [ RD_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];
++
++  long  ifIndex;                                    // ifindex of card
++  long  regDomainsSupportIndex;
++
++  long  regDomainsSupportValue;
++  long  haveRegDomainsSupportValue;
++
++} nRd, *rd = &nRd;
++
++static avList_t rdList;
++
++/****************************************************************************
++*                             dot11AntennasListTable                        *
++****************************************************************************/
++static struct alTbl_data {
++
++  char  UID       [ AL_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];
++
++  long  ifIndex;                                    // ifindex of card
++  long  antennaListIndex;
++
++  long  supportedTxAntenna;
++  long  supportedRxAntenna;
++  long  diversitySelectionRx ;
++
++  long  haveSupportedTxAntenna;
++  long  haveSupportedRxAntenna;
++  long  haveDiversitySelectionRx ;
++
++} nAl, *al = &nAl;
++
++static avList_t alList;
++
++/****************************************************************************
++*                    dot11SupportedDataRatesTxTable                         *
++****************************************************************************/
++static struct rtTbl_data {
++
++  char  UID       [ RT_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];
++
++  long  ifIndex;                                    // ifindex of card
++  long  supportedDataRatesTxIndex;
++
++  long  supportedDataRatesTxValue;
++  long  haveSupportedDataRatesTxValue;
++
++} nRt, *rt = &nRt;
++
++static avList_t rtList;
++
++/****************************************************************************
++*                    dot11SupportedDataRatesRxTable                         *
++****************************************************************************/
++static struct rrTbl_data {
++
++  char  UID       [ RR_UID_LEN + 1 ];
++  char  ifName    [ IFNAME_LEN + 1 ];
++
++  long  ifIndex;                                    // ifindex of card
++  long  supportedDataRatesRxIndex;
++
++  long  supportedDataRatesRxValue;
++  long  haveSupportedDataRatesRxValue;
++
++} nRr, *rr = &nRr;
++
++static avList_t rrList;
++
++/****************************************************************************
++*                       Wireless Extensions Structures                      *
++****************************************************************************/
++static long wepCurrentKey;
++static long haveWepCurrentKey;
++static struct wepTbl_data {
++
++  long len;
++  char key [ WEP_STR_LEN + 1 ];
++  long haveKey;
++
++} wep[4];
++
++/****************************************************************************
++*                                                                           *
++****************************************************************************/
++config_require(util_funcs)
++
++/* function prototypes */
++
++void   init_ieee802dot11 ( void );
++FindVarMethod var_ieee802dot11;
++FindVarMethod var_dot11StationConfigTable;
++FindVarMethod var_dot11AuthenticationAlgorithmsTable;
++FindVarMethod var_dot11WEPDefaultKeysTable;
++FindVarMethod var_dot11WEPKeyMappingsTable;
++FindVarMethod var_dot11PrivacyTable;
++FindVarMethod var_dot11OperationTable;
++FindVarMethod var_dot11CountersTable;
++FindVarMethod var_dot11GroupAddressesTable;
++FindVarMethod var_dot11ResourceInfoTable;
++FindVarMethod var_dot11PhyOperationTable;
++FindVarMethod var_dot11PhyAntennaTable;
++FindVarMethod var_dot11PhyTxPowerTable;
++FindVarMethod var_dot11PhyFHSSTable;
++FindVarMethod var_dot11PhyDSSSTable;
++FindVarMethod var_dot11PhyIRTable;
++FindVarMethod var_dot11RegDomainsSupportedTable;
++FindVarMethod var_dot11AntennasListTable;
++FindVarMethod var_dot11SupportedDataRatesTxTable;
++FindVarMethod var_dot11SupportedDataRatesRxTable;
++
++WriteMethod write_dot11StationID;
++WriteMethod write_dot11MediumOccupancyLimit;
++WriteMethod write_dot11CFPPeriod;
++WriteMethod write_dot11CFPMaxDuration;
++WriteMethod write_dot11AuthenticationResponseTimeOut;
++WriteMethod write_dot11PowerManagementMode;
++WriteMethod write_dot11DesiredSSID;
++WriteMethod write_dot11DesiredBSSType;
++WriteMethod write_dot11OperationalRateSet;
++WriteMethod write_dot11BeaconPeriod;
++WriteMethod write_dot11DTIMPeriod;
++WriteMethod write_dot11AssociationResponseTimeOut;
++WriteMethod write_dot11AuthenticationAlgorithmsEnable;
++WriteMethod write_dot11WEPDefaultKeyValue;
++WriteMethod write_dot11WEPKeyMappingAddress;
++WriteMethod write_dot11WEPKeyMappingWEPOn;
++WriteMethod write_dot11WEPKeyMappingValue;
++WriteMethod write_dot11WEPKeyMappingStatus;
++WriteMethod write_dot11PrivacyInvoked;
++WriteMethod write_dot11WEPDefaultKeyID;
++WriteMethod write_dot11WEPKeyMappingLength;
++WriteMethod write_dot11ExcludeUnencrypted;
++WriteMethod write_dot11RTSThreshold;
++WriteMethod write_dot11ShortRetryLimit;
++WriteMethod write_dot11LongRetryLimit;
++WriteMethod write_dot11FragmentationThreshold;
++WriteMethod write_dot11MaxTransmitMSDULifetime;
++WriteMethod write_dot11MaxReceiveLifetime;
++WriteMethod write_dot11Address;
++WriteMethod write_dot11GroupAddressesStatus;
++WriteMethod write_dot11CurrentRegDomain;
++WriteMethod write_dot11CurrentTxAntenna;
++WriteMethod write_dot11CurrentRxAntenna;
++WriteMethod write_dot11CurrentTxPowerLevel;
++WriteMethod write_dot11CurrentChannelNumber;
++WriteMethod write_dot11CurrentDwellTime;
++WriteMethod write_dot11CurrentSet;
++WriteMethod write_dot11CurrentPattern;
++WriteMethod write_dot11CurrentIndex;
++WriteMethod write_dot11CurrentChannel;
++WriteMethod write_dot11CurrentCCAMode;
++WriteMethod write_dot11EDThreshold;
++WriteMethod write_dot11CCAWatchdogTimerMax;
++WriteMethod write_dot11CCAWatchdogCountMax;
++WriteMethod write_dot11CCAWatchdogTimerMin;
++WriteMethod write_dot11CCAWatchdogCountMin;
++WriteMethod write_dot11SupportedTxAntenna;
++WriteMethod write_dot11SupportedRxAntenna;
++WriteMethod write_dot11DiversitySelectionRx;
++
++#endif /* _MIBGROUP_IEEE802DOT11_H */
+--- /dev/null
++++ b/agent/mibgroup/iwlib.h
+@@ -0,0 +1,502 @@
++/*
++ *    Wireless Tools
++ *
++ *            Jean II - HPLB 97->99 - HPL 99->02
++ *
++ * Common header for the Wireless Extension library...
++ *
++ * This file is released under the GPL license.
++ *     Copyright (c) 1997-2002 Jean Tourrilhes <jt@hpl.hp.com>
++ */
++
++#ifndef IWLIB_H
++#define IWLIB_H
++
++/*#include "CHANGELOG.h"*/
++
++/***************************** INCLUDES *****************************/
++
++/* Standard headers */
++#include <sys/types.h>
++#include <sys/ioctl.h>
++#include <stdio.h>
++#include <math.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <ctype.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <netdb.h>            /* gethostbyname, getnetbyname */
++#include <net/ethernet.h>     /* struct ether_addr */
++#include <sys/time.h>         /* struct timeval */
++#include <unistd.h>
++
++/* This is our header selection. Try to hide the mess and the misery :-(
++ * Don't look, you would go blind ;-) */
++
++#ifndef LINUX_VERSION_CODE
++#include <linux/version.h>
++#endif
++
++/* Kernel headers 2.4.X + Glibc 2.2 - Mandrake 8.0, Debian 2.3, RH 7.1
++ * Kernel headers 2.2.X + Glibc 2.2 - Slackware 8.0 */
++#if defined(__GLIBC__) \
++    && __GLIBC__ == 2 \
++    && __GLIBC_MINOR__ >= 2 \
++    && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
++//#define GLIBC22_HEADERS
++#define GENERIC_HEADERS
++
++/* Kernel headers 2.4.X + Glibc 2.1 - Debian 2.2 upgraded, RH 7.0
++ * Kernel headers 2.2.X + Glibc 2.1 - Debian 2.2, RH 6.1 */
++#elif defined(__GLIBC__) \
++      && __GLIBC__ == 2 \
++      && __GLIBC_MINOR__ == 1 \
++      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)
++//#define GLIBC_HEADERS
++#define GENERIC_HEADERS
++
++/* Kernel headers 2.2.X + Glibc 2.0 - Debian 2.1 */
++#elif defined(__GLIBC__) \
++      && __GLIBC__ == 2 \
++      && __GLIBC_MINOR__ == 0 \
++      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
++      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
++#define GLIBC_HEADERS
++#define KLUDGE_HEADERS
++
++/* Note : is it really worth supporting kernel 2.0.X, knowing that
++ * we require WE v9, which is only available in 2.2.X and higher ?
++ * I guess one could use 2.0.x with an upgraded wireless.h... */
++
++/* Kernel headers 2.0.X + Glibc 2.0 - Debian 2.0, RH 5 */
++#elif defined(__GLIBC__) \
++      && __GLIBC__ == 2 \
++      && __GLIBC_MINOR__ == 0 \
++      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) \
++      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0)
++#define GLIBC_HEADERS
++
++/* Kernel headers 2.0.X + libc5 - old systems */
++#elif defined(_LINUX_C_LIB_VERSION_MAJOR) \
++      && _LINUX_C_LIB_VERSION_MAJOR == 5 \
++      && LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) \
++      && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
++#define LIBC5_HEADERS
++
++/* Unsupported combination */
++#else
++#error "Your kernel/libc combination is not supported"
++#endif
++
++#ifdef GENERIC_HEADERS 
++/* Proposed by Dr. Michael Rietz <rietz@mail.amps.de>, 27.3.2 */
++/* If this works for all, it might be more stable on the long term - Jean II */
++#include <net/if_arp.h>               /* For ARPHRD_ETHER */
++#include <sys/socket.h>               /* For AF_INET & struct sockaddr */
++#include <netinet/in.h>         /* For struct sockaddr_in */
++#include <netinet/if_ether.h>
++#endif /* GENERIC_HEADERS */    
++
++#ifdef GLIBC22_HEADERS 
++/* Added by Ross G. Miller <Ross_Miller@baylor.edu>, 3/28/01 */
++#include <linux/if_arp.h>     /* For ARPHRD_ETHER */
++#include <linux/socket.h>     /* For AF_INET & struct sockaddr */
++#include <sys/socket.h>
++#endif /* GLIBC22_HEADERS */    
++
++#ifdef KLUDGE_HEADERS
++#include <socketbits.h>
++#endif        /* KLUDGE_HEADERS */
++
++#ifdef GLIBC_HEADERS
++#include <linux/if_arp.h>     /* For ARPHRD_ETHER */
++#include <linux/socket.h>     /* For AF_INET & struct sockaddr */
++#include <linux/in.h>         /* For struct sockaddr_in */
++#endif        /* KLUDGE_HEADERS || GLIBC_HEADERS */
++
++#ifdef LIBC5_HEADERS
++#include <sys/socket.h>               /* For AF_INET & struct sockaddr & socket() */
++#include <linux/if_arp.h>     /* For ARPHRD_ETHER */
++#include <linux/in.h>         /* For struct sockaddr_in */
++#endif        /* LIBC5_HEADERS */
++
++/* Those 3 headers were previously included in wireless.h */
++#include <linux/types.h>              /* for "caddr_t" et al          */
++#include <linux/socket.h>             /* for "struct sockaddr" et al  */
++#include <linux/if.h>                 /* for IFNAMSIZ and co... */
++
++#ifdef WEXT_HEADER
++/* Private copy of Wireless extensions */
++#include WEXT_HEADER
++#else /* !WEXT_HEADER */
++/* System wide Wireless extensions */
++#include <linux/wireless.h>
++#endif        /* !WEXT_HEADER */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/****************************** DEBUG ******************************/
++
++
++/************************ CONSTANTS & MACROS ************************/
++
++/* Paths */
++#define PROC_NET_WIRELESS     "/proc/net/wireless"
++#define PROC_NET_DEV          "/proc/net/dev"
++
++/* Some useful constants */
++#define KILO  1e3
++#define MEGA  1e6
++#define GIGA  1e9
++/* For doing log10/exp10 without libm */
++#define LOG10_MAGIC   1.25892541179
++
++/* Backward compatibility for Wireless Extension 9 */
++#ifndef IW_POWER_MODIFIER
++#define IW_POWER_MODIFIER     0x000F  /* Modify a parameter */
++#define IW_POWER_MIN          0x0001  /* Value is a minimum  */
++#define IW_POWER_MAX          0x0002  /* Value is a maximum */
++#define IW_POWER_RELATIVE     0x0004  /* Value is not in seconds/ms/us */
++#endif /* IW_POWER_MODIFIER */
++
++#ifndef IW_ENCODE_NOKEY
++#define IW_ENCODE_NOKEY         0x0800  /* Key is write only, so not here */
++#define IW_ENCODE_MODE                0xF000  /* Modes defined below */
++#endif /* IW_ENCODE_NOKEY */
++#ifndef IW_ENCODE_TEMP
++#define IW_ENCODE_TEMP                0x0400  /* Temporary key */
++#endif /* IW_ENCODE_TEMP */
++
++/* More backward compatibility */
++#ifndef SIOCSIWCOMMIT
++#define SIOCSIWCOMMIT SIOCSIWNAME
++#endif /* SIOCSIWCOMMIT */
++
++/****************************** TYPES ******************************/
++
++/* Shortcuts */
++typedef struct iw_statistics  iwstats;
++typedef struct iw_range               iwrange;
++typedef struct iw_param               iwparam;
++typedef struct iw_freq                iwfreq;
++typedef struct iw_quality     iwqual;
++typedef struct iw_priv_args   iwprivargs;
++typedef struct sockaddr               sockaddr;
++
++/* Structure for storing all wireless information for each device
++ * This is pretty exhaustive... */
++typedef struct wireless_info
++{
++  char                name[IFNAMSIZ + 1];     /* Wireless/protocol name */
++  int         has_nwid;
++  iwparam     nwid;                   /* Network ID */
++  int         has_freq;
++  double      freq;                   /* Frequency/channel */
++  int         has_sens;
++  iwparam     sens;                   /* sensitivity */
++  int         has_key;
++  unsigned char       key[IW_ENCODING_TOKEN_MAX];     /* Encoding key used */
++  int         key_size;               /* Number of bytes */
++  int         key_flags;              /* Various flags */
++  int         has_essid;
++  int         essid_on;
++  char                essid[IW_ESSID_MAX_SIZE + 1];   /* ESSID (extended network) */
++  int         has_nickname;
++  char                nickname[IW_ESSID_MAX_SIZE + 1]; /* NickName */
++  int         has_ap_addr;
++  sockaddr    ap_addr;                /* Access point address */
++  int         has_bitrate;
++  iwparam     bitrate;                /* Bit rate in bps */
++  int         has_rts;
++  iwparam     rts;                    /* RTS threshold in bytes */
++  int         has_frag;
++  iwparam     frag;                   /* Fragmentation threshold in bytes */
++  int         has_mode;
++  int         mode;                   /* Operation mode */
++  int         has_power;
++  iwparam     power;                  /* Power management parameters */
++  int         has_txpower;
++  iwparam     txpower;                /* Transmit Power in dBm */
++  int         has_retry;
++  iwparam     retry;                  /* Retry limit or lifetime */
++
++  /* Stats */
++  iwstats     stats;
++  int         has_stats;
++  iwrange     range;
++  int         has_range;
++} wireless_info;
++
++/* Structure for storing all wireless information for each device
++ * This is a cut down version of the one above, containing only
++ * the things *truly* needed to configure a card.
++ * Don't add other junk, I'll remove it... */
++typedef struct wireless_config
++{
++  char                name[IFNAMSIZ + 1];     /* Wireless/protocol name */
++  int         has_nwid;
++  iwparam     nwid;                   /* Network ID */
++  int         has_freq;
++  double      freq;                   /* Frequency/channel */
++  int         has_key;
++  unsigned char       key[IW_ENCODING_TOKEN_MAX];     /* Encoding key used */
++  int         key_size;               /* Number of bytes */
++  int         key_flags;              /* Various flags */
++  int         has_essid;
++  int         essid_on;
++  char                essid[IW_ESSID_MAX_SIZE + 1];   /* ESSID (extended network) */
++  int         has_mode;
++  int         mode;                   /* Operation mode */
++} wireless_config;
++
++typedef struct stream_descr
++{
++  char *      end;            /* End of the stream */
++  char *      current;        /* Current event in stream of events */
++  char *      value;          /* Current value in event */
++} stream_descr;
++
++/* Prototype for handling display of each single interface on the
++ * system - see iw_enum_devices() */
++typedef int (*iw_enum_handler)(int    skfd,
++                             char *   ifname,
++                             char *   args[],
++                             int      count);
++
++/**************************** PROTOTYPES ****************************/
++/*
++ * All the functions in iwcommon.c
++ */
++
++/* ---------------------- SOCKET SUBROUTINES -----------------------*/
++int
++      iw_sockets_open(void);
++void
++      iw_enum_devices(int             skfd,
++                      iw_enum_handler fn,
++                      char *          args[],
++                      int             count);
++/* --------------------- WIRELESS SUBROUTINES ----------------------*/
++int
++      iw_get_range_info(int           skfd,
++                        char *        ifname,
++                        iwrange *     range);
++int
++      iw_print_version_info(char *    toolname);
++int
++      iw_get_priv_info(int            skfd,
++                       char *         ifname,
++                       iwprivargs *   priv,
++                       int            maxpriv);
++int
++      iw_get_basic_config(int                 skfd,
++                          char *              ifname,
++                          wireless_config *   info);
++int
++      iw_set_basic_config(int                 skfd,
++                          char *              ifname,
++                          wireless_config *   info);
++/* --------------------- PROTOCOL SUBROUTINES --------------------- */
++int
++      iw_protocol_compare(char *      protocol1,
++                          char *      protocol2);
++/* -------------------- FREQUENCY SUBROUTINES --------------------- */
++void
++      iw_float2freq(double    in,
++                 iwfreq *     out);
++double
++      iw_freq2float(iwfreq *  in);
++void
++      iw_print_freq(char *    buffer,
++                    double    freq);
++int
++      iw_freq_to_channel(double               freq,
++                         struct iw_range *    range);
++void
++      iw_print_bitrate(char * buffer,
++                       int    bitrate);
++/* ---------------------- POWER SUBROUTINES ----------------------- */
++int
++      iw_dbm2mwatt(int        in);
++int
++      iw_mwatt2dbm(int        in);
++/* -------------------- STATISTICS SUBROUTINES -------------------- */
++int
++      iw_get_stats(int        skfd,
++                   char *     ifname,
++                   iwstats *  stats);
++void
++      iw_print_stats(char *           buffer,
++                     iwqual *         qual,
++                     iwrange *        range,
++                     int              has_range);
++/* --------------------- ENCODING SUBROUTINES --------------------- */
++void
++      iw_print_key(char *             buffer,
++                   unsigned char *    key,
++                   int                key_size,
++                   int                key_flags);
++int
++      iw_in_key(char *                input,
++                unsigned char *       key);
++int
++      iw_in_key_full(int              skfd,
++                     char *           ifname,
++                     char *           input,
++                     unsigned char *  key,
++                     __u16 *          flags);
++/* ----------------- POWER MANAGEMENT SUBROUTINES ----------------- */
++void
++      iw_print_pm_value(char *        buffer,
++                        int           value,
++                        int           flags);
++void
++      iw_print_pm_mode(char *         buffer,
++                       int            flags);
++/* --------------- RETRY LIMIT/LIFETIME SUBROUTINES --------------- */
++#if WIRELESS_EXT > 10
++void
++      iw_print_retry_value(char *     buffer,
++                           int        value,
++                           int        flags);
++#endif
++/* ----------------------- TIME SUBROUTINES ----------------------- */
++void
++      iw_print_timeval(char *                 buffer,
++                       const struct timeval * time);
++/* --------------------- ADDRESS SUBROUTINES ---------------------- */
++int
++      iw_check_mac_addr_type(int      skfd,
++                             char *   ifname);
++int
++      iw_check_if_addr_type(int       skfd,
++                            char *    ifname);
++#if 0
++int
++      iw_check_addr_type(int          skfd,
++                         char *       ifname);
++#endif
++void
++      iw_ether_ntop(const struct ether_addr* eth, char* buf);
++char*
++      iw_ether_ntoa(const struct ether_addr* eth);
++int
++      iw_ether_aton(const char* bufp, struct ether_addr* eth);
++int
++      iw_in_inet(char *bufp, struct sockaddr *sap);
++int
++      iw_in_addr(int                  skfd,
++                 char *               ifname,
++                 char *               bufp,
++                 struct sockaddr *    sap);
++/* ----------------------- MISC SUBROUTINES ------------------------ */
++int
++      iw_get_priv_size(int            args);
++
++#if WIRELESS_EXT > 13
++/* ---------------------- EVENT SUBROUTINES ---------------------- */
++void
++      iw_init_event_stream(struct stream_descr *      stream,
++                           char *                     data,
++                           int                        len);
++int
++      iw_extract_event_stream(struct stream_descr *   stream,
++                              struct iw_event *       iwe);
++#endif /* WIRELESS_EXT > 13 */
++
++/**************************** VARIABLES ****************************/
++
++extern const char * const     iw_operation_mode[];
++#define IW_NUM_OPER_MODE      7
++
++/************************* INLINE FUNTIONS *************************/
++/*
++ * Functions that are so simple that it's more efficient inlining them
++ */
++
++/*
++ * Note : I've defined wrapper for the ioctl request so that
++ * it will be easier to migrate to other kernel API if needed
++ */
++
++/*------------------------------------------------------------------*/
++/*
++ * Wrapper to push some Wireless Parameter in the driver
++ */
++static inline int
++iw_set_ext(int                        skfd,           /* Socket to the kernel */
++         char *               ifname,         /* Device name */
++         int                  request,        /* WE ID */
++         struct iwreq *       pwrq)           /* Fixed part of the request */
++{
++  /* Set device name */
++  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
++  /* Do the request */
++  return(ioctl(skfd, request, pwrq));
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Wrapper to extract some Wireless Parameter out of the driver
++ */
++static inline int
++iw_get_ext(int                        skfd,           /* Socket to the kernel */
++         char *               ifname,         /* Device name */
++         int                  request,        /* WE ID */
++         struct iwreq *       pwrq)           /* Fixed part of the request */
++{
++  /* Set device name */
++  strncpy(pwrq->ifr_name, ifname, IFNAMSIZ);
++  /* Do the request */
++  return(ioctl(skfd, request, pwrq));
++}
++
++/*------------------------------------------------------------------*/
++/* Backwards compatibility
++ * Actually, those form are much easier to use when dealing with
++ * struct sockaddr... */
++static inline char*
++iw_pr_ether(char* bufp, const unsigned char* addr)
++{
++  iw_ether_ntop((const struct ether_addr *) addr, bufp);
++  return bufp;
++}
++/* Backwards compatibility */
++static inline int
++iw_in_ether(const char *bufp, struct sockaddr *sap)
++{
++  sap->sa_family = ARPHRD_ETHER;
++  return iw_ether_aton(bufp, (struct ether_addr *) sap->sa_data) ? 0 : -1;
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Create an Ethernet broadcast address
++ */
++static inline void
++iw_broad_ether(struct sockaddr *sap)
++{
++  sap->sa_family = ARPHRD_ETHER;
++  memset((char *) sap->sa_data, 0xFF, ETH_ALEN);
++}
++
++/*------------------------------------------------------------------*/
++/*
++ * Create an Ethernet NULL address
++ */
++static inline void
++iw_null_ether(struct sockaddr *sap)
++{
++  sap->sa_family = ARPHRD_ETHER;
++  memset((char *) sap->sa_data, 0x00, ETH_ALEN);
++}
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif        /* IWLIB_H */
diff --git a/package/network/services/net-snmp/patches/900-musl-compat.patch b/package/network/services/net-snmp/patches/900-musl-compat.patch
new file mode 100644 (file)
index 0000000..fa9a01e
--- /dev/null
@@ -0,0 +1,14 @@
+--- a/agent/mibgroup/iwlib.h
++++ b/agent/mibgroup/iwlib.h
+@@ -85,6 +85,11 @@
+       && LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0)
+ #define LIBC5_HEADERS
++/* Musl */
++#elif !defined(__GLIBC__) && !defined(__UCLIBC__) \
++      && LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
++#define GENERIC_HEADERS
++
+ /* Unsupported combination */
+ #else
+ #error "Your kernel/libc combination is not supported"