OTP-SNMPEA-MIB(7)
π NAME π
OTP-SNMPEA-MIB β the Erlang/OTP MIB module for the SNMPEA component in OTP. π«Ά This is the MIB manual page for OTP-SNMPEA-MIB(7), and I'm folding that header info right here so we can skip the triple-repeat title line, iykyk.
β¨ DESCRIPTION β¨
okay so bestie, this page is literally the MIB module definition for the SNMPEA component in OTP. It's giving DEFINITIONS ::= BEGIN energy, and because this is literal MIB code, I'm keeping every token, OID, revision, and DESCRIPTION string exactly as-is in code blocks. No cap. The commentary is me; the code is sacred. π
π¦ imports, module identity, and revision lore π¦
OTP-SNMPEA-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE,
Integer32, IpAddress
FROM SNMPv2-SMI
DisplayString, RowStatus, StorageType
FROM SNMPv2-TC
MODULE-COMPLIANCE, OBJECT-GROUP
FROM SNMPv2-CONF
otpModules, otpApplications
FROM OTP-REG
;
otpSnmpeaModule MODULE-IDENTITY
LAST-UPDATED "0305130000Z"
ORGANIZATION "Ericsson"
CONTACT-INFO
"Contact: Erlang Support see license agreement for Erlang/OTP."
DESCRIPTION
"This MIB module defines MIB objects for the SNMPEA
component in OTP."
REVISION "0305130000Z"
DESCRIPTION
"Changed CONTACT-INFO as it was outdated, made it more generic
to avoid such changes in the future."
REVISION "9808280000Z"
DESCRIPTION
"Since there are standard MIBs in the SNMPv3 framework that
implements the functionality defined in this MIB, all objects in
this MIB is now obsolete. There are still a few OID assignments
defined in this MIB.
Removed intCommunityTable; replaced by snmpCommunityTable in
SNMP-COMMUNITY-MIB.
Removed intAddressTable; replaced by SNMP-TARGET-MIB.
Removed intAgentMaxPacketSize, replaced by snmpEngineMaxPacketSize
in SNMP-FRAMEWORK-MIB.
Removed intAgentIpAddress and intAgentUDPPort.
Removed intViewTable, replaced by SNMP-VIEW-BASED-ACM-MIB."
REVISION "9804160000Z"
DESCRIPTION
"Updated to support MIBs from SNMPv3. Since SNMPv3 standardizes
some of the functionality provided by this MIB, we're using the
standard instead.
Removed intTrapDestTable; replaced by SNMP-TARGET-MIB and
SNMP-NOTIFICATION-MIB."
REVISION "9709220900Z"
DESCRIPTION
"The initial version of this MIB module. It is the old
INTERNAL-MIB renamed."
::= { otpModules 5 }
otpSnmpeaMIB OBJECT IDENTIFIER ::= { otpApplications 3 }
otpSnmpeaMIBConformance
OBJECT IDENTIFIER ::= { otpSnmpeaMIB 1 }
otpSnmpeaMIBObjects
OBJECT IDENTIFIER ::= { otpSnmpeaMIB 2 }
snmpeaAdm OBJECT IDENTIFIER ::= { otpSnmpeaMIBObjects 1}
community OBJECT IDENTIFIER ::= { snmpeaAdm 1 }
trap OBJECT IDENTIFIER ::= { snmpeaAdm 2 }
view OBJECT IDENTIFIER ::= { snmpeaAdm 3 }
okay so the module identity is doing the absolute most: LAST-UPDATED is 0305130000Z, ORGANIZATION is Ericsson, and CONTACT-INFO says Contact: Erlang Support see license agreement for Erlang/OTP. The revision stack is right there in the code, including the 9808280000Z note that all objects in this MIB are now obsolete because SNMPv3 has standard MIBs for the same functionality β but there are still a few OID assignments defined here. It also lists the removals/replacements: intCommunityTable got replaced by snmpCommunityTable in SNMP-COMMUNITY-MIB; intAddressTable got replaced by SNMP-TARGET-MIB; intAgentMaxPacketSize got replaced by snmpEngineMaxPacketSize in SNMP-FRAMEWORK-MIB; intAgentIpAddress and intAgentUDPPort got removed; and intViewTable got replaced by SNMP-VIEW-BASED-ACM-MIB. The 9804160000Z revision says intTrapDestTable got replaced by SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB. And 9709220900Z is the initial version β the old INTERNAL-MIB renamed. Periodt. π
π the obsolete Administration Group: intCommunityTable π
-- Obsolete objects
-- The Administration Group
--
-- This group consists of objects to configure the access for
-- managers to the MIB tree.
--
-- These objects were previously defined in INTERNAL-MIB
intCommunityTable OBJECT-TYPE
SYNTAX SEQUENCE OF IntCommunityEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"This table defines access for the different
communities.
When a request comes from a certain ip address,
referring to a community string, the mib view
and access corresponding to these are looked up
in this table. Then the operation is validatated against
the access, and all requested objects validated against
the mib view."
::= { community 1 }
intCommunityEntry OBJECT-TYPE
SYNTAX IntCommunityEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
""
INDEX { intCommunityDestination, intCommunityString }
::= { intCommunityTable 1 }
IntCommunityEntry ::=
SEQUENCE {
intCommunityDestination IpAddress,
intCommunityString DisplayString,
intCommunityViewIndex Integer32,
intCommunityAccess INTEGER,
intCommunityStatus RowStatus
}
intCommunityDestination OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"The ip address of a management station. The special
ip address {0.0.0.0} is a wildcard, meaning all possible
ip addresses. In this way, access can be granted to all
ip addressed for some communities."
::= { intCommunityEntry 1 }
intCommunityString OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"The community string, defining the community."
::= { intCommunityEntry 2 }
intCommunityViewIndex OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"Identifies a mib view. Index into the
intViewTable."
::= { intCommunityEntry 3 }
intCommunityAccess OBJECT-TYPE
SYNTAX INTEGER { read(1), readWrite(2) }
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"Defines which operations the manager can perform
on the objects in the mib view."
::= { intCommunityEntry 4 }
intCommunityStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The status of this conceptual row in the
intCommunityTable."
::= { intCommunityEntry 5 }
This whole -- Obsolete objects chunk is the Administration Group, and every row is STATUS obsolete, bestie. It's the old intCommunityTable setup: intCommunityDestination, intCommunityString, intCommunityViewIndex, intCommunityAccess with read(1) / readWrite(2), and intCommunityStatus. The wildcard IP is literally {0.0.0.0}, meaning all possible IP addresses; the table description says requests get looked up by IP address + community string, then the operation is validated against the access and all requested objects are validated against the MIB view. (Yes, validatated is in the original and I'm keeping it. Character-for-character, no cap.) π
πΈ agent + address table era πΈ
intAgentIpAddress OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS read-only
STATUS obsolete
DESCRIPTION
"The IP address of this agent."
::= { community 2 }
intAgentUDPPort OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS obsolete
DESCRIPTION
"The UDP port the agent listens to."
::= { community 3 }
intAgentMaxPacketSize OBJECT-TYPE
SYNTAX Integer32 (484..65535)
MAX-ACCESS read-only
STATUS obsolete
DESCRIPTION
"The maximum packet size in bytes this agent will send to a
manager."
::= { community 4 }
intAddressTable OBJECT-TYPE
SYNTAX SEQUENCE OF IntAddressEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"This table holds UDP related information on each known
management station."
::= { community 5 }
intAddressEntry OBJECT-TYPE
SYNTAX IntAddressEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
""
INDEX { intAddressDestination }
::= { intAddressTable 1 }
IntAddressEntry ::=
SEQUENCE {
intAddressDestination IpAddress,
intAddressUDPPort Integer32,
intAddressMaxPacketSize Integer32 (484..65535),
intAddressStatus RowStatus
}
intAddressDestination OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"The ip address of the management station."
::= { intAddressEntry 1 }
intAddressUDPPort OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The UDP port to which traps will be sent to
this destination."
DEFVAL { 162 }
::= { intAddressEntry 2 }
intAddressMaxPacketSize OBJECT-TYPE
SYNTAX Integer32 (484..65535)
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The maximum packet size in bytes for Messages
sent to this destination. The max size of a packet
sent to this destination will be the minumim of
this variable and agentMaxPacketSize.0."
::= { intAddressEntry 3 }
intAddressStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The status of this conceptual row in the
intAddressTable."
::= { intAddressEntry 4 }
Next up: intAgentIpAddress, intAgentUDPPort, and intAgentMaxPacketSize (range 484..65535), then the intAddressTable crew. intAddressUDPPort has DEFVAL { 162 }, and intAddressMaxPacketSize is also 484..65535 with that note that the max packet size to a destination is the minumim (spelling preserved, not me fixing it) of this variable and agentMaxPacketSize.0. Iconic. β¨
π₯ trap destination table π₯
intTrapDestTable OBJECT-TYPE
SYNTAX SEQUENCE OF IntTrapDestEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"The intTrapDestTable defines to which destination all traps
for a specific community should be sent."
::= { trap 1 }
intTrapDestEntry OBJECT-TYPE
SYNTAX IntTrapDestEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
""
INDEX { intTrapDestCommunityString, intTrapDestDestination }
::= { intTrapDestTable 1 }
IntTrapDestEntry ::=
SEQUENCE {
intTrapDestCommunityString DisplayString,
intTrapDestDestination IpAddress,
intTrapDestStatus RowStatus,
intTrapDestSnmpVersion INTEGER
}
intTrapDestCommunityString OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
""
::= { intTrapDestEntry 1 }
intTrapDestDestination OBJECT-TYPE
SYNTAX IpAddress
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
""
::= { intTrapDestEntry 2 }
intTrapDestStatus OBJECT-TYPE
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The status of this conceptual row in the
intTrapDestTable."
::= { intTrapDestEntry 3 }
intTrapDestSnmpVersion OBJECT-TYPE
SYNTAX INTEGER { v1(1), v2(2) }
MAX-ACCESS read-create
STATUS obsolete
DESCRIPTION
"The SNMP version of the manager. If it is v1,
SNMPv1Traps are sent. If it is v2, SNMPv2Traps are sent"
::= { intTrapDestEntry 4 }
intTrapDestTable defines to which destination all traps for a specific community should be sent. The index is intTrapDestCommunityString + intTrapDestDestination, and intTrapDestSnmpVersion is INTEGER { v1(1), v2(2) } β if it's v1, SNMPv1Traps are sent; if it's v2, SNMPv2Traps are sent. There is literally no period at the end of that MIB sentence, and I am not adding one. Respect the code. π
π§ intViewTable starts here π§
intViewTable OBJECT-TYPE
SYNTAX SEQUENCE OF IntViewEntry
MAX-ACCESS not-accessible
STATUS obsolete
DESCRIPTION
"Locally held information about the MIB views
known to this agent.
Each MIB view is defined by two
collections of view subtrees: the included view
subtrees, and the excluded view subtrees. Every
such subtree, both included and excluded, is
defined in this table.
and this is where part 1 stops: intViewTable is starting to explain locally held information about the MIB views known to this agent, with each MIB view defined by included view subtrees and excluded view subtrees, and then the chunk ends at defined in this table. Part 2 is literally the next chunk, bestie. π¦
...and honestly bestie, this is the part where the matching actually happens, so lock in. π
To figure out if a particular object instance is in a particular MIB view, you compare the object instance's OBJECT IDENTIFIER with each of the MIB view's entries in this table. If none of them match β congrats, that object instance is not in the MIB view. If one or more match, then the object instance is either included in or excluded from the MIB view depending on the value of viewType in the entry whose viewSubtree value has the most sub-identifiers. And if multiple entries match and have the same number of sub-identifiers? Then the lexicographically greatest instance of viewType calls it. Tiebreaker drama, but make it lexicographic. π
An object instance's OBJECT IDENTIFIER X matches an entry in this table when:
- the number of sub-identifiers in
Xis at least as many as in the value ofviewSubtreefor the entry, and - each sub-identifier in the value of
viewSubtreematches its corresponding sub-identifier inX.
Two sub-identifiers match either if the corresponding bit of viewMask is zero (the 'wild card' value), or if they're equal. That's it, that's the whole vibe check. β
Because of this 'wild card' capability, we introduce the term a 'family' of view subtrees, meaning the set of subtrees defined by a particular combination of values of viewSubtree and viewMask. In the case where no 'wild card' is defined in viewMask, the family of view subtrees reduces to a single view subtree. Shrinks down to one, no cap.
::= { view 1 }
π«Ά intViewEntry
intViewEntry OBJECT-TYPE
SYNTAX IntViewEntry
MAX-ACCESS not-accessible
STATUS obsolete
INDEX { intViewIndex, intViewSubtree }
::= { intViewTable 1 }
The description on this one is literally: "Information on a particular family of view subtrees included in or excluded from a particular MIB view." Which is giving very much core concept energy. π
And then a rule for implementers, pay attention: implementations must not restrict the number of families of view subtrees for a given MIB view, except as dictated by resource constraints on the overall number of entries in the viewTable. So like, no artificial limits β only the actual physical ones, bestie.
IntViewEntry ::=
SEQUENCE {
intViewIndex Integer32,
intViewSubtree OBJECT IDENTIFIER,
intViewMask OCTET STRING,
intViewType INTEGER,
intViewStorageType StorageType,
intViewStatus RowStatus
}
πΈ intViewIndex
SYNTAX Integer32 (1..65535)
MAX-ACCESS not-accessible
STATUS obsolete
::= { intViewEntry 1 }
A unique value for each MIB view. And it has to stay constant at least from one re-initialization of the entity's network management system to the next re-initialization. Consistency era. π
π¦ intViewSubtree
SYNTAX OBJECT IDENTIFIER
MAX-ACCESS not-accessible
STATUS obsolete
::= { intViewEntry 2 }
A MIB subtree. That's the whole description. Short king. π
π§ intViewMask
SYNTAX OCTET STRING (SIZE (0..16))
MAX-ACCESS read-create
STATUS obsolete
DEFVAL { ''H }
::= { intViewEntry 3 }
Okay this one is the main character of the table, and its description is a whole essay, so listen up. π
The bit mask which, in combination with the corresponding instance of viewSubtree, defines a family of view subtrees.
Every single bit of this bit mask corresponds to a sub-identifier of viewSubtree, and the mapping is:
- the most significant bit of the i-th octet of this octet string value (extended if necessary, see below) corresponds to the
(8*i - 7)-th sub-identifier - the least significant bit of the i-th octet of this octet string corresponds to the
(8*i)-th sub-identifier - where i is in the range 1 through 16
Each bit specifies whether or not the corresponding sub-identifiers must match when determining if an OBJECT IDENTIFIER is in this family of view subtrees:
- a
'1'means an exact match must occur - a
'0'means 'wild card', i.e., any sub-identifier value matches
So, the OBJECT IDENTIFIER X of an object instance is contained in a family of view subtrees if the following criteria are met β for each sub-identifier of the value of viewSubtree, either:
the i-th bit of viewMask is 0, or
the i-th sub-identifier of X is equal to
the i-th sub-identifier of the value of
viewSubtree.
One extension rule, don't miss it: if the value of this bit mask is M bits long and there are more than M sub-identifiers in the corresponding instance of viewSubtree, then the bit mask is extended with 1's to be the required length. Pad it out with ones, periodt. β¨
Note: when the value of this object is the zero-length string, this extension rule results in a mask of all-1's being used (i.e., no 'wild card'), and the family of view subtrees is the one view subtree uniquely identified by the corresponding instance ofviewSubtree. So the empty string is secretly the strictest option. Bet you didn't expect that. π
π intViewType
SYNTAX INTEGER {
included(1),
excluded(2)
}
MAX-ACCESS read-create
STATUS obsolete
DEFVAL { included }
::= { intViewEntry 4 }
The status of a particular family of view subtrees within the particular MIB view:
included(1)β the corresponding instances ofviewSubtreeandviewMaskdefine a family of view subtrees included in the MIB viewexcluded(2)β the corresponding instances ofviewSubtreeandviewMaskdefine a family of view subtrees excluded from the MIB view
In or out, bestie, there is no third option. πͺ
π intViewStorageType
SYNTAX StorageType
MAX-ACCESS read-create
STATUS obsolete
DEFVAL { nonVolatile }
::= { intViewEntry 5 }
The storage type for this conceptual row in the intViewTable. Default is nonVolatile, so it survives the reboot. Durable queen. π«Ά
β intViewStatus
SYNTAX RowStatus
MAX-ACCESS read-create
STATUS obsolete
::= { intViewEntry 6 }
The status of this conceptual row in the intViewTable. That's it. Sometimes a description is just a description. π
π CONFORMANCE INFORMATION
otpSnmpeaMIBCompliances
OBJECT IDENTIFIER ::= { otpSnmpeaMIBConformance 1 }
otpSnmpeaMIBGroups
OBJECT IDENTIFIER ::= { otpSnmpeaMIBConformance 2 }
π COMPLIANCE STATEMENTS
otpSnmpeaBasicCompliance MODULE-COMPLIANCE
STATUS obsolete
MODULE -- this module
MANDATORY-GROUPS { addressGroup }
::= { otpSnmpeaMIBCompliances 1 }
The description literally says: "The compliance statement for SNMPv2 entities which implement the OTP-SNMPEA-MIB." Official business. π«‘
π¦ UNITS OF CONFORMANCE
Now the object groups β four of them, all obsolete, and yes, all four share the exact same description, we're not going to pretend otherwise. π
communityGroup
OBJECTS { intCommunityViewIndex,
intCommunityAccess,
intCommunityStatus }
STATUS obsolete
::= { otpSnmpeaMIBGroups 1 }
"A collection of objects providing basic instrumentation of the load of the OTP system." (Yes, same sentence as the other three. The MIB authors found their line and they stuck with it. Consistency icon. β¨)
addressGroup
OBJECTS { intAgentIpAddress,
intAgentUDPPort,
intAgentMaxPacketSize,
intAddressUDPPort,
intAddressMaxPacketSize,
intAddressStatus }
STATUS obsolete
::= { otpSnmpeaMIBGroups 2 }
"A collection of objects providing basic instrumentation of the load of the OTP system." β and reminder, this is the group that otpSnmpeaBasicCompliance makes mandatory. So if you're implementing this MIB, this one's not optional, bestie. π
trapGroup
OBJECTS { intTrapDestStatus,
intTrapDestSnmpVersion }
STATUS obsolete
::= { otpSnmpeaMIBGroups 3 }
"A collection of objects providing basic instrumentation of the load of the OTP system." Same energy, different OIDs. π―
viewGroup
OBJECTS { intViewMask,
intViewType,
intViewStorageType,
intViewStatus }
STATUS obsolete
::= { otpSnmpeaMIBGroups 4 }
"A collection of objects providing basic instrumentation of the load of the OTP system." Fourth time's the charm. πΈ
END
And that's the whole module β END and everything, we made it. π
Okay that's a wrap on OTP-SNMPEA-MIB, bestie. This one ships from Erlang/OTP, lives in section SNMP, and answers to the name OTP-SNMPEA-MIB(7) β huge thanks to the OTP girlies who kept all this historical obsolete material around so we could all learn from it. π No date stamp on this copy, so treat it like a vintage find: source and version only, iconic either way. Go forth and view-check responsibly. π§ββοΈπ¦πΈ
π¦ where this page comes from
- debian bookworm: erlang-manpages 1:25.2.3+dfsg-1+deb12u1 Β· Apache-2.0
- debian bookworm: erlang-manpages 1:25.2.3+dfsg-1+deb12u4 Β· Apache-2.0
- ubuntu jammy: erlang-manpages 1:24.2.1+dfsg-1 Β· Apache-2.0
- ubuntu jammy: erlang-manpages 1:24.2.1+dfsg-1ubuntu0.8 Β· Apache-2.0
- ubuntu noble: erlang-manpages 1:25.3.2.8+dfsg-1ubuntu4 Β· Apache-2.0
- ubuntu noble: erlang-manpages 1:25.3.2.8+dfsg-1ubuntu4.8 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms