RFC1213-MIB(7)
๐ NAME ๐
Okay so real talk: this page is RFC1213-MIB(7), and it lives in the MIB manual section โ that's the header situation, folded in all cute so you don't have to squint at it. And what is it? It's the Erlang/OTP MIB module for RFC-1213. That's the whole name, bestie, no cap. โจ
๐ฆ DESCRIPTION ๐ฆ
Alright so grab your iced coffee ๐, because this section is just... the actual MIB module, pasted in all its ASN.1 glory, and we are going to walk through it together. It's giving "spec document but make it a group chat." ๐
๐ธ the preamble ๐ธ
It starts with the module header and the IMPORTS bit โ classic opening move, setting up where all the types come from. mgmt, NetworkAddress, IpAddress, Counter, Gauge, and TimeTicks are all pulled in FROM RFC1155-SMI, and OBJECT-TYPE comes FROM RFC-1212. The comments spell out the receipts: this module uses the extended OBJECT-TYPE macro as defined in [14], and MIB-II shares the same prefix as MIB-I. Then mib-2 gets its object identifier under mgmt. ๐
RFC1213-MIB DEFINITIONS ::= BEGIN
IMPORTS
mgmt, NetworkAddress, IpAddress, Counter, Gauge,
TimeTicks
FROM RFC1155-SMI
OBJECT-TYPE
FROM RFC-1212;
-- This MIB module uses the extended OBJECT-TYPE macro as
-- defined in [14];
-- MIB-II (same prefix as MIB-I)
mib-2 OBJECT IDENTIFIER ::= { mgmt 1 }
๐ textual conventions ๐
Two custom types, and honestly they're iconic in the most low-key way. DisplayString is an OCTET STRING used to model textual info taken from the NVT ASCII character set, and by convention objects with this syntax are declared as having SIZE (0..255). Then PhysAddress โ also an OCTET STRING โ models media addresses; for lots of media types it's a binary representation, so, for example, an ethernet address would be a string of 6 octets. ๐ฆ
-- textual conventions
DisplayString ::=
OCTET STRING
-- This data type is used to model textual information taken
-- from the NVT ASCII character set. By convention, objects
-- with this syntax are declared as having
--
-- SIZE (0..255)
PhysAddress ::=
OCTET STRING
-- This data type is used to model media addresses. For many
-- types of media, this will be in a binary representation.
-- For example, an ethernet address would be represented as
-- a string of 6 octets.
๐ groups in MIB-II ๐
Here's the group lineup โ every one of these gets an object identifier under mib-2, numbered 1 through 11. Note the vibe: cmot is commented out and the comment literally says historical (some say hysterical) โ the RFC said it, not me. ๐ transmission sits at 10, because 9 is the ghost.
-- groups in 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 }
-- historical (some say hysterical)
-- cmot OBJECT IDENTIFIER ::= { mib-2 9 }
transmission OBJECT IDENTIFIER ::= { mib-2 10 }
snmp OBJECT IDENTIFIER ::= { mib-2 11 }
๐ฅ the System group ๐ฅ
Heads up bestie, this part is mandatory: implementation of the System group is mandatory for all systems. And the caveat โ if an agent isn't configured to have a value for any of these variables, a string of length 0 is returned. Not an error, not a crash, just a cute little empty string. ๐ญ
So let's meet the seven of them:
sysDescrโ aDisplayString (SIZE (0..255)),read-only,mandatoryโ the textual description of the entity. It should include the full name and version identification of the system's hardware type, software operating-system, and networking software. And it is mandatory that it only contain printable ASCII characters.sysObjectIDโOBJECT IDENTIFIER,read-only,mandatoryโ the vendor's authoritative identification of the network management subsystem in the entity. Allocated within the SMI enterprises subtree1.3.6.1.4.1so there's an easy, unambiguous way to figure outwhat kind of boxis being managed. The example: if vendorFlintstones, Inc.was assigned the subtree1.3.6.1.4.1.4242, it could assign1.3.6.1.4.1.4242.1.1to itsFred Router. Obsessed. ๐ญsysUpTimeโTimeTicks,read-only,mandatoryโ the time in hundredths of a second since the network management portion of the system was last re-initialized.sysContactโDisplayString (SIZE (0..255)),read-write,mandatoryโ who to contact for this managed node, plus how to contact them.sysNameโDisplayString (SIZE (0..255)),read-write,mandatoryโ an administratively-assigned name; by convention the node's fully-qualified domain name.sysLocationโDisplayString (SIZE (0..255)),read-write,mandatoryโ the physical location, e.g.telephone closet, 3rd floor.sysServicesโINTEGER (0..127),read-only,mandatoryโ the set of services this entity primarily offers. The value is a sum: it starts at zero, and then for each layerLin the range 1 through 7 that this node performs transactions for,2raised to(L - 1)gets added. A primarily routing node would be4(2^(3-1)); a host offering application services would be72(2^(4-1) + 2^(7-1)). Layers5and6may also be counted for systems including OSI protocols. The layer chart is right there in the definition below โ1physical (e.g., repeaters),2datalink/subnetwork (e.g., bridges),3internet (e.g., IP gateways),4end-to-end (e.g., IP hosts),7applications (e.g., mail relays). Math but make it slay. ๐
-- the System group
-- Implementation of the System group is mandatory for all
-- systems. If an agent is not configured to have a value
-- for any of these variables, a string of length 0 is
-- returned.
sysDescr OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-only
STATUS mandatory
DESCRIPTION
"A textual description of the entity. This value
should include the full name and version
identification of the system's hardware type,
software operating-system, and networking
software. It is mandatory that this only contain
printable ASCII characters."
::= { system 1 }
sysObjectID OBJECT-TYPE
SYNTAX OBJECT IDENTIFIER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The vendor's authoritative identification of the
network management subsystem contained in the
entity. This value is allocated within the SMI
enterprises subtree (1.3.6.1.4.1) and provides an
easy and unambiguous means for determining `what
kind of box' is being managed. For example, if
vendor `Flintstones, Inc.' was assigned the
subtree 1.3.6.1.4.1.4242, it could assign the
identifier 1.3.6.1.4.1.4242.1.1 to its `Fred
Router'."
::= { system 2 }
sysUpTime OBJECT-TYPE
SYNTAX TimeTicks
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The time (in hundredths of a second) since the
network management portion of the system was last
re-initialized."
::= { system 3 }
sysContact OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-write
STATUS mandatory
DESCRIPTION
"The textual identification of the contact person
for this managed node, together with information
on how to contact this person."
::= { system 4 }
sysName OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-write
STATUS mandatory
DESCRIPTION
"An administratively-assigned name for this
managed node. By convention, this is the node's
fully-qualified domain name."
::= { system 5 }
sysLocation OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
ACCESS read-write
STATUS mandatory
DESCRIPTION
"The physical location of this node (e.g.,
`telephone closet, 3rd floor')."
::= { system 6 }
sysServices OBJECT-TYPE
SYNTAX INTEGER (0..127)
ACCESS read-only
STATUS mandatory
DESCRIPTION
"A value which indicates the set of services that
this entity primarily offers.
The value is a sum. This sum initially takes the
value zero, Then, for each layer, L, in the range
1 through 7, that this node performs transactions
for, 2 raised to (L - 1) is added to the sum. For
example, a node which performs primarily routing
functions would have a value of 4 (2^(3-1)). In
contrast, a node which is a host offering
application services would have a value of 72
(2^(4-1) + 2^(7-1)). Note that in the context of
the Internet suite of protocols, values should be
calculated accordingly:
layer functionality
1 physical (e.g., repeaters)
2 datalink/subnetwork (e.g., bridges)
3 internet (e.g., IP gateways)
4 end-to-end (e.g., IP hosts)
7 applications (e.g., mail relays)
For systems including OSI protocols, layers 5 and
6 may also be counted."
::= { system 7 }
๐ฆ the Interfaces group ๐ฆ
Also mandatory for all systems โ no skipping, bestie. ๐ โโ๏ธ Same drill as before:
ifNumberโINTEGER,read-only,mandatoryโ the number of network interfaces present on this system, regardless of their current state.ifTableโSEQUENCE OF IfEntry,not-accessible,mandatoryโ a list of interface entries; the number of entries is given by the value ofifNumber.ifEntryโIfEntry,not-accessible,mandatory, withINDEX { ifIndex }โ one interface entry containing objects at the subnetwork layer and below for a particular interface.ifIndexโINTEGER,read-only,mandatoryโ a unique value for each interface, ranging between1and the value ofifNumber. Its 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. Consistency queen ๐
Oh and โ important terminology check, the comments call it out: each interface is thought of as being attached to a subnetwork, and do not confuse that with subnet, which refers to an addressing partitioning scheme used in the Internet suite of protocols. They are not the same word, do not @ me. ๐
Then there's the IfEntry SEQUENCE โ the full cast list of twenty-two columns, from ifIndex all the way down to ifSpecific, which is an OBJECT IDENTIFIER. Whole squad's there. ๐
-- the Interfaces group
-- Implementation of the Interfaces group is mandatory for
-- all systems.
ifNumber OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of network interfaces (regardless of
their current state) present on this system."
::= { interfaces 1 }
-- the Interfaces table
-- The Interfaces table contains information on the entity's
-- interfaces. Each interface is thought of as being
-- attached to a `subnetwork'. Note that this term should
-- not be confused with `subnet' which refers to an
-- addressing partitioning scheme used in the Internet suite
-- of protocols.
ifTable OBJECT-TYPE
SYNTAX SEQUENCE OF IfEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"A list of interface entries. The number of
entries is given by the value of ifNumber."
::= { interfaces 2 }
ifEntry OBJECT-TYPE
SYNTAX IfEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"An interface entry containing objects at the
subnetwork layer and below for a particular
interface."
INDEX { ifIndex }
::= { ifTable 1 }
IfEntry ::=
SEQUENCE {
ifIndex
INTEGER,
ifDescr
DisplayString,
ifType
INTEGER,
ifMtu
INTEGER,
ifSpeed
Gauge,
ifPhysAddress
PhysAddress,
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
DESCRIPTION
"A unique value for each interface. Its value
ranges between 1 and the value of ifNumber. The
value for each interface must remain constant at
least from one re-initialization of the entity's
network management system to the next re-
initialization."
::= { ifEntry 1 }
okay that's where this chunk of the page stops ๐ซถ the rest is coming in the next part, don't go anywhere ๐
okay so we're still deep in the ifEntry table and it's giving inventory realness ๐
every single one of these is an OBJECT-TYPE, and yes bestie, we're keeping every field, every number, every tiny comment. no cap.
ifDescrโOBJECT-TYPE,SYNTAX DisplayString (SIZE (0..255)),ACCESS read-only,STATUS mandatory. It's literally a textual string with info about the interface โ include the name of the manufacturer, the product name, and the version of the hardware interface.::= { ifEntry 2 }ifTypeโOBJECT-TYPE,SYNTAX:
INTEGER {
other(1), -- none of the following
regular1822(2),
hdh1822(3erl),
ddn-x25(5),
rfc877-x25(5),
ethernet-csmacd(7),
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),
ds1(18), -- T-1
e1(19), -- european equiv. of T-1
basicISDN(20),
primaryISDN(21), -- proprietary serial
propPointToPointSerial(22),
ppp(23),
softwareLoopback(24),
eon(25), -- CLNP over IP [11]
ethernet-3Mbit(26),
nsip(27), -- XNS over IP
slip(28), -- generic SLIP
ultra(29), -- ULTRA technologies
ds3(30), -- T-3
sip(31), -- SMDS
frame-relay(32)
}
ACCESS read-only, STATUS mandatory. The type of interface, distinguished according to the physical/link protocol(s) immediately below the network layer in the protocol stack. ::= { ifEntry 3 }
ifMtuโOBJECT-TYPE,SYNTAX INTEGER,ACCESS read-only,STATUS mandatory. The size of the largest datagram which can be sent/received on the interface, specified in octets. For interfaces that are used for transmitting network datagrams, this is the size of the largest network datagram that can be sent on the interface.::= { ifEntry 4 }ifSpeedโOBJECT-TYPE,SYNTAX Gauge,ACCESS read-only,STATUS mandatory. An estimate of the interface's current bandwidth in bits per second. For interfaces which do not vary in bandwidth or for those where no accurate estimation can be made, this object should contain the nominal bandwidth.::= { ifEntry 5 }ifPhysAddressโOBJECT-TYPE,SYNTAX PhysAddress,ACCESS read-only,STATUS mandatory. The interface's address at the protocol layer immediatelybelowthe network layer in the protocol stack. For interfaces which do not have such an address (e.g., a serial line), this object should contain an octet string of zero length.::= { ifEntry 6 }ifAdminStatusโOBJECT-TYPE,SYNTAX:
INTEGER {
up(1), -- ready to pass packets
down(2),
testing(3erl) -- in some test mode
}
ACCESS read-write, STATUS mandatory. The desired state of the interface. The testing(3erl) state indicates that no operational packets can be passed. ::= { ifEntry 7 }
ifOperStatusโOBJECT-TYPE,SYNTAX:
INTEGER {
up(1), -- ready to pass packets
down(2),
testing(3erl) -- in some test mode
}
ACCESS read-only, STATUS mandatory. The current operational state of the interface. The testing(3erl) state indicates that no operational packets can be passed. ::= { ifEntry 8 }
ifLastChangeโOBJECT-TYPE,SYNTAX TimeTicks,ACCESS read-only,STATUS mandatory. The value ofsysUpTimeat the time the interface entered its current operational state. If the current state was entered prior to the last re-initialization of the local network management subsystem, then this object contains a zero value.::= { ifEntry 9 }ifInOctetsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The total number of octets received on the interface, including framing characters.::= { ifEntry 10 }ifInUcastPktsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of subnetwork-unicast packets delivered to a higher-layer protocol.::= { ifEntry 11 }ifInNUcastPktsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of non-unicast (i.e., subnetwork-broadcast or subnetwork-multicast) packets delivered to a higher-layer protocol.::= { ifEntry 12 }ifInDiscardsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of inbound packets which were chosen to be discarded even though no errors had been detected to prevent their being deliverable to a higher-layer protocol. One possible reason for discarding such a packet could be to free up buffer space.::= { ifEntry 13 }ifInErrorsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of inbound packets that contained errors preventing them from being deliverable to a higher-layer protocol.::= { ifEntry 14 }ifInUnknownProtosโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of packets received via the interface which were discarded because of an unknown or unsupported protocol.::= { ifEntry 15 }ifOutOctetsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The total number of octets transmitted out of the interface, including framing characters.::= { ifEntry 16 }ifOutUcastPktsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The total number of packets that higher-level protocols requested be transmitted to a subnetwork-unicast address, including those that were discarded or not sent.::= { ifEntry 17 }ifOutNUcastPktsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The total number of packets that higher-level protocols requested be transmitted to a non-unicast (i.e., a subnetwork-broadcast or subnetwork-multicast) address, including those that were discarded or not sent.::= { ifEntry 18 }ifOutDiscardsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of outbound packets which were chosen to be discarded even though no errors had been detected to prevent their being transmitted. One possible reason for discarding such a packet could be to free up buffer space.::= { ifEntry 19 }ifOutErrorsโOBJECT-TYPE,SYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of outbound packets that could not be transmitted because of errors.::= { ifEntry 20 }
โจ ifOutQLen โจ
- SYNTAX โ
Gauge - ACCESS โ
read-only - STATUS โ
mandatory
Okay so this one is literally just the length of the output packet queue โ measured in packets, bestie. That's it. That's the whole vibe. ๐
::= { ifEntry 21 }
๐ ifSpecific ๐
- SYNTAX โ
OBJECT IDENTIFIER - ACCESS โ
read-only - STATUS โ
mandatory
This is a reference to MIB definitions that are specific to whatever media is being used to realize the interface. So like โ say the interface is realized by an ethernet, then the value of this object refers to a document that defines objects specific to ethernet. iykyk. ๐ฆ
And if that info justโฆ isn't present? Then its value should be set to the OBJECT IDENTIFIER { 0 0 }, which is a syntatically valid object identifier, and any conformant implementation of ASN.1 and BER must be able to generate and recognize this value. No cap, it's mandatory-mandatory.
::= { ifEntry 22 }
๐ซถ the Address Translation group ๐ซถ
Okay bestie, this comment block is important, don't skip it:
Implementation of the Address Translation group is mandatory for all systems. BUT โ and this is a big but โ note that this group is deprecated by MIB-II. That is, it is being included solely for compatibility with MIB-I nodes, and will most likely be excluded from MIB-III nodes. From MIB-II and onwards, each network protocol group contains its own address translation tables. So it's giving legacy-support main character energy only. ๐
The Address Translation group contains one table, and that table 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 refers to such a subnetwork-specific address as a physical address. (Yes, in quotes. Yes, it's a vibe.)
Examples of such translation tables, per the page:
- 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 contains the
NetworkAddressto X.121 address equivalences.
๐ธ atTable ๐ธ
- SYNTAX โ
SEQUENCE OF AtEntry - ACCESS โ
not-accessible - STATUS โ
deprecated
The Address Translation tables contain the NetworkAddress to physical address equivalences. Some interfaces do not use translation tables for determining address equivalences (e.g., DDN-X.25 has an algorithmic method); if all interfaces are of this type, then the Address Translation table is empty, i.e., has zero entries. Empty table, zero notes, we move. ๐
::= { at 1 }
๐ง atEntry ๐ง
- SYNTAX โ
AtEntry - ACCESS โ
not-accessible - STATUS โ
deprecated - INDEX โ
{ atIfIndex, atNetAddress }
Each entry contains one NetworkAddress to physical address equivalence. One entry, one equivalence, periodt. โจ
::= { atTable 1 }
๐ the AtEntry SEQUENCE ๐
Copy this exactly, bestie, character for character:
AtEntry ::=
SEQUENCE {
atIfIndex
INTEGER,
atPhysAddress
PhysAddress,
atNetAddress
NetworkAddress
}
๐ atIfIndex ๐
- SYNTAX โ
INTEGER - ACCESS โ
read-write - STATUS โ
deprecated
The interface on which this entry's equivalence is effective. And here's the cute part: the interface identified by a particular value of this index is the same interface as identified by the same value of ifIndex. They match, they're linked, it's a whole thing. ๐ฅ
::= { atEntry 1 }
๐ atPhysAddress ๐
- SYNTAX โ
PhysAddress - ACCESS โ
read-write - STATUS โ
deprecated
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. That is, it effectively dissasociates the interface identified with said entry from the mapping identified with said entry. (Yes, "dissasociates" โ that's the spelling on the page, leave it alone. ๐ญ)
And it is an implementation-specific matter as to whether the agent removes an invalidated entry from the table. So accordingly, management stations must be prepared to receive tabular information from agents that corresponds to entries not currently in use. Proper interpretation of such entries requires examination of the relevant atPhysAddress object. Read carefully, bestie. ๐
::= { atEntry 2 }
โญ atNetAddress โญ
- SYNTAX โ
NetworkAddress - ACCESS โ
read-write - STATUS โ
deprecated
The NetworkAddress (e.g., the IP address) corresponding to the media-dependent physical address. That's the pairing. That's the whole point. ๐
::= { atEntry 3 }
๐ the IP group ๐
Implementation of the IP group is mandatory for all systems. Every single one. No exceptions, no vibes-based opt-outs. ๐
๐ฆ ipForwarding ๐ฆ
- SYNTAX โ
INTEGER { forwarding(1), not-forwarding(2) }
Copy these values exactly, they're load-bearing:
INTEGER {
forwarding(1), -- acting as a gateway
not-forwarding(2) -- NOT acting as a gateway
}
- ACCESS โ
read-write - STATUS โ
mandatory
The indication of whether this entity is acting as an IP gateway in respect to the forwarding of datagrams received by, but not addressed to, this entity. IP gateways forward datagrams. IP hosts do not (except those source-routed via the host). Simple as that. โจ
Note that for some managed nodes, this object may take on only a subset of the values possible. Accordingly, it is appropriate for an agent to return a badValue response if a management station attempts to change this object to an inappropriate value. So don't try it. ๐
::= { ip 1 }
๐ ipDefaultTTL ๐
- SYNTAX โ
INTEGER - ACCESS โ
read-write - STATUS โ
mandatory
The default value inserted into the Time-To-Live field of the IP header of datagrams originated at this entity, whenever a TTL value is not supplied by the transport layer protocol. It's the fallback TTL โ a little default safety net. ๐
::= { ip 2 }
๐ ipInReceives ๐
- SYNTAX โ
Counter - ACCESS โ
read-only - STATUS โ
mandatory
The total number of input datagrams received from interfaces โ including those received in error. Yeah, the messy ones count too. ๐
::= { ip 3 }
๐ฅ ipInHdrErrors ๐ฅ
- SYNTAX โ
Counter - ACCESS โ
read-only - STATUS โ
mandatory
The number of input datagrams discarded due to errors in their IP headers, including:
- bad checksums
- version number mismatch
- other format errors
- time-to-live exceeded
- errors discovered in processing their IP options
- etc.
RIP to those packets, they did not slay. ๐ซถ
::= { ip 4 }
๐ธ ipInAddrErrors ๐ธ
- SYNTAX โ
Counter - ACCESS โ
read-only - STATUS โ
mandatory
The number of input datagrams discarded because the IP address in their IP header's destination field was not a valid address to be received at this entity. This count includes invalid addresses (e.g., 0.0.0.0) and addresses of unsupported Classes (e.g., Class E). ๐
And for entities which are not IP Gateways and therefore do not forward datagrams, this counter includes datagrams discarded because the destination address was not a local address. So it's doing double duty, lowkey iconic of it. ๐
::= { ip 5 }
๐ ipForwDatagrams ๐
- SYNTAX โ
Counter - ACCESS โ
read-only - STATUS โ
mandatory
The number of input datagrams for which this entity was not their final IP destination, as a result of which an attempt was made to find a route to forward them to that final destination. So like โ not my packet, but I'll help it find its way. ๐ง
In entities which do not act as IP Gateways, this counter will include only those packets which were Source-Routed via this entity, and the Source-Route option processing was successful. Specific. Precise. Yes. ๐
::= { ip 6 }
๐ ipInUnknownProtos ๐
- SYNTAX โ
Counter - ACCESS โ
read-only - STATUS โ
mandatory
The number of locally-addressed datagrams received successfully but discarded because of an unknown or unsupported protocol. Received fine, understood by nobody. It's giving "we don't know her." ๐ญ
::= { ip 7 }
ipInDiscards
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 8 }
Bestie, these are the input IP datagrams that were literally fine โ no problem was encountered that would've prevented them from continuing to be processed โ and yet they got discarded anyway (like, say, for lack of buffer space ๐ญ). Important: this counter does not include any datagrams that were discarded while awaiting re-assembly. Different counter, different vibe. ๐
ipInDelivers
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 9 }
The total number of input datagrams that were successfully delivered to IP user-protocols โ and yes, that includes ICMP. ๐ซถ These ones made it, no cap.
ipOutRequests
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 10 }
The total number of IP datagrams that local IP user-protocols (again, ICMP counts ๐) handed to IP in requests for transmission. But โ heads up โ this counter does not include any datagrams that are counted over in ipForwDatagrams. That's that other girl's territory. โจ
ipOutDiscards
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 11 }
Counts output IP datagrams where no problem was encountered that would've stopped them from being transmitted to their destination, but they got discarded anyway (e.g. lack of buffer space, the eternal struggle ๐ญ). And ngl, this counter would include datagrams counted in ipForwDatagrams if any of those packets met this (discretionary) discard criterion. She's inclusive like that.
ipOutNoRoutes
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 12 }
The number of IP datagrams that got discarded because no route could be found to transmit them to their destination. This one also includes any packets counted in ipForwDatagrams that meet this 'no-route' criterion โ and it includes any datagrams a host can't route because all of its default gateways are down. So basically the whole "where is she going?? nowhere" situation. ๐
ipReasmTimeout
- SYNTAX
INTEGER - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 13 }
The maximum number of seconds that received fragments are held while they're awaiting reassembly at this entity. It's giving "how long can I keep these pieces on layaway before I give up." โณ
ipReasmReqds
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 14 }
The number of IP fragments that were received and that needed to be reassembled at this entity. Little pieces that said "put me back together bestie." ๐งฉ
ipReasmOKs
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 15 }
The number of IP datagrams that were successfully re-assembled. We love a happy ending. ๐ฆ
ipReasmFails
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 16 }
The number of failures the IP re-assembly algorithm detected โ for whatever reason (timed out, errors, etc., we don't judge ๐). But wait: this is not necessarily a count of discarded IP fragments, because some algorithms โ notably the algorithm in RFC 815 โ can totally lose track of the number of fragments by combining them as they're received. So don't read this as an exact fragment graveyard, iykyk.
ipFragOKs
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 17 }
The number of IP datagrams that were successfully fragmented at this entity. Slay, we chopped her up and it worked. ๐ฅ
ipFragFails
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 18 }
The number of IP datagrams that were discarded because they needed to be fragmented at this entity but could not be โ for example, because their Don't Fragment flag was set. The audacity of a packet saying "don't fragment me" and then being too big. ๐
ipFragCreates
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory - OID
::= { ip 19 }
The number of IP datagram fragments that were generated as a result of fragmentation at this entity. Look at all these little babies. โจ
MIB comment, direct from the source: -- the IP address table
And also: -- The IP address table contains this entity's IP addressing information.
ipAddrTable
- SYNTAX
SEQUENCE OF IpAddrEntry - ACCESS
not-accessible - STATUS
mandatory - OID
::= { ip 20 }
The table of addressing information relevant to this entity's IP addresses. It's the whole group chat of addy info. ๐
ipAddrEntry
- SYNTAX
IpAddrEntry - ACCESS
not-accessible - STATUS
mandatory - INDEX
{ ipAdEntAddr } - OID
::= { ipAddrTable 1 }
The addressing information for one of this entity's IP addresses โ one entry per addy, bestie. ๐
IpAddrEntry ::=
SEQUENCE {
ipAdEntAddr
IpAddress,
ipAdEntIfIndex
INTEGER,
ipAdEntNetMask
IpAddress,
ipAdEntBcastAddr
INTEGER,
ipAdEntReasmMaxSize
INTEGER (0..65535)
}
ipAdEntAddr
- SYNTAX
IpAddress - ACCESS
read-only - STATUS
mandatory - OID
::= { ipAddrEntry 1 }
The IP address that this entry's addressing information is all about. The main character of the row, fr. ๐
ipAdEntIfIndex
- SYNTAX
INTEGER - ACCESS
read-only - STATUS
mandatory - OID
::= { ipAddrEntry 2 }
The index value that uniquely identifies the interface this entry applies to. And here's the lore: the interface identified by a particular value of this index is the same interface as the one identified by the same value of ifIndex. Same girl, different paperwork. ๐ซถ
ipAdEntNetMask
- SYNTAX
IpAddress - ACCESS
read-only - STATUS
mandatory - OID
::= { ipAddrEntry 3 }
The subnet mask that goes with the IP address of this entry. The value is an IP address with all the network bits set to 1 and all the host bits set to 0 โ that's the whole recipe, no substitutions. ๐ธ
ipAdEntBcastAddr
- SYNTAX
INTEGER - ACCESS
read-only - STATUS
mandatory - OID
::= { ipAddrEntry 4 }
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. Example time: when the Internet standard all-ones broadcast address is used, the value will be 1. This value applies to both the subnet and the network broadcast addresses used by the entity on this (logical) interface. Two for one, we love. โจ
ipAdEntReasmMaxSize
- SYNTAX
INTEGER (0..65535) - ACCESS
read-only - STATUS
mandatory - OID
::= { ipAddrEntry 5 }
The size of the largest IP datagram that this entity can re-assemble from incoming IP fragmented datagrams received on this interface. Big-reassembly energy, literally. ๐ช
MIB comment: -- the IP routing table
And also: -- The IP routing table contains an entry for each route presently known to this entity.
ipRouteTable
- SYNTAX
SEQUENCE OF IpRouteEntry - ACCESS
not-accessible - STATUS
mandatory - OID
::= { ip 21 }
This entity's IP Routing table. Every route she currently knows about lives here. ๐บ๏ธ
ipRouteEntry
- SYNTAX
IpRouteEntry - ACCESS
not-accessible - STATUS
mandatory - INDEX
{ ipRouteDest } - OID
::= { ipRouteTable 1 }
A route to a particular destination. One row, one destination, that's the whole deal bestie. ๐
okay so we're deep in the route-table era of this MIB, and this is the IpRouteEntry moment โ the SEQUENCE that defines every field a route row can serve. ๐
IpRouteEntry ::=
SEQUENCE {
ipRouteDest
IpAddress,
ipRouteIfIndex
INTEGER,
ipRouteMetric1
INTEGER,
ipRouteMetric2
INTEGER,
ipRouteMetric3
INTEGER,
ipRouteMetric4
INTEGER,
ipRouteNextHop
IpAddress,
ipRouteType
INTEGER,
ipRouteProto
INTEGER,
ipRouteAge
INTEGER,
ipRouteMask
IpAddress,
ipRouteMetric5
INTEGER,
ipRouteInfo
OBJECT IDENTIFIER
}
Now the OBJECT-TYPE besties one by one. Every single one here is STATUS mandatory; I'm keeping the OIDs exact so nobody comes for me. โจ
ipRouteDest OBJECT-TYPEโSYNTAX IpAddress,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 1 }. This is the destination IP address for the route.0.0.0.0means default route, periodt. Multiple routes to one destination can show up in the table, but access to those multiple entries depends on the table-access mechanisms defined by the network management protocol in use.ipRouteIfIndex OBJECT-TYPEโSYNTAX INTEGER,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 2 }. ThisINTEGERis the index value that uniquely IDs the local interface through which this route's next hop should be reached. Same index value = same interface asifIndex, no cap.ipRouteMetric1 OBJECT-TYPEโSYNTAX INTEGER,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 3 }. The primary routing metric for this route. What the number actually means is decided by the routing protocol in this route'sipRouteProtovalue. If this metric isn't used, set it to-1.ipRouteMetric2 OBJECT-TYPEโSYNTAX INTEGER,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 4 }. An alternate routing metric for this route. Its semantics come from the routing protocol in the route'sipRouteProtovalue. If it's not used, value should be-1.ipRouteMetric3 OBJECT-TYPEโSYNTAX INTEGER,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 5 }. Another alternate routing metric. Again, the routing protocol inipRouteProtodecides what it means, and if it's unused, set it to-1.ipRouteMetric4 OBJECT-TYPEโSYNTAX INTEGER,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 6 }. Alternate routing metric, same deal: semantics fromipRouteProto, and unused means-1.ipRouteNextHop OBJECT-TYPEโSYNTAX IpAddress,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 7 }. The IP address of the next hop for this route. Tiny parenthetical: if the route is bound to an interface realized via broadcast media, this field's value is the agent's IP address on that interface.ipRouteType OBJECT-TYPEโSYNTAXis this whole enum,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 8 }:
INTEGER {
other(1), -- none of the following
invalid(2), -- an invalidated route
-- route to directly
direct(3erl), -- connected (sub-)network
-- route to a non-local
indirect(5) -- host/network/sub-network
}
This is the type of route. The values direct(3erl) and indirect(5) refer to the notion of direct and indirect routing in the IP architecture. Setting this object to invalid(2) invalidates the corresponding entry in the ipRouteTable object. That is, it effectively dissasociates the destination identified with said entry from the route identified with said entry. Whether the agent removes an invalidated entry from the table is implementation-specific. So management stations must be prepared to receive tabular information from agents that corresponds to entries not currently in use. Proper interpretation of such entries requires examination of the relevant ipRouteType object.
ipRouteProto OBJECT-TYPEโSYNTAXis this enum,ACCESS read-only,STATUS mandatory,::= { ipRouteEntry 9 }:
INTEGER {
other(1), -- none of the following
-- non-protocol information,
-- e.g., manually configured
local(2), -- entries
-- set via a network
netmgmt(3erl), -- management protocol
-- obtained via ICMP,
icmp(5), -- e.g., Redirect
-- the remaining values are
-- all gateway routing
-- protocols
egp(5),
ggp(7),
hello(7),
rip(8),
is-is(9),
es-is(10),
ciscoIgrp(11),
bbnSpfIgp(12),
ospf(13),
bgp(14)
}
This is the routing mechanism via which this route was learned. And just because gateway routing protocol values are included here doesn't mean hosts should support those protocols. ๐
ipRouteAge OBJECT-TYPEโSYNTAX INTEGER,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 10 }. The number of seconds since this route was last updated or otherwise determined to be correct. Important caveat: no semantics oftoo oldcan be implied except through knowledge of the routing protocol by which the route was learned.ipRouteMask OBJECT-TYPEโSYNTAX IpAddress,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 11 }. This indicates the mask to be logical-ANDed with the destination address before it gets compared to the value inipRouteDest. For systems that don't support arbitrary subnet masks, the agent constructsipRouteMaskby checking whether the correspondentipRouteDestfield belongs to a class-A, B, or C network, then using one of:
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), then the mask value is also 0.0.0.0. And yes, all IP routing subsystems implicitly use this mechanism. ๐ซถ
ipRouteMetric5 OBJECT-TYPEโSYNTAX INTEGER,ACCESS read-write,STATUS mandatory,::= { ipRouteEntry 12 }. One more alternate routing metric. Semantics come from the routing protocol specified in the route'sipRouteProtovalue, and if it's not used, set it to-1.
๐
ipRouteInfo
- SYNTAX
OBJECT IDENTIFIER - ACCESS
read-only - STATUS
mandatory
okay so this one is literally just a pointer โ a reference to MIB definitions that are specific to the particular routing protocol that's responsible for this route, and that protocol is determined by whatever the route's ipRouteProto value says ๐. And if that info isn't there? Bestie, you set it to the OBJECT IDENTIFIER { 0 0 }, which is a syntactically valid object identifier, and any conformant implementation of ASN.1 and BER must be able to generate and recognize that value. Periodt ๐
::= { ipRouteEntry 13 }
๐ฆ the IP Address Translation table โ yes we're going there
so the comment block in the source is doing a lil lore drop ๐: the IP address translation table contains the IpAddress-to-physical address equivalences. Some interfaces straight up don't use translation tables to figure out address equivalences โ hello, DDN-X.25 has an algorithmic method, icon behavior honestly โจ. And if all of your interfaces are that type, then the Address Translation table is empty, i.e. it has zero entries. not a single one. empty. ๐ซ
๐ธ ipNetToMediaTable
- SYNTAX
SEQUENCE OF IpNetToMediaEntry - ACCESS
not-accessible - STATUS
mandatory
The IP Address Translation table, used for mapping from IP addresses to physical addresses ๐.
::= { ip 22 }
๐ธ ipNetToMediaEntry
- SYNTAX
IpNetToMediaEntry - ACCESS
not-accessible - STATUS
mandatory - INDEX
{ ipNetToMediaIfIndex, ipNetToMediaNetAddress }
Every entry holds one IpAddress-to-physical address equivalence ๐ซถ.
::= { ipNetToMediaTable 1 }
And here's the shape of it, verbatim, no cap:
IpNetToMediaEntry ::=
SEQUENCE {
ipNetToMediaIfIndex
INTEGER,
ipNetToMediaPhysAddress
PhysAddress,
ipNetToMediaNetAddress
IpAddress,
ipNetToMediaType
INTEGER
}
๐ง ipNetToMediaIfIndex
- SYNTAX
INTEGER - ACCESS
read-write - STATUS
mandatory
The interface on which this entry's equivalence is effective ๐ซ. and the interface identified by a particular value of this index is the same interface as the one identified by the same value of ifIndex โ same girl, different fit, iykyk.
::= { ipNetToMediaEntry 1 }
๐ง ipNetToMediaPhysAddress
- SYNTAX
PhysAddress - ACCESS
read-write - STATUS
mandatory
the media-dependent physical address ๐. short and slay.
::= { ipNetToMediaEntry 2 }
๐ง ipNetToMediaNetAddress
- SYNTAX
IpAddress - ACCESS
read-write - STATUS
mandatory
the IpAddress that corresponds to that media-dependent physical address ๐.
::= { ipNetToMediaEntry 3 }
๐ง ipNetToMediaType
- SYNTAX
INTEGER { โฆ } - ACCESS
read-write - STATUS
mandatory
The type of mapping, and the choices are:
other(1), -- none of the following
invalid(2), -- an invalidated mapping
dynamic(3erl),
static(5)
and yes,dynamic(3erl)is literally what the source says ๐ญ we do not make the rules, we just report them faithfully. (also not me noticing there's no4in there ๐)
Now the important part, bestie, listen up ๐ข โ setting this object to the value invalid(2) has the effect of invalidating the corresponding entry in the ipNetToMediaTable. Like, it effectively dissociates the interface identified with said entry from the mapping identified with said entry ๐. 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 ๐. And proper interpretation of such entries requires examination of the relevant ipNetToMediaType object. so yeah, check the type field before you assume anything, fr fr.
::= { ipNetToMediaEntry 4 }
โญ additional IP objects
๐ ipRoutingDiscards
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of routing entries that were chosen to be discarded even though they are totally valid ๐ญ. One possible reason for discarding such an entry could be to free up buffer space for other routing entries โ it's giving "sorry bestie, we needed the room" energy.
::= { ip 23 }
๐ the ICMP group
Straight from the source: implementation of the ICMP group is mandatory for all systems. no skipping, no excuses ๐ธ.
๐ icmpInMsgs
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The total number of ICMP messages the entity received ๐ฅ. and note โ this counter includes all those counted by icmpInErrors. double counting is intentional here, that's the vibe.
::= { icmp 1 }
๐ icmpInErrors
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP messages the entity received but determined as having ICMP-specific errors โ bad ICMP checksums, bad length, etc. ๐ the "we got it but it's a mess" counter.
::= { icmp 2 }
๐ icmpInDestUnreachs
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Destination Unreachable messages received ๐ซ .
::= { icmp 3 }
๐ icmpInTimeExcds
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Time Exceeded messages received โฐ.
::= { icmp 4 }
๐ icmpInParmProbs
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Parameter Problem messages received ๐.
::= { icmp 5 }
๐ icmpInSrcQuenchs
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Source Quench messages received ๐งฏ.
::= { icmp 6 }
๐ icmpInRedirects
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Redirect messages received ๐.
::= { icmp 7 }
๐ icmpInEchos
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Echo (request) messages received ๐.
::= { icmp 8 }
๐ icmpInEchoReps
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Echo Reply messages received ๐๐.
::= { icmp 9 }
๐ icmpInTimestamps
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Timestamp (request) messages received โฑ๏ธ.
::= { icmp 10 }
๐ icmpInTimestampReps
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Timestamp Reply messages received โฑ๏ธโจ.
::= { icmp 11 }
๐ icmpInAddrMasks
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Address Mask Request messages received ๐ญ.
::= { icmp 12 }
๐ icmpInAddrMaskReps
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP Address Mask Reply messages received ๐ญ๐ซถ.
::= { icmp 13 }
๐ icmpOutMsgs
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The total number of ICMP messages this entity attempted to send ๐ฅ. And note โ this counter includes all those counted by icmpOutErrors. same double-counting situation as the inbound one, iconic.
::= { icmp 14 }
๐ icmpOutErrors
- SYNTAX
Counter - ACCESS
read-only - STATUS
mandatory
The number of ICMP messages this entity did not send due to problems discovered within ICMP
(and the source literally cuts off right there mid-sentence โ we pick it back up in the next part, bestie ๐ญ๐)
โฆlike, a lack of buffers, bestie. That counter should not be counting the mess that gets discovered outside the ICMP layer โ think "IP couldn't route the resulting datagram" energy โ and ngl, in some implementations there might genuinely be no types of error that even feed this counter. ๐
::= { icmp 15 }
icmpOutDestUnreachsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. Counts every ICMP Destination Unreachable message that got sent out. ๐ซ
::= { icmp 16 }
icmpOutTimeExcdsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of ICMP Time Exceeded messages sent. โฐ
::= { icmp 17 }
icmpOutParmProbsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. How many ICMP Parameter Problem messages went out. ๐งฉ
::= { icmp 18 }
icmpOutSrcQuenchsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. The count of ICMP Source Quench messages sent. ๐งฏ
::= { icmp 19 }
icmpOutRedirectsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. Number of ICMP Redirect messages sent โ and heads up, for a host this object will always be zero, because hosts do not send redirects. literally zero, bestie, not even a little. 0๏ธโฃ
::= { icmp 20 }
icmpOutEchosโSYNTAX Counter,ACCESS read-only,STATUS mandatory. ICMP Echo (request) messages sent. ๐ก
::= { icmp 21 }
icmpOutEchoRepsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. ICMP Echo Reply messages sent. ๐
::= { icmp 22 }
icmpOutTimestampsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. ICMP Timestamp (request) messages sent. ๐ฐ๏ธ
::= { icmp 23 }
icmpOutTimestampRepsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. ICMP Timestamp Reply messages sent. โฑ๏ธ
::= { icmp 24 }
icmpOutAddrMasksโSYNTAX Counter,ACCESS read-only,STATUS mandatory. ICMP Address Mask Request messages sent. ๐ญ
::= { icmp 25 }
icmpOutAddrMaskRepsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. ICMP Address Mask Reply messages sent. ๐ญ
::= { icmp 26 }
okay okay okay, ICMP is done, we're moving on to the good stuff โ TCP ๐ง
-- the TCP group
-- Implementation of the TCP group is mandatory for all
-- systems that implement the TCP.
-- Note that instances of object types that represent
-- information about a particular TCP connection are
-- transient; they persist only as long as the connection
-- in question.
๐ซถ Read those comments again, bestie โ implementing the TCP group is mandatory for every system that implements TCP, and the per-connection objects are transient: they only live as long as the connection itself does. blip, gone, bye. ๐จ
tcpRtoAlgorithmโACCESS read-only,STATUS mandatory. Tells you which algorithm is being used to figure out the timeout value for retransmitting octets nobody acknowledged. The choices are:
SYNTAX INTEGER {
other(1), -- none of the following
constant(2), -- a constant rto
rsre(3erl), -- MIL-STD-1778, Appendix B
vanj(5) -- Van Jacobson's algorithm [10]
}
::= { tcp 1 }
tcpRtoMinโSYNTAX INTEGER,ACCESS read-only,STATUS mandatory. The minimum value a TCP implementation will allow for the retransmission timeout, measured in milliseconds. The finer semantics of objects like this depend on which timeout algorithm is in play โ and specifically, when the algorithm isrsre(3erl), this object behaves like theLBOUNDquantity described in RFC 793. ๐ฅบ
::= { tcp 2 }
tcpRtoMaxโSYNTAX INTEGER,ACCESS read-only,STATUS mandatory. Same but the maximum value the implementation permits for the retransmission timeout, also in milliseconds. Again the refined semantics depend on the algorithm, and when it'srsre(3erl), this one has the semantics of theUBOUNDquantity from RFC 793. ๐
::= { tcp 3 }
tcpMaxConnโSYNTAX INTEGER,ACCESS read-only,STATUS mandatory. The cap on total TCP connections the entity can support. If the max is dynamic on this entity, this object should hold the value-1. ๐ซ
::= { tcp 4 }
tcpActiveOpensโSYNTAX Counter,ACCESS read-only,STATUS mandatory. How many times TCP connections went straight fromCLOSEDtoSYN-SENT. the direct flight, no layovers โ๏ธ
::= { tcp 5 }
tcpPassiveOpensโSYNTAX Counter,ACCESS read-only,STATUS mandatory. How many times connections transitioned directly fromLISTENtoSYN-RCVD. ๐
::= { tcp 6 }
tcpAttemptFailsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. The number of times connections went directly toCLOSEDfrom eitherSYN-SENTorSYN-RCVD, plus the number of times they went directly toLISTENfromSYN-RCVD. that's two counts added together, don't forget the plus ๐ญ
::= { tcp 7 }
tcpEstabResetsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. How many times connections transitioned directly toCLOSEDfrom eitherESTABLISHEDorCLOSE-WAIT. ๐
::= { tcp 8 }
tcpCurrEstabโSYNTAX Gauge,ACCESS read-only,STATUS mandatory. The number of TCP connections whose current state is eitherESTABLISHEDorCLOSE-WAIT. Note it's a Gauge, not a Counter โ it goes up and down, she's flexible ๐
::= { tcp 9 }
tcpInSegsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. Total segments received, including ones received in error, and that count covers segments received on currently established connections too. ๐ฅ
::= { tcp 10 }
tcpOutSegsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. Total segments sent, including those on current connections โ but excluding segments that contain only retransmitted octets. read that exclusion again bestie ๐
::= { tcp 11 }
tcpRetransSegsโSYNTAX Counter,ACCESS read-only,STATUS mandatory. Total segments retransmitted โ meaning the number of TCP segments transmitted that contained one or more previously transmitted octets. ๐
::= { tcp 12 }
๐ฆ the TCP Connection table ๐ฆ
-- the TCP Connection table
-- The TCP connection table contains information about this
-- entity's existing TCP connections.
tcpConnTableโSYNTAX SEQUENCE OF TcpConnEntry,ACCESS not-accessible,STATUS mandatory. A table holding TCP connection-specific information. (Yes,not-accessibleโ you don't read the table itself, you read its entries, iykyk ๐)
::= { tcp 13 }
๐งต the TCP connection table (yes, the spicy one)
tcpConnEntryโ okay bestie, this is the whole vibe of one single TCP connection. It'snot-accessible,mandatory, and honestly kind of a ghost: the description says it's transient, meaning it literally stops existing when (or like, right after) the connection drops into theCLOSEDstate. It's giving mayfly energy. ๐ฆ It's indexed by four things โtcpConnLocalAddress,tcpConnLocalPort,tcpConnRemAddress,tcpConnRemPortโ so every connection is uniquely identified by both ends. Periodt.
tcpConnEntry OBJECT-TYPE
SYNTAX TcpConnEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"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."
INDEX { tcpConnLocalAddress,
tcpConnLocalPort,
tcpConnRemAddress,
tcpConnRemPort }
::= { tcpConnTable 1 }
And here's the lil SEQUENCE that lays out the whole entry โ five fields, no more, no less โจ:
TcpConnEntry ::=
SEQUENCE {
tcpConnState
INTEGER,
tcpConnLocalAddress
IpAddress,
tcpConnLocalPort
INTEGER (0..65535),
tcpConnRemAddress
IpAddress,
tcpConnRemPort
INTEGER (0..65535)
}
๐
tcpConnState โ the main character of this table
Bestie, this one is read-write which is rare and honestly a little scary ๐ญ. It's the state of the TCP connection, and here's the tea: the only value a management station is allowed to set is deleteTCB(12). Try literally anything else and a well-behaved agent should throw a badValue response right back at you. And if you do set deleteTCB(12)? It deletes the TCB (as defined in RFC 793) for that connection on the managed node and the connection is immediately terminated. Like, gone. No warning. ๐
Also ngl there's an implementation-specific option where an RST segment may get sent from the managed node to the other TCP endpoint โ but heads up, RST segments are not sent reliably. So don't count on it, bestie.
And yes โ the enum list is exactly as printed below, quirks and all. I am not touching it. The original ate and I'm leaving it alone ๐:
tcpConnState OBJECT-TYPE
SYNTAX INTEGER {
closed(1),
listen(2),
synSent(3erl),
synReceived(5),
established(5),
finWait1(7),
finWait2(7),
closeWait(8),
lastAck(9),
closing(10),
timeWait(11),
deleteTCB(12)
}
ACCESS read-write
STATUS mandatory
DESCRIPTION
"The state of this TCP connection.
The only value which may be set by a management
station is deleteTCB(12). Accordingly, it is
appropriate for an agent to return a `badValue'
response if a management station attempts to set
this object to any other value.
If a management station sets this object to the
value deleteTCB(12), then this has the effect of
deleting the TCB (as defined in RFC 793) of the
corresponding connection on the managed node,
resulting in immediate termination of the
connection.
As an implementation-specific option, a RST
segment may be sent from the managed node to the
other TCP endpoint (note however that RST segments
are not sent reliably)."
::= { tcpConnEntry 1 }
๐ธ the four read-only besties of the connection
tcpConnLocalAddressโ the local IP address for this TCP connection โจ. And here's the cute detail: if the connection is in thelistenstate and it's willing to accept connections on any IP interface associated with the node, the value is0.0.0.0. Wildcard queen. ๐
tcpConnLocalAddress OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-only
STATUS mandatory
DESCRIPTION
"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."
::= { tcpConnEntry 2 }
tcpConnLocalPortโ the local port number for this TCP connection, straight up. Range is0..65535,read-only,mandatory. Simple, iconic, no notes. ๐
tcpConnLocalPort OBJECT-TYPE
SYNTAX INTEGER (0..65535)
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The local port number for this TCP connection."
::= { tcpConnEntry 3 }
tcpConnRemAddressโ the remote IP address for this TCP connection. The other half of the duo ๐ซถ.
tcpConnRemAddress OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The remote IP address for this TCP connection."
::= { tcpConnEntry 4 }
tcpConnRemPortโ the remote port number for this TCP connection. Same energy, same range,0..65535. ๐
tcpConnRemPort OBJECT-TYPE
SYNTAX INTEGER (0..65535)
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The remote port number for this TCP connection."
::= { tcpConnEntry 5 }
โญ extra TCP objects (the bonus tracks)
tcpInErrsโ aCounterof the total number of segments received in error (like, bad TCP checksums, the classic ๐).read-only,mandatory, and it lives at{ tcp 14 }.tcpOutRstsโ aCounterof how many TCP segments were sent containing theRSTflag. We love a dramatic exit. ๐ฅ It's at{ tcp 15 }.
-- additional TCP objects
tcpInErrs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total number of segments received in error
(e.g., bad TCP checksums)."
::= { tcp 14 }
tcpOutRsts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of TCP segments sent containing the
RST flag."
::= { tcp 15 }
โจ the UDP group โจ
Heads up bestie โ the original says it loud and clear: implementation of the UDP group is mandatory for all systems which implement the UDP. So if you're doing UDP, you're doing these. No skipping. ๐
udpInDatagramsโ total number of UDP datagrams delivered to UDP users. The happy path ๐. At{ udp 1 }.udpNoPortsโ total number of received UDP datagrams where there was, uh, no application at the destination port. Nobody home ๐ญ. At{ udp 2 }.udpInErrorsโ received UDP datagrams that could not be delivered for reasons other than the lack of an application at the destination port. So like, a different problem entirely. At{ udp 3 }.udpOutDatagramsโ total number of UDP datagrams sent from this entity. Outgoing queen ๐. At{ udp 4 }.
-- the UDP group
-- Implementation of the UDP group is mandatory for all
-- systems which implement the UDP.
udpInDatagrams OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total number of UDP datagrams delivered to
UDP users."
::= { udp 1 }
udpNoPorts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total number of received UDP datagrams for
which there was no application at the destination
port."
::= { udp 2 }
udpInErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of received UDP datagrams that could
not be delivered for reasons other than the lack
of an application at the destination port."
::= { udp 3 }
udpOutDatagrams OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total number of UDP datagrams sent from this
entity."
::= { udp 4 }
๐ the UDP Listener table
Okay so this table is all about this entity's UDP end-points โ specifically the ones where a local application is currently accepting datagrams. Like, who's actually listening right now. ๐โจ
-- the UDP Listener table
-- The UDP listener table contains information about this
-- entity's UDP end-points on which a local application is
-- currently accepting datagrams.
udpTableโSEQUENCE OF UdpEntry,not-accessible,mandatory. Description is refreshingly short: "A table containing UDP listener information." At{ udp 5 }. Lowkey iconic for being so brief.udpEntryโnot-accessible,mandatory, indexed by{ udpLocalAddress, udpLocalPort }. Info about one particular current UDP listener. ๐ฆ At{ udpTable 1 }.
udpTable OBJECT-TYPE
SYNTAX SEQUENCE OF UdpEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"A table containing UDP listener information."
::= { udp 5 }
udpEntry OBJECT-TYPE
SYNTAX UdpEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"Information about a particular current UDP
listener."
INDEX { udpLocalAddress, udpLocalPort }
::= { udpTable 1 }
The SEQUENCE, exactly two fields, cute and compact:
UdpEntry ::=
SEQUENCE {
udpLocalAddress
IpAddress,
udpLocalPort
INTEGER (0..65535)
}
udpLocalAddressโ the local IP address for this UDP listener. Same wildcard rule as TCP, bestie: if the listener is willing to accept datagrams for any IP interface associated with the node, the value is0.0.0.0๐. At{ udpEntry 1 }.udpLocalPortโ the local port number for this UDP listener, range0..65535๐. At{ udpEntry 2 }.
udpLocalAddress OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-only
STATUS mandatory
DESCRIPTION
"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."
::= { udpEntry 1 }
udpLocalPort OBJECT-TYPE
SYNTAX INTEGER (0..65535)
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The local port number for this UDP listener."
::= { udpEntry 2 }
๐ธ the EGP group ๐ธ
Another mandatory clause, fr fr: implementation of the EGP group is mandatory for all systems which implement the EGP. Same deal as UDP. You implement EGP, you're signing up for all four of these counters. ๐ซถ
egpInMsgsโ number of EGP messages received without error. Clean receipts โจ. At{ egp 1 }.egpInErrorsโ number of EGP messages received that turned out to be in error. Oops ๐. At{ egp 2 }.egpOutMsgsโ total number of locally generated EGP messages. At{ egp 3 }.egpOutErrorsโ locally generated EGP messages that were not sent due to resource limitations within an EGP entity. It's giving "I tried but I'm out of spoons" ๐ญ. At{ egp 4 }.
All four are Counter, read-only, mandatory, obviously. Consistency is key bestie ๐
.
-- the EGP group
-- Implementation of the EGP group is mandatory for all
-- systems which implement the EGP.
egpInMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP messages received without
error."
::= { egp 1 }
egpInErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP messages received that proved
to be in error."
::= { egp 2 }
egpOutMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total number of locally generated EGP
messages."
::= { egp 3 }
egpOutErrors OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of locally generated EGP messages not
sent due to resource limitations within an EGP
entity."
::= { egp 4 }
๐ฆ the EGP Neighbor table
This one's all about this entity's EGP neighbors โ like, the relationship status page but for routers. ๐
-- the EGP Neighbor table
-- The EGP neighbor table contains information about this
-- entity's EGP neighbors.
egpNeighTableโ the table itself,SEQUENCE OF EgpNeighEntry,not-accessible,mandatory. Description? Just "The EGP neighbor table." Queen of brevity ๐. At{ egp 5 }.egpNeighEntryโEgpNeighEntry,not-accessible,mandatory, indexed by{ egpNeighAddr }. It's all about this entity's relationship with one particular EGP neighbor ๐ . At{ egpNeighTable 1 }.
egpNeighTable OBJECT-TYPE
SYNTAX SEQUENCE OF EgpNeighEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"The EGP neighbor table."
::= { egp 5 }
egpNeighEntry OBJECT-TYPE
SYNTAX EgpNeighEntry
ACCESS not-accessible
STATUS mandatory
DESCRIPTION
"Information about this entity's relationship with
a particular EGP neighbor."
INDEX { egpNeighAddr }
::= { egpNeighTable 1 }
Okay so this is the spicy part โ the egpNeighTable roster, aka the full cast of the EGP neighbor entries. Buckle up bestie, it's a SEQUENCE and it's giving very "attendance sheet for the coolest neighbors" ๐
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
}
Fifteen members, one vibe. Now let's meet them one by one, because each of these lil icons deserves their moment โจ
๐ฃ egpNeighState
egpNeighState OBJECT-TYPE
SYNTAX INTEGER {
idle(1),
acquisition(2),
down(3erl),
up(5),
cease(5)
}
ACCESS read-only
STATUS mandatory
DESCRIPTION
"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."
::= { egpNeighEntry 1 }
This is the mood ring of the local system re: this particular EGP neighbor ๐ฆ and the cute lil rule is: every EGP state value here is one greater than the number that same state has in RFC 904. Off-by-one but make it fashion.
Real talk: the values above are verbatim what the source says โdown(3erl),up(5)andcease(5)and all.3erlliterally has letters in it, and5shows up twice. I'm not fixing it, I'm just reporting it, bestie ๐ That's exactly how it's written in the page.
๐ egpNeighAddr
egpNeighAddr OBJECT-TYPE
SYNTAX IpAddress
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The IP address of this entry's EGP neighbor."
::= { egpNeighEntry 2 }
The IP address of this entry's EGP neighbor. Short, sweet, main character energy. IpAddress syntax, read-only, mandatory โ the whole package ๐ซถ
๐ท๏ธ egpNeighAs
egpNeighAs OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The autonomous system of this EGP peer. Zero
should be specified if the autonomous system
number of the neighbor is not yet known."
::= { egpNeighEntry 3 }
The autonomous system of this EGP peer. And listen โ if you don't know the neighbor's AS number yet, you slap a Zero in there. No guessing, no vibes-based AS numbers, just 0 and we move on ๐
๐ฅ egpNeighInMsgs
egpNeighInMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP messages received without error
from this EGP peer."
::= { egpNeighEntry 4 }
Counts the EGP messages that came in from this peer without error. Clean receipts only, no drama ๐ธ
๐จ egpNeighInErrs
egpNeighInErrs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP messages received from this EGP
peer that proved to be in error (e.g., bad EGP
checksum)."
::= { egpNeighEntry 5 }
The messy-inbox counter ๐ messages from this peer that turned out to be in error โ the source's own example is a bad EGP checksum. Not me checking the checksum, not meโ
๐ค egpNeighOutMsgs
egpNeighOutMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of locally generated EGP messages to
this EGP peer."
::= { egpNeighEntry 6 }
Locally generated EGP messages sent out to this peer. This is the "I texted first" counter ๐
๐ซฅ egpNeighOutErrs
egpNeighOutErrs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of locally generated EGP messages not
sent to this EGP peer due to resource limitations
within an EGP entity."
::= { egpNeighEntry 7 }
The left-on-read counter ๐ญ locally generated EGP messages that never got sent to this peer, because of resource limitations inside an EGP entity. It's not ghosting, it's capacity issues.
๐ egpNeighInErrMsgs
egpNeighInErrMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP-defined error messages received
from this EGP peer."
::= { egpNeighEntry 8 }
EGP-defined error messages received from this peer. So not generic errors โ specifically the ones EGP itself defines. Iykyk ๐ง
๐ฎ egpNeighOutErrMsgs
egpNeighOutErrMsgs OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP-defined error messages sent to
this EGP peer."
::= { egpNeighEntry 9 }
Same energy, outbound direction: EGP-defined error messages sent to this peer. Delivering bad news beautifully ๐
โฌ๏ธ egpNeighStateUps
egpNeighStateUps OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP state transitions to the UP
state with this EGP peer."
::= { egpNeighEntry 10 }
How many times this peer's EGP state transitioned to UP. Glow-up counter, we stan ๐
โฌ๏ธ egpNeighStateDowns
egpNeighStateDowns OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The number of EGP state transitions from the UP
state to any other state with this EGP peer."
::= { egpNeighEntry 11 }
The other direction, and read it carefully bestie: transitions from the UP state to any other state with this peer. Not "all downs" โ specifically the falls from UP ๐โจ
โฑ๏ธ egpNeighIntervalHello
egpNeighIntervalHello OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The interval between EGP Hello command
retransmissions (in hundredths of a second). This
represents the t1 timer as defined in RFC 904."
::= { egpNeighEntry 12 }
The gap between EGP Hello command retransmissions, measured in hundredths of a second (yes, hundredths, keep up ๐). This one is the t1 timer as defined in RFC 904. Say hi to t1 for me ๐ซถ
๐ egpNeighIntervalPoll
egpNeighIntervalPoll OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The interval between EGP poll command
retransmissions (in hundredths of a second). This
represents the t3 timer as defined in RFC 904."
::= { egpNeighEntry 13 }
Same unit โ hundredths of a second โ but this is the interval between EGP poll command retransmissions, and it's the t3 timer from RFC 904. t1 and t3 are literally siblings, iconic duo โญ
๐ egpNeighMode
egpNeighMode OBJECT-TYPE
SYNTAX INTEGER { active(1), passive(2) }
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The polling mode of this EGP entity, either
passive or active."
::= { egpNeighEntry 14 }
The polling mode of this EGP entity: active(1) or passive(2). Two modes, no in-between, pick your fighter ๐ฆ
๐๏ธ egpNeighEventTrigger
egpNeighEventTrigger OBJECT-TYPE
SYNTAX INTEGER { start(1), stop(2) }
ACCESS read-write
STATUS mandatory
DESCRIPTION
"A control variable used to trigger operator-
initiated Start and Stop events. When read, this
variable always returns the most recent value that
egpNeighEventTrigger 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'.
When set, this variable causes a Start or Stop
event on the specified neighbor, as specified on
pages 8-10 of RFC 904. Briefly, a Start event
causes an Idle peer to begin neighbor acquisition
and a non-Idle peer to reinitiate neighbor
acquisition. A stop event causes a non-Idle peer
to return to the Idle state until a Start event
occurs, either via egpNeighEventTrigger or
otherwise."
::= { egpNeighEntry 15 }
This is the only one in the whole SEQUENCE with ACCESS read-write โ she's the interactive one, the main character ๐ and honestly? Deserved.
- It's a control variable that triggers operator-initiated Start and Stop events.
- Read it and it gives you back the most recent value
egpNeighEventTriggerwas set to. - Never been set since the last initialization of the network management subsystem on the node? Then it hands you
stop. Periodt. - Set it and it fires a Start or Stop event on the specified neighbor, exactly as laid out on pages 8-10 of RFC 904.
- The tl;dr from the source: a Start event makes an Idle peer begin neighbor acquisition, and makes a non-Idle peer reinitiate neighbor acquisition.
- A stop event makes a non-Idle peer return to the Idle state until a Start event happens โ whether that comes via
egpNeighEventTriggeror otherwise.
read-write means setting it actually does something to the neighbor. The source spells out exactly what, so don't freestyle it ๐ญ
-- additional EGP objects
EGP said "and one more thing" โจ
๐๏ธ egpAs
egpAs OBJECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The autonomous system number of this EGP entity."
::= { egp 6 }
The autonomous system number of this EGP entity. Note it's { egp 6 } โ entity-level, not per-neighbor. Different zip code, same family ๐
-- the Transmission group
Okay so now we're in the Transmission group commentary, and she has notes ๐
-- Based on the transmission media underlying each interface
-- on a system, the corresponding portion of the Transmission
-- group is mandatory for that system.
-- 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, such definitions reside in the experimental
-- portion of the MIB until they are "proven", then as a
-- part of the Internet standardization process, the
-- definitions are accordingly 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 the symbol.
Let me break this glow-up journey down for you:
- Depending on the transmission media underlying each interface on a system, the matching portion of the Transmission group is mandatory for that system. Not optional. Mandatory, bestie ๐ซก
- Once Internet-standard definitions for managing transmission media exist, the transmission group serves as a prefix for those object names.
- Historically the pipeline is: definitions hang out in the experimental portion of the MIB until they're "proven", then during Internet standardization they get elevated and a brand new object identifier gets defined under the transmission group.
- The convention for the assigned name is that literal line up there:
type OBJECT IDENTIFIER ::= { transmission number }, wheretypeis the symbolic value used for the media in theifTypecolumn of theifTableobject, andnumberis the actual integer value corresponding to that symbol. Cute, consistent, documented. Obsessed ๐
-- the SNMP group
New group, same energy ๐ฅ and this one comes with rules.
-- Implementation of the SNMP group is mandatory for all
-- systems which support an SNMP protocol entity. Some of
-- the objects defined below will be zero-valued in those
-- SNMP implementations that are optimized to support only
-- those functions specific to either a management agent or
-- a management station. In particular, it should be
-- observed that the objects below refer to an SNMP entity,
-- and there may be several SNMP entities residing on a
-- managed node (e.g., if the node is hosting acting as
-- a management station).
The important bits, translated ๐
- Implementing the SNMP group is mandatory for every system that supports an SNMP protocol entity. No skipping.
- Some of the objects below will be zero-valued in SNMP implementations optimized to support only the functions specific to either a management agent or a management station. So a
0isn't always a bug, it's a whole optimization vibe check. - And super important: the objects below refer to an SNMP entity โ and there may be several SNMP entities residing on a single managed node (the source's example: if the node is hosting acting as a management station ๐ธ).
๐จ snmpInPkts
snmpInPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total number of Messages delivered to the
SNMP entity from the transport service."
::= { snmp 1 }
Total messages delivered to the SNMP entity from the transport service. Inbox count, Counter, read-only, mandatory, { snmp 1 }. Slay ๐ฆ
๐ฌ snmpOutPkts
snmpOutPkts OBJECT-TYPE
SYNTAX Counter
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The total number of SNMP Messages which were
passed from the SNMP protocol entity to the
transport service."
::= { snmp 2 }
And the outbox twin ๐ซถ total SNMP messages passed from the SNMP protocol entity to the transport service. { snmp 2 }, read-only, mandatory, Counter.
In and out, balanced, hydrated, thriving โจ and we're literally not even done with the SNMP group yet โ more icons incoming ๐
These snmp counters are all SYNTAX Counter, ACCESS read-only, STATUS mandatory โ so theyโre little read-only receipts. You can look, but you cannot touch. ๐
snmpInBadVersionsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 3 }. Counts the total number of SNMP Messages delivered to the SNMP protocol entity that were for an unsupported SNMP version. Wrong version? Logged. ๐ซถsnmpInBadCommunityNamesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 4 }. Counts the total number of SNMP Messages delivered to the SNMP protocol entity that used an SNMP community name not known to said entity. The entity is like โbestie, who are you?โ ๐ญsnmpInBadCommunityUsesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 5 }. Counts the total number of SNMP Messages delivered to the SNMP protocol entity that represented an SNMP operation not allowed by the SNMP community named in the Message. Permission denied, but make it a counter. ๐snmpInASNParseErrsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 6 }. Counts the total number of ASN.1 or BER errors the SNMP protocol entity encountered when decoding received SNMP Messages. Parsing said no. ๐
-- { snmp 7 } is not used โ this slot is intentionally empty, no cap. Donโt go looking for a missing buddy. ๐ธ
snmpInTooBigsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 8 }. Counts the total number of SNMP PDUs delivered to the SNMP protocol entity where the value of the error-status field istooBig. Big PDU energy, but make it an error. โจsnmpInNoSuchNamesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 9 }. Counts the total number of SNMP PDUs delivered to the SNMP protocol entity where the error-status field isnoSuchName. That name? Not found. ๐snmpInBadValuesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 10 }. Counts the total number of SNMP PDUs delivered to the SNMP protocol entity where the error-status field isbadValue. The value was giving chaos. ๐ฆsnmpInReadOnlysโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 11 }. Counts the total number of valid SNMP PDUs delivered to the SNMP protocol entity where the error-status field isreadOnly. But plot twist: generating an SNMP PDU withreadOnlyin the error-status field is a protocol error, so this object exists as a way to detect incorrect implementations of the SNMP. Itโs a snitch counter, periodt. ๐snmpInGenErrsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 12 }. Counts the total number of SNMP PDUs delivered to the SNMP protocol entity where the error-status field isgenErr. General error, general vibe. ๐snmpInTotalReqVarsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 13 }. Counts the total number of MIB objects successfully retrieved by the SNMP protocol entity as the result of receiving valid SNMP Get-Request and Get-Next PDUs. Successful reads only โ we love a productive era. โญsnmpInTotalSetVarsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 14 }. Counts the total number of MIB objects successfully altered by the SNMP protocol entity as the result of receiving valid SNMP Set-Request PDUs. Successful writes, logged with love. ๐snmpInGetRequestsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 15 }. Counts the total number of SNMP Get-Request PDUs accepted and processed by the SNMP protocol entity. Incoming ask, handled. ๐ซถsnmpInGetNextsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 16 }. Counts the total number of SNMP Get-Next PDUs accepted and processed by the SNMP protocol entity. Next bestie, please. ๐snmpInSetRequestsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 17 }. Counts the total number of SNMP Set-Request PDUs accepted and processed by the SNMP protocol entity. Incoming change request, received. โsnmpInGetResponsesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 18 }. Counts the total number of SNMP Get-Response PDUs accepted and processed by the SNMP protocol entity. The answer came back and it ate. ๐ฅsnmpInTrapsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 19 }. Counts the total number of SNMP Trap PDUs accepted and processed by the SNMP protocol entity. Traps incoming, main character alerts only. ๐
And now the outbound receipts, because the SNMP protocol entity also has a whole โgenerated by meโ situation. ๐
snmpOutTooBigsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 20 }. Counts the total number of SNMP PDUs generated by the SNMP protocol entity where the error-status field istooBig. Outbound and oversized, honestly relatable. ๐snmpOutNoSuchNamesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 21 }. Counts the total number of SNMP PDUs generated by the SNMP protocol entity where the error-status isnoSuchName. The name left the chat. ๐ธsnmpOutBadValuesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 22 }. Counts the total number of SNMP PDUs generated by the SNMP protocol entity where the error-status field isbadValue. Bad value got sent out anyway, iconic behavior. ๐ญ
-- { snmp 23 } is not used โ another intentionally empty slot. Sheโs vacant on purpose, bestie. ๐
snmpOutGenErrsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 24 }. Counts the total number of SNMP PDUs generated by the SNMP protocol entity where the error-status field isgenErr. General error but make it outbound. ๐snmpOutGetRequestsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 25 }. Counts the total number of SNMP Get-Request PDUs generated by the SNMP protocol entity. It asked first. ๐snmpOutGetNextsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 26 }. Counts the total number of SNMP Get-Next PDUs generated by the SNMP protocol entity. Next! ๐ฆsnmpOutSetRequestsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 27 }. Counts the total number of SNMP Set-Request PDUs generated by the SNMP protocol entity. Change request, sent with intention. โจsnmpOutGetResponsesโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 28 }. Counts the total number of SNMP Get-Response PDUs generated by the SNMP protocol entity. Reply generated, slay. ๐ซถsnmpOutTrapsโ SYNTAXCounter, ACCESSread-only, STATUSmandatory, OID::= { snmp 29 }. Counts the total number of SNMP Trap PDUs generated by the SNMP protocol entity. Outbound trap notifications, periodt. ๐
okay so the last little icon in this whole MIB lineup is snmpEnableAuthenTraps OBJECT-TYPE, and yes bestie it's giving final-boss energy ๐ here's the tea:
SYNTAXโINTEGER { enabled(1), disabled(2) }โ literally just two states:enabled(1)ordisabled(2)๐ACCESSโread-writeโ you can read it, you can write it, full access, no cap โจSTATUSโmandatoryโ required, periodt ๐ซถDESCRIPTIONโ this one says whether the SNMP agent process is allowed to generate authentication-failure traps. The value of this object overrides any configuration information, so it's the switch that lets you disable all authentication-failure traps at once ๐ญ
โ ๏ธ and the page is like: it is strongly recommended that this object be stored in non-volatile memory so it remains constant between re-initializations of the network management system. like, please do not let it forget itself, bestie ๐๐พ
and the object wiring is exactly:
::= { snmp 30 }
then boom, the whole module is done:
END
๐ okay that's a wrap on the whole page โ source/version: Erlang/OTP + SNMP, manual page RFC1213-MIB(7), and the footer date is whatever your copy says (mwah, bye bestie) ๐
๐ฆ where this page comes from
- debian bookworm: erlang-manpages 1:25.2.3+dfsg-1+deb12u1 ยท Apache-2.0
- debian bookworm: erlang-manpages 1:25.2.3+dfsg-1+deb12u4 ยท Apache-2.0
- ubuntu jammy: erlang-manpages 1:24.2.1+dfsg-1 ยท Apache-2.0
- ubuntu jammy: erlang-manpages 1:24.2.1+dfsg-1ubuntu0.8 ยท Apache-2.0
- ubuntu noble: erlang-manpages 1:25.3.2.8+dfsg-1ubuntu4 ยท Apache-2.0
- ubuntu noble: erlang-manpages 1:25.3.2.8+dfsg-1ubuntu4.8 ยท Apache-2.0
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms