Home > Geeky, Rants, SNMP, VoIP > The Worst MIB in the World

The Worst MIB in the World

March 5th, 2007

This lovely turd is courtesy of NexTone Communications (Update: whose newer MIBs are much better — see Scott’s second comment below). I have personally never seen a worse MIB in my life — it consists of a single OID that is just a string and is used by the solitary generalTrap to convey who-knows-what when some unknown thing happens.

Update: NexTone’s more recent MIBs are much better written and convey much more useful and deterministic information. If you’re selecting a vendor based on SNMP support, and NexTone is in the running, I’d say that NexTone looks pretty good now. I’d still like to see more than just traps, but as trap-only MIBs go, the new ones aren’t bad at all. See Scott’s second comment below.
NEXTONE-MIB DEFINITIONS ::= BEGIN

IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
TimeTicks, Counter32, mib-2
FROM SNMPv2-SMI

SnmpAdminString
FROM SNMP-FRAMEWORK-MIB

MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
FROM SNMPv2-CONF;

nexToneMib MODULE-IDENTITY
LAST-UPDATED “200505240000Z”
ORGANIZATION “Nextone Communications, Inc”
CONTACT-INFO
“Dev Lead: Scott Lowrey

Address: 101 Orchard Ridge Dr
Suite 300
Gaithersburg, MD 20878
USA
EMail: slowrey AT nextone PERIOD com
Phone: +1 240 912 XXXX”
DESCRIPTION
“The MIB module for NexTone servers.

Copyright (c) 2005 NexTone Communications, Inc.

::= { iso(1) org(3) dod(6) internet(1) private (4)
enterprises(1) nextone (7684) }

nexToneMibObjects OBJECT IDENTIFIER ::= { nexToneMib 1 }

– Traps

nexToneTraps OBJECT IDENTIFIER ::= { nexToneMibObjects 1 }
nexToneDisp OBJECT IDENTIFIER ::= { nexToneMibObjects 2 }

generalTrap NOTIFICATION-TYPE
OBJECTS { trapReason }
STATUS current
DESCRIPTION
“A trap for communicating significant NexTone service events.”
::= { nexToneTraps 1 }

trapReason OBJECT-TYPE
SYNTAX SnmpAdminString (SIZE(0..128))
ACCESS read-write
STATUS current
DESCRIPTION “Textual description of trap”
::= { nexToneDisp 1 }
END

Not to say that NexTone sucks or anything, but if you work for NexTone and you’re reading this, you should really go find the product manager who signed off on calling this “SNMP support” and kick him or her right in the knee.

jeff Geeky, Rants, SNMP, VoIP

  1. Scott Lowrey
    May 21st, 2007 at 15:19 | #1

    You might have checked with me before publishing this comment (and my name and email address).

    The MIB that you posted is out of date. Yes, it’s terrible but it did serve a purpose when we created it. We had customers that demanded some kind of SNMP support from our application software. So, we designed (cough) this simple MIB to send traps when an error occurred. It satisfied the customer until we could do something better.

    We have a better MIB now. Maybe you’d like to see it? And maybe you’d like to retract your previous comments?

    -Scott

  2. jeff
    May 21st, 2007 at 15:35 | #2

    Scott,

    Thanks for taking the time to register and comment. I’ve obscured your e-mail address and redacted your phone number in the post body. I apologize for not having done so in the first place — I just copied and pasted the MIB.

    I won’t retract my comments from before, because I maintain that the MIB as I encountered it sucks. I would love to see the new one, though — nothing would make me happier right now than posting a follow-up declaring some positive karma. Well, getting the issues with my employer’s support contract worked out would make me pretty happy, but I suspect that’s well out of your hands and mine.

    -jeff

  3. Scott Lowrey
    May 21st, 2007 at 16:48 | #3

    We have three MIBS now: NEXTONE-SMI-MIB, NEXTONE-NOTIFICATION-MIB, and the old NEXTONEv1-MIB (pretty much unchanged from the original). I believe we have also implemented ENTITY-MIB for the hardware platforms that we specify. (I’m a little behind on the latest SNMP developments here.)

    None of this is perfect, but we’re learning. :)

    NEXTONE-SMI-MIB DEFINITIONS ::= BEGIN

    IMPORTS
    MODULE-IDENTITY, enterprises
    FROM SNMPv2-SMI; — [RFC2578]

    nextoneSmiMib MODULE-IDENTITY
    LAST-UPDATED “200602200000Z” — 20 Feb 2006, midnight
    ORGANIZATION “NexTone Communications”
    CONTACT-INFO
    “NexTone Communications
    101 Orchard Ridge Drive, suite 300
    Gaithersburg, MD 20878
    USA

    Telephone: +1.240.912.1300
    EMail: nextone-mibs@nextone.com
    URL: http://www.nextone.com

    Send comments to

    DESCRIPTION
    “The top level organization of the NexTone private
    enterprise name space.

    Copyright (C) and Trademark (TM) 2006 NexTone
    Communications, Inc. All rights reserved. Use is
    subject to license terms.

    This version of the NEXTONE-SMI-MIB module is part
    of NexTone publication, `The NexTone SMI MIB’,
    publication #####. See the publication itself for
    full legal notices.

    – Revision log

    REVISION “200602200000Z” — 20 Feb 2006, midnight
    DESCRIPTION
    “Initial version, as part of NexTone publication
    `The NexTone SMI MIB’, publication #####.

    ::= { nxManagement 1 }


    – The NexTone private enterprise number assigned by IANA

    nextone OBJECT IDENTIFIER ::= { enterprises 7684 }


    – === The nxRegistry subtree =====

    – The name space under the nxRegistry subtree provides
    – a common area for OBJECT IDENTIFIER (OID) assignments in NexTone
    – modules. Essentially, this subtree contains OID assignments
    – mapping a collection of independently extensible categories
    – of identification values.

    – The OID assignments in this subtree are conveyed as values for
    – NexTone enterprise OBJECT-TYPEs defined using the AutonomousType
    – textual convention, as described in RFC 2579.

    nxRegistry OBJECT IDENTIFIER ::= { nextone 1 }


    – The nxIdentifiers subtree contains assignments
    – used to identify protocols, options, events
    – and other metric and control information elements in an
    – extensible manner.

    nxIdentifiers OBJECT IDENTIFIER ::= { nxRegistry 1 }


    – The nxAgents subtree contains assignments that may
    – appear as a prefix in value instances of the
    – SNMPv2-MIB:sysObjectID object.

    – By convention a prefix is concatenated with three additional
    – sub-ids, indicating the major, minor and patch revision levels.

    – For example, an upatched version 4.2 of the iServer appears as
    – iServer.4.2.0

    nxAgents OBJECT IDENTIFIER ::= { nxRegistry 2 }
    iServer OBJECT IDENTIFIER ::= { nxAgents 1 }


    – The nxAgentCaps subtree contains assignments that may
    – appear in an Agent Capabilities statement.

    – By convention a NexTone module is delegated the same sub-id
    – value under this subtree as used in its MODULE-IDENTITY macro.

    nxAgentCaps OBJECT IDENTIFIER ::= {nxRegistry 3 }


    – === The nxManagement subtree =====

    – The nxManagement subtree contains assignments
    – as used in MODULE-IDENTITY macros in NexTone modules.

    – Declarations occur within the actual module. The
    – following list tracks assignments known as of this
    – revision of the NEXTONE-SMI-MIB.

    nxManagement OBJECT IDENTIFIER ::= { nextone 2 }

    – nextoneSmiMib { nxManagement 1 }
    – { nxManagement 2 }
    – { nxManagement 3 }

    END

    NEXTONE-NOTIFICATION-MIB DEFINITIONS ::= BEGIN

    IMPORTS
    MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE
    FROM SNMPv2-SMI — [RFC2578]

    TEXTUAL-CONVENTION
    FROM SNMPv2-TC — [RFC2579]

    MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
    FROM SNMPv2-CONF — [RFC2580]

    applName, applOperStatus
    FROM NETWORK-SERVICES-MIB — [RFC2788]

    – ItuPerceivedSeverity
    – FROM ITU-ALARM-TC-MIB [RFC3877]

    nxManagement
    FROM NEXTONE-SMI-MIB; — [NX-SMI]

    nexToneNotificationMib MODULE-IDENTITY
    LAST-UPDATED “200603160000Z”
    ORGANIZATION “NexTone Communications”
    CONTACT-INFO
    “NexTone Communications
    101 Orchard Ridge Drive
    Gaithersburg, MD 20878
    USA

    Telephone: +1.240.912.1300
    EMail: nextone-mibs@nextone.com
    URL: http://www.nextone.com

    Send comments to ”
    DESCRIPTION
    “This MIB describes NexTone-specific notifications and their
    supporting control and content objects.”
    REVISION “200603160000Z”
    DESCRIPTION
    “Initial version.”
    ::= { nxManagement 5 }


    – Top level assignments for the NexTone Notification MIB.

    – Root object id of NexTone traps/notifications. It is defined as
    – nexToneNotificationMib 0 so that NexTone trap OIDs will conform to the SMIv2
    – requirement that the next to last subid be ‘0′.

    nexToneTraps OBJECT IDENTIFIER ::= { nexToneNotificationMib 0 }

    – Per-trap control objects
    nexToneTrapControl OBJECT IDENTIFIER ::= {nexToneNotificationMib 1 }

    – conformance information
    nexToneTrapConformance OBJECT IDENTIFIER ::= { nexToneNotificationMib 2 }
    nexToneTrapCompliances OBJECT IDENTIFIER ::= { nexToneTrapConformance 1 }
    nexToneTrapGroups OBJECT IDENTIFIER ::= { nexToneTrapConformance 2 }

    – scalar objects included in NexTone enterprise traps
    nexToneTrapScalars OBJECT IDENTIFIER ::= { nexToneNotificationMib 3 }


    – This group is here temporarily and will be moved out to the proper
    – NexTone appl. MIB once it becomes available.

    nexToneGlobalState OBJECT IDENTIFIER ::= { nexToneNotificationMib 4 }

    – This group will include the user-defined infomation
    – that can be sent with the trap
    nexToneInformation OBJECT IDENTIFIER ::= { nexToneNotificationMib 5 }

    nexToneTrapMessages OBJECT IDENTIFIER ::= { nexToneNotificationMib 6 }

    – Textual Conventions and Support Object Types

    NexToneTrapSetting ::= TEXTUAL-CONVENTION
    STATUS current
    DESCRIPTION
    “A control value which indicates whether a notification type
    should be generated or not. The value ‘enabled’ indicates that
    notifications are enabled and therefore should be generated. The
    value ‘disabled’ indicates that notifications are disabled and should
    not be generated.”
    SYNTAX INTEGER {
    enabled(1),
    disabled(2)
    }

    –nexToneTrapSeverity OBJECT-TYPE
    – SYNTAX ItuPerceivedSeverity
    – STATUS current
    – DESCRIPTION
    – “The ITU perceived severity value for this NexTone trap.”
    – REFERENCE
    – “IETF Alarm MIB [RFC3877]
    – ITU X.733 [X733]”
    – ::= { nexToneTrapScalars 1 }


    – These support objects need to be moved into the proper NexTone MIB and
    – imported from there. Since that MIB does not currently exist, will keep
    – the objects here under the NexTone Notification Mib tree for now.

    nexToneHaState OBJECT-TYPE
    SYNTAX INTEGER {
    haDisabled(1),
    haPrimary(2),
    haStandby(3)
    }
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
    “The current high availability state of this device. haDisabled(1)
    denotes that high availability support has been disabled or no
    backup device exists. haPrimary(2) indicates that the device is
    the primary device. haStandby(3) indicates that the device is the
    backup or standby device.”
    ::= { nexToneGlobalState 1 }

    nexToneRegId OBJECT-TYPE
    SYNTAX OCTET STRING (SIZE(80))
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
    ” The string would contain the RegId for which the corresponding trap
    has been generated. ”
    ::= { nexToneInformation 1 }

    nexTonePort OBJECT-TYPE
    SYNTAX INTEGER
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
    ” The Integer would contain the uport for a particular regid for
    which the corresponding trap has been generated.”
    ::= { nexToneInformation 2 }

    – The following objects may be used to enable/disable each
    – of the NexTone enterprise traps.

    enableCallRoutingServiceStatusTrap OBJECT-TYPE
    SYNTAX NexToneTrapSetting
    MAX-ACCESS read-write
    STATUS current
    DESCRIPTION
    “The value of this object controls whether the NexTone SNMP subsystem
    will generate notifications for call routing service status events. A
    value of enabled means that notifications will be generated. A value
    of disabled means notifications will not be generated for this type
    of event.”
    DEFVAL { enabled }
    ::= { nexToneTrapControl 1 }

    enableHaStatusTrap OBJECT-TYPE
    SYNTAX NexToneTrapSetting
    MAX-ACCESS read-write
    STATUS current
    DESCRIPTION
    “The value of this object controls whether the NexTone SNMP subsystem
    will generate notifications for database replication service status
    events. A value of enabled means that notifications will be generated.
    A value of disabled means notifications will not be generated for this
    type of event.”
    DEFVAL { enabled }
    ::= { nexToneTrapControl 3 }

    enableHeartBeatTrap OBJECT-TYPE
    SYNTAX NexToneTrapSetting
    MAX-ACCESS read-write
    STATUS current
    DESCRIPTION
    “The value of this object controls whether the NexTone SNMP subsystem
    will generate heartbeat notifications. A value of enabled means that
    heartbeat notifications will be generated. A value of disabled means
    notifications will not be generated.”
    DEFVAL { enabled }
    ::= { nexToneTrapControl 4 }

    enableCACFailureTrap OBJECT-TYPE
    SYNTAX NexToneTrapSetting
    MAX-ACCESS read-write
    STATUS current
    DESCRIPTION
    “The value of this object controls whether the NexTone SNMP subsystem
    will generate notifications for CAC failure in SIP & H323 calls. The trap
    also track the gateway information for which the CAC has failed.”
    DEFVAL { enabled }
    ::= { nexToneTrapControl 5 }
    – Notifications

    callRoutingServiceStatus NOTIFICATION-TYPE
    OBJECTS { applOperStatus, applName }
    STATUS current
    DESCRIPTION
    “A trap indicating that the status of a critical call routing
    service has changed.”
    ::= { nexToneTraps 1 }

    haStatus NOTIFICATION-TYPE
    OBJECTS { nexToneHaState }
    STATUS current
    DESCRIPTION
    “A trap indicating that the leadership state of the current
    device has changed.”
    ::= { nexToneTraps 2 }

    heartBeat NOTIFICATION-TYPE
    STATUS current
    DESCRIPTION
    “A trap sent by the NexTone device periodically to indicate that
    it is still operational.”
    ::= { nexToneTraps 3 }

    cacFailure NOTIFICATION-TYPE
    OBJECTS { nexToneRegId, nexTonePort }
    DESCRIPTION
    “A trap sent by the MSW in case of CAC failure”
    ::= { nexToneTraps 4 }

    sensorAlarm NOTIFICATION-TYPE
    STATUS current
    DESCRIPTION
    “A trap sent by BMC sensor periodically to indicate that it’s value
    crosses threshold.”
    ::= { nexToneTraps 5 }

    sensorAlarmMesg OBJECT-TYPE
    SYNTAX OCTET STRING
    MAX-ACCESS read-only
    STATUS current
    DESCRIPTION
    “A trap sent by BMC sensor periodically to indicate that it’s value
    crosses threshold.”
    ::= { nexToneTrapMessages 1 }

    — Compliance Statements

    nexToneTrapCompliance MODULE-COMPLIANCE
    STATUS current
    DESCRIPTION
    “All objects in this MIB must be supported by the NexTone
    SNMP subsystem.”
    MODULE — This module
    MANDATORY-GROUPS { nexToneTrapGroup, nexToneTrapControlGroup }
    ::= { nexToneTrapCompliances 1 }

    — Units of Conformance

    nexToneTrapGroup NOTIFICATION-GROUP
    NOTIFICATIONS {
    callRoutingServiceStatus,
    haStatus,
    heartBeat,
    cacFailure
    }
    STATUS current
    DESCRIPTION
    “The set of all currently defined NexTone enterprise traps.”
    ::= { nexToneTrapGroups 1 }

    nexToneTrapControlGroup OBJECT-GROUP
    OBJECTS {
    enableCallRoutingServiceStatusTrap,
    enableHaStatusTrap,
    enableHeartBeatTrap,
    enableCACFailureTrap
    }
    STATUS current
    DESCRIPTION
    “Control objects associated with NexTone enterprise traps.”
    ::= { nexToneTrapGroups 2 }

    END

  4. jeff
    May 30th, 2007 at 08:00 | #4

    Scott,
    Thanks for the updated MIB information. It does look worlds better! Sorry it took me over a week to get it moderated.
    Best,
    -jeff

Comments are closed.