RFC 1158
Management Information Base for network management of TCP/IP-based internets: MIB-II
RFC 1158 ๐
This one is Management Information Base for Network Management of TCP/IP-based internets: MIB-II ๐ It's from the Network Working Group, written by M. Rose, Editor, at Performance Systems International, dated May 1990. It's a Proposed Standard ๐ธ The text doesn't state an obsoletes or updates line. What it does say is that MIB-II builds on and extends RFC 1156 (MIB-I) without loss of compatibility, so it's basically MIB-I's glow-up โจ
1. Status of this Memo โจ
Okay so this memo defines the second version of the Management Information Base (MIB-II) for use with network management protocols in TCP/IP-based internets ๐ฆ It works together with its companion memos: RFC 1155 describes the structure of management information, and RFC 1157 is the network management protocol for TCP/IP-based internets. Bestie, these three together give you a simple, workable architecture for managing TCP/IP-based internets, and especially the Internet community ๐
MIB-II includes everything technical from RFC 1156 on MIB-I and extends it without loss of compatibility ๐ซถ But here's the tea: MIB-I as described in RFC 1156 is a full Standard Protocol of the Internet, while the MIB-II described here is a Proposed Standard Protocol of the Internet ๐
This memo defines a mandatory extension to the base MIB (RFC 1156) and is a Proposed Standard for the Internet community ๐ The extensions here are currently Elective, but once they become a standard they'll have the same status as RFC 1156, which is Recommended ๐ The Internet Activities Board (IAB) recommends that all IP and TCP implementations be network manageable. That means implementing the Internet MIB (RFC 1156 plus the extensions in RFC 1158) and at least one of the two recommended management protocols, SNMP (RFC 1157) or CMOT (RFC 1095) ๐
This version, MIB-II, is an incremental refinement of MIB-I ๐ง It was designed around two criteria. First, changes were made in response to new operational requirements in the Internet. Second, the changes are entirely upwards compatible, so the network's managed nodes can move from MIB-I to MIB-II without a big disruption ๐ธ
More MIB groups and variables are expected to be defined over time, so the monitoring and control needs of new or changing parts of the Internet can be covered โญ
Please check the latest edition of the "IAB Official Protocol Standards" RFC for the current state and status of standard Internet protocols ๐ฅ
Distribution of this memo is unlimited ๐ฆ
Table of Contents โจ
1. Status of this Memo .................................. 1
2. Introduction ......................................... 3
3. Changes from MIB-I ................................... 4
3.1 Deprecated Objects .................................. 4
3.2 Display Strings ..................................... 5
3.3 The System Group .................................... 5
3.4 The Interfaces Group ................................ 5
3.5 The Address Translation Group ....................... 6
3.6 The IP Group ........................................ 7
3.7 The ICMP Group ...................................... 7
3.8 The TCP Group ....................................... 7
3.9 The UDP Group ....................................... 7
3.10 The EGP Group ...................................... 8
3.11 The Transmission Group ............................. 8
3.12 The SNMP Group ..................................... 8
4. Objects .............................................. 8
4.1 Object Groups ....................................... 9
4.2 Format of Definitions ............................... 10
5. Object Definitions ................................... 10
5.1 The System Group .................................... 11
5.2 The Interfaces Group ................................ 14
5.2.1 The Interfaces table .............................. 15
5.3 The Address Translation Group ....................... 27
5.4 The IP Group ........................................ 30
5.4.1 The IP Address table .............................. 38
5.4.2 The IP Routing table .............................. 41
5.4.3 The IP Address Translation table .................. 48
5.5 The ICMP Group ...................................... 51
5.6 The TCP Group ....................................... 61
5.6.1 The TCP Connection table .......................... 66
5.6.2 Additional TCP Objects ............................ 69
5.7 The UDP Group ....................................... 70
5.7.1 The UDP Listener table ............................ 72
5.8 The EGP Group ....................................... 73
5.8.1 The EGP Neighbor table ............................ 75
5.8.2 Additional EGP variables .......................... 83
5.9 The Transmission Group .............................. 83
5.10 The SNMP Group ..................................... 83
6. Definitions .......................................... 95
7. Identification of OBJECT instances for use with the
SNMP ................................................. 126
7.1 ifTable Object Type Names ........................... 127
7.2 atTable Object Type Names ........................... 127
7.3 ipAddrTable Object Type Names ....................... 128
7.4 ipRoutingTable Object Type Names .................... 128
7.5 ipNetToMediaTable Object Type Names ................. 129
7.6 tcpConnTable Object Type Names ...................... 129
7.7 udpTable Object Type Names .......................... 130
7.8 egpNeighTable Object Type Names ..................... 130
8. Acknowledgements .................................... 130
9. References .......................................... 131
10. Security Considerations.............................. 133
11. Author's Address..................................... 133
2. Introduction ๐ท
As reported in RFC 1052, IAB Recommendations for the Development of Internet Network Management Standards [1], there was a two-prong strategy for network management of TCP/IP-based internets ๐ In the short term, the Simple Network Management Protocol (SNMP) was to be used to manage nodes in the Internet community. In the long term, the use of the OSI network management framework was to be examined. Two documents were produced to define the management information: RFC 1065, which defined the Structure of Management Information (SMI) [2], and RFC 1066, which defined the Management Information Base (MIB) [3]. Both were designed to be compatible with both SNMP and the OSI network management framework ๐ซถ
This strategy was a huge success in the short term ๐ฅ Internet-based network management technology was fielded by both the research and commercial communities within a few months. Because of this, parts of the Internet community became network manageable in a timely fashion ๐ฆ
As reported in RFC 1109, Report of the Second Ad Hoc Network Management Review Group [4], the requirements of the SNMP and the OSI network management frameworks turned out to be more different than anyone anticipated ๐ So the requirement for compatibility between the SMI/MIB and both frameworks was suspended. That let the operational network management framework, SNMP, respond to new operational needs in the Internet community by producing this document โจ
So the current network management framework for TCP/IP-based internets is made of three pieces ๐ง First, Structure and Identification of Management Information for TCP/IP-based internets, RFC 1155 [13], which describes how managed objects in the MIB are defined. Second, this memo, Management Information Base for Network Management of TCP/IP-based internets (version 2), which describes the managed objects contained in the MIB. Third, the Simple Network Management Protocol, RFC 1157 [14], which defines the protocol used to manage these objects ๐
Consistent with the IAB directive to produce simple, workable systems in the short term, the list ofc objects (e.g., for BSD UNIX) were excluded.
- It was agreed to avoid heavily instrumenting critical sections of code. The general guideline was one counter per critical section per layer.
Heads up, bestie: the source text jumps straight from that sentence to item "7)" here, so the earlier items in that list seem to be missing from the document as provided. I've kept what's there exactly as it appears.
3. Changes from MIB-I ๐
Features of this MIB include:
- incremental additions to reflect new operational requirements;
- upwards compatibility with the SMI/MIB and the SNMP;
- improved support for multi-protocol entities; and,
- textual clean-up of the MIB to improve clarity and readability.
The objects defined in MIB-II have the OBJECT IDENTIFIER prefix:
mib-2 OBJECT IDENTIFIER ::= { mgmt 1 }
3.1. Deprecated Objects ๐ธ
To better prepare implementors for future changes to the MIB, a new term, "deprecated", may be used when describing an object ๐ง A deprecated object in the MIB is one which must be supported, but which will most likely be removed from the next version of the MIB (e.g., MIB-III).
MIB-II marks one object as being deprecated: atTable ๐
As a result of deprecating the atTable object, the entire Address Translation group is deprecated ๐ฅ
Note that no functionality is lost with the deprecation of these objects: new objects providing equivalent or superior functionality are defined in MIB-II โจ
3.2. Display Strings ๐ฆ
In the past there have been misinterpretations of the MIB about when a string of octets should contain printable characters meant to be displayed to a human ๐ To fix that, a textual convention is introduced in the MIB, the datatype:
DisplayString ::= OCTET STRING
A DisplayString is restricted to the NVT ASCII character set, as defined on pages 10-11 of [7] ๐ซถ
The following objects are now defined in terms of DisplayString:
sysDescrifDescr
It should be noted that this change has no effect on either the syntax or the semantics of these objects. Using the DisplayString notation is just an artifact of the explanatory method used in MIB-II and future MIBs ๐
Further, it should be noted that any object defined in terms of OCTET STRING may contain arbitrary binary data, in which each octet may take any value from 0 to 255 (decimal) ๐
3.3. The System Group โญ
Four new objects are added to this group:
sysContact
sysName
sysLocation
sysServices
These provide contact, administrative, location, and service information about the managed node ๐
3.4. The Interfaces Group ๐ฅ
The definition of the ifNumber object was incorrect, because it required all interfaces to support IP. For example, devices without IP, such as MAC-layer bridges, could not be managed if this definition was strictly followed. The description of the ifNumber object has been changed accordingly ๐
The ifTable object was mistakenly marked as read-write. It has been (correctly) re-designated as read-only ๐
In addition, several new values have been added to the ifType column in the ifTable object:
ppp(23)
softwareLoopback(24)
eon(25)
ethernet-3Mbit(26)
nsip(27)
slip(28)
Finally, a new column has been added to the ifTable object:
ifSpecific
It provides information about the media being used to realize the interface ๐ง
3.5. The Address Translation Group ๐บ๏ธ
okay so in MIB-I, this group had a table that let you map network addresses (like IP addresses) to physical addresses (like MAC addresses) ๐ธ. Experience showed that efficient implementations of this table were quietly making two assumptions: there's only a single network protocol environment, and mappings only ever go from network address to physical address.
Those two assumptions got wrecked ๐. Multi-protocol nodes (like ones running both IP and CLNP at once) and the need for the inverse mapping (like for ES-IS) both showed up, so the atTable object is now declared deprecated ๐ฅ.
So MIB-II and its successors will allocate up to two address translation tables inside each network protocol group ๐ฆ. The IP group gets one table for going from IP addresses to physical addresses. Same deal for CLNP: when a document defining MIB objects for the CLNP is produced (e.g., [8]), it will contain two tables, one for each direction, because that's required for full functionality โจ.
Also, choosing two tables (one per direction of mapping) is easier to implement in many cases, and it doesn't put undue burden on implementations that handle the address translation abstraction with a single internal table ๐ .
3.6. The IP Group ๐
The access attribute of the variable ipForwarding has been changed from read-only to read-write ๐ฅ.
There's also a new column in the ipAddrTable object:
ipAdEntReasmMaxSize
which keeps track of the largest IP datagram that can be re-assembled on a particular interface ๐ฆ. And there's a new column in the ipRoutingTable object:
ipRouteMask
which is used by IP routing subsystems that support arbitrary subnet masks ๐.
One new object is added to the IP group:
ipNetToMediaTable
It's the address translation table for the IP group, giving you identical functionality to the now deprecated atTable in the address translation group ๐ซถ.
3.7. The ICMP Group ๐ง
There are no changes to this group ๐คทโโ๏ธ.
3.8. The TCP Group ๐
Two new variables are added:
tcpInErrs
tcpOutRsts
They keep track of the number of incoming TCP segments in error, and the number of resets generated by a TCP ๐จ.
3.9. The UDP Group ๐
A new table:
udpTable
is added โจ.
3.10. The EGP Group ๐ฐ๏ธ
Experience has shown a need for more objects that are useful in EGP monitoring ๐. On top of several additions to the egpNeighborTable object, a new variable is added:
egpAs
which gives the autonomous system associated with this EGP entity ๐.
3.11. The Transmission Group ๐ก
MIB-I was lacking because it didn't distinguish between different types of transmission media ๐ค. So a new group, the Transmission group, is allocated for this purpose:
transmission OBJECT IDENTIFIER ::= { mib-2 10 }
When Internet-standard definitions for managing transmission media are defined, the transmission group is used to provide a prefix for the names of those objects ๐.
Typically, those definitions live in the experimental portion of the MIB until they're "proven." Then, as part of the Internet standardization process, they get elevated and a new object identifier under the transmission group is defined. By convention, the name assigned is:
type OBJECT IDENTIFIER ::= { transmission number }
where "type" is the symbolic value used for the media in the ifType column of the ifTable object, and "number" is the actual integer value corresponding to that symbol ๐ง .
3.12. The SNMP Group ๐
The application-oriented working groups of the IETF have been tasked with being receptive to defining MIB variables specific to their respective applications ๐.
For SNMP, statistical information is useful, so a new group, the SNMP group, is allocated for this purpose:
snmp OBJECT IDENTIFIER ::= { mib-2 11 }
4. Objects ๐งฉ
Managed objects are accessed via a virtual information store, called the Management Information Base, or MIB ๐๏ธ. Objects in the MIB are defined using Abstract Syntax Notation One (ASN.1) [9].
The mechanisms for describing these objects are specified in the companion memo, the SMI. Each object has a name, a syntax, and an encoding ๐. The name is an object identifier, an administratively assigned name that specifies an object type. The object type together with an object instance uniquely identifies a specific instantiation of the object. For human convenience, we often use a textual string, called the OBJECT DESCRIPTOR, to also refer to the object type ๐ซถ.
The syntax of an object type defines the abstract data structure for that object type, and ASN.1 is used for this purpose. However, the companion memo purposely restricts which ASN.1 constructs may be used, and those restrictions are made explicitly for simplicity ๐ .
The encoding of an object type is simply how that object type is represented using its syntax. Implicitly tied to the syntax and encoding is how the object type is represented when it's transmitted on the network. This memo specifies the use of the basic encoding rules (BER) of ASN.1 [10], subject to the additional requirements imposed by the SNMP [14] ๐.
4.1. Object Groups ๐๏ธ
Since this list of managed objects contains only the essential elements, there's no need to allow individual objects to be optional. Instead, the objects are arranged into the following groups:
- System
- Interfaces
- Address Translation (deprecated)
- IP
- ICMP
- TCP
- UDP
- EGP
- Transmission
- SNMP
There are two reasons for defining these groups. One is to provide a means of assigning object identifiers. The other is to give implementations of managed agents a method for knowing which objects they must implement ๐ฏ. That method works like this: if the semantics of a group are applicable to an implementation, then it must implement all objects in that group. For example, an implementation must implement the EGP group if and only if it implements the EGP ๐.
4.2. Format of Definitions ๐
The next section contains the specification of all object types in the MIB. Following the conventions of the companion memo, the object types are defined using the following fields ๐ช:
OBJECT: A textual name, called the OBJECT DESCRIPTOR, for the object type, along with its corresponding OBJECT IDENTIFIER.
Syntax: The abstract syntax for the object type, presented using ASN.1. This must resolve to an instance of the ASN.1 type ObjectSyntax defined in the SMI.
Definition: A textual description of the semantics of the object type. Implementations should ensure that their interpretation of the object type fulfills this definition, since this MIB is intended for use in multi-vendor environments. So it's vital that object types have consistent meaning across all machines ๐.
Access: A keyword, one of read-only, read-write, write-only, or not-accessible. This designation specifies the minimum level of support required. As a local matter, implementations may support other access types (e.g., an implementation may elect to permit writing a variable marked herein as read-only). Further, protocol-specific "views" (e.g., those implied by an SNMP community) may make further restrictions on access to a variable ๐.
Status: A keyword, one of mandatory, optional, obsolete, or deprecated. Use of deprecated implies mandatory status ๐ฅน.
5. Object Definitions ๐
RFC1158-MIB
DEFINITIONS ::= BEGIN
IMPORTS
mgmt, OBJECT-TYPE, NetworkAddress, IpAddress,
Counter, Gauge, TimeTicks
FROM RFC1155-SMI;
DisplayString ::=
OCTET STRING
mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } -- MIB-II
system OBJECT IDENTIFIER ::= { mib-2 1 }
interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
at OBJECT IDENTIFIER ::= { mib-2 3 }
ip OBJECT IDENTIFIER ::= { mib-2 4 }
icmp OBJECT IDENTIFIER ::= { mib-2 5 }
tcp OBJECT IDENTIFIER ::= { mib-2 6 }
udp OBJECT IDENTIFIER ::= { mib-2 7 }
egp OBJECT IDENTIFIER ::= { mib-2 8 }
-- cmot OBJECT IDENTIFIER ::= { mib-2 9 }
transmission OBJECT IDENTIFIER ::= { mib-2 10 }
snmp OBJECT IDENTIFIER ::= { mib-2 11 }
END
5.1. The System Group
Okay bestie, the System group is mandatory for all systems ๐ so every box needs this one. ๐
OBJECT:
-------
sysDescr { system 1 }
Syntax:
DisplayString (SIZE (0..255))
sysDescr is basically the box's bio โจ It's a textual description of the entity, and it should spill the full name and version of the system's hardware type, operating system, and networking software. It is mandatory that this only contains printable ASCII characters ๐
Access: read-only Status: mandatory
OBJECT:
-------
sysObjectID { system 2 }
Syntax:
OBJECT IDENTIFIER
sysObjectID is the vendor's official ID for the network management subsystem inside the entity, and it's giving "what kind of box is this" ๐ฆ It's allocated within the SMI enterprises subtree (1.3.6.1.4.1), which makes it easy and unambiguous to tell what you're managing. For example, if the vendor "Flintstones, Inc." was assigned the subtree 1.3.6.1.4.1.4242, it could give its "Fred Router" the identifier 1.3.6.1.4.1.4242.1.1 ๐ชจ
Access: read-only Status: mandatory
OBJECT:
-------
sysUpTime { system 3 }
Syntax:
TimeTicks
sysUpTime counts the time, in hundredths of a second, since the network management portion of the system was last re-initialized โฑ๏ธ Main character timer energy ๐
Access: read-only Status: mandatory
OBJECT:
-------
sysContact { system 4 }
Syntax:
DisplayString (SIZE (0..255))
sysContact is the textual identification of the contact person for this managed node, plus info on how to reach them ๐ Basically the "who do I text when this breaks" slot ๐ซถ
Access: read-write Status: mandatory
OBJECT:
-------
sysName { system 5 }
Syntax:
DisplayString (SIZE (0..255))
sysName is an administratively-assigned name for this managed node. By convention, it's the node's fully-qualified domain name ๐ Very organised, very iconic.
Access: read-write Status: mandatory
OBJECT:
-------
sysLocation { system 6 }
Syntax:
DisplayString (SIZE (0..255))
sysLocation is the physical location of the node, like "telephone closet, 3rd floor" ๐ง Honestly the most relatable one on this list.
Access: read-only Status: mandatory
OBJECT:
-------
sysServices { system 7 }
Syntax:
INTEGER (0..127)
okay this one is a little math, but I promise it's cute ๐งฎ sysServices is a value that shows the set of services this entity potentially offers. It's a sum! It starts at zero, and then for each layer, L, from 1 through 7 that the node does transactions for, you add 2 raised to (L - 1) ๐ For example, a node that only does routing would be 4 (2^(3-1)), and a host offering application services would be 72 (2^(4-1) + 2^(7-1)) ๐ญ That's the kind of math I'm obsessed with.
When it comes to the Internet suite of protocols, you should calculate the values like this ๐ธ
layer functionality
1 physical (e.g., repeaters)
2 datalink/subnetwork (e.g., bridges)
3 internet (e.g., supports the IP)
4 end-to-end (e.g., supports the TCP)
7 applications (e.g., supports the SMTP)
And if the system includes OSI protocols, layers 5 and 6 may also be counted โจ
Access: read-only Status: mandatory
5.2. The Interfaces Group
Implementation of the Interfaces group is mandatory for all systems, so no skipping this one ๐ซถ
OBJECT:
-------
ifNumber { interfaces 1 }
Syntax:
INTEGER
ifNumber is the number of network interfaces on this system, and it counts them regardless of their current state ๐ข
Access: read-only Status: mandatory
5.2.1. The Interfaces table
Okay so the Interfaces table holds info on the entity's interfaces ๐ Each interface is thought of as being attached to a "subnetwork". Quick heads up, don't mix this up with "subnet", which is an addressing partitioning scheme used in the Internet suite of protocols ๐ Two very different vibes.
OBJECT:
-------
ifTable { interfaces 2 }
Syntax:
SEQUENCE OF IfEntry
ifTable is the list of interface entries. The number of entries is given by the value of ifNumber ๐
Access: read-only Status: mandatory
OBJECT:
-------
ifEntry { ifTable 1 }
Syntax:
IfEntry ::= SEQUENCE {
ifIndex
INTEGER,
ifDescr
DisplayString,
ifType
INTEGER,
ifMtu
INTEGER,
ifSpeed
Gauge,
ifPhysAddress
OCTET STRING,
ifAdminStatus
INTEGER,
ifOperStatus
INTEGER,
ifLastChange
TimeTicks,
ifInOctets
Counter,
ifInUcastPkts
Counter,
ifInNUcastPkts
Counter,
ifInDiscards
Counter,
ifInErrors
Counter,
ifInUnknownProtos
Counter,
ifOutOctets
Counter,
ifOutUcastPkts
Counter,
ifOutNUcastPkts
Counter,
ifOutDiscards
Counter,
ifOutErrors
Counter,
ifOutQLen
Gauge,
ifSpecific
OBJECT IDENTIFIER
}
An ifEntry is an interface entry with objects at the subnetwork layer and below, for one particular interface ๐ฆ
Access: read-only Status: mandatory
We now consider the individual components of each interface entry ๐
OBJECT:
-------
ifIndex { ifEntry 1 }
Syntax:
INTEGER
ifIndex is a unique value for each interface. It ranges between 1 and the value of ifNumber ๐ The value for each interface must stay constant, at least from one re-initialization of the entity's network management system to the next re-initialization. Stability is everything ๐
Access: read-only Status: mandatory
OBJECT:
-------
ifDescr { ifEntry 2 }
Syntax:
DisplayString (SIZE (0..255))
ifDescr is a textual string with info about the interface. It should include the manufacturer's name, the product name, and the version of the hardware interface ๐ท๏ธ
Access: read-only Status: mandatory
OBJECT:
-------
ifType { ifEntry 3 }
Syntax:
INTEGER {
other(1), -- none of the following
regular1822(2),
hdh1822(3),
ddn-x25(4),
rfc877-x25(5),
ethernet-csmacd(6),
iso88023-csmacd(7),
iso88024-tokenBus(8),
iso88025-tokenRing(9),
iso88026-man(10),
starLan(11),
proteon-10Mbit(12),
proteon-80Mbit(13),
hyperchannel(14),
fddi(15),
lapb(16),
sdlc(17),
t1-carrier(18),
cept(19), -- european equivalent of T-1
basicISDN(20),
primaryISDN(21),
-- proprietary serial
propPointToPointSerial(22),
ppp(23),
softwareLoopback(24),
eon(25), -- CLNP over IP [12]
ethernet-3Mbit(26)
nsip(27), -- XNS over IP
slip(28) -- generic SLIP
}
ifType is the type of interface, sorted by the physical or link protocol(s) sitting right "below" the network layer in the stack ๐งฉ So many flavours, it's giving buffet ๐
Access: read-only Status: mandatory
OBJECT:
-------
ifMtu { ifEntry 4 }
Syntax:
INTEGER
ifMtu is the size of the largest datagram that can be sent or received on the interface, in octets ๐ฆ For interfaces used to transmit network datagrams, it's the size of the biggest one that can go out on that interface ๐
Access: read-only Status: mandatory
OBJECT:
-------
ifSpeed { ifEntry 5 }
Syntax:
Gauge
ifSpeed is an estimate of the interface's current bandwidth in bits per second โก For interfaces whose bandwidth doesn't change, or where no accurate estimate can be made, this should hold the nominal bandwidth ๐
Access: read-only Status: mandatory
OBJECT:
-------
ifPhysAddress { ifEntry 6 }
Syntax:
OCTET STRING
ifPhysAddress is the interface's address at the protocol layer right "below" the network layer ๐ชช If the interface doesn't have an address like that (a serial line, for example), this should be an octet string of zero length ๐ซง
Access: read-only Status: mandatory
OBJECT:
-------
ifAdminStatus { ifEntry 7 }
Okay so picking up right where the ifAdminStatus stuff left off ๐
Syntax:
INTEGER {
up(1), -- ready to pass packets
down(2),
testing(3) -- in some test mode
}
Definition: This is the state the interface is supposed to be in โจ. Also, testing(3) means no operational packets can pass, so keep that in mind ๐
Access: read-write. Status: mandatory. ๐ซถ
ifOperStatus { ifEntry 8 } ๐ฆ
Syntax:
INTEGER {
up(1), -- ready to pass packets
down(2),
testing(3) -- in some test mode
}
Definition: This is the current operational state of the interface, aka what it's actually doing right now ๐. Again, testing(3) means no operational packets can be passed.
Access: read-only. Status: mandatory. ๐
ifLastChange { ifEntry 9 } โฑ๏ธ
Syntax:
TimeTicks
Definition: This is the value of sysUpTime at the moment the interface entered its current operational state. Tea โ If the current state was entered before the last re-initialization of the local network management subsystem, this object holds a zero value, so it's giving reset energy ๐ธ
Access: read-only. Status: mandatory. โจ
ifInOctets { ifEntry 10 } ๐
Syntax:
Counter
Definition: The total number of octets received on the interface, including framing characters. Literally every byte ๐ง
Access: read-only. Status: mandatory. ๐
ifInUcastPkts { ifEntry 11 } ๐
Syntax:
Counter
Definition: The number of subnetwork-unicast packets that got delivered to a higher-layer protocol. Delivered = it made it, bestie ๐
Access: read-only. Status: mandatory. ๐
ifInNUcastPkts { ifEntry 12 } ๐ฃ
Syntax:
Counter
Definition: The number of non-unicast packets delivered to a higher-layer protocol. Non-unicast means (i.e., subnetwork-broadcast or subnetwork-multicast) ๐
Access: read-only. Status: mandatory. ๐ฆ
ifInDiscards { ifEntry 13 } ๐๏ธ
Syntax:
Counter
Definition: The number of inbound packets that were chosen to be discarded, even though no errors had been detected to stop them being deliverable to a higher-layer protocol. Why would you do that? One possible reason is to free up buffer space ๐งน Lowkey iconic of it ๐
Access: read-only. Status: mandatory. ๐
ifInErrors { ifEntry 14 } ๐
Syntax:
Counter
Definition: The number of inbound packets that had errors preventing them from being deliverable to a higher-layer protocol. Big oof ๐ญ
Access: read-only. Status: mandatory. โจ
ifInUnknownProtos { ifEntry 15 } โ
Syntax:
Counter
Definition: The number of packets received via the interface that were discarded because of an unknown or unsupported protocol. Not it ๐ โโ๏ธ
Access: read-only. Status: mandatory. ๐ซถ
ifOutOctets { ifEntry 16 } ๐ค
Syntax:
Counter
Definition: The total number of octets transmitted out of the interface, including framing characters. Every single byte going out, periodt ๐
Access: read-only. Status: mandatory. ๐ธ
ifOutUcastPkts { ifEntry 17 } ๐
Syntax:
Counter
Definition: The total number of packets that higher-level protocols asked to be transmitted to a subnetwork-unicast address, including the ones that were discarded or not sent. Asking counts, even if it didn't go through ๐ฅบ
Access: read-only. Status: mandatory. ๐
ifOutNUcastPkts { ifEntry 18 } ๐ข
Syntax:
Counter
Definition: The total number of packets that higher-level protocols asked to be transmitted to a non-unicast address (i.e., a subnetwork-broadcast or subnetwork-multicast address), including the discarded or not-sent ones too ๐
Access: read-only. Status: mandatory. โจ
ifOutDiscards { ifEntry 19 } ๐๏ธ
Syntax:
Counter
Definition: The number of outbound packets that were chosen to be discarded, even though no errors had been detected to stop them being transmitted. Same energy as ifInDiscards: one possible reason is to free up buffer space ๐งน
Access: read-only. Status: mandatory. ๐
ifOutErrors { ifEntry 20 } ๐ญ
Syntax:
Counter
Definition: The number of outbound packets that could not be transmitted because of errors. Rough day ๐
Access: read-only. Status: mandatory. ๐ซถ
ifOutQLen { ifEntry 21 } ๐
Syntax:
Gauge
Definition: The length of the output packet queue, measured in packets. Basically how long the line is ๐ง
Access: read-only. Status: mandatory. ๐ฆ
ifSpecific { ifEntry 22 } ๐
Syntax:
OBJECT IDENTIFIER
Definition: This is a reference to the MIB definitions specific to whatever media is realizing the interface. For example, if the interface is realized by an ethernet, this object points to a document defining ethernet-specific objects ๐ง If an agent isn't configured with a value for any of these variables, the object identifier below gets returned:
nullSpecific OBJECT IDENTIFIER ::= { 0 0 }
Note that "nullSpecific" is syntactically valid (it's a legit OID, no cap). Any conformant implementation of ASN.1 and BER must be able to generate and recognize this value ๐
Access: read-only. Status: mandatory. ๐
5.3. The Address Translation Group โจ
Implementation of the Address Translation group is mandatory for all systems. Note however that this group is deprecated by MIB-II. That is, it's only being included for compatibility with MIB-I nodes, and will most likely be excluded from MIB-III nodes. From MIB-II onward, each network protocol group has its own address translation tables ๐ธ
The Address Translation group contains one table, which is the union across all interfaces of the translation tables for converting a NetworkAddress (e.g., an IP address) into a subnetwork-specific address. For lack of a better term, this document calls such a subnetwork-specific address a "physical" address ๐ซถ
Examples of these translation tables: for broadcast media where ARP is in use, the translation table is equivalent to the ARP cache. Or, on an X.25 network where non-algorithmic translation to X.121 addresses is required, the translation table holds the NetworkAddress to X.121 address equivalences ๐ฆ
atTable { at 1 } ๐บ๏ธ
Syntax:
SEQUENCE OF AtEntry
Definition: The Address Translation tables hold the NetworkAddress to "physical" address equivalences. Some interfaces don't use translation tables to determine address equivalences (e.g., DDN-X.25 has an algorithmic method). If all interfaces are this type, the Address Translation table is empty, i.e., has zero entries ๐
Access: read-write. Status: deprecated. ๐
atEntry { atTable 1 } ๐งฉ
Syntax:
AtEntry ::= SEQUENCE {
atIfIndex
INTEGER,
atPhysAddress
OCTET STRING,
atNetAddress
NetworkAddress
}
Definition: Each entry holds one NetworkAddress to "physical" address equivalence ๐
Access: read-write. Status: deprecated. โจ
Now let's look at the individual pieces of each Address Translation table entry ๐
atIfIndex { atEntry 1 } ๐ข
Syntax:
INTEGER
Definition: The interface where this entry's equivalence is effective. The interface identified by a particular value of this index is the same interface identified by the same value of ifIndex ๐
Access: read-write. Status: deprecated. ๐
atPhysAddress { atEntry 2 } ๐
Syntax:
OCTET STRING
Definition: The media-dependent "physical" address.
Setting this object to a null string (one of zero length) has the effect of invalidating the corresponding entry in the atTable object. Basically it disassociates the interface from that entry's mapping ๐ Whether the agent actually removes an invalidated entry from the table is an implementation-specific matter. So management stations must be prepared to receive tabular information from agents that corresponds to entries not currently in use. To properly interpret such entries, you have to check the relevant atPhysAddress object ๐ต๏ธโโ๏ธ
Access: read-write. Status: deprecated. ๐ญ
atNetAddress { atEntry 3 } ๐
Syntax:
NetworkAddress
Definition: The NetworkAddress (e.g., the IP address) corresponding to the media-dependent "physical" address ๐
Access: read-write. Status: deprecated. ๐ซถ
5.4. The IP Group โจ
bestie, the IP group is mandatory for all systems ๐ no exceptions, so every single box has to have it ๐ซถ
ipForwarding ๐ฆ
OBJECT:
-------
ipForwarding { ip 1 }
Syntax:
INTEGER {
forwarding(1), -- i.e., acting as a gateway
not-forwarding(2) -- i.e., NOT acting as a gateway
}
okay so this one tells you whether the entity is acting as an IP gateway, meaning whether it forwards the datagrams it receives that aren't addressed to it. gateways forward ๐ hosts don't, except for the ones that get source-routed through the host ๐
Access: read-write. Status: mandatory.
ipDefaultTTL ๐ธ
OBJECT:
-------
ipDefaultTTL { ip 2 }
Syntax:
INTEGER
this is the default value that goes into the Time-To-Live field of the IP header for datagrams this entity starts itself ๐ it only kicks in when the transport layer protocol doesn't hand over a TTL value of its own ๐ง
Access: read-write. Status: mandatory.
ipInReceives ๐
OBJECT:
-------
ipInReceives { ip 3 }
Syntax:
Counter
the total count of input datagrams that came in from the interfaces โจ this includes the ones that showed up with errors too, so nothing gets quietly left out ๐ญ
Access: read-only. Status: mandatory.
ipInHdrErrors ๐
OBJECT:
-------
ipInHdrErrors { ip 4 }
Syntax:
Counter
this one counts the input datagrams that got tossed because their IP headers were messed up ๐ that covers bad checksums, a version number mismatch, other format errors, time-to-live exceeded, and errors found while processing their IP options, etc.
Access: read-only. Status: mandatory.
ipInAddrErrors ๐
OBJECT:
-------
ipInAddrErrors { ip 5 }
Syntax:
Counter
these are the datagrams that got discarded because the destination address in their header wasn't a valid one to receive at this entity ๐ invalid addresses like 0.0.0.0 count, and so do addresses from unsupported Classes like Class E. for entities that aren't IP Gateways, and so don't forward anything, this also counts datagrams whose destination wasn't a local address.
Access: read-only. Status: mandatory.
ipForwDatagrams ๐ฅ
OBJECT:
-------
ipForwDatagrams { ip 6 }
Syntax:
Counter
this counts the input datagrams where this entity wasn't the final IP destination, so it went looking for a route to forward them onward ๐ฃ๏ธ for entities that aren't acting as IP Gateways, only the packets that were Source-Routed through this entity count here, and only if the Source-Route option processing worked out.
Access: read-only. Status: mandatory.
ipInUnknownProtos ๐
OBJECT:
-------
ipInUnknownProtos { ip 7 }
Syntax:
Counter
locally addressed datagrams that arrived successfully but got discarded because the protocol was unknown or unsupported ๐ฅฒ they made it all the way here and still got bounced
Access: read-only. Status: mandatory.
ipInDiscards ๐
OBJECT:
-------
ipInDiscards { ip 8 }
Syntax:
Counter
these are input IP datagrams that had no problems stopping them from being processed, but got dropped anyway, for example because there wasn't enough buffer space ๐ค quick note: this counter does not include anything thrown out while it was waiting for re-assembly.
Access: read-only. Status: mandatory.
ipInDelivers ๐ง
OBJECT:
-------
ipInDelivers { ip 9 }
Syntax:
Counter
the total number of input datagrams that were successfully delivered to the IP user-protocols, ICMP included ๐ซถ the bestie delivery count โจ
Access: read-only. Status: mandatory.
ipOutRequests ๐
OBJECT:
-------
ipOutRequests { ip 10 }
Syntax:
Counter
this is the total of IP datagrams that the local IP user-protocols (ICMP included) handed to IP to be sent ๐ฎ heads up, it does not include anything already counted in ipForwDatagrams, so no double counting, periodt ๐
Access: read-only. Status: mandatory.
ipOutDiscards ๐
OBJECT:
ipOutDiscards { ip 11 }
Syntax:
Counter
output IP datagrams that had no problem getting sent to their destination, but got discarded anyway, like when there's no buffer space left ๐ฅบ fun twist: this counter would also include anything counted in ipForwDatagrams if those packets hit this (discretionary) discard criterion.
Access: read-only. Status: mandatory.
ipOutNoRoutes ๐
OBJECT:
-------
ipOutNoRoutes { ip 12 }
Syntax:
Counter
the datagrams that got discarded because no route could be found to reach their destination ๐บ๏ธ this includes any packets counted in ipForwDatagrams that meet this "no-route" criterion. it also covers any datagrams a host can't route because all of its default gateways are down ๐ฌ
Access: read-only. Status: mandatory.
ipReasmTimeout โณ
OBJECT:
-------
ipReasmTimeout { ip 13 }
Syntax:
INTEGER
this is the maximum number of seconds that received fragments get to hang out while they wait for reassembly at this entity ๐ฐ๏ธ
Access: read-only. Status: mandatory.
ipReasmReqds ๐งฉ
OBJECT:
-------
ipReasmReqds { ip 14 }
Syntax:
Counter
the number of IP fragments that came in and needed to be reassembled at this entity ๐ซ
Access: read-only. Status: mandatory.
ipReasmOKs ๐
OBJECT:
-------
ipReasmOKs { ip 15 }
Syntax:
Counter
the number of IP datagrams that got successfully re-assembled ๐ฅณ the glow-up we love to see โจ
Access: read-only. Status: mandatory.
ipReasmFails ๐
OBJECT:
-------
ipReasmFails { ip 16 }
Syntax:
Counter
this counts the failures the IP re-assembly algorithm detected, for whatever reason, like timeouts or errors ๐ฉ here's the tea: this isn't necessarily a count of discarded IP fragments, because some algorithms (notably the one in RFC 815) can lose track of how many fragments there are by combining them as they arrive. chaotic, I know ๐
Access: read-only. Status: mandatory.
ipFragOKs ๐ท
OBJECT:
ipFragOKs { ip 17 }
Syntax:
Counter
the number of IP datagrams that were successfully fragmented at this entity ๐ง they got split up and still made it ๐
Access: read-only. Status: mandatory.
ipFragFails ๐ฅ
OBJECT:
-------
ipFragFails { ip 18 }
Syntax:
Counter
these are the datagrams that got discarded because they needed fragmenting at this entity but couldn't be fragmented, like when their "Don't Fragment" flag was set ๐ซ sad, but it happens ๐ญ
Access: read-only. Status: mandatory.
ipFragCreates โ๏ธ
OBJECT:
-------
ipFragCreates { ip 19 }
Syntax:
Counter
the number of IP datagram fragments that were generated as a result of fragmentation at this entity ๐ every little piece counts, bestie ๐ซถ
Access: read-only. Status: mandatory.
5.4.1. The IP Address table โจ
okay so this table is where the entity keeps track of its own IP addressing info, aka the whole "which addresses do I own" list ๐
OBJECT:
-------
ipAddrTable { ip 20 }
Syntax:
SEQUENCE OF IpAddrEntry
Definition:
The table of addressing information relevant to this
entity's IP addresses.
Access:
read-only.
Status:
mandatory.
so ipAddrTable is the whole table, and it's read-only and mandatory ๐ซถ each row is an IpAddrEntry, which is where the real tea is ๐
OBJECT:
-------
ipAddrEntry { ipAddrTable 1 }
Syntax:
IpAddrEntry ::= SEQUENCE {
ipAdEntAddr
IpAddress,
ipAdEntIfIndex
INTEGER,
ipAdEntNetMask
IpAddress,
ipAdEntBcastAddr
INTEGER,
ipAdEntReasmMaxSize
INTEGER (0..65535)
}
Definition:
The addressing information for one of this entity's IP
addresses.
Access:
read-only.
Status:
mandatory.
ipAddrEntry is one row, and each row packs five fields together: the address, the interface index, the netmask, the broadcast bit, and the max reassembly size ๐ it's giving very organized, bestie ๐ฆ
OBJECT:
-------
ipAdEntAddr { ipAddrEntry 1 }
Syntax:
IpAddress
Definition:
The IP address to which this entry's addressing
information pertains.
Access:
read-only.
Status:
mandatory.
ipAdEntAddr is the IP address itself, the main character of the row ๐ read-only and mandatory, no notes ๐
OBJECT:
-------
ipAdEntIfIndex { ipAddrEntry 2 }
Syntax:
INTEGER
Definition:
The index value which uniquely identifies the interface
to which this entry is applicable. The interface
identified by a particular value of this index is the
same interface as identified by the same value of
ifIndex.
Access:
read-only.
Status:
mandatory.
ipAdEntIfIndex is the interface index, and it's the same number you'd see as ifIndex in the Interfaces group, so they match up perfectly ๐งโจ it's a unique ID for the interface this address belongs to, so no mix-ups allowed ๐
OBJECT:
-------
ipAdEntNetMask { ipAddrEntry 3 }
Syntax:
IpAddress
Definition:
The subnet mask associated with the IP address of this
entry. The value of the mask is an IP address with all
the network bits set to 1 and all the hosts bits set to
0.
Access:
read-only.
Status:
mandatory.
ipAdEntNetMask is the subnet mask, and it's formatted like an IP address where the network bits are all 1s and the host bits are all 0s ๐ธ it's literally the bit pattern that splits "network" from "host", so it's a whole vibe ๐
OBJECT:
-------
ipAdEntBcastAddr { ipAddrEntry 4 }
Syntax:
INTEGER
Definition:
The value of the least-significant bit in the IP
broadcast address used for sending datagrams on the
(logical) interface associated with the IP address of
this entry. For example, when the Internet standard
all-ones broadcast address is used, the value will be 1.
This value applies to both the subnet and network
broadcasts addresses used by the entity on this (logical)
interface.
Access:
read-only.
Status:
mandatory.
ipAdEntBcastAddr is about the broadcast address, and it's a tiny integer that only looks at the least-significant bit ๐ฆ the example here is the Internet standard all-ones broadcast address, which gives a value of 1 ๐ซถ and that same value covers both the subnet and network broadcast addresses on this logical interface, so it's one tidy setting for both ๐
OBJECT:
-------
ipAdEntReasmMaxSize { ipAddrEntry 5 }
Syntax:
INTEGER (0..65535)
Definition:
The size of the largest IP datagram which this entity can
re-assemble from incoming IP fragmented datagrams
received on this interface.
Access:
read-only.
Status:
mandatory.
last but not least, ipAdEntReasmMaxSize is the biggest IP datagram this entity can put back together from fragments that come in on this interface ๐ฅ it's an integer from 0 to 65535, and yes, it's read-only and mandatory, because we love a consistent queen ๐โจ
5.4.2. The IP Routing table โจ
okay so the IP Routing table is literally where this entity keeps a list of every route it currently knows about ๐บ๏ธ๐
ipRoutingTable { ip 21 }
Syntax:
SEQUENCE OF IpRouteEntry
It's this entity's IP Routing table ๐ฆ. Access is read-write and the status is mandatory ๐ .
ipRouteEntry { ipRoutingTable 1 }
Syntax:
IpRouteEntry ::= SEQUENCE {
ipRouteDest
IpAddress,
ipRouteIfIndex
INTEGER,
ipRouteMetric1
INTEGER,
ipRouteMetric2
INTEGER,
ipRouteMetric3
INTEGER,
ipRouteMetric4
INTEGER,
ipRouteNextHop
IpAddress,
ipRouteType
INTEGER,
ipRouteProto
INTEGER,
ipRouteAge
INTEGER,
ipRouteMask
IpAddress
}
Each row is one route to a particular destination ๐. Access is read-write and it's mandatory ๐ซถ.
Now let's look at the pieces of each route, one at a time ๐ง
ipRouteDest { ipRouteEntry 1 }
Syntax: IpAddress
This is the destination IP address for the route ๐ธ. If the value is 0.0.0.0, the route counts as a default route ๐ . You can have multiple routes pointing at the same destination in the table, but how you get to those extra entries depends on the table-access mechanism of whatever network management protocol you're using ๐. Access is read-write and it's mandatory โจ.
ipRouteIfIndex { ipRouteEntry 2 }
Syntax: INTEGER
This is the index value that uniquely identifies the local interface the next hop of this route should be reached through ๐. That index is the very same interface you'd get from the same value of ifIndex ๐. Access is read-write and it's mandatory ๐.
ipRouteMetric1 { ipRouteEntry 3 }
Syntax: INTEGER
This is the primary routing metric for the route ๐. What it actually means is decided by the routing protocol named in the route's ipRouteProto value ๐ง . If this metric isn't used, set it to -1 ๐. Access is read-write and it's mandatory ๐.
ipRouteMetric2 { ipRouteEntry 4 }
Syntax: INTEGER
This is an alternate routing metric for the route ๐ฅ. Its meaning also comes from the routing protocol in ipRouteProto, and if it's not used, the value should be -1 ๐. Access is read-write and it's mandatory โจ.
ipRouteMetric3 { ipRouteEntry 5 }
Syntax: INTEGER
Another alternate routing metric ๐ฅ. Same deal: the semantics come from the routing protocol in ipRouteProto, and if it's not used, the value should be -1 ๐ . Access is read-write and it's mandatory ๐ฆ.
ipRouteMetric4 { ipRouteEntry 6 }
Syntax: INTEGER
Yep, one more alternate metric ๐ซง. Its meaning is set by the routing protocol in ipRouteProto, and if it isn't used, the value should be -1 ๐. Access is read-write and it's mandatory ๐ธ.
ipRouteNextHop { ipRouteEntry 7 }
Syntax: IpAddress
This is the IP address of the next hop for the route ๐. For a route tied to an interface that runs over broadcast media, this field holds the agent's own IP address on that interface ๐ก. Access is read-write and it's mandatory ๐.
ipRouteType { ipRouteEntry 8 }
Syntax:
INTEGER {
other(1), -- none of the following
invalid(2), -- an invalidated route
-- route to directly
direct(3), -- connected (sub-)network
-- route to a non-local
remote(4) -- host/network/sub-network
}
This tells you what kind of route it is ๐๏ธ. There are four flavours: other, invalid, direct, and remote ๐ญ.
Setting this object to invalid(2) invalidates the matching entry in the ipRoutingTable ๐ซ. Basically, it cuts the link between the destination in that entry and the route it's tied to ๐. Whether the agent actually deletes an invalidated entry from the table is up to the implementation ๐คทโโ๏ธ. Because of that, management stations must be ready to receive table info about entries that aren't in use anymore ๐. To read those entries correctly, you have to check the relevant ipRouteType object ๐. Access is read-write and it's mandatory ๐ .
ipRouteProto { ipRouteEntry 9 }
Syntax:
INTEGER {
other(1), -- none of the following
-- non-protocol information,
-- e.g., manually configured
local(2), -- entries
-- set via a network management
netmgmt(3), -- protocol
-- obtained via ICMP,
icmp(4), -- e.g., Redirect
-- the remaining values are
-- all gateway routing protocols
egp(5),
ggp(6),
hello(7),
rip(8),
is-is(9),
es-is(10),
ciscoIgrp(11),
bbnSpfIgp(12),
ospf(13),
bgp(14)
}
This says how the route was learned ๐. The protocol values for gateway routing protocols don't mean hosts are supposed to run those protocols too ๐ โโ๏ธ. Access is read-only and it's mandatory ๐.
ipRouteAge { ipRouteEntry 10 }
Syntax: INTEGER
This counts the seconds since the route was last updated or confirmed as correct โฐ. Don't read "too old" into it unless you know the routing protocol that taught you the route ๐ฐ๏ธ. Access is read-write and it's mandatory ๐ซ.
ipRouteMask { ipRouteEntry 11 }
Syntax: IpAddress
This is the mask that gets logical-ANDed with the destination address before it's compared to the ipRouteDest value ๐ญ. Systems that can't handle arbitrary subnet masks have the agent work out ipRouteMask by checking whether the ipRouteDest belongs to a class-A, B, or C network, then using one of these:
mask network
255.0.0.0 class-A
255.255.0.0 class-B
255.255.255.0 class-C
If ipRouteDest is 0.0.0.0 (a default route), the mask is 0.0.0.0 too ๐ . It's worth noting that every IP routing subsystem uses this mechanism implicitly ๐ง . Access is read-write and it's mandatory ๐.
5.4.3. The IP Address Translation table ๐ฆ
Okay so the Address Translation tables are where the IpAddress to "physical" address matches live, bestie ๐ Some interfaces don't need translation tables to figure out who's who. DDN-X.25 just uses an algorithm, which is iconic ๐ So if every interface works that way, the Address Translation table is totally fine being empty, aka zero entries ๐ซถ
OBJECT:
-------
ipNetToMediaTable { ip 22 }
Syntax:
SEQUENCE OF IpNetToMediaEntry
This is the IP Address Translation table used for mapping IP addresses to physical addresses ๐ธ Access is read-write and status is mandatory โจ
OBJECT:
-------
IpNetToMediaEntry { ipNetToMediaTable 1 }
Syntax:
IpNetToMediaEntry ::= SEQUENCE {
ipNetToMediaIfIndex
INTEGER,
ipNetToMediaPhysAddress
OCTET STRING,
ipNetToMediaNetAddress
IpAddress,
ipNetToMediaType
INTEGER
}
Each entry holds one IpAddress to "physical" address equivalence, so it's like a little matchmaking card ๐ Access is read-write and status is mandatory ๐
We're gonna look at each piece of an IP Address Translation table entry now ๐
OBJECT:
-------
ipNetToMediaIfIndex { ipNetToMediaEntry 1 }
Syntax:
INTEGER
This one is the interface where the entry's equivalence is effective ๐ฆ The interface with a particular value here is the same interface you'd get from that same value of ifIndex, so they line up perfectly ๐
Access is read-write and status is mandatory โจ
OBJECT:
-------
ipNetToMediaPhysAddress { ipNetToMediaEntry 2 }
Syntax:
OCTET STRING
This is the media-dependent "physical" address ๐ Access is read-write and status is mandatory ๐
OBJECT:
-------
ipNetToMediaNetAddress { ipNetToMediaEntry 3 }
Syntax:
IpAddress
This is the IpAddress that goes with that media-dependent "physical" address, the other half of the couple ๐ซถ Access is read-write and status is mandatory ๐ธ
OBJECT:
-------
ipNetToMediaType { ipNetToMediaEntry 4 }
Syntax:
INTEGER {
other(1), -- none of the following
invalid(2), -- an invalidated mapping
dynamic(3),
static(4)
}
This is the type of mapping ๐ฅ Now the drama: setting this object to invalid(2) invalidates the matching entry in the ipNetToMediaTable ๐ It basically breaks up the interface and the mapping, so they're no longer linked ๐ญ Whether the agent actually removes an invalidated entry is up to the implementation, so it's not a fixed rule โจ That means management stations must be prepared to receive table info about entries that aren't in use right now ๐ To know what an entry means, you have to check its ipNetToMediaType object ๐ง Access is read-write and status is mandatory ๐
5.5. The ICMP Group โจ
okay so ICMP is the group that keeps score on all the ICMP traffic, and it's ๐ฅ mandatory for all systems, so every implementation has to have it. it's split into the stuff coming in and the stuff going out, and every single one of these is read-only and mandatory. no cap, the whole thing is giving organized ๐
Here are the incoming ones first ๐
OBJECT:
-------
icmpInMsgs { icmp 1 }
Syntax:
Counter
Definition:
The total number of ICMP messages which the entity
received. Note that this counter includes all those
counted by icmpInErrors.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInErrors { icmp 2 }
Syntax:
Counter
Definition:
The number of ICMP messages which the entity received but
determined as having ICMP-specific errors (bad ICMP
checksums, bad length, etc.).
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInDestUnreachs { icmp 3 }
Syntax:
Counter
Definition:
The number of ICMP Destination Unreachable messages
received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInTimeExcds { icmp 4 }
Syntax:
Counter
Definition:
The number of ICMP Time Exceeded messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInParmProbs { icmp 5 }
Syntax:
Counter
Definition:
The number of ICMP Parameter Problem messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInSrcQuenchs { icmp 6 }
Syntax:
Counter
Definition:
The number of ICMP Source Quench messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInRedirects { icmp 7 }
Syntax:
Counter
Definition:
The number of ICMP Redirect messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInEchos { icmp 8 }
Syntax:
Counter
Definition:
The number of ICMP Echo (request) messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInEchoReps { icmp 9 }
Syntax:
Counter
Definition:
The number of ICMP Echo Reply messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInTimestamps { icmp 10 }
Syntax:
Counter
Definition:
The number of ICMP Timestamp (request) messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInTimestampReps { icmp 11 }
Syntax:
Counter
Definition:
The number of ICMP Timestamp Reply messages received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInAddrMasks { icmp 12 }
Syntax:
Counter
Definition:
The number of ICMP Address Mask Request messages
received.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpInAddrMaskReps { icmp 13 }
Syntax:
Counter
Definition:
The number of ICMP Address Mask Reply messages received.
Access:
read-only.
Status:
mandatory.
now the outgoing side ๐ฆ this is where the sending stats live, and yes, the bits about errors and hosts are super specific, so read them carefully bestie ๐
OBJECT:
-------
icmpOutMsgs { icmp 14 }
Syntax:
Counter
Definition:
The total number of ICMP messages which this entity
attempted to send. Note that this counter includes all
those counted by icmpOutErrors.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutErrors { icmp 15 }
Syntax:
Counter
Definition:
The number of ICMP messages which this entity did not
send due to problems discovered within ICMP such as a
lack of buffers. This value should not include errors
discovered outside the ICMP layer such as the inability
of IP to route the resultant datagram. In some
implementations there may be no types of error which
contribute to this counter's value.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutDestUnreachs { icmp 16 }
Syntax:
Counter
Definition:
The number of ICMP Destination Unreachable messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutTimeExcds { icmp 17 }
Syntax:
Counter
Definition:
The number of ICMP Time Exceeded messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutParmProbs { icmp 18 }
Syntax:
Counter
Definition:
The number of ICMP Parameter Problem messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutSrcQuenchs { icmp 19 }
Syntax:
Counter
Definition:
The number of ICMP Source Quench messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutRedirects { icmp 20 }
Syntax:
Counter
Definition:
The number of ICMP Redirect messages sent. For a host,
this object will always be zero, since hosts do not send
redirects.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutEchos { icmp 21 }
Syntax:
Counter
Definition:
The number of ICMP Echo (request) messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutEchoReps { icmp 22 }
Syntax:
Counter
Definition:
The number of ICMP Echo Reply messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutTimestamps { icmp 23 }
Syntax:
Counter
Definition:
The number of ICMP Timestamp (request) messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutTimestampReps { icmp 24 }
Syntax:
Counter
Definition:
The number of ICMP Timestamp Reply messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutAddrMasks { icmp 25 }
Syntax:
Counter
Definition:
The number of ICMP Address Mask Request messages sent.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
icmpOutAddrMaskReps { icmp 26 }
Syntax:
Counter
Definition:
The number of ICMP Address Mask Reply messages sent.
Access:
read-only.
Status:
mandatory.
ngl the icmpOutRedirects one is the cutest detail: for a host it's always zero, because hosts just don't send redirects ๐ธ
5.6. The TCP Group โจ
Okay bestie, the TCP group is where the connection stats live ๐ฆ Implementing it is mandatory for any system that implements TCP, so no skipping it, no cap ๐
Heads up: the objects that describe one particular TCP connection are transient. They only exist for as long as that connection does ๐ซถ
OBJECT:
-------
tcpRtoAlgorithm { tcp 1 }
Syntax:
INTEGER {
other(1), -- none of the following
constant(2), -- a constant rto
rsre(3), -- MIL-STD-1778, Appendix B
vanj(4) -- Van Jacobson's algorithm [11]
}
Definition:
The algorithm used to determine the timeout value used
for retransmitting unacknowledged octets.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpRtoMin { tcp 2 }
Syntax:
INTEGER
Definition:
The minimum value permitted by a TCP implementation for
the retransmission timeout, measured in milliseconds.
More refined semantics for objects of this type depend
upon the algorithm used to determine the retransmission
timeout. In particular, when the timeout algorithm is
rsre(3), an object of this type has the semantics of the
LBOUND quantity described in RFC 793.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpRtoMax { tcp 3 }
Syntax:
INTEGER
Definition:
The maximum value permitted by a TCP implementation for
the retransmission timeout, measured in milliseconds.
More refined semantics for objects of this type depend
upon the algorithm used to determine the retransmission
timeout. In particular, when the timeout algorithm is
rsre(3), an object of this type has the semantics of the
UBOUND quantity described in RFC 793.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpMaxConn { tcp 4 }
Syntax:
INTEGER
Definition:
The limit on the total number of TCP connections the
entity can support. In entities where the maximum number
of connections is dynamic, this object should contain the
value "-1".
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpActiveOpens { tcp 5 }
Syntax:
Counter
Definition:
The number of times TCP connections have made a direct
transition to the SYN-SENT state from the CLOSED state.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpPassiveOpens { tcp 6 }
Syntax:
Counter
Definition:
The number of times TCP connections have made a direct
transition to the SYN-RCVD state from the LISTEN state.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpAttemptFails { tcp 7 }
Syntax:
Counter
Definition:
The number of times TCP connections have made a direct
transition to the CLOSED state from either the SYN-SENT
state or the SYN-RCVD state, plus the number of times TCP
connections have made a direct transition to the LISTEN
state from the SYN-RCVD state.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpEstabResets { tcp 8 }
Syntax:
Counter
Definition:
The number of times TCP connections have made a direct
transition to the CLOSED state from either the
ESTABLISHED state or the CLOSE-WAIT state.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpCurrEstab { tcp 9 }
Syntax:
Gauge
Definition:
The number of TCP connections for which the current state
is either ESTABLISHED or CLOSE-WAIT.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpInSegs { tcp 10 }
Syntax:
Counter
Definition:
The total number of segments received, including those
received in error. This count includes segments received
on currently established connections.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpOutSegs { tcp 11 }
Syntax:
Counter
Definition:
The total number of segments sent, including those on
current connections but excluding those containing only
retransmitted octets.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpRetransSegs { tcp 12 }
Syntax:
Counter
Definition:
The total number of segments retransmitted - that is, the
number of TCP segments transmitted containing one or more
previously transmitted octets.
Access:
read-only.
Status:
mandatory.
5.6.1. The TCP Connection table ๐
The TCP connection table is the guest list for this entity's current TCP connections, so it's where you go to see who's connected right now ๐
OBJECT:
-------
tcpConnTable { tcp 13 }
Syntax:
SEQUENCE OF TcpConnEntry
Definition:
A table containing TCP connection-specific information.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpConnEntry { tcpConnTable 1 }
Syntax:
TcpConnEntry ::= SEQUENCE {
tcpConnState
INTEGER,
tcpConnLocalAddress
IpAddress,
tcpConnLocalPort
INTEGER (0..65535),
tcpConnRemAddress
IpAddress,
tcpConnRemPort
INTEGER (0..65535)
}
Definition:
Information about a particular current TCP connection.
An object of this type is transient, in that it ceases to
exist when (or soon after) the connection makes the
transition to the CLOSED state.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpConnState { tcpConnEntry 1 }
Syntax:
INTEGER {
closed(1),
listen(2),
synSent(3),
synReceived(4),
established(5),
finWait1(6),
finWait2(7),
closeWait(8),
lastAck(9),
closing(10),
timeWait(11)
}
Definition:
The state of this TCP connection.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpConnLocalAddress { tcpConnEntry 2 }
Syntax:
IpAddress
Definition:
The local IP address for this TCP connection. In the
case of a connection in the listen state which is willing
to accept connections for any IP interface associated
with the node, the value 0.0.0.0 is used.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpConnLocalPort { tcpConnEntry 3 }
Syntax:
INTEGER (0..65535)
Definition:
The local port number for this TCP connection.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpConnRemAddress { tcpConnEntry 4 }
Syntax:
IpAddress
Definition:
The remote IP address for this TCP connection.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpConnRemPort { tcpConnEntry 5 }
Syntax:
INTEGER (0..65535)
Definition:
The remote port number for this TCP connection.
Access:
read-only.
Status:
mandatory.
5.6.2. Additional TCP Objects ๐ธ
A few more TCP counters to round out the group ๐
OBJECT:
-------
tcpInErrs { tcp 14 }
Syntax:
Counter
Definition:
The total number of segments received in error (e.g., bad
TCP checksums).
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
tcpOutRsts { tcp 15 }
Syntax:
Counter
Definition:
The number of TCP segments sent containing the RST flag.
Access:
read-only.
Status:
mandatory.
5.7. The UDP Group ๐ฆ
UDP is the chill, no-handshake sibling of TCP, and its group is mandatory for any system that implements UDP ๐
OBJECT:
-------
udpInDatagrams { udp 1 }
Syntax:
Counter
Definition:
The total number of UDP datagrams delivered to UDP users.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
udpNoPorts { udp 2 }
Syntax:
Counter
Definition:
The total number of received UDP datagrams for which
there was no application at the destination port.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
udpInErrors { udp 3 }
Syntax:
Counter
Definition:
The number of received UDP datagrams that could not be
delivered for reasons other than the lack of an
application at the destination port.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
udpOutDatagrams { udp 4 }
Syntax:
Counter
Definition:
The total number of UDP datagrams sent from this entity.
Access:
read-only.
Status:
mandatory.
5.7.1. The UDP Listener table โจ
okay so the UDP listener table is basically the guest list ๐ of this entity's UDP endpoints where a local application is actively waiting for datagrams to show up ๐ฆ
OBJECT:
-------
udpTable { udp 5 }
Syntax:
SEQUENCE OF UdpEntry
Definition:
A table containing UDP listener information.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
udpEntry { udpTable 1 }
Syntax:
UdpEntry ::= SEQUENCE {
udpLocalAddress
IpAddress,
udpLocalPort
INTEGER (0..65535)
}
Definition:
Information about a particular current UDP listener.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
udpLocalAddress { udpEntry 1 }
Syntax:
IpAddress
Definition:
The local IP address for this UDP listener. In the case
of a UDP listener which is willing to accept datagrams
for any IP interface associated with the node, the value
0.0.0.0 is used.
Access:
read-only.
Status:
mandatory.
the local address is the IP address this listener is bound to ๐
and if it's happy to take datagrams for any IP interface on the node, the value 0.0.0.0 is the move ๐
OBJECT:
-------
udpLocalPort { udpEntry 2 }
Syntax:
INTEGER (0..65535)
Definition:
The local port number for this UDP listener.
Access:
read-only.
Status:
mandatory.
the port is just the local port number for the listener, nothing more, nothing less ๐ง
5.8. The EGP Group ๐
okay the EGP group is mandatory for every system that implements EGP, so if you're doing EGP, this part is non-negotiable bestie ๐ญ
OBJECT:
-------
egpInMsgs { egp 1 }
Syntax:
Counter
Definition:
The number of EGP messages received without error.
Access:
read-only.
Status:
mandatory.
the counter tracks EGP messages that came in and were error-free โจ
OBJECT:
-------
egpInErrors { egp 2 }
Syntax:
Counter
Definition:
The number of EGP messages received that proved to be in
error.
Access:
read-only.
Status:
mandatory.
this one counts the incoming EGP messages that turned out to be broken ๐
OBJECT:
-------
egpOutMsgs { egp 3 }
Syntax:
Counter
Definition:
The total number of locally generated EGP messages.
Access:
read-only.
Status:
mandatory.
outgoing side now ๐ฆ this is the total of EGP messages the local entity generated itself
OBJECT:
-------
egpOutErrors { egp 4 }
Syntax:
Counter
Definition:
The number of locally generated EGP messages not sent due
to resource limitations within an EGP entity.
Access:
read-only.
Status:
mandatory.
and this is the sad one ๐ it counts the locally generated EGP messages that never got sent because the EGP entity ran out of resources
5.8.1. The EGP Neighbor table ๐ซถ
the EGP Neighbor table is the place where this entity keeps tabs on all of its EGP neighbors, and it's very detailed bestie ๐
OBJECT:
-------
egpNeighTable { egp 5 }
Syntax:
SEQUENCE OF EgpNeighEntry
Definition:
The EGP neighbor table.
Access:
read-only.
Status:
mandatory.
OBJECT:
-------
egpNeighEntry { egpNeighTable 1 }
Syntax:
EgpNeighEntry ::= SEQUENCE {
egpNeighState
INTEGER,
egpNeighAddr
IpAddress,
egpNeighAs
INTEGER,
egpNeighInMsgs
Counter,
egpNeighInErrs
Counter,
egpNeighOutMsgs
Counter,
egpNeighOutErrs
Counter,
egpNeighInErrMsgs
Counter,
egpNeighOutErrMsgs
Counter,
egpNeighStateUps
Counter,
egpNeighStateDowns
Counter,
egpNeighIntervalHello
INTEGER,
egpNeighIntervalPoll
INTEGER,
egpNeighMode
INTEGER,
egpNeighEventTrigger
INTEGER
}
Definition:
Information about this entity's relationship with a
particular EGP neighbor.
Access:
read-only.
Status:
mandatory.
every row in this table is one neighbor relationship, so each entry is basically a little friendship profile ๐ now let's look at each piece of it ๐ธ
OBJECT:
-------
egpNeighState { egpNeighEntry 1 }
Syntax:
INTEGER {
idle(1),
acquisition(2),
down(3),
up(4),
cease(5)
}
Definition:
The EGP state of the local system with respect to this
entry's EGP neighbor. Each EGP state is represented by a
value that is one greater than the numerical value
associated with said state in RFC 904.
Access:
read-only.
Status:
mandatory.
this is the EGP state of the local system with respect to that neighbor ๐ and the numbers are one bigger than the ones RFC 904 gives each state, so don't mix them up bestie ๐
OBJECT:
-------
egpNeighAddr { egpNeighEntry 2 }
Syntax:
IpAddress
Definition:
The IP address of this entry's EGP neighbor.
Access:
read-only.
Status:
mandatory.
the neighbor's IP address, pretty straightforward ๐
OBJECT:
-------
egpNeighAs { egpNeighEntry 3 }
Syntax:
INTEGER
Definition:
The autonomous system of this EGP peer. Zero should be
specified if the autonomous system number of the neighbor
is not yet known.
Access:
read-only.
Status:
mandatory.
this is the autonomous system of the EGP peer โจ and if they haven't told us their AS number yet, zero is what should go in there ๐ง
OBJECT:
-------
egpNeighInMsgs { egpNeighEntry 4 }
Syntax:
Counter
Definition:
The number of EGP messages received without error from
this EGP peer.
Access:
read-only.
Status:
mandatory.
it's the error-free incoming messages, but just from this one peer ๐ซถ
OBJECT:
-------
egpNeighInErrs { egpNeighEntry 5 }
Syntax:
Counter
Definition:
The number of EGP messages received from this EGP peer
that proved to be in error (e.g., bad EGP checksum).
Access:
read-only.
Status:
mandatory.
this one counts the broken incoming messages from this peer, and a bad EGP checksum is the classic example ๐
OBJECT:
-------
egpNeighOutMsgs { egpNeighEntry 6 }
Syntax:
Counter
Definition:
The number of locally generated EGP messages to this EGP
peer.
Access:
read-only.
Status:
mandatory.
the outgoing messages the local system made and sent toward this peer ๐ฆ
OBJECT:
-------
egpNeighOutErrs { egpNeighEntry 7 }
Syntax:
Counter
Definition:
The number of locally generated EGP messages not sent to
this EGP peer due to resource limitations within an EGP
entity.
Access:
read-only.
Status:
mandatory.
the outgoing messages that didn't make it out to this peer because the EGP entity was short on resources ๐ญ
OBJECT:
-------
egpNeighInErrMsgs { egpNeighEntry 8 }
Syntax:
Counter
Definition:
The number of EGP-defined error messages received from
this EGP peer.
Access:
read-only.
Status:
mandatory.
these are the EGP-defined error messages that this peer sent to us ๐
OBJECT:
-------
egpNeighOutErrMsgs { egpNeighEntry 9 }
Syntax:
Counter
Definition:
The number of EGP-defined error messages sent to this EGP
peer.
Access:
read-only.
Status:
mandatory.
and the reverse ๐ the EGP-defined error messages we sent to this peer
OBJECT:
-------
egpNeighStateUps { egpNeighEntry 10 }
Syntax:
Counter
Definition:
The number of EGP state transitions to the UP state with
this EGP peer.
Access:
read-only.
Status:
mandatory.
this counts every time the relationship with this peer moved into the UP state โญ
OBJECT:
-------
egpNeighStateDowns { egpNeighEntry 11 }
Syntax:
Counter
Definition:
The number of EGP state transitions from the UP state to
any other state with this EGP peer.
Access:
read-only.
Status:
mandatory.
and this one counts the times it fell out of UP into any other state, so the drama is tracked too ๐
OBJECT:
-------
egpNeighIntervalHello { egpNeighEntry 12 }
Syntax:
INTEGER
Definition:
The interval between EGP Hello command retransmissions
(in hundredths of a second). This represents the t1
timer as defined in RFC 904.
Access:
read-only.
Status:
mandatory.
this is the gap between EGP Hello retransmissions, measured in hundredths of a second โฑ๏ธ it's the t1 timer from RFC 904 ๐
OBJECT:
-------
egpNeighIntervalPoll { egpNeighEntry 13 }
Syntax:
INTEGER
Definition:
The interval between EGP poll command retransmissions (in
hundredths of a second). This represents the t3 timer as
defined in RFC 904.
Access:
read-only.
Status:
mandatory.
same vibe but for polls ๐ฆ this gap is in hundredths of a second too, and it's the t3 timer from RFC 904
OBJECT:
-------
egpNeighMode { egpNeighEntry 14 }
Syntax:
INTEGER {
active(1),
passive(2)
}
Definition:
The polling mode of this EGP entity, either passive or
active.
Access:
read-only.
Status:
mandatory.
this is the polling mode of the EGP entity, and it's either active or passive, no in-between ๐ง
OBJECT:
-------
egpNeighEventTrigger { egpNeighEntry 15 }
Syntax:
INTEGER {
start(1),
stop(2)
}
Definition:
A control variable used to trigger operator-initiated
Start and Stop events. When read, this variable always
returns the most recent value that egpNeightEventTrigger
was set to. If it has not been set since the last
initialization of the network management subsystem on the
node, it returns a value of "stop".
Access:
read-write
Status:
mandatory.
this one is the control knob ๐๏ธ the operator uses it to trigger Start and Stop events. reading it always gives back the last value that was set. if nobody has set it since the network management subsystem was last initialized on the node, it returns "stop" ๐ (fun fact: the definition spells it egpNeightEventTrigger in one spot, and that's exactly how it's written in the original, so keep it as-is ๐ง)
5.8.2. Additional EGP variables ๐ธ
last but not least, there's one extra EGP variable that's just the AS number of this EGP entity itself ๐
OBJECT:
-------
egpAs { egp 6 }
Syntax:
INTEGER
Definition:
The autonomous system number of this EGP entity.
Access:
read-only.
Status:
mandatory.
5.9. The Transmission Group โจ
Okay so, every interface on a system sits on some kind of transmission media, and the matching piece of the Transmission group is mandatory for that system. No skipping it, bestie ๐ซถ
When Internet-standard definitions for managing transmission media get written, the transmission group is what gives those objects their prefix ๐
Usually these definitions start out in the experimental part of the MIB and hang out there until they're "proven" ๐งช Then, once they go through the Internet standardization process, they get promoted, and a new object identifier gets defined under the transmission group. The naming rule is:
type OBJECT IDENTIFIER ::= { transmission number }
Here, "type" is the symbolic value used for the media in the ifType column of the ifTable object, and "number" is the actual integer that goes with that symbol. It's giving organized ๐
5.10. The SNMP Group ๐ฆ
Okay, the SNMP group is mandatory for every system that runs an SNMP protocol entity, no exceptions ๐ Some of the objects below will be zero-valued in SNMP implementations that are optimized to do only the stuff a management agent or a management client needs. Efficient, but it means those counters will just sit at zero ๐
Let's go through the objects. Every one of them is read-only and mandatory, so I'm not going to repeat that every time ๐ Here's the exact stuff for each one:
snmpInPkts ๐ธ
OBJECT:
-------
snmpInPkts { snmp 1 }
Syntax:
Counter
Definition:
The total number of PDUs delivered to the SNMP entity
from the transport service.
Access:
read-only.
Status:
mandatory.
snmpOutPkts ๐ธ
OBJECT:
-------
snmpOutPkts { snmp 2 }
Syntax:
Counter
Definition:
The total number of SNMP PDUs which were passed from the
SNMP protocol entity to the transport service.
Access:
read-only.
Status:
mandatory.
snmpInBadVersions ๐
OBJECT:
-------
snmpInBadVersions { snmp 3 }
Syntax:
Counter
Definition:
The total number of syntactically correct SNMP PDUs which
were delivered to the SNMP protocol entity and were for
an unsupported SNMP version.
Access:
read-only.
Status:
mandatory.
snmpInBadCommunityNames ๐ง
OBJECT:
-------
snmpInBadCommunityNames { snmp 4 }
Syntax:
Counter
Definition:
The total number of SNMP PDUs delivered to the SNMP
protocol entity which used a SNMP community name not
known to said entity.
Access:
read-only.
Status:
mandatory.
snmpInBadCommunityUses ๐
OBJECT:
-------
snmpInBadCommunityUses { snmp 5 }
Syntax:
Counter
Definition:
The total number of SNMP PDUs delivered to the SNMP
protocol entity which represented an SNMP operation which
was not allowed by the SNMP community named in the PDU.
Access:
read-only.
Status:
mandatory.
snmpInASNParseErrs ๐
OBJECT:
-------
snmpInASNParseErrs { snmp 6 }
Syntax:
Counter
Definition:
The total number of ASN.1 parsing errors (either in
encoding or syntax) encountered by the SNMP protocol
entity when decoding received SNMP PDUs.
Access:
read-only.
Status:
mandatory.
snmpInBadTypes ๐
OBJECT:
-------
snmpInBadTypes { snmp 7 }
Syntax:
Counter
Definition:
The total number of SNMP PDUs delivered to the SNMP
protocol entity which had an unknown PDU type.
Access:
read-only.
Status:
mandatory.
snmpInTooBigs ๐
OBJECT:
-------
snmpInTooBigs { snmp 8 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were delivered to
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "tooBig."
Access:
read-only.
Status:
mandatory.
snmpInNoSuchNames ๐
OBJECT:
-------
snmpInNoSuchNames { snmp 9 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were delivered to
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "noSuchName."
Access:
read-only.
Status:
mandatory.
snmpInBadValues โญ
OBJECT:
-------
snmpInBadValues { snmp 10 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were delivered to
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "badValue."
Access:
read-only.
Status:
mandatory.
snmpInReadOnlys ๐ฅ
OBJECT:
-------
snmpInReadOnlys { snmp 11 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were delivered to
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "readOnly."
Access:
read-only.
Status:
mandatory.
snmpInGenErrs ๐ญ
OBJECT:
-------
snmpInGenErrs { snmp 12 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were delivered to
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "genErr."
Access:
read-only.
Status:
mandatory.
snmpInTotalReqVars ๐
OBJECT:
-------
snmpInTotalReqVars { snmp 13 }
Syntax:
Counter
Definition:
The total number of MIB objects which have been retrieved
successfully by the SNMP protocol entity as the result of
receiving valid SNMP Get-Request and Get-Next PDUs.
Access:
read-only.
Status:
mandatory.
snmpInTotalSetVars ๐ธ
OBJECT:
-------
snmpInTotalSetVars { snmp 14 }
Syntax:
Counter
Definition:
The total number of MIB objects which have been altered
successfully by the SNMP protocol entity as the result of
receiving valid SNMP Set-Request PDUs.
Access:
read-only.
Status:
mandatory.
snmpInGetRequests ๐ฆ
OBJECT:
-------
snmpInGetRequests { snmp 15 }
Syntax:
Counter
Definition:
The total number of SNMP Get-Request PDUs which have been
accepted and processed by the SNMP protocol entity.
Access:
read-only.
Status:
mandatory.
snmpInGetNexts ๐ง
OBJECT:
-------
snmpInGetNexts { snmp 16 }
Syntax:
Counter
Definition:
The total number of SNMP Get-Next PDUs which have been
accepted and processed by the SNMP protocol entity.
Access:
read-only.
Status:
mandatory.
snmpInSetRequests ๐
OBJECT:
-------
snmpInSetRequests { snmp 17 }
Syntax:
Counter
Definition:
The total number of SNMP Set-Request PDUs which have been
accepted and processed by the SNMP protocol entity.
Access:
read-only.
Status:
mandatory.
snmpInGetResponses ๐
OBJECT:
-------
snmpInGetResponses { snmp 18 }
Syntax:
Counter
Definition:
The total number of SNMP Get-Response PDUs which have
been accepted and processed by the SNMP protocol entity.
Access:
read-only.
Status:
mandatory.
snmpInTraps โจ
OBJECT:
-------
snmpInTraps { snmp 19 }
Syntax:
Counter
Definition:
The total number of SNMP Trap PDUs which have been
accepted and processed by the SNMP protocol entity.
Access:
read-only.
Status:
mandatory.
snmpOutTooBigs ๐
OBJECT:
-------
snmpOutTooBigs { snmp 20 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were generated by
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "tooBig."
Access:
read-only.
Status:
mandatory.
snmpOutNoSuchNames ๐ฅ
OBJECT:
-------
snmpOutNoSuchNames { snmp 21 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were generated by
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "noSuchName."
Access:
read-only.
Status:
mandatory.
snmpOutBadValues ๐
OBJECT:
-------
snmpOutBadValues { snmp 22 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were generated by
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "badValue."
Access:
read-only.
Status:
mandatory.
snmpOutReadOnlys ๐ซถ
OBJECT:
-------
snmpOutReadOnlys { snmp 23 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were generated by
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "readOnly."
Access:
read-only.
Status:
mandatory.
snmpOutGenErrs ๐
OBJECT:
-------
snmpOutGenErrs { snmp 24 }
Syntax:
Counter
Definition:
The total number valid SNMP PDUs which were generated by
the SNMP protocol entity and for which the value of the
"ErrorStatus" component is "genErr."
Access:
read-only.
Status:
mandatory.
snmpOutGetRequests ๐
OBJECT:
-------
snmpOutGetRequests { snmp 25 }
Syntax:
Counter
Definition:
The total number of SNMP Get-Request PDUs which have been
generated by the SNMP protocol entity.
Access:
read-only.
Status:
mandatory.
snmpOutGetNexts ๐
OBJECT:
-------
snmpOutGetNexts { snmp 26 }
Syntax:
Counter
Definition:
The total number of SNMP Get-Next PDUs which have been
generated by the SNMP protocol entity.
Access:
read-only.
Status:
mandatory.
snmpOutSetRequests ๐
OBJECT:
-------
snmpOutSetRequests { snmp 27 }
Syntax:
Counter
Okay bestie, picking up right where we left off ๐ The first one on the list is the total number of SNMP Set-Request PDUs that the SNMP protocol entity has generated. It's a Counter, it's read-only, and it's mandatory, so every device needs it. No cap ๐ซถ
OBJECT: snmpOutGetResponses { snmp 28 }
Syntax: Counter
This one counts every SNMP Get-Response PDU the protocol entity has generated. It's read-only and mandatory, obviously iconic ๐ธ
OBJECT: snmpOutTraps { snmp 29 }
Syntax: Counter
Here we're counting all the SNMP Trap PDUs the protocol entity has generated. Read-only and mandatory, the way it's giving consistency ๐ฅ
OBJECT: snmpEnableAuthTraps { snmp 30 }
Syntax:
INTEGER {
enabled(1),
disabled(2)
}
This one tells you whether the SNMP agent process is configured to generate authentication-failure traps. It's read-write (so you can actually flip it ๐ฆ) and mandatory.
6. Definitions ๐
Now for the real MIB module, the actual spec code, copy-paste ready ๐ญ Everything below is verbatim, so it's giving full accuracy.
RFC1158-MIB
DEFINITIONS ::= BEGIN
IMPORTS
mgmt, OBJECT-TYPE, NetworkAddress, IpAddress,
Counter, Gauge, TimeTicks
FROM RFC1155-SMI;
mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } -- MIB-II
-- (same prefix as MIB-I)
system OBJECT IDENTIFIER ::= { mib-2 1 }
interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
at OBJECT IDENTIFIER ::= { mib-2 3 }
ip OBJECT IDENTIFIER ::= { mib-2 4 }
icmp OBJECT IDENTIFIER ::= { mib-2 5 }
tcp OBJECT IDENTIFIER ::= { mib-2 6 }
udp OBJECT IDENTIFIER ::= { mib-2 7 }
egp OBJECT IDENTIFIER ::= { mib-2 8 }
-- cmot OBJECT IDENTIFIER ::= { mib-2 9 }
transmission OBJECT IDENTIFIER ::= { mib-2 10 }
snmp OBJECT IDENTIFIER ::= { mib-2 11 }
-- object types
-- the System group
sysDescr OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-only
STATUS mandatory
::= { system 1 }
sysObjectID OBJECT-TYPE
SYNTAX OBJECT IDENTIFIER
ACCESS read-only
STATUS mandatory
::= { system 2 }
sysUpTime OBJECT-TYPE
SYNTAX TimeTicks
ACCESS read-only
STATUS mandatory
::= { system 3 }
sysContact OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-write
STATUS mandatory
::= { system 4 }
sysName OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-write
STATUS mandatory
::= { system 5 }
sysLocation OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-only
STATUS mandatory
::= { system 6 }
sysServices OBJECT-TYPE
SYNTAX INTEGER (0..127)
ACCESS read-only
STATUS mandatory
::= { system 7 }
-- the Interfaces group
ifNumber OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { interfaces 1 }
-- the Interfaces table
ifTable OBJECT-TYPE
SYNTAX SEQUENCE OF IfEntry
ACCESS read-only
STATUS mandatory
::= { interfaces 2 }
ifEntry OBJECT-TYPE
SYNTAX IfEntry
ACCESS read-only
STATUS mandatory
::= { ifTable 1 }
IfEntry ::= SEQUENCE {
ifIndex
INTEGER,
ifDescr
DisplayString,
ifType
INTEGER,
ifMtu
INTEGER,
ifSpeed
Gauge,
ifPhysAddress
OCTET STRING,
ifAdminStatus
INTEGER,
ifOperStatus
INTEGER,
ifLastChange
TimeTicks,
ifInOctets
Counter,
ifInUcastPkts
Counter,
ifInNUcastPkts
Counter,
ifInDiscards
Counter,
ifInErrors
Counter,
ifInUnknownProtos
Counter,
ifOutOctets
Counter,
ifOutUcastPkts
Counter,
ifOutNUcastPkts
Counter,
ifOutDiscards
Counter,
ifOutErrors
Counter,
ifOutQLen
Gauge,
ifSpecific
OBJECT IDENTIFIER
}
ifIndex OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { ifEntry 1 }
ifDescr OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-only
STATUS mandatory
::= { ifEntry 2 }
ifType OBJECT-TYPE
SYNTAX INTEGER {
other(1), -- none of the
-- following
regular1822(2),
hdh1822(3),
ddn-x25(4),
rfc877-x25(5),
ethernet-csmacd(6),
iso88023-csmacd(7),
iso88024-tokenBus(8),
iso88025-tokenRing(9),
iso88026-man(10),
starLan(11),
proteon-10Mbit(12),
proteon-80Mbit(13),
hyperchannel(14),
fddi(15),
lapb(16),
sdlc(17),
t1-carrier(18),
cept(19), -- european
--equivalent of T-1
basicISDN(20),
primaryISDN(21),
-- proprietary
-- serial
propPointToPointSerial(22),
terminalServer-asyncPort(23),
softwareLoopback(24),
eon(25), -- CLNP over IP
ethernet-3Mbit(26),
nsip(27), -- XNS over IP
slip(28) -- generic SLIP
}
ACCESS read-only
STATUS mandatory
::= { ifEntry 3 }
ifMtu OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { ifEntry 4 }
ifSpeed OBJECT-TYPE
SYNTAX Gauge
ACCESS read-only
STATUS mandatory
::= { ifEntry 5 }
ifPhysAddress OBJECT-TYPE
SYNTAX OCTET STRING
ACCESS read-only
STATUS mandatory
::= { ifEntry 6 }
ifAdminStatus OBJECT-TYPE
SYNTAX INTEGER {
up(1), -- ready to pass packets
down(2),
testing(3) -- in some test mode
}
ACCESS read-write
STATUS mandatory
::= { ifEntry 7 }
ifOperStatus OBJECT-TYPE
SYNTAX INTEGER {
up(1), -- ready to pass packets
down(2),
testing(3) -- in some test mode
}
ACCESS read-only
STATUS mandatory
::= { ifEntry 8 }
ifLastChange OBJECT-TYPE
SYNTAX TimeTicks
ACCESS read-only
STATUS mandatory
::= { ifEntry 9 }
ifInOctets OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 10 }
ifInUcastPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 11 }
ifInNUcastPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 12 }
ifInDiscards OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 13 }
ifInErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 14 }
ifInUnknownProtos OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 15 }
ifOutOctets OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 16 }
ifOutUcastPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 17 }
okay bestie, the IP group is where the magic happens ๐ โจ these are the counters and tables that keep track of what IP is doing ๐ฆ
ifOutNUcastPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 18 }
ifOutDiscards OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 19 }
ifOutErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ifEntry 20 }
ifOutQLen OBJECT-TYPE
SYNTAX Gauge
ACCESS read-only
STATUS mandatory
::= { ifEntry 21 }
ifSpecific OBJECT-TYPE
SYNTAX OBJECT IDENTIFIER
ACCESS read-only
STATUS mandatory
::= { ifEntry 22 }
nullSpecific OBJECT IDENTIFIER ::= { 0 0 }
-- the Address Translation group (deprecated)
atTable OBJECT-TYPE
SYNTAX SEQUENCE OF AtEntry
ACCESS read-write
STATUS deprecated
::= { at 1 }
atEntry OBJECT-TYPE
SYNTAX AtEntry
ACCESS read-write
STATUS deprecated
::= { atTable 1 }
AtEntry ::= SEQUENCE {
atIfIndex
INTEGER,
atPhysAddress
OCTET STRING,
atNetAddress
NetworkAddress
}
atIfIndex OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS deprecated
::= { atEntry 1 }
atPhysAddress OBJECT-TYPE
SYNTAX OCTET STRING
ACCESS read-write
STATUS deprecated
::= { atEntry 2 }
atNetAddress OBJECT-TYPE
SYNTAX NetworkAddress
ACCESS read-write
STATUS deprecated
::= { atEntry 3 }
-- the IP group
ipForwarding OBJECT-TYPE
SYNTAX INTEGER {
gateway(1), -- entity forwards
-- datagrams
host(2) -- entity does NOT
-- forward datagrams
}
ACCESS read-write
STATUS mandatory
::= { ip 1 }
ipDefaultTTL OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ip 2 }
ipInReceives OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 3 }
ipInHdrErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 4 }
ipInAddrErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 5 }
ipForwDatagrams OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 6 }
ipInUnknownProtos OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 7 }
ipInDiscards OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 8 }
ipInDelivers OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 9 }
ipOutRequests OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 10 }
ipOutDiscards OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 11 }
ipOutNoRoutes OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 12 }
ipReasmTimeout OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { ip 13 }
ipReasmReqds OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 14 }
ipReasmOKs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 15 }
ipReasmFails OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 16 }
ipFragOKs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 17 }
ipFragFails OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 18 }
ipFragCreates OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { ip 19 }
-- the IP Interface table
ipAddrTable OBJECT-TYPE
SYNTAX SEQUENCE OF IpAddrEntry
ACCESS read-only
STATUS mandatory
::= { ip 20 }
ipAddrEntry OBJECT-TYPE
SYNTAX IpAddrEntry
ACCESS read-only
STATUS mandatory
::= { ipAddrTable 1 }
IpAddrEntry ::= SEQUENCE {
ipAdEntAddr
IpAddress,
ipAdEntIfIndex
INTEGER,
ipAdEntNetMask
IpAddress,
ipAdEntBcastAddr
INTEGER,
ipAdEntReasmMaxSize
INTEGER (0..65535)
}
ipAdEntAddr OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-only
STATUS mandatory
::= { ipAddrEntry 1 }
ipAdEntIfIndex OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { ipAddrEntry 2 }
ipAdEntNetMask OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-only
STATUS mandatory
::= { ipAddrEntry 3 }
ipAdEntBcastAddr OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { ipAddrEntry 4 }
ipAdEntReasmMaxSiz OBJECT-TYPE
SYNTAX INTEGER (0..65535)
ACCESS read-only
STATUS mandatory
::= { ipAddrEntry 5 }
-- the IP Routing table
ipRoutingTable OBJECT-TYPE
SYNTAX SEQUENCE OF IpRouteEntry
ACCESS read-write
STATUS mandatory
::= { ip 21 }
ipRouteEntry OBJECT-TYPE
SYNTAX IpRouteEntry
ACCESS read-write
STATUS mandatory
::= { ipRoutingTable 1 }
IpRouteEntry ::= SEQUENCE {
ipRouteDest
IpAddress,
ipRouteIfIndex
INTEGER,
ipRouteMetric1
INTEGER,
ipRouteMetric2
INTEGER,
ipRouteMetric3
INTEGER,
ipRouteMetric4
INTEGER,
ipRouteNextHop
IpAddress,
ipRouteType
INTEGER,
ipRouteProto
INTEGER,
ipRouteAge
INTEGER,
ipRouteMask
IpAddress
}
ipRouteDest OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 1 }
ipRouteIfIndex OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 2 }
ipRouteMetric1 OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 3 }
ipRouteMetric2 OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 4 }
ipRouteMetric3 OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 5 }
ipRouteMetric4 OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 6 }
ipRouteNextHop OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 7 }
ipRouteType OBJECT-TYPE
SYNTAX INTEGER {
other(1), -- none of the following
invalid(2), -- an invalidated route
-- route to directly
direct(3), -- connected
-- (sub-)network
that's where we're cutting for now ๐ซถ the ipRouteType enum is still cooking, so stay tuned ๐ธ
Okay so this is where ipRouteProto gets its whole personality ๐ It's basically the "who told this route to show up" tag, like, did I set it by hand, did a management tool add it, did ICMP Redirect slide in, or did a gateway routing protocol bring it in? ๐ฆ
-- route to a non-local
remote(4) -- host/network/
-- sub-network
}
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 8 }
ipRouteProto OBJECT-TYPE
SYNTAX INTEGER {
other(1), -- none of the following
-- non-protocol
-- information
-- e.g., manually
local(2), -- configured entries
-- set via a network
netmgmt(3), -- management protocol
-- obtained via ICMP,
icmp(4), -- e.g., Redirect
-- the following are
-- gateway routing
-- protocols
egp(5),
ggp(6),
hello(7),
rip(8),
is-is(9),
es-is(10),
ciscoIgrp(11),
bbnSpfIgp(12),
ospf(13)
bgp(14)
}
ACCESS read-only
STATUS mandatory
::= { ipRouteEntry 9 }
ipRouteAge OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 10 }
ipRouteMask OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-write
STATUS mandatory
::= { ipRouteEntry 11 }
Next up is the IP Address Translation tables ๐ These are the mappings between IP addresses and physical addresses, and they're kinda the ultimate "who's who" of your local network ๐ธ
-- the IP Address Translation tables
ipNetToMediaTable OBJECT-TYPE
SYNTAX SEQUENCE OF IpNetToMediaEntry
ACCESS read-write
STATUS mandatory
::= { ip 22 }
ipNetToMediaEntry OBJECT-TYPE
SYNTAX IpNetToMediaEntry
ACCESS read-write
STATUS mandatory
::= { ipNetToMediaTable 1 }
IpNetToMediaEntry ::= SEQUENCE {
ipNetToMediaIfIndex
INTEGER,
ipNetToMediaPhysAddress
OCTET STRING,
ipNetToMediaNetAddress
IpAddress,
ipNetoToMediaType
INTEGER
}
ipNetToMediaIfIndex OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-write
STATUS mandatory
::= { ipNetToMediaEntry 1 }
ipNetToMediaPhysAddress OBJECT-TYPE
SYNTAX OCTET STRING
ACCESS read-write
STATUS mandatory
::= { ipNetToMediaEntry 2 }
ipNetToMediaNetAddress OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-write
STATUS mandatory
::= { ipNetToMediaEntry 3 }
ipNetToMediaType OBJECT-TYPE
SYNTAX INTEGER {
other(1), -- none of the following
invalid(2), -- an invalidated mapping
dynamic(3), -- connected (sub-)network
static(4)
}
ACCESS read-write
STATUS mandatory
::= { ipNetToMediaEntry 4 }
Now the ICMP group ๐ง It's a whole stack of read-only Counter objects, one for each ICMP message type, split into "in" (received) and "out" (sent) ๐ฌ The numbers after icmp are the sub-identifiers, running 1 through 26, so it's super tidy and totally iconic ๐
-- the ICMP group
icmpInMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 1 }
icmpInErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 2 }
icmpInDestUnreachs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 3 }
icmpInTimeExcds OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 4 }
icmpInParmProbs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 5 }
icmpInSrcQuenchs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 6 }
icmpInRedirects OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 7 }
icmpInEchos OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 8 }
icmpInEchoReps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 9 }
icmpInTimestamps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 10 }
icmpInTimestampReps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 11 }
icmpInAddrMasks OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 12 }
icmpInAddrMaskReps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 13 }
icmpOutMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 14 }
icmpOutErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 15 }
icmpOutDestUnreachs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 16 }
icmpOutTimeExcds OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 17 }
icmpOutParmProbs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 18 }
icmpOutSrcQuenchs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 19 }
icmpOutRedirects OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 20 }
icmpOutEchos OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 21 }
icmpOutEchoReps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 22 }
icmpOutTimestamps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 23 }
icmpOutTimestampReps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 24 }
icmpOutAddrMasks OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 25 }
icmpOutAddrMaskReps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { icmp 26 }
And now the TCP group ๐ This is where the TCP retransmission timeout settings live, plus the connection counters, so it's giving very "keeping score" energy ๐โจ
-- the TCP group
tcpRtoAlgorithm OBJECT-TYPE
SYNTAX INTEGER {
other(1), -- none of the following
constant(2), -- a constant rto
rsre(3), -- MIL-STD-1778,
-- Appendix B
vanj(4) -- Van Jacobson's
-- algorithm
}
ACCESS read-only
STATUS mandatory
::= { tcp 1 }
tcpRtoMin OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { tcp 2 }
tcpRtoMax OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { tcp 3 }
tcpMaxConn OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
::= { tcp 4 }
tcpActiveOpens OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { tcp 5 }
tcpPassiveOpens OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { tcp 6 }
tcpAttemptFails OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { tcp 7 }
tcpEstabResets OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { tcp 8 }
tcpCurrEstab OBJECT-TYPE
SYNTAX Gauge
ACCESS read-only
STATUS mandatory
::= { tcp 9 }
Ngl the tcpRtoAlgorithm one is my favourite, because it literally names the options: constant(2), rsre(3) from MIL-STD-1778 Appendix B, and vanj(4) for Van Jacobson's algorithm ๐๐ฅ
tcpInSegs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 10 }
tcpOutSegs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 11 }
tcpRetransSegs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 12 }
-- the TCP connections table
tcpConnTable OBJECT-TYPE SYNTAX SEQUENCE OF TcpConnEntry ACCESS read-only STATUS mandatory ::= { tcp 13 }
tcpConnEntry OBJECT-TYPE SYNTAX TcpConnEntry ACCESS read-only STATUS mandatory ::= { tcpConnTable 1 }
TcpConnEntry ::= SEQUENCE { tcpConnState INTEGER, tcpConnLocalAddress IpAddress, tcpConnLocalPort INTEGER (0..65535), tcpConnRemAddress IpAddress, tcpConnRemPort INTEGER (0..65535) }
tcpConnState OBJECT-TYPE SYNTAX INTEGER { closed(1), listen(2), synSent(3), synReceived(4), established(5), finWait1(6), finWait2(7), closeWait(8), lastAck(9), closing(10), timeWait(11) } ACCESS read-only STATUS mandatory ::= { tcpConnEntry 1 }
tcpConnLocalAddress OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { tcpConnEntry 2 }
tcpConnLocalPort OBJECT-TYPE SYNTAX INTEGER (0..65535) ACCESS read-only STATUS mandatory ::= { tcpConnEntry 3 }
tcpConnRemAddress OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { tcpConnEntry 4 }
tcpConnRemPort OBJECT-TYPE SYNTAX INTEGER (0..65535) ACCESS read-only STATUS mandatory ::= { tcpConnEntry 5 }
-- additional TCP variables
tcpInErrs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 14 }
tcpOutRsts OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { tcp 15 }
-- the UDP group
udpInDatagrams OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 1 }
udpNoPorts OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 2 }
udpInErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 3 }
udpOutDatagrams OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { udp 4 }
-- the UDP listener table
udpTable OBJECT-TYPE SYNTAX SEQUENCE OF UdpEntry ACCESS read-only STATUS mandatory ::= { udp 5 }
udpEntry OBJECT-TYPE SYNTAX UdpEntry ACCESS read-only STATUS mandatory ::= { udpTable 1 }
UdpEntry ::= SEQUENCE { udpLocalAddress IpAddress, udpLocalPort INTEGER (0..65535) }
udpLocalAddress OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { udpEntry 1 }
udpLocalPort OBJECT-TYPE SYNTAX INTEGER (0..65535) ACCESS read-only STATUS mandatory ::= { udpEntry 2 }
-- the EGP group
egpInMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 1 }
egpInErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 2 }
egpOutMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 3 }
egpOutErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egp 4 }
-- the EGP Neighbor table
egpNeighTable OBJECT-TYPE SYNTAX SEQUENCE OF EgpNeighEntry ACCESS read-only STATUS mandatory ::= { egp 5 }
egpNeighEntry OBJECT-TYPE SYNTAX EgpNeighEntry ACCESS read-only STATUS mandatory ::= { egpNeighTable 1 }
EgpNeighEntry ::= SEQUENCE { egpNeighState INTEGER, egpNeighAddr IpAddress, egpNeighAs INTEGER, egpNeighInMsgs
Counter, egpNeighInErrs Counter, egpNeighOutMsgs Counter, egpNeighOutErrs Counter, egpNeighInErrMsgs Counter, egpNeighOutErrMsgs Counter, egpNeighStateUps Counter, egpNeighStateDowns Counter, egpNeighIntervalHello INTEGER, egpNeighIntervalPoll INTEGER, egpNeighMode INTEGER, egpNeighEventTrigger INTEGER }
egpNeighState OBJECT-TYPE SYNTAX INTEGER { idle(1), acquisition(2), down(3), up(4), cease(5) } ACCESS read-only STATUS mandatory ::= { egpNeighEntry 1 }
egpNeighAddr OBJECT-TYPE SYNTAX IpAddress ACCESS read-only STATUS mandatory ::= { egpNeighEntry 2 }
egpNeighAs OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egpNeighEntry 3 }
egpNeighInMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 4 }
egpNeighInErrs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 5 }
egpNeighOutMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 6 }
egpNeighOutErrs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 7 }
egpNeighInErrMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 8 }
egpNeighOutErrMsgs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 9 }
egpNeighStateUps OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 10 }
egpNeighStateDowns OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory ::= { egpNeighEntry 11 }
egpNeighIntervalHello OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egpNeighEntry 12 }
egpNeighIntervalPoll OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egpNeighEntry 13 }
egpNeighMode OBJECT-TYPE SYNTAX INTEGER { active(1), passive(2) } ACCESS read-only STATUS mandatory ::= { egpNeighEntry 14 }
egpNeighEventTrigger OBJECT-TYPE SYNTAX INTEGER { start(1), stop(2) } ACCESS read-write STATUS mandatory ::= { egpNeighEntry 15 }
-- additional EGP variables
egpAs OBJECT-TYPE SYNTAX INTEGER ACCESS read-only STATUS mandatory ::= { egp 6 }
-- the Transmission group (empty at present)
-- the SNMP group
snmpInPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 1 }
snmpOutPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 2 }
snmpInBadVersions OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 3 }
snmpInBadCommunityNames OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 4 }
snmpInBadCommunityUses OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 5 }
snmpInASNParseErrs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 6 }
snmpInBadTypes OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 7 }
snmpInTooBigs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 8 }
snmpInNoSuchNames OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 9 }
snmpInBadValues OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 10 }
snmpInReadOnlys OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 11 }
snmpInGenErrs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 12 }
snmpInTotalReqVars OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 13 }
snmpInTotalSetVars OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 14 }
snmpInGetRequests OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 15 }
snmpInGetNexts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 16 }
snmpInSetRequests OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 17 }
snmpInGetResponses OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 18 }
snmpInTraps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 19 }
snmpOutTooBigs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 20 }
snmpOutNoSuchNames OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 21 }
snmpOutBadValues OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 22 }
snmpOutReadOnlys OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 23 }
snmpOutGenErrs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 24 }
snmpOutGetRequests OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 25 }
snmpOutGetNexts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 26 }
snmpOutSetRequests OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 27 }
snmpOutGetResponses OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 28 }
snmpOutTraps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
::= { snmp 29 }
snmpEnableAuthTraps OBJECT-TYPE
SYNTAX INTEGER {
enabled(1),
disabled(2)
}
ACCESS read-write
STATUS mandatory
::= { snmp 30 }
END
7. Identification of OBJECT instances for use with the SNMP โจ
okay so, every object type in the MIB gets its name spelled out explicitly ๐ either in the Internet-standard MIB itself or in other documents that follow the SMI naming conventions. The SMI also says that conformant management protocols have to come with mechanisms for pinpointing individual instances of those object types for one particular network element. Bestie, that's the whole point of this section ๐ง
Each instance of any object type in the MIB gets identified in SNMP operations by a unique name called its "variable name." ๐ Generally, the name of an SNMP variable is an OBJECT IDENTIFIER shaped like x.y. Here, x is the name of a non-aggregate object type defined in the MIB, and y is an OBJECT IDENTIFIER fragment that, in a way specific to that object type, picks out the instance you want ๐ฆ
This naming strategy is giving the fullest use of the SNMP get-next operator ๐ญ because related variables get names that sit right next to each other in the lexicographical ordering of all variable names known in the MIB. Iconic design, no cap.
The type-specific naming for instances is spelled out below for a bunch of object type classes ๐ธ Any instance of an object type where none of these naming conventions apply gets named by an OBJECT IDENTIFIER of the form x.0, where x is the name of that object type in the MIB definition.
Let's do an example so it clicks ๐ Say you want to identify an instance of the variable sysDescr. Its object class is:
iso org dod internet mgmt mib system sysDescr
1 3 6 1 2 1 1 1
So the object type, x, is 1.3.6.1.2.1.1.1, and we tack on an instance sub-identifier of 0. That means 1.3.6.1.2.1.1.1.0 identifies the one and only instance of sysDescr. Periodt ๐
7.1. ifTable Object Type Names
okay bestie, the name of a subnetwork interface, s, is just the OBJECT IDENTIFIER value i, where i is the value of that instance of the ifIndex object type linked to s ๐ Now, for every object type t whose defined name n starts with the prefix ifEntry, an instance i of t is named n.s, where s is the name of the subnetwork interface that i is giving info about. It's so organized, I'm obsessed ๐ญ
Example time ๐ Want the instance of ifType tied to interface 2? Then ifType.2 is the one you're looking for โจ
7.2. atTable Object Type Names
The name of an address translation entry, x, is an OBJECT IDENTIFIER of the form s.1.a.b.c.d. Here s is the value of that instance of the atIfIndex object type linked to x, the subidentifier 1 signifies the translation of an IP protocol address, and a.b.c.d is the IP address value (the familiar "dot" notation) of that instance of the atNetAddress object type linked to x ๐ฆ
For each object type t whose defined name n has the prefix atEntry, an instance i of t is named n.y, where y is the name of the address translation entry that i is telling you about. Lowkey so clean ๐
Here's the example ๐
Imagine you want the physical address of an entry in the address translation table (ARP cache) for IP address 89.1.1.42 on interface 3. Then atPhysAddress.3.1.89.1.1.42 is the desired instance โจ
7.3. ipAddrTable Object Type Names
The name of an IP-addressable network element, x, is the OBJECT IDENTIFIER of the form a.b.c.d, where a.b.c.d is the value (in the familiar "dot" notation) of that instance of the ipAdEntAddr object type linked to x ๐ซถ
For each object type t whose defined name n has the prefix ipAddrEntry, an instance i of t is named by an OBJECT IDENTIFIER of the form n.y, where y is the name of the IP-addressable network element that i is describing ๐ธ
Example: say you want the network mask of an entry in the IP interface table for IP address 89.1.1.42. Then ipAdEntNetMask.89.1.1.42 is the desired instance ๐
Here's where it gets spicy ๐ At the option of the agent, multiple entries for the same IP address may be visible. To make that happen, the agent is required to return a single entry for an IP address x of the form n.y, but it may also return info about other entries for that same IP address using the form n.y.z, where z is an implementation-dependent small, non-negative integer. It is strongly recommended that the value of z correspond to the value of ipAddrIfIndex for that entry. Bestie, that last bit is a total main character move ๐๐
Quick aside: the agent MUST NOT... wait, that's not in the original, so I'm not adding it. Just vibe with the n.y.z form and the ipAddrIfIndex hint โจ
7.4. ipRoutingTable Object Type Names ๐ฃ๏ธ
okay so the name of an IP route, x, is an OBJECT IDENTIFIER shaped like a.b.c.d. The a.b.c.d part is just the destination address written in that familiar dot notation, taken from the ipRouteDest instance tied to that route ๐
Every object type whose defined name starts with ipRoutingEntry gets an instance named n.y, where n is the object's name and y is the name of the IP route it's describing โจ
For example, say you want the next hop for the routing table entry aimed at 89.1.1.42. You'd look up ipRouteNextHop.89.1.1.42 and that's your instance ๐
Now the spicy bit ๐ถ๏ธ The agent gets to choose whether multiple routes to the same destination are visible. If it does, it still has to return a single entry for an IP route x of the form n.y, but it may also return info about the other routes to that destination using the form n.y.z, where z is an implementation-dependendent small, non-negative integer. Multiple routes, one destination, very layered ๐ง
7.5. ipNetToMediaTable Object Type Names ๐บ๏ธ
A cached IP address, x, is named by an OBJECT IDENTIFIER shaped like s.a.b.c.d. Here, s is the value of that instance of the ipNetToMediaIfIndex object type linked to the entry, and a.b.c.d is the ipNetToMediaNetAddress value in dot notation ๐
Each object type whose defined name starts with ipNetToMediaEntry gets an instance named n.y, where y is the cached IP address that instance is about ๐ฆ
Example time: say you want the media address for the address translation entry with IP 192.52.180.1 on interface 3. You'd use ipNetToMediaPhysAddress.3.192.52.180.1 and boom, you found it ๐
7.6. tcpConnTable Object Type Names ๐
This one is a whole vibe ๐ญ The name of a TCP connection, x, is an OBJECT IDENTIFIER shaped like a.b.c.d.e.f.g.h.i.j, and every piece is pulled from a different field:
a.b.c.dis thetcpConnLocalAddressvalue, in dot notation.f.g.h.iis thetcpConnRemoteAddressvalue, also in dot notation.eis thetcpConnLocalPortvalue.jis thetcpConnRemotePortvalue.
Every object type whose defined name starts with tcpConnEntry gets an instance named n.y, where y is the TCP connection that instance is about ๐ธ
Here's the example: a connection with local address 89.1.1.42 on TCP port 21 and remote address 10.0.0.51 on TCP port 2059. To check its state, you'd grab tcpConnState.89.1.1.42.21.10.0.0.51.2059 โจ Ten numbers in one name, and honestly? Iconic ๐
7.7. udpTable Object Type Names ๐ง
The name of a UDP listener, x, is an OBJECT IDENTIFIER shaped like a.b.c.d.e. The a.b.c.d part is the udpLocalAddress value in dot notation, and e is the udpLocalPort value ๐ฃ
Object types whose defined name starts with udpEntry get instances named n.y, where y is the UDP listener that instance describes ๐
Say you wanted to know whether a UDP listener was running at local address 89.1.1.42 on UDP port 21. A successful retrieval of either udpLocalAddress.89.1.1.42.21 or udpLocalPort.89.1.1.42.21 would tell you it's there ๐
7.8. egpNeighTable Object Type Names ๐ค
The name of an EGP neighbor, x, is an OBJECT IDENTIFIER shaped like a.b.c.d. That's the egpNeighAddr value in dot notation ๐ซถ
Object types whose defined name starts with egpNeighEntry get instances named n.y, where y is the EGP neighbor that instance is about ๐
For example, if you want the neighbor state for IP address 89.1.1.42, you'd use egpNeighState.89.1.1.42 and you're set ๐ฆ
8. Acknowledgements ๐
This document was produced by the SNMP Working Group, and the squad is huge ๐ฅน
Karl Auerbach, Epilogue Technology
David Bridgham, Epilogue Technology
Brian Brown, Synoptics
John Burress, Wellfleet
Jeffrey D. Case, University of Tennessee at Knoxville
James R. Davin, MIT-LCS
Mark S. Fedor, PSI, Inc.
Stan Froyd, ACC
Satish Joshi, Synoptics
Ken Key, University of Tennessee at Knoxville
Gary Malkin, Proteon
Randy Mayhew, University of Tennessee at Knoxville
Keith McCloghrie, Hughes LAN Systems
Marshall T. Rose, PSI, Inc. (chair)
Greg Satz, cisco
Martin Lee Schoffstall, PSI, Inc.
Bob Stewart, Xyplex
Geoff Thompson, Synoptics
Bill Versteeg, Network Research Corporation
Wengyik Yeong, PSI, Inc.
On top of that, the comments of the following individuals were also acknowledged (the original has a typo here, "acknolwedged", and yes, I'm keeping the vibe but not judging it ๐):
Craig A. Finseth, Minnesota Supercomputer Center, Inc.
Jeffrey C. Honig, Cornell University Theory Center
Philip R. Karn, Bellcore
David Waitzman, BBN
9. References ๐
Every single citation, stacked up like a reading list ๐งพ
[1] Cerf, V., "IAB Recommendations for the Development of Internet
Network Management Standards", RFC 1052, IAB, April 1988.
[2] Rose, M., and K. McCloghrie, "Structure and Identification of
Management Information for TCP/IP-based internets", RFC 1065,
TWG, August 1988.
[3] McCloghrie K., and M. Rose,"Management Information Base for
Network Management of TCP/IP-based internets", RFC 1066, TWG,
August 1988.
[4] Cerf, V., "Report of the Second Ad Hoc Network Management Review
Group", RFC 1109, IAB, August 1989.
[5] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "A Simple
Network Management Protocol (SNMP)", RFC 1098, University of
Tennessee at Knoxville, NYSERNet, Inc., Rensselaer Polytechnic
Institute, MIT Laboratory for Computer Science, April 1989.
[6] Warrier, U., and L. Besaw, "Common Management Information
Services and Protocol over TCP/IP (CMOT)", RFC 1095, Unisys
Corporation, Hewlett-Packard, April 1989.
[7] Postel, J., "Telnet Protocol Specification", RFC 854,
USC/Information Sciences Institute, May 1983.
[8] Satz, G., "Experimental MIB Objects for the CLNP", Internet
Working Group Request for Comments draft. Network Information
Center, SRI International, Menlo Park, California, (in
preparation).
[9] Information processing systems - Open Systems Interconnection,
"Specification of Abstract Syntax Notation One (ASN.1)",
International Organization for Standardization, International
Standard 8824, December 1987.
[10] Information processing systems - Open Systems Interconnection,
"Specification of Basic Encoding Rules for Abstract Notation One
(ASN.1)", International Organization for Standardization.
International Standard 8825, December 1987.
[11] Jacobson, V., "Congestion Avoidance and Control", SIGCOMM 1988,
Stanford, California.
[12] Hagens, R., Hall, N., and M. Rose, "Use of the Internet as a
subnetwork for experimentation with the OSI network layer",
February, 1989.
[13] Rose, M., and K. McCloghrie, "Structure and Identification of
Management Information for TCP/IP-based Internets", RFC 1155,
Performance Systems International and Hughes LAN Systems, May
1990.
[14] Case, J., Fedor, M., Schoffstall, M., and J. Davin, The Simple
Network Management Protocol", RFC 1157, University of Tennessee
at Knoxville, Performance Systems International, Performance
Systems International, and the MIT Laboratory for Computer
Science, May 1990.
10. Security Considerations ๐จ
Plot twist: security issues are not discussed in this memo. ๐ Read that again, bestie. Implementers should take this seriously and look for guidance elsewhere before deploying anything. This is not the place to get relaxed ๐ญ๐ฅ
11. Author's Address ๐ฎ
Marshall T. Rose
PSI, Inc.
PSI California Office
P.O. Box 391776
Mountain View, CA 94039
Phone: (415) 961-3380
Email: mrose@PSI.COM
And that's the whole RFC, bestie ๐โจ Thanks for reading all the way to the end ๐ซถ๐
๐ฆ where this page comes from
- ietf: rfc1158 1990-05
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms