RFC 1742

AppleTalk Management Information Base II

πŸ“… published January 1995, from ietf

RFC 1742: AppleTalk Management Information Base II πŸ“

okay bestie, let's start with the title block so you know who wrote this and what it's about ✨

  • Network Working Group
  • Authors: S. Waldbusser (Carnegie Mellon University) and K. Frisa (FORE Systems, Inc.) πŸŽ€
  • Category: Standards Track πŸ‘‘
  • Date: January 1995 🌸
  • Obsoletes: RFC 1243 πŸ’…

Status of This Memo πŸ“œ

okay so this document specifies an Internet standards track protocol for the Internet community, and it's literally asking for discussion and suggestions for improvements 🫢 if you want to know where this protocol stands right now, check the current edition of the "Internet Official Protocol Standards" (STD 1). distribution of this memo is unlimited, so everyone can read it πŸ¦‹

Abstract 🌈

this memo defines a piece of the Management Information Base (MIB) that network management protocols use in TCP/IP-based internets. specifically, it's all about objects for managing AppleTalk networks 😭✨

RFC 1243 already defines a set of MIB objects for the lower layers of the AppleTalk protocol stack, up to the Network layer. this memo adds more objects to the AppleTalk portion of the MIB. these new ones cover management of the transport and session layers, plus extensions to the lower layers. and it's all done in an upwardly compatible way, so it's giving smooth glow-up energy πŸ’–

Table of Contents πŸ“–

   1. The Network Management Framework ......................    2
   2. Additions and Changes .................................    3
   2.1 New Groups ...........................................    3
   2.2 Additional Variables .................................    3
   2.2.1 AARP Additions .....................................    3
   2.2.2 ATPort Additions ...................................    3
   2.2.3 DDP Addition .......................................    3
   2.2.4 RTMP Additions .....................................    4
   2.2.5 KIP Addition .......................................    4
   2.2.6 ZIP Additions ......................................    4
   2.2.7 NBP Additions ......................................    4
   2.2.8 ATEcho Additions ...................................    4
   2.3 Deprecations .........................................    4
   2.4 Changes ..............................................    5
   3. Objects ...............................................    6
   3.1 Format of Definitions ................................    6
   4. Overview ..............................................    6
   4.1 Structure of MIB .....................................    7
   4.2 The LocalTalk Link Access Protocol Group .............    7
   4.3 The AppleTalk Address Resolution Protocol Group ......    7
   4.4 The AppleTalk Port Group .............................    8
   4.5 The Datagram Delivery Protocol Group .................    8
   4.6 The Datagram Delivery Protocol Router Group ..........    8
   4.7 The Routing Table Maintenance Protocol Group .........    8
   4.8 The Routing Table Maintenance Protocol Stub Group ....    8
   4.9 The Kinetics Internet Protocol Group .................    8
   4.10 The Zone Information Protocol Router Group ..........    9
   4.11 The Zone Information Protocol End Node Group ........    9
   4.12 The Name Binding Protocol Group .....................    9
   4.13 The AppleTalk Echo Protocol Group ...................    9
   4.14 The AppleTalk Transaction Protocol Group ............    9
   4.15 The Printer Access Protocol Group ...................    9
   4.16 The AppleTalk Session Protocol Group ................    9
   4.17 The AppleTalk Data Stream Protocol Group ............   10
   4.18 The AppleTalk Port Point to Point Group .............   10
   4.19 The Per Port Counters Group .........................   10
   4.20 Textual Conventions .................................   10
   5. Definitions ...........................................   11
   6. Acknowledgmnts ........................................   82
   7. References ............................................   83
   8. Security Considerations ...............................   84
   9. Authors' Addresses ....................................   84

1. The Network Management Framework 🧚

okay so the Internet-standard Network Management Framework is made of three components πŸ’… well, sort of four, depending on how you count:

  • STD 16/RFC 1155 defines the SMI, which is the set of mechanisms used for describing and naming objects for management purposes πŸ”₯
  • STD 16/RFC 1212 defines a more concise description mechanism, and it's wholly consistent with the SMI πŸ¦‹
  • RFC 1156 defines MIB-I, the core set of managed objects for the Internet suite of protocols. STD 17/RFC 1213 defines MIB-II, which is an evolution of MIB-I based on implementation experience and new operational requirements 🌸
  • STD 15/RFC 1157 defines the SNMP, the protocol used for network access to managed objects 🫢

the Framework also permits new objects to be defined for experimentation and evaluation. so there's room to play ✨

2. Additions and Changes πŸ’–

this MIB includes additions and changes to RFC 1243. the changes are outlined in the sections below πŸŽ€

2.1. New Groups 🌈

the following groups are introduced in this MIB πŸ‘‘

  • DDP Router
  • RTMP Stub
  • ZIP Router
  • ATP
  • PAP
  • ASP
  • ADSP
  • ATPortPtoP
  • Per Port Counters

2.2. Additional Variables πŸ“

ngl, a lot of variables were added, and most of them are counters. they got slotted into groups that already existed in RFC 1243. here's the list, section by section 🧚

2.2.1. AARP Additions πŸ’œ

aarpStatus
aarpLookups
aarpHits

2.2.2. ATPort Additions πŸ¦‹

atportNetFrom
atportZoneFrom
atportInPkts
atportOutPkts
atportHome
atportCurrentZone
atportConflictPhysAddr
atportZoneTable

2.2.3. DDP Addition ✨

ddpListenerTable

2.2.4. RTMP Additions 🌸

rtmpInDataPkts
rtmpOutDataPkts
rtmpInRequestPkts
rtmpNextIREqualChanges
rtmpNextIRLessChanges
rtmpRouteDeletes
rtmpRoutingTableOverflows

2.2.5. KIP Addition πŸŽ€

kipFrom

2.2.6. ZIP Additions πŸ’…

zipNetInfoTable
zipInErrors

2.2.7. NBP Additions πŸ”₯

nbpAddress
nbpSocket
nbpEnumerator
nbpInLookUpRequests
nbpInLookUpReplies
nbpInBroadcastRequests
nbpInForwardRequests
nbpOutLookUpReplies
nbpRegistrationFailures
nbpInErrors

2.2.8. ATEcho Additions 🌈

atechoOutRequests
atechoInReplies

2.3. Deprecations πŸ™ˆ

the following variables have been deprecated in this version of the MIB. so they're kinda retired now 😭

llapInPkts
llapOutPkts
llapInNoHandlers
llapInErrors

these llap variables were duplicated in the interfaces table of MIB-II, which is why they got the boot πŸ’€

2.4. Changes πŸ’«

here's the tea on what changed 🫢

  • the IMPORTS list has been updated to reflect the current SNMP documents.
  • new textual conventions have been defined.
  • hyphens have been removed from enumeration strings.
  • variables used as INDEXes to new tables have ACCESS not-accessible. the reason is that the values of the INDEX variables are already contained in the object identifier for any of the other variables in the table, so they don't need to be explicitly available as data. big brain move 🧠
  • the atportNetConfig and atportZoneConfig variables have been changed from read-only to read-write.
  • the atportZone variable has been renamed to atportZoneDefault, and its DESCRIPTION clause has been clarified.
  • the atportType, atportStatus, and kipType variables have had more values added to their enumeration lists.
  • the DDP group has been split into two groups. one includes variables that any AppleTalk node would implement, and the other includes variables that only a router would implement πŸ¦‹
  • the rtmpState variable now includes another enumeration, invalid(5), which is used when deleting rows.
  • the variables rtmpRangeStart, rtmpRangeEnd, rtmpNextHop, rtmpType, rtmpPort, and rtmpHops have been changed from read-write to read-only.
  • the ZIP Group has been renamed the ZIP End Node Group.
  • the DESCRIPTION clause for zipZoneIndex has been clarified.
  • the variables zipZoneName, zipZoneNetStart, and zipZoneNetEnd have been changed from read-write to read-only.
  • the nbpIndex variable has been changed from read-only to read-write.
  • the nbpObject, nbpType, and nbpZone variables now suggest that the agent reregister its service when any of these variables is changed. πŸ”
  • the nbpState variable includes new enumerations.

3. Objects πŸŽ€

okay so managed objects are accessed through a virtual information store, which is called the Management Information Base or MIB πŸ’œ objects in the MIB are defined using the subset of Abstract Syntax Notation One (ASN.1) [7] that's defined in the SMI. every object has a name, a syntax, and an encoding ✨

the name is an object identifier, which is an administratively assigned name that specifies an object type. the object type together with an object instance is what uniquely identifies one specific instantiation of the object 🧚 for human convenience, people often use a textual string, called the OBJECT DESCRIPTOR, to refer to the object type too.

the syntax of an object type defines the abstract data structure that matches that object type, and the ASN.1 language is used for this. however, the SMI [3] purposely restricts which ASN.1 constructs can be used. those restrictions are made explicitly for simplicity 🫢

the encoding of an object type is basically how that object type is represented using its syntax. the notion of syntax and encoding also implicitly ties into how the object type is represented when it's transmitted on the network 🌸

the SMI specifies the use of the basic encoding rules of ASN.1 [8], subject to the additional requirements imposed by SNMP. πŸ”₯

3.1. Format of Definitions 🌈

Section 5 contains the specification of all object types in this MIB module. the object types are defined using the conventions from the SMI, as amended by the extensions specified in [9]. πŸ’…

4. Overview πŸ¦‹

AppleTalk is a protocol suite with an open peer-to-peer architecture that runs over a variety of transmission media. it's defined in [10] πŸ’– this protocol suite interoperates with the IP protocol suite through various encapsulation methods.

as large AppleTalk networks get built alongside large IP networks, a way to manage AppleTalk networks with SNMP becomes necessary. this MIB defines the managed objects you'd use for that job, so it's a whole main character moment πŸ‘‘βœ¨

4.1. Structure of MIB 🧩

okay so the objects are sorted into these groups πŸ¦‹

  • LLAP
  • AARP
  • ATPort
  • DDP
  • DDP Router
  • RTMP
  • RTMP Stub
  • KIP
  • ZIP Router
  • ZIP End Node
  • NBP
  • ATEcho
  • ATP
  • PAP
  • ASP
  • ADSP
  • ATPortPtoP
  • Per Port Counters

bestie, these groups are the basic unit of conformance πŸ’… if a group's semantics applies to an implementation, then it must implement every object in that group. for example, a managed agent must implement the KIP group if and only if it implements the KIP protocol. πŸŽ€

the whole point of the groups is to give managed agents a clean way to know which objects they must implement ✨ no guessing, no vibes-only checklists πŸ’€

the LocalTalk Link Access Protocol (LLAP) is a medium-speed data-link protocol built for low cost and plug-and-play operation 🌸 this group is designed to manage every interface on a managed device that uses this protocol. ✨

4.3. The AppleTalk Address Resolution Protocol Group πŸ—ΊοΈ

the AppleTalk Address Resolution Protocol (AARP) is what maps between AppleTalk node addresses (the ones the Datagram Delivery Protocol uses) and the addresses of the underlying data link layer 🫢 the AARP table lets you manage the Address Mapping Table on the managed device. πŸ’œ

4.4. The AppleTalk Port Group πŸšͺ

an AppleTalk Port is a logical connection to a network that AppleTalk packets can travel over πŸ¦‹ the "network" could be a tunnel, a backbone network, a point-to-point link, etc, as well as a native AppleTalk network. this group lets you manage the configuration of these AppleTalk ports. πŸ”§

4.5. The Datagram Delivery Protocol Group πŸ“¦

the Datagram Delivery Protocol (DDP) is the network-layer protocol in charge of socket-to-socket delivery of datagrams across the AppleTalk Internet πŸ‘‘ this group manages the DDP layer on the managed device.

the DDP group holds statistical counters for the DDP protocol, plus a table describing the DDP sockets that have protocol handlers registered. πŸ“Š

4.6. The Datagram Delivery Protocol Router Group πŸ›£οΈ

some DDP variables only matter to AppleTalk routers πŸ™ˆ those variables live in this group. 🧚

4.7. The Routing Table Maintenance Protocol Group πŸ—‚οΈ

the Routing Table Maintenance Protocol (RTMP) is what AppleTalk routers use to create and maintain the routing tables that decide how datagrams get forwarded across the AppleTalk internet 🌈 the RTMP group manages the RTMP protocol and also the routing tables that this protocol generates. ✨

4.8. The Routing Table Maintenance Protocol Stub Group 🫧

the RTMP Stub process runs on end nodes so they can keep track of the routers on their networks πŸ’– the variables in this group apply to both routers and end nodes. this group manages the RTMP stub process. 🌸

4.9. The Kinetics Internet Protocol Group 🌐

the Kinetics Internet Protocol (KIP) is a protocol for encapsulating and routing AppleTalk datagrams over an IP internet πŸ¦‹ the name is historical, so don't let it confuse you, bestie πŸ™ˆ the KIP group manages the KIP routing protocol and the routing tables it generates. πŸ’…

4.10. The Zone Information Protocol Router Group 🏘️

the Zone Information Protocol (ZIP) maintains a mapping between networks and zone names, which helps the name lookup that the Name Binding Protocol does 🫢 some ZIP variables only apply to AppleTalk routers, and those are included in this group. πŸ‘‘

4.11. The Zone Information Protocol End Node Group 🧸

the ZIP End Node group manages the ZIP variables that apply to both routers and end nodes. ✨

4.12. The Name Binding Protocol Group 🏷️

the Name Binding Protocol (NBP) is a transport-level protocol that turns human-readable service names into the numeric AppleTalk network addresses needed to communicate across the AppleTalk network πŸ’œ the NBP group manages this protocol and the NBP services that exist on the managed device. πŸŽ€

4.13. The AppleTalk Echo Protocol Group πŸ“

the AppleTalk Echo Protocol is a transport-level protocol used to test and verify the status of the AppleTalk internet πŸ“ the AtEcho group manages this protocol. πŸ’–

4.14. The AppleTalk Transaction Protocol Group πŸ”

the AppleTalk Transaction Protocol (ATP) is a transport-level protocol defined to support transaction-based communications πŸ¦‹ the ATP group manages this protocol. ✨

4.15. The Printer Access Protocol Group πŸ–¨οΈ

the Printer Access Protocol (PAP) is a session-level protocol that lets workstations and print servers talk to each other 🌈 the PAP group manages this protocol. πŸ’…

4.16. The AppleTalk Session Protocol Group 🀝

the AppleTalk Session Protocol (ASP) is a session-level protocol that makes sequences of communications possible 🫢 ASP uses the services of the AppleTalk Transaction Protocol (ATP), but extends those services up into the session layer. the ASP group manages this protocol. 🌸

4.17. The AppleTalk Data Stream Protocol Group 🌊

the AppleTalk Data Stream Protocol (ADSP) is a session-level protocol that gives you symmetric, connection-oriented, full-duplex communication between two sockets on the AppleTalk internet πŸ’œ on top of that, ADSP handles flow control and reliability. the ADSP group manages this protocol. ✨

4.18. The AppleTalk Port Point to Point Group πŸ”—

the AppleTalk Port Point to Point Group manages ports that have one or more associated point-to-point connections. πŸŽ€

4.19. The Per Port Counters Group πŸ”’

the Per Port Counters Group holds a set of counters that are considered useful on a per-port basis. πŸ“Š

4.20. Textual Conventions πŸ“

new data types are introduced as textual conventions in this MIB document πŸ’– they make the specification easier to read and can make it easier to compare with other specifications where that fits. the introduction of these textual conventions has no effect on the syntax or semantics of any managed objects πŸ™ˆ they're just an artifact of the explanatory method used. objects defined in terms of this method are always encoded using the rules that define the primitive type. so no changes to the SMI or the SNMP are needed to accommodate these textual conventions, which are adopted purely for the convenience of readers and writers in pursuit of the elusive goal of clear, concise, and unambiguous MIB documents. 🧚

the new data types are:

ATNetworkNumber ::=         -- 2 octets of network
                            -- number in network
                            -- byte order
        OCTET STRING (SIZE (2))

DdpNodeAddress ::=          -- 2 octets of net number
                            -- in network byte order,
                            -- 1 octet of node number
        OCTET STRING (SIZE (3))

DdpSocketAddress ::=        -- 2 octets of net number
                            -- in network byte order,
                            -- 1 octet of node number,
                            -- 1 octet of socket
                            -- number (0..255)
        OCTET STRING (SIZE (4))

ATName ::=              -- 0 to 32 octets of
                            -- AppleTalk ASCII [10]
        OCTET STRING (SIZE (0..32))

5. Definitions πŸŽ€

the MIB module itself comes next, verbatim πŸ’…

        APPLETALK-MIB DEFINITIONS ::= BEGIN

        IMPORTS
            Counter, IpAddress, TimeTicks
                FROM RFC1155-SMI
            DisplayString, mib-2
                FROM RFC1213-MIB
            OBJECT-TYPE
                FROM RFC-1212;

        --  This MIB module uses the extended OBJECT-TYPE macro as
        --  defined in RFC-1212.

        --  The following reference is used in this MIB:
        --  [Inside AppleTalk]
        --  This refers to Gursharan S. Sidhu, Richard F. Andrews, and
        --  Alan B. Oppenheimer, Inside AppleTalk, Second Edition,
        --  Addison Wesley, (1990).



        --  AppleTalk MIB

            appletalk    OBJECT IDENTIFIER ::= { mib-2 13 }


                ATNetworkNumber ::=         -- 2 octets of net number
                                            -- in network byte order
                        OCTET STRING (SIZE (2))

                DdpNodeAddress ::=          -- 2 octets of net number
                                            -- in network byte order,
                                            -- 1 octet of node number
                        OCTET STRING (SIZE (3))

                DdpSocketAddress ::=        -- 2 octets of net number
                                            -- in network byte order,
                                            -- 1 octet of node number,
                                            -- 1 octet of socket number
                                            -- (0..255)
                        OCTET STRING (SIZE (4))

                ATName ::=              -- 0 to 32 octets of AppleTalk
                                            -- ASCII [Inside AppleTalk]
                        OCTET STRING (SIZE (0..32))


            llap         OBJECT IDENTIFIER ::= { appletalk 1 }
            aarp         OBJECT IDENTIFIER ::= { appletalk 2 }
            atport       OBJECT IDENTIFIER ::= { appletalk 3 }
            ddp          OBJECT IDENTIFIER ::= { appletalk 4 }
            rtmp         OBJECT IDENTIFIER ::= { appletalk 5 }
            kip          OBJECT IDENTIFIER ::= { appletalk 6 }
            zipRouter    OBJECT IDENTIFIER ::= { appletalk 7 }
            nbp          OBJECT IDENTIFIER ::= { appletalk 8 }
            atecho       OBJECT IDENTIFIER ::= { appletalk 9 }
            atp          OBJECT IDENTIFIER ::= { appletalk 10 }
            pap          OBJECT IDENTIFIER ::= { appletalk 11 }
            asp          OBJECT IDENTIFIER ::= { appletalk 12 }
            adsp         OBJECT IDENTIFIER ::= { appletalk 13 }
            atportptop   OBJECT IDENTIFIER ::= { appletalk 14 }
            rtmpStub     OBJECT IDENTIFIER ::= { appletalk 16 }
            zipEndNode   OBJECT IDENTIFIER ::= { appletalk 17 }
            perPort  OBJECT IDENTIFIER ::= { appletalk 18 }


        -- The LLAP Group
        --
        -- Implementation of this group is mandatory for all
        -- entities that implement LLAP
        --
        -- Notes for the interfaces group
        --
        -- When implementing the Interfaces Group of MIB-II, it is
        -- suggested that the following values be used for any
        -- LocalTalk interfaces:
        --  ifMtu: 600
        --  ifSpeed: 230000
        --  ifPhysAddress: the one octet node number for the
        --      particular interface
        --
        -- Note also that LLAP control packets should not be
        -- included in the Interfaces Group packet or octet
        -- counters.

okay so the LLAP table is literally the main character of this part πŸ’…

          llapTable OBJECT-TYPE
              SYNTAX SEQUENCE OF LlapEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The list of LLAP entries."
              ::= { llap 1 }

          llapEntry OBJECT-TYPE
              SYNTAX LlapEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "An LLAP entry containing objects for the LocalTalk
                  Link Access Protocol for a particular LocalTalk
                  interface.

                  As an example, an instance of the llapOutPkts object
                  might be named llapOutPks.1"
              INDEX { llapIfIndex }
              ::= { llapTable 1 }

          LlapEntry ::= SEQUENCE {
              llapIfIndex             INTEGER,
              llapInPkts              Counter,
              llapOutPkts             Counter,
              llapInNoHandlers        Counter,
              llapInLengthErrors      Counter,
              llapInErrors            Counter,
              llapCollisions          Counter,
              llapDefers              Counter,
              llapNoDataErrors        Counter,
              llapRandomCTSErrors     Counter,
              llapFCSErrors           Counter
          }

          llapIfIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The LLAP interface to which this entry pertains.
                  The interface identified by a particular value of
                  this index is the same interface as identified
                  by the same value of ifIndex."
              ::= { llapEntry 1 }

          -- this object has been deprecated because it duplicates the
          -- sum of the MIB-II variables ifInUcastPkts and
          -- ifInNUcastPkts

          llapInPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS deprecated
              DESCRIPTION
                  "The total number of good data packets received on
                  this LocalTalk interface."
              ::= { llapEntry 2 }

          -- this object has been deprecated because it duplicates the
          -- sum of the MIB-II variables ifOutUcastPkts and
          -- ifOutNUcastPkts

          llapOutPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS deprecated
              DESCRIPTION
                  "The total number of data packets transmitted on
                  this LocalTalk interface."
              ::= { llapEntry 3 }

          -- this object has been deprecated because it duplicates the
          -- MIB-II variable ifInUnknownProtos

          llapInNoHandlers OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS deprecated
              DESCRIPTION
                  "The total number of good packets received on this
                  LocalTalk interface for which there was no protocol
                  handler."
              ::= { llapEntry 4 }

          llapInLengthErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of packets received on this LocalTalk
                  interface whose actual length did not match the length
                  in the header."
              ::= { llapEntry 5 }

          -- this object has been deprecated because it duplicates the
          -- MIB-II variable ifInErrors

          llapInErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS deprecated
              DESCRIPTION
                  "The total number of packets containing errors received
                  on this LocalTalk interface."
              ::= { llapEntry 6 }

          llapCollisions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of collisions assumed on this
                  LocalTalk interface due to the lack of a lapCTS reply."
              ::= { llapEntry 7 }

          llapDefers OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of times this LocalTalk interface
                  deferred to other packets."
              ::= { llapEntry 8 }

          llapNoDataErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of times this LocalTalk interface
                  received a lapRTS packet and expected a data packet,
                  but did not receive any data packet."
              ::= { llapEntry 9 }

          llapRandomCTSErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of times this LocalTalk interface
                  received a lapCTS packet that was not solicited by a
                  lapRTS packet."

              ::= { llapEntry 10 }

          llapFCSErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of times this LocalTalk interface
                  received a packet with an FCS (Frame Check Sequence)
                  error."
              ::= { llapEntry 11 }


          -- The AARP Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement AARP

          aarpTable OBJECT-TYPE
              SYNTAX SEQUENCE OF AarpEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The AppleTalk Address Translation Table contains an
                  equivalence of AppleTalk Network Addresses to the link
                  layer physical address."
              ::= { aarp 1 }

          aarpEntry OBJECT-TYPE
              SYNTAX AarpEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "Each entry contains one AppleTalk Network Address to
                  physical address equivalence.

                  As an example, an instance of the aarpPhysAddress
                  object might be named aarpPhysAddress.1.0.80.234"
              INDEX { aarpIfIndex, aarpNetAddress }
              ::= { aarpTable 1 }

          AarpEntry ::= SEQUENCE {
              aarpIfIndex     INTEGER,
              aarpPhysAddress OCTET STRING,
              aarpNetAddress  DdpNodeAddress,
              aarpStatus      INTEGER
          }
          aarpIfIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The interface on which this entry's equivalence is
                  effective.  The interface identified by a particular
                  value of this index is the same interface as
                  identified by the same value of ifIndex."
              ::= { aarpEntry 1 }

          aarpPhysAddress OBJECT-TYPE
              SYNTAX OCTET STRING
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The media-dependent physical address."
              ::= { aarpEntry 2 }

          aarpNetAddress OBJECT-TYPE
              SYNTAX DdpNodeAddress
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The AppleTalk Network Address corresponding to the
                  media-dependent physical address."
              ::= { aarpEntry 3 }

          aarpStatus OBJECT-TYPE
              SYNTAX INTEGER {
                  valid(1),
                  invalid(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of this AARP entry.
                  Setting this object to the value invalid(2) has the
                  effect of invalidating the corresponding entry in the
                  aarpTable.  That is, it effectively disassociates
                  the mapping identified with said entry.  It is an
                  implementation-specific matter as to whether the agent
                  removes an invalidated entry from the table.
                  Accordingly, management stations must be prepared to
                  receive from agents tabular information corresponding
                  to entries not currently in use.  Proper
                  interpretation of such entries requires examination
                  of the relevant aarpStatus object."

              ::= { aarpEntry 4 }

          aarpLookups OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the AARP cache for this entity
                  was searched."
              ::= { aarp 2 }

          aarpHits OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times an entry was searched for and
                  found in the AARP cache for this entity."
              ::= { aarp 3 }


          -- The ATPort Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement AppleTalk ports
          --
          -- Note that to be compliant with this group, all variables
          -- that have read-write access must be implemented as
          -- read-write.

          atportTable OBJECT-TYPE
              SYNTAX SEQUENCE OF AtportEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A list of AppleTalk ports for this entity."
              ::= { atport 1 }

          atportEntry OBJECT-TYPE
              SYNTAX AtportEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The description of one of the AppleTalk
                  ports on this entity.

                  As an example, an instance of the atportNetFrom object
                  might be named atportNetFrom.2"

              INDEX { atportIndex }
              ::= { atportTable 1 }

          AtportEntry ::= SEQUENCE {
              atportIndex               INTEGER,
              atportDescr               DisplayString,
              atportType                INTEGER,
              atportNetStart            ATNetworkNumber,
              atportNetEnd              ATNetworkNumber,
              atportNetAddress          DdpNodeAddress,
              atportStatus              INTEGER,
              atportNetConfig           INTEGER,
              atportZoneConfig          INTEGER,
              atportZoneDefault         ATName,
              atportIfIndex             INTEGER,
              atportNetFrom             DdpNodeAddress,
              atportZoneFrom            DdpNodeAddress,
              atportInPkts              Counter,
              atportOutPkts             Counter,
              atportHome                INTEGER,
              atportCurrentZone         ATName,
              atportConflictPhysAddr    OCTET STRING
          }

okay, this is where the port table really comes together πŸ¦‹ every object below hangs off atportEntry, so let's see what each one is doing ✨

          atportIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A unique value for each AppleTalk port.
                  Its value is between 1 and the total number of
                  AppleTalk ports.  The value for each port must
                  remain constant at least from the re-initialization
                  of the entity's network management system to the
                  next re-initialization."
              ::= { atportEntry 1 }

          atportDescr OBJECT-TYPE
              SYNTAX DisplayString
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "A text string containing information about the
                  port.  This string is intended for presentation
                  to a human; it must not contain anything but printable
                  ASCII characters."
              ::= { atportEntry 2 }

          -- Several objects throughout the MIB key off of atportType to
          -- determine the format of OCTET STRING addresses of peers.
          -- The address formats are as follows:
          --     localtalk, ethertalk1, ethertalk2, tokentalk, iptalk,
          --       fdditalk, smdstalk, arctalk, and virtual take the
          --       format of DdpNodeAddress
          --     serialPPP: null OCTET STRING
          --     serialNonstandard: vendor specific
          --     aurp: see AURP MIB to determine format
          --     frameRelay: 32 bit DLCI in network byte order
          --       (OCTET STRING (SIZE (4)))
          --     x25: X121Address (see RFC 1382)
          --     ip: IP address (OCTET STRING (SIZE (4)))
          --     osi: NSAP (OCTET STRING (SIZE (3..20)))
          --     decnetIV: 6 bit area, 10 bit host in network byte order
          --       (OCTET STRING (SIZE (2)))
          --     arap: ???
          --     nonAppleTalk3Com: based on ifType
          --     ipx: 32 bit network number in network byte order
          --       followed by datalink address of host
          --     arns: 32 bit ARNS header
          --     hdlc: DdpNodeAddress or null OCTET STRING

          atportType OBJECT-TYPE
              SYNTAX INTEGER {
                   other(1),       -- none of the following
                   localtalk(2),
                   ethertalk1(3),
                   ethertalk2(4),
                   tokentalk(5),
                   iptalk(6),
                   serialPPP(7),
                   serialNonstandard(8),
                   virtual(9),    -- an internal interface
                   fdditalk(10),
                   arctalk(11),
                   smdstalk(12),
                   aurp(13),
                   frameRelay(14),
                   x25(15),
                   ip(16),
                   osi(17),
                   decnetIV(18),
                   arap(19),
                   isdnInThePacketMode(20),
                   nonAppleTalk3Com(21),
                   ipx(22),
                   arns(23),
                   hdlc(24)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The type of port, distinguished by the protocol
                  immediately below DDP in the protocol stack."
              ::= { atportEntry 3 }

          atportNetStart OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The first AppleTalk network address in the range
                  configured for this port.  If this port is not a
                  native AppleTalk port, this object shall have the
                  value of two octets of zero."
              ::= { atportEntry 4 }

          atportNetEnd OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The last AppleTalk network address in the range
                  configured for this port.  If the network to which
                  this AppleTalk port is connected is a non-extended
                  network, or if it is not a native AppleTalk port,
                  the value for atportNetEnd shall be two octets of
                  zero."
              ::= { atportEntry 5 }

          atportNetAddress OBJECT-TYPE
              SYNTAX DdpNodeAddress
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The AppleTalk network address configured for this
                  port.  In addition, this value may be used as a hint
                  for an initial node number used during node-finding.
                  If this port is not a native AppleTalk port, this
                  object shall have the value of three octets of zero."
              ::= { atportEntry 6 }

          atportStatus OBJECT-TYPE
              SYNTAX INTEGER {
                   routing(1), --this port is fully configured & routing
                   unconfigured(2),
                   off(3),
                   invalid(4),
                   endNode(5), -- this port is acting as an end node
                   offDueToConflict(6), -- port is off due to
                                -- configuration conflict
                   other(7) -- none of the states defined above
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The configuration status of this port.

                  Setting this object to the value invalid(4) has the
                  effect of invalidating the corresponding entry in the
                  atportTable.  That is, it effectively disassociates the
                  mapping identified with said entry.  It is an
                  implementation-specific matter as to whether the agent
                  removes an invalidated entry from the table.
                  Accordingly, management stations must be prepared to
                  receive from agents tabular information corresponding
                  to entries not currently in use.  Proper
                  interpretation of such entries requires examination
                  of the relevant atportStatus object."
              ::= { atportEntry 7 }

          atportNetConfig OBJECT-TYPE
              SYNTAX INTEGER {
                  conflictOrientedSeed(1),  -- use configured network
                        -- range even if it conflicts with another
                        -- AppleTalk device
                  garnered(2), -- acquire from another AppleTalk device
                  guessed(3),  -- generate a "random" network range
                  unconfigured(4), -- no other value applies
                  conflictAverseSeed(5),  -- use configured network
                        -- range, but don't come up if it conflicts
                  softSeed(6)  -- attempt to use configured network
                        -- range, but use network range from another
                        -- router if our configuration conflicts
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of the network information for this port.
                  If this port is not a native AppleTalk port, this
                  object shall have the value unconfigured(4)."
              ::= { atportEntry 8 }

          atportZoneConfig OBJECT-TYPE
              SYNTAX INTEGER {
                  conflictOrientedSeed(1), -- use configured zone
                       -- information even if it conflicts with
                       -- another AppleTalk device
                  garnered(2), -- acquire from another AppleTalk device
                  guessed(3),  -- generate "random" zone information
                  unconfigured(4), -- no other value applies
                  conflictAverseSeed(5),  -- use configured zone
                        -- information, but don't come up if it
                        -- conflicts
                  softSeed(6)  -- attempt to use configured zone
                        -- information, but use zone information
                        -- from another router if our configuration
                        -- conflicts
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of the zone information for this port.
                  If this port is not a native AppleTalk port, this
                  object shall have the value unconfigured(4)."
              ::= { atportEntry 9 }

          atportZoneDefault OBJECT-TYPE
              SYNTAX ATName
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The name of the default zone for this port.  If
                  this port only has one zone, that zone is
                  represented here. If this port is not a native
                  AppleTalk port, this object shall contain an octet
                  string of zero length.

                  When this value is changed in a router, the router
                  must send a zipNotify packet on the associated
                  network."
              ::= { atportEntry 10 }

          atportIfIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The physical interface associated with this
                  AppleTalk port.  The interface identified by a
                  particular value of this index is the same interface
                  as identified by the same value of ifIndex."
              ::= { atportEntry 11 }

          atportNetFrom OBJECT-TYPE
              SYNTAX DdpNodeAddress
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "When atportNetConfig is set to garnered(2), this
                  variable contains the DDP address of an entity from
                  which the AppleTalk network number was garnered.
                  When atportNetConfig is set to
                  conflictOrientedSeed(1), conflictAverseSeed(5),
                  or softSeed(6), this variable contains the DDP
                  address of an entity which confirmed or supplied our
                  AppleTalk network number, for example by replying to
                  a ZIP GetNetInfo request.

                  If atportNetConfig is set to guessed(3) or
                  unconfigured(4), or if the entity has not received
                  any network number confirmation, this variable
                  should be set to three octets of zero."
              ::= { atportEntry 12 }

          atportZoneFrom OBJECT-TYPE
              SYNTAX DdpNodeAddress
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "When atportZoneConfig is set to garnered(2), this
                  variable contains the DDP address of an entity from
                  which the AppleTalk zone list was garnered.

                  When atportZoneConfig is set to
                  conflictOrientedSeed(1), conflictAverseSeed(5), or
                  softSeed(6), this variable contains the DDP address
                  of an entity which confirmed or supplied our
                  AppleTalk zone information, for example by replying
                  to a ZIP GetNetInfo request or a ZIP Query.

                  If atportZoneConfig is set to guessed(3) or
                  unconfigured(4), or if the entity has not received
                  any zone confirmation, this variable should be set
                  to three octets of zero."
              ::= { atportEntry 13 }

Okay so picking up right where we left off in the port table, bestie 🧚 atportInPkts and atportOutPkts are the packet counters for each port, and they're both read-only counters, so no messing with them πŸ“Šβœ¨

      atportInPkts OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The number of packets received by this entity on
              this port."
          ::= { atportEntry 14 }

      atportOutPkts OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The number of packets transmitted by this entity on
              this port."
          ::= { atportEntry 15 }

Now atportHome is giving "am I the boss of this port?" πŸ‘‘ It's an INTEGER that's either home(1) or notHome(2). Homed means the entity is allowed to do NBP registrations for the services it wants to advertise on that port πŸ’…

      atportHome OBJECT-TYPE
          SYNTAX INTEGER {
              home(1),
              notHome(2)
          }
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "An indication of whether or not the entity is
              homed on this port, that is to say, a port on which
              the entity could perform NBP registrations for
              services that it chooses to advertise."
          ::= { atportEntry 16 }

atportCurrentZone is the zone the port is currently using, and it's read-write πŸŽ€ It's generally the zone where services on that port get registered. If the port isn't a native AppleTalk port, this one is a zero-length octet string, so it's basically empty 🫠 Also, changing it does NOT touch the nbpTable, which is a super important detail so don't miss it πŸ™ˆ

      atportCurrentZone OBJECT-TYPE
          SYNTAX ATName
          ACCESS read-write
          STATUS mandatory
          DESCRIPTION
              "The current zone for the port.  In general, this is
              the zone name in which services on this port will
              be registered.  If this port is not a native
              AppleTalk port, this object shall contain an octet
              string of zero length.  Note that modifications to
              this object do not affect the nbpTable."
          ::= { atportEntry 17 }

      atportConflictPhysAddr OBJECT-TYPE
          SYNTAX OCTET STRING
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The link-layer address of a device which caused
              this entity to set atportStatus to
              offDueToConflict(6). If this address is not
              available, or if the entity has not set atportStatus
              to offDueToConflict, this object shall be a zero
              length OCTET STRING."
          ::= { atportEntry 18 }

Next up is the zone table, and this is where it gets lowkey intense 🌸 The default zone for each port lives in atportZoneDefault, and every other zone for that port goes in atportZoneTable. If a port only has one zone, it should go in atportZoneDefault and this table should just be empty πŸ“

The sneaky part is case. AppleTalk zone names match case-insensitively, but this table keeps the names exactly as they were stored, mixed case and all πŸ¦‹ For SET requests, the agent does a case-insensitive search and a case-sensitive search. If the insensitive one hits but the sensitive one misses, the "equivalent" zone name already lives in another entry with different capitalization, so the SET fails because the name is inconsistent. SNMPv1 is supposed to return a genErr for that. The payoff is that only one version of a zone name shows up per agent, but the management station has to query using that exact name. Iconic trade-off, ngl πŸ’…

The thing to remember: a SET that matches case-insensitively but not case-sensitively is rejected, so always query with the exact spelling.
      -- The atportZoneTable stores information about the zones
      -- associated with each port.  The default zone for each
      -- port is stored in the port's atportZoneDefault variable;
      -- all other zones for the port are listed in this table.
      -- If a port only has one zone, it should be stored in the
      -- port's atportZoneDefault variable, and this table should
      -- be empty.
      --
      -- One of the indexes for this table is atportZoneName.
      -- Even though AppleTalk zone name matches are
      -- case-insensitive, this table will store zone names
      -- regardless of case.  SNMP Get, GetNext and Set operations
      -- are performed on these (potentially) mixed case strings
      -- according to the normal SNMP rules with the following
      -- caveat: in processing a SET request, the agent shall
      -- perform a case-insensitive search and a case-sensitive
      -- search.  If the case-insensitive search matches and the
      -- case-sensitive search does not match, the "equivalent"
      -- zone name exists in another entry with a different
      -- capitalization and the SET request shall fail due
      -- to the name being inconsistent (SNMPv1 should return a
      -- genErr.) This insures that only one version of a zone
      -- name will appear in each agent, at the expense of forcing
      -- a management station to query using that exact name.

      atportZoneTable OBJECT-TYPE
          SYNTAX SEQUENCE OF AtportZoneEntry
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
              "The table of zone information for non-default
              zones on ports."
          ::= { atport 2 }

      atportZoneEntry OBJECT-TYPE
          SYNTAX AtportZoneEntry
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
              "An entry of zone information for a port.

              As an example, an instance of the atportZoneStatus
              object might be named
              atportZoneStatus.2.8.84.119.105.108.105.103.104.116"
          INDEX { atportZonePort, atportZoneName }
          ::= { atportZoneTable 1 }

      AtportZoneEntry ::= SEQUENCE {
          atportZonePort     INTEGER,
          atportZoneName     ATName (SIZE (1..32)),
          atportZoneStatus   INTEGER
      }

      atportZonePort OBJECT-TYPE
          SYNTAX INTEGER
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
              "An integer representing the port to which this zone
              belongs. The port identified by a particular value
              of this object is the same port as identified by the
              same value of atportIndex."
          ::= { atportZoneEntry 1 }

      atportZoneName OBJECT-TYPE
          SYNTAX ATName (SIZE (1..32))
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
              "A zone name configured for the AppleTalk port
              referred to in the corresponding entry of
              atportZonePort.

              When this value is changed in a router, the router
              must send a zipNotify packet on the associated
              network."
          ::= { atportZoneEntry 2 }

Now atportZoneStatus is where you flip an entry between valid(1) and invalid(2) πŸ”₯ Setting it to invalid(2) basically cuts the mapping for that entry, but the agent is allowed to decide whether it actually deletes the row or keeps it around πŸ€·β€β™€οΈ That means management stations have to be ready for leftover entries that aren't in use, and the only way to tell them apart is by checking atportZoneStatus.

      atportZoneStatus OBJECT-TYPE
          SYNTAX INTEGER {
              valid(1),
              invalid(2)
          }
          ACCESS read-write
          STATUS mandatory
          DESCRIPTION

              "The status of this zone entry.

              Setting this object to the value invalid(2) has the
              effect of invalidating the corresponding entry in
              the atportZoneTable.  That is, it effectively
              disassociates the mapping identified with said
              entry.  It is an implementation-specific matter as
              to whether the agent removes an invalidated entry
              from the table. Accordingly, management stations
              must be prepared to receive from agents tabular
              information corresponding to entries not currently
              in use.  Proper interpretation of such entries
              requires examination of the relevant
              atportZoneStatus object."
          ::= { atportZoneEntry 3 }

Next is the DDP group πŸ¦‹ Honestly the top comment is the main character of this whole section. Implementing this group is mandatory for any entity that implements DDP, and it's made of DDP variables that a router or an end node could both have πŸ’œ The variables listed are ddpOutRequests, ddpOutShorts, ddpOutLongs, ddpInReceives, ddpInLocalDatagrams, ddpNoProtocolHandlers, ddpTooShortErrors, ddpTooLongErrors, ddpShortDDPErrors, ddpChecksumErrors, and ddpListenerTable. They aren't numbered in order on purpose, so that nothing from RFC 1243 had to be deprecated πŸ™Œ

      -- The DDP Group
      --
      -- Implementation of this group is mandatory for all
      -- entities that implement DDP
      --
      -- This group consists of DDP variables that would be
      -- implemented by either a router or an end node.  The
      -- following variables are included:
      --     ddpOutRequests
      --     ddpOutShorts
      --     ddpOutLongs
      --     ddpInReceives
      --     ddpInLocalDatagrams
      --     ddpNoProtocolHandlers
      --     ddpTooShortErrors
      --     ddpTooLongErrors
      --     ddpShortDDPErrors
      --     ddpChecksumErrors
      --     ddpListenerTable
      --
      -- Note that the variables in this group are not numbered
      -- sequentially.  This was done so that it was not necessary
      -- to deprecate variables from RFC 1243.

ddpOutRequests counts the DDP datagrams that local DDP clients handed to DDP for transmission. It doesn't include anything already counted in ddpForwRequests πŸ“¦

      ddpOutRequests OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of DDP datagrams which were
              supplied to DDP by local DDP clients in requests for
              transmission.  Note that this counter does not
              include any datagrams counted in ddpForwRequests."
          ::= { ddp 1 }

      ddpOutShorts OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of short DDP datagrams which were
              transmitted from this entity."
          ::= { ddp 2 }

      ddpOutLongs OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of long DDP datagrams which were
              transmitted from this entity."
          ::= { ddp 3 }

      ddpInReceives OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of input datagrams received by
              DDP, including those received in error."
          ::= { ddp 4 }

      ddpInLocalDatagrams OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of input DDP datagrams for which
              this
              entity was their final DDP destination."
          ::= { ddp 6 }

      ddpNoProtocolHandlers OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of DDP datagrams addressed to this
              entity that were addressed to an upper layer protocol
              for which no protocol handler existed."
          ::= { ddp 7 }

Now the error counters πŸ™ˆ ddpTooShortErrors counts inputs that got dropped because the received data was shorter than the length in the DDP header, or shorter than the expected DDP header itself. ddpTooLongErrors counts inputs dropped for going over the maximum DDP datagram size. ddpShortDDPErrors counts inputs dropped because this entity wasn't their final destination and they were short DDP. ddpChecksumErrors counts the inputs where this entity was the final destination and they got dropped for a checksum error 🧚

      ddpTooShortErrors OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of input DDP datagrams dropped
              because the received data length was less than the
              data length specified in the DDP header or the
              received data length was less than the length of the
              expected DDP header."
          ::= { ddp 9 }

      ddpTooLongErrors OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of input DDP datagrams dropped
              because they exceeded the maximum DDP datagram
              size."
          ::= { ddp 10 }

      ddpShortDDPErrors OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of input DDP datagrams dropped
              because this entity was not their final destination
              and their type was short DDP."
          ::= { ddp 12 }

      ddpChecksumErrors OBJECT-TYPE
          SYNTAX Counter
          ACCESS read-only
          STATUS mandatory
          DESCRIPTION
              "The total number of input DDP datagrams for which
              this DDP entity was their final destination, and
              which were dropped because of a checksum error."
          ::= { ddp 14 }

Last one in this chunk is ddpListenerTable, which stores info for each DDP socket that has a listener attached πŸŽ€ It's not-accessible, so you reach it through its entries rather than directly 🌈

      ddpListenerTable OBJECT-TYPE
          SYNTAX SEQUENCE OF DdpListenerEntry
          ACCESS not-accessible
          STATUS mandatory
          DESCRIPTION
              "The ddpListenerTable stores information for each
              DDP socket that has a listener."
          ::= { ddp 15 }

okay bestie, we're still deep in the MIB era 🧚 this chunk is all about the DDP listener table and then the DDP router group, where the forwarding table lives πŸ¦‹ the code is shown exactly as written, because the definitions have to stay perfect ✨

          ddpListenerEntry OBJECT-TYPE
              SYNTAX DdpListenerEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "This ddpListenerEntry contains information about a
                  particular socket that has a socket listener.

                  As an example, an instance of the ddpListenerStatus
                  object might be named ddpListenerStatus.0.80.220.1"
              INDEX { ddpListenerAddress }
              ::= { ddpListenerTable 1 }

          DdpListenerEntry ::= SEQUENCE {
              ddpListenerAddress         DdpSocketAddress,
              ddpListenerInPkts          Counter,
              ddpListenerStatus          INTEGER
          }

          ddpListenerAddress OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The DDP address that this socket listener is bound
                  to.  If this socket listener isn't bound to a
                  particular address, for instance if it is intended
                  for all interfaces, this object shall have the value
                  of three octets of zero followed by one octet of
                  socket number. The socket number must not equal
                  zero."
              ::= { ddpListenerEntry 1 }

          ddpListenerInPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of packets received for this listener."
              ::= { ddpListenerEntry 2 }

          ddpListenerStatus OBJECT-TYPE
              SYNTAX INTEGER {
                  valid(1),
                  invalid(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of this socket listener.
                  Setting this object to the value invalid(2) has the
                  effect of invalidating the corresponding entry in the
                  ddpListenerTable.  That is, it effectively
                  disassociates the mapping identified with said
                  entry.  It is an implementation-specific matter as
                  to whether the agent removes an invalidated entry
                  from the table. Accordingly, management stations
                  must be prepared to receive from agents tabular
                  information corresponding to entries not currently
                  in use.  Proper interpretation of such entries
                  requires examination of the relevant
                  ddpListenerStatus object."
              ::= { ddpListenerEntry 3 }


          -- The DDP Router Group
          --
          -- Implementation of this group is required for all routers
          -- which implement DDP
          --
          -- This group consists of DDP variables that only a router
          -- would implement.  The following variables are included:
          --     ddpForwRequests
          --     ddpOutNoRoutes
          --     ddpBroadcastErrors
          --     ddpHopCountErrors
          --     ddpForwardingTable
          --
          -- Note that the variables in this group are not numbered
          -- sequentially.  This was done so that variables from
          -- RFC 1243 did not need to be deprecated.

          ddpForwRequests OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of input datagrams for which this entity
                  was not their final DDP destination, as a result of
                  which an attempt was made to find a route to forward
                  them to that final destination."
              ::= { ddp 5 }

          ddpOutNoRoutes OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of DDP datagrams dropped because a
                  route could not be found to their final destination."
              ::= { ddp 8 }

          ddpBroadcastErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of input DDP datagrams dropped
                  because this entity was not their final destination
                  and they were addressed to the link level broadcast."
              ::= { ddp 11 }

          ddpHopCountErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The total number of input DDP datagrams dropped
                  because this entity was not their final destination
                  and their hop count would exceed 15."
              ::= { ddp 13 }

          -- The ddpForwardingTable is a read-only table which shows the
          -- next hop that a datagram will take when being routed to a
          -- specific network.  If a manager wishes to change data in
          -- this table via SNMP, he must change it in the MIB for the
          -- routing protocol itself (by incrementing hop counts,
          -- etc), rather than in this table.  This table is derived
          -- by the managed entity from the information it receives
          -- from the routing protocols that it supports.
          --
          -- This table also shows the routing table from which the next
          -- hop was derived.  When a MIB is written for an AppleTalk
          -- routing protocol, it should include the definition of an
          -- object identifier which will be used in the
          -- ddpForwardingProto variable defined here.  (For example,
          -- a value for RTMP is defined as { ddp-forw-proto-oids 1 }
          -- below.)
          --
          -- To look for a specific net N in this table, it is suggested
          -- that the management station perform a get-next query for
          -- ddpForwardingNetEnd.(N-1).  This will retrieve the correct
          -- row if it exists in the table.

          ddpForwardingTable OBJECT-TYPE
              SYNTAX SEQUENCE OF DdpForwardingEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A table of forwarding entries for DDP.  This table
                  contains a route for each AppleTalk network currently
                  known to the entity."
              ::= { ddp 16 }

          ddpForwardingEntry OBJECT-TYPE
              SYNTAX DdpForwardingEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A forwarding entry for a particular AppleTalk
                  network.

                  As an example, an instance of the ddpForwardingPort
                  object might be named ddpForwardingPort.0.90"
              INDEX { ddpForwardingNetEnd }
              ::= { ddpForwardingTable 1 }

          DdpForwardingEntry ::= SEQUENCE {
              ddpForwardingNetEnd         ATNetworkNumber,
              ddpForwardingNetStart       ATNetworkNumber,
              ddpForwardingNextHop        OCTET STRING,
              ddpForwardingProto          OBJECT IDENTIFIER,
              ddpForwardingModifiedTime   TimeTicks,
              ddpForwardingUseCounts      Counter,
              ddpForwardingPort           INTEGER
          }

          ddpForwardingNetEnd OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The last network number in the network range
                  matched by this forwarding entry.  This will not be
                  zero even if this corresponds to a non-extended
                  net."
              ::= { ddpForwardingEntry 1 }

          ddpForwardingNetStart OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The first network number in the network range
                  matched by this forwarding entry."
              ::= { ddpForwardingEntry 2 }

          ddpForwardingNextHop OBJECT-TYPE
              SYNTAX OCTET STRING
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The next hop in the route to this entry's
                  destination network.  The format of this address can
                  be determined by examinating the atportType
                  corresponding to this entry."
              ::= { ddpForwardingEntry 3 }

          ddpForwardingProto OBJECT-TYPE
              SYNTAX OBJECT IDENTIFIER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The routing mechanism by which this route was
                  learned."
              ::= { ddpForwardingEntry 4 }

          ddpForwardingModifiedTime OBJECT-TYPE
              SYNTAX TimeTicks
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The value of sysUpTime at the time of the last
                  modification to this entry.  The initial value of
                  ddpForwardingModified time shall be the value of
                  sysUpTime at the time the entry is created."
              ::= { ddpForwardingEntry 5 }

          ddpForwardingUseCounts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION

                  "The number of times this entry has been used to
                  route a packet to the destination network.  Note
                  that this counter is not cleared when the
                  corresponding ddpForwardingNextHop variable
                  changes."
             ::= { ddpForwardingEntry 6 }

          ddpForwardingPort OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The AppleTalk port through which
                  ddpForwardingNextHop is reached.  The interface
                  identified by a particular value of this variable is
                  the same interface as identified by the same value
                  of atportIndex."
              ::= { ddpForwardingEntry 7 }


          ddpForwProtoOids OBJECT IDENTIFIER ::= { ddp 17 }

          -- The value to be assigned to ddpForwardingProto when the
          -- routing protocol is RTMP.
          rtmpRoutingProto OBJECT IDENTIFIER ::= { ddpForwProtoOids 1 }

          -- The value to be assigned to ddpForwardingProto when the
          -- routing protocol is KIP.
          kipRoutingProto OBJECT IDENTIFIER ::= { ddpForwProtoOids 2 }

          ddpForwardingTableOverflows OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the entity attempted to add an
                  entry to the forwarding table but failed due to
                  overflow."
              ::= { ddp 18 }


          -- The RTMP Group
          --
          -- Implementation of this group is required for all routers
          -- which implement RTMP

          rtmpTable OBJECT-TYPE
              SYNTAX SEQUENCE OF RtmpEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A list of Routing Table Maintenance Protocol
                  entries for this entity."
              ::= { rtmp 1 }

Okay bestie, the RTMP routing table is up first, and it's giving main character energy πŸ¦‹ Each route entry is a row, and the rtmpRangeStart column is its index key ✨

          rtmpEntry OBJECT-TYPE
              SYNTAX RtmpEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The route entry to a particular network range.

                  As an example, an instance of the rtmpPort object
                  might be named rtmpPort.0.80"
              INDEX { rtmpRangeStart }
              ::= { rtmpTable 1 }

          RtmpEntry ::= SEQUENCE {
              rtmpRangeStart  ATNetworkNumber,
              rtmpRangeEnd    ATNetworkNumber,
              rtmpNextHop     OCTET STRING,
              rtmpType        INTEGER,
              rtmpPort        INTEGER,
              rtmpHops        INTEGER,
              rtmpState       INTEGER
          }

          rtmpRangeStart OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The first DDP network address in the network range
                  to which this routing entry pertains.  This is a two
                  octet DDP network address in network byte order."
              ::= { rtmpEntry 1 }

          rtmpRangeEnd OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The last DDP network address in the network range
                  to which this routing entry pertains.  This is a two
                  octet DDP network address in network byte order.  If
                  the network to which this routing entry pertains is
                  a non-extended network, the value for rtmpRangeEnd
                  shall be two octets of zero."
              ::= { rtmpEntry 2 }

          rtmpNextHop OBJECT-TYPE
              SYNTAX OCTET STRING
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The next internet router in the route to this
                  entry's destination network.  The format of this
                  address can be determined by examinating the
                  atportType corresponding to this entry."
              ::= { rtmpEntry 3 }

          rtmpType OBJECT-TYPE
              SYNTAX INTEGER {
                  other(1),
                  appletalk(2),
                  serialPPP(3),
                  serialNonstandard(4)
              }
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The type of network over which this route points."
              ::= { rtmpEntry 4 }

          rtmpPort OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The AppleTalk port over which this route points.
                  The interface identified by a particular value of
                  this variable is the same interface as identified by
                  the same value of atportIndex."
              ::= { rtmpEntry 5 }

          rtmpHops OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of hops required to reach the
                  destination network to which this routing entry
                  pertains."
              ::= { rtmpEntry 6 }

          rtmpState OBJECT-TYPE
              SYNTAX INTEGER {
                  good(1),
                  suspect(2),
                  badZero(3),
                  badOne(4),
                  invalid(5)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of the information contained in this
                  route entry.

                  Setting this object to the value invalid(5) has the
                  effect of invalidating the corresponding entry in
                  the rtmpTable.  That is, it  effectively
                  disassociates the mapping identified with said
                  entry.  It is an implementation-specific matter as
                  to whether the agent removes an invalidated entry
                  from the table. Accordingly, management stations
                  must be prepared to receive from agents tabular
                  information corresponding to entries not currently
                  in use.  Proper interpretation of such entries
                  requires examination of the relevant rtmpState
                  object."
              ::= { rtmpEntry 7 }

The rtmpState object is the one to watch πŸ‘€ Setting it to invalid(5) basically un-links that mapping from the table, but whether the agent actually deletes the row is up to the implementation πŸ’… So management stations have to be ready to see rows that aren't currently in use, and they need to check rtmpState to know what they're looking at 🫢

Next up are the RTMP counters. They're all read-only, and they're hanging off the rtmp node ✨

          rtmpInDataPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of good RTMP data packets
                  received by this entity."
              ::= { rtmp 2 }

          rtmpOutDataPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of RTMP packets sent by this
                  entity."
              ::= { rtmp 3 }

          rtmpInRequestPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of good RTMP Request packets
                  received by this entity."
              ::= { rtmp 4 }

          rtmpNextIREqualChanges OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of times RTMP changes the
                  Next Internet Router in a routing entry because the
                  hop count advertised in a routing tuple was equal to
                  the current hop count for a particular network."
              ::= { rtmp 5 }

          rtmpNextIRLessChanges OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of times RTMP changes the
                  Next Internet Router in a routing entry because the
                  hop count advertised in a routing tuple was less
                  than the current hop count for a particular network."
              ::= { rtmp 6 }

          rtmpRouteDeletes OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of times RTMP deletes a route
                  because it was aged out of the table.  This can help
                  to detect routing problems."
              ::= { rtmp 7 }

          rtmpRoutingTableOverflows OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times RTMP attempted to add a route
                  to the RTMP table but failed due to lack of space."
              ::= { rtmp 8 }
Quick side-eye on the counters: rtmpNextIREqualChanges and rtmpNextIRLessChanges are split by whether the advertised hop count was equal to or less than the current one πŸ™ˆ

Now the RTMP Stub Group. The comments say it's mandatory for every entity that implements RTMP, and it's meant for routers and end nodes πŸ’–

          -- The RTMP Stub Group
          --
          -- Implementation of this group is mandatory for all
          -- entities that implement RTMP
          --
          -- It is intended that this group be implemented by routers
          -- and end nodes.

          rtmpOutRequestPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of RTMP Request packets sent
                  by this entity."
              ::= { rtmpStub 1 }

          rtmpInVersionMismatches OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of RTMP packets received by
                  this entity that were rejected due to a version
                  mismatch."
              ::= { rtmpStub 2 }

          rtmpInErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "A count of the number of RTMP packets received by
                  this entity that were rejected for an error other
                  than version mismatch."
              ::= { rtmpStub 3 }

Last stop is the KIP Group 🧚 The comments say it's mandatory for every entity that implements KIP, and the table is the routing info for KIP networks 🌈

          -- The KIP Group
          --
          -- Implementation of this group is mandatory for all
          -- entities that implement KIP

          kipTable OBJECT-TYPE
              SYNTAX SEQUENCE OF KipEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION

                  "The table of routing information for KIP networks."
              ::= { kip 1 }

          kipEntry OBJECT-TYPE
              SYNTAX KipEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "An entry in the routing table for KIP networks.

                  As an example, an instance of the kipCore object
                  might be named kipCore.0.80"
              INDEX { kipNetStart }
              ::= { kipTable 1 }

          KipEntry ::= SEQUENCE {
              kipNetStart     ATNetworkNumber,
              kipNetEnd       ATNetworkNumber,
              kipNextHop      IpAddress,
              kipHopCount     INTEGER,
              kipBCastAddr    IpAddress,
              kipCore         INTEGER,
              kipType         INTEGER,
              kipState        INTEGER,
              kipShare        INTEGER,
              kipFrom         IpAddress
          }

          kipNetStart OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The first AppleTalk network address in the range
                  for this routing entry.  This address is a two octet
                  DDP network address in network byte order."
              ::= { kipEntry 1 }

          kipNetEnd OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The last AppleTalk network address in the range for
                  this routing entry.  This address is a two octet DDP
                  network address in network byte order.  If the
                  network to which this AppleTalk port is connected is
                  a non-extended network, the value for kipNetEnd
                  shall be two octets of zero."
              ::= { kipEntry 2 }

          kipNextHop OBJECT-TYPE
              SYNTAX IpAddress
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The IP address of the next hop in the route to this
                  entry's destination network."
              ::= { kipEntry 3 }

          kipHopCount OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The number of hops required to reach the destination
                  network to which this entry pertains."
              ::= { kipEntry 4 }

          kipBCastAddr OBJECT-TYPE
              SYNTAX IpAddress
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The form of the IP address used to broadcast on this
                  network."
              ::= { kipEntry 5 }

          kipCore OBJECT-TYPE
              SYNTAX INTEGER {
                   core(1),
                   notcore(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of kipNextHop as a core gateway."
              ::= { kipEntry 6 }

That's the KIP table so far, and the rest of the KIP objects are coming up next πŸ’…βœ¨

Okay bestie, we're still in the MIB definitions, and the kip fields are giving structure πŸ’… kipType says what kind of thing a route points at, kipState has the configured, learned and invalid states, kipShare decides whether an entry gets shared with other routers πŸ¦‹ and kipFrom tells you where a learned route came from 🫢

          kipType OBJECT-TYPE
              SYNTAX INTEGER {
                   kipRouter(1),
                   net(2),
                   host(3),
                   other(4),
                   async(5)

              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The type of the entity that this route points to."
              ::= { kipEntry 7 }

          kipState OBJECT-TYPE
              SYNTAX INTEGER {
                   configured(1),  -- this entry is not aged
                   learned(2),
                   invalid(3)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The state of this network entry.

                  Setting this object to the value invalid(3) has the
                  effect of invalidating the corresponding entry in the
                  kipTable.  That is, it  effectively disassociates the
                  mapping identified with said entry.  It is an
                  implementation-specific matter as to whether the agent
                  removes an invalidated entry from the table.
                  Accordingly, management stations must be prepared to
                  receive from agents tabular information corresponding
                  to entries not currently in use.  Proper
                  interpretation of such entries requires examination
                  of the relevant kipState object."
              ::= { kipEntry 8 }

          kipShare OBJECT-TYPE
              SYNTAX INTEGER {
                   shared(1),
                   private(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "If the information in this entry is propagated to
                  other routers as part of the AA routing protocol,
                  the value of this variable is equal to shared(1).
                  Otherwise its value is private(2)."
              ::= { kipEntry 9 }

          kipFrom OBJECT-TYPE
              SYNTAX IpAddress
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The IP address from which the routing entry was
                  learned via the AA protocol.  If this entry was not
                  created via the AA protocol, it should contain IP
                  address 0.0.0.0."
              ::= { kipEntry 10 }

Next up is the ZIP Router Group πŸŽ€ the comments say it's required for every router that implements ZIP, so this is the part of the MIB that a router actually needs to have ✨ The zone table is where it all lives: zone names, the network ranges they cover, and which port they were learned on 🌸 Then there are the counters for ZIP packets, plus a little extra table for the GetNetInfo stuff received on each port 🧚

          -- The ZIP Router Group
          --
          -- Implementation of this group is required for all routers
          -- which implement ZIP
          --
          -- This group consists of ZIP variables that would be
          -- implemented by a router.

          zipTable OBJECT-TYPE
              SYNTAX SEQUENCE OF ZipEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The table of zone information for reachable
                  AppleTalk networks."
              ::= { zipRouter 1 }

          zipEntry OBJECT-TYPE
              SYNTAX ZipEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "An entry of zone information for a particular zone
                  and network combination.

                  As an example, an instance of the zipZoneState object
                  might be named zipZoneState.0.80.4"
              INDEX { zipZoneNetStart, zipZoneIndex }
              ::= { zipTable 1 }

          ZipEntry ::= SEQUENCE {
              zipZoneName     ATName,
              zipZoneIndex    INTEGER,
              zipZoneNetStart ATNetworkNumber,
              zipZoneNetEnd   ATNetworkNumber,
              zipZoneState    INTEGER,
              zipZoneFrom     OCTET STRING,
              zipZonePort     INTEGER
          }
          zipZoneName OBJECT-TYPE
              SYNTAX ATName
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The zone name of this entry.  This is stored in
                  Mac ASCII format.  If the full zone list for the
                  entry is not known, the value for zipZoneName shall
                  be a zero length octet string."
              ::= { zipEntry 1 }

          zipZoneIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "An integer that is unique to the zipZoneName that
                  is present in this entry.  For any given zone name,
                  every zipEntry that has an equal zone name will have
                  the same zipZoneIndex.  When a zone name is
                  discovered which is not currently in the table, it
                  will be assigned an index greater than any
                  previously assigned index."
              ::= { zipEntry 2 }

          zipZoneNetStart OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The network that starts the range for this entry.
                  This address is a two octet DDP network address in
                  network byte order."
              ::= { zipEntry 3 }

          zipZoneNetEnd OBJECT-TYPE
              SYNTAX ATNetworkNumber
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The network that ends the range for this entry.
                  This address is a two octet DDP network address in
                  network byte order.  If the network to which this
                  zip entry pertains is a non-extended network, the
                  value for zipZoneNetEnd shall be two octets of
                  zero."
              ::= { zipEntry 4 }

          zipZoneState OBJECT-TYPE
              SYNTAX INTEGER {
                  valid(1),
                  invalid(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The state of this zip entry.

                  Setting this object to the value invalid(2) has the
                  effect of invalidating the corresponding entry in
                  the zipTable.  That is, it  effectively
                  disassociates the mapping identified with said
                  entry.  It is an implementation-specific matter as
                  to whether the agent removes an invalidated entry
                  from the table. Accordingly, management stations
                  must be prepared to receive from agents tabular
                  information corresponding to entries not currently
                  in use.  Proper interpretation of such entries
                  requires examination of the relevant zipZoneState
                  object."
              ::= { zipEntry 5 }

          zipZoneFrom OBJECT-TYPE
              SYNTAX OCTET STRING
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The address from which this zone name to network
                  number mapping was learned.  The format of this
                  address can be determined by examining the
                  atportType corresponding to this entry.  When this
                  mapping is learned from the entity itself, this
                  object shall have the value of three
                  octets of zero."
              ::= { zipEntry 6 }

          zipZonePort OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The AppleTalk port through which this zone name to
                  network number mapping was learned.  The interface
                  identified by a particular value of this variable is
                  the same interface as identified by the same value
                  of atportIndex."

              ::= { zipEntry 7 }

          zipInZipQueries OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP Queries received by this entity."
              ::= { zipRouter 2 }

          zipInZipReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP Replies received by this entity."
              ::= { zipRouter 3 }

          zipInZipExtendedReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP Extended Replies received by this
                  entity."
              ::= { zipRouter 4 }

          zipZoneConflictErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times a conflict has been detected
                  between this entity's zone information and another
                  entity's zone information."
              ::= { zipRouter 5 }

          zipInObsoletes OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP Takedown or ZIP Bringup packets
                  received by this entity.  Note that as the ZIP
                  Takedown and ZIP Bringup packets have been
                  obsoleted, the receipt of one of these packets
                  indicates that a node sent it in error."
              ::= { zipRouter 6 }

          -- The zipRouterNetInfoTable is used to record information
          -- about zipGetNetInfo and zipGetNetInfo Reply packets that
          -- were received on each port for a router.  This table
          -- augments the atportTable.

          zipRouterNetInfoTable OBJECT-TYPE
              SYNTAX SEQUENCE OF ZipRouterNetInfoEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The table of Net Info packets received by each port
                  on this entity."
              ::= { zipRouter 7 }

          zipRouterNetInfoEntry OBJECT-TYPE
              SYNTAX ZipRouterNetInfoEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The description of the Net Info packets received on
                  a particular port on this entity.  One such entry
                  shall exist for each atport on this router entity.

                  As an example, an instance of the zipInGetNetInfos
                  object might be named zipInGetNetInfos.2"
              INDEX { atportIndex }
              ::= { zipRouterNetInfoTable 1 }

          ZipRouterNetInfoEntry ::= SEQUENCE {
              zipInGetNetInfos        Counter,
              zipOutGetNetInfoReplies Counter,
              zipZoneOutInvalids      Counter,
              zipAddressInvalids      Counter
          }

          zipInGetNetInfos OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP GetNetInfo packets received on
                  this port by this entity."
              ::= { zipRouterNetInfoEntry 1 }

          zipOutGetNetInfoReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP GetNetInfo Reply packets sent out
                  this port by this entity."
              ::= { zipRouterNetInfoEntry 2 }

okay the ZIP counters keep going and they're giving detailed πŸ’…βœ¨

          zipZoneOutInvalids OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times this entity has sent a ZIP
                  GetNetInfo Reply with the zone invalid bit set in
                  response to a GetNetInfo Request with an invalid
                  zone name."
              ::= { zipRouterNetInfoEntry 3 }

          zipAddressInvalids OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times this entity had to broadcast a
                  ZIP GetNetInfo Reply because the GetNetInfo Request
                  had an invalid address."
              ::= { zipRouterNetInfoEntry 4 }


          -- The ZIP End Node Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement ZIP
          --
          -- This group consists of ZIP variables that would be
          -- implemented by either a router or an end node.

          -- The zipNetInfoTable is used to record information about
          -- zipGetNetInfo and zipGetNetInfo Reply packets that were
          -- received on each port of an entity.  This table augments
          -- the atportTable.

          zipNetInfoTable OBJECT-TYPE
              SYNTAX SEQUENCE OF ZipNetInfoEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The table of Net Info packets received by each port
                  on this entity."
              ::= { zipEndNode 1 }

          zipNetInfoEntry OBJECT-TYPE
              SYNTAX ZipNetInfoEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The description of the Net Info packets received on
                  a particular port on this entity.  One such entry
                  shall exist for each atport on this entity.

                  As an example, an instance of the zipOutGetNetInfos
                  object might be named zipOutGetNetInfos.2"
              INDEX { atportIndex }
              ::= { zipNetInfoTable 1 }

          ZipNetInfoEntry ::= SEQUENCE {
              zipOutGetNetInfos       Counter,
              zipInGetNetInfoReplies  Counter,
              zipZoneInInvalids       Counter
          }

          zipOutGetNetInfos OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP GetNetInfo packets sent out this
                  port by this entity."
              ::= { zipNetInfoEntry 1 }

          zipInGetNetInfoReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP GetNetInfo Reply packets received
              on this port by this entity."
              ::= { zipNetInfoEntry 2 }

          zipZoneInInvalids OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times this entity has received a ZIP
                  GetNetInfo Reply with the zone invalid bit set
                  because the corresponding GetNetInfo Request had an
                  invalid zone name."
              ::= { zipNetInfoEntry 3 }

          zipInErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ZIP packets received by this entity
                  that were rejected for any error."
              ::= { zipEndNode 2 }


          -- The NBP Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement NBP

          nbpTable OBJECT-TYPE
              SYNTAX SEQUENCE OF NbpEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The table of NBP services registered on this entity."
              ::= { nbp 1 }

          nbpEntry OBJECT-TYPE
              SYNTAX NbpEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The description of an NBP service registered on this
                  entity.

                  As an example, an instance of the nbpZone object
                  might be named nbpZone.2"
              INDEX { nbpIndex }
              ::= { nbpTable  1 }

          NbpEntry ::= SEQUENCE {
              nbpIndex        INTEGER,
              nbpObject       ATName (SIZE (1..32)),
              nbpType         ATName (SIZE (1..32)),
              nbpZone         ATName,
              nbpState        INTEGER,
              nbpAddress      DdpSocketAddress,
              nbpEnumerator   INTEGER (0..255)
          }

          nbpIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The index of this NBP entry.  This index is unique
                  with respect to the indexes of all other NBP entries,
                  and shall remain constant throughout the lifetime
                  of this object."
              ::= { nbpEntry 1 }

          nbpObject OBJECT-TYPE
              SYNTAX ATName (SIZE (1..32))
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The name of the service described by this entity.
                  When this variable is changed, the entity should
                  perform an NBP registration using the new nbpObject."
              ::= { nbpEntry 2 }

          nbpType OBJECT-TYPE
              SYNTAX ATName (SIZE (1..32))
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The type of the service described by this entity.
                  When this variable is changed, the entity should
                  perform an NBP registration using the new nbpType."
              ::= { nbpEntry 3 }

          nbpZone OBJECT-TYPE
              SYNTAX ATName
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The zone the service described by this entity is
                  registered in.  This must be the actual zone name,
                  without any wildcard characters.  When this variable
                  is changed, the entity should perform an NBP
                  registration using the new nbpZone."
                  ::= { nbpEntry 4 }

          nbpState OBJECT-TYPE
              SYNTAX INTEGER {
                  valid(1),
                  registering(2), -- attempting to register the service
                  registrationFailed(3),
                  invalid(4)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The state of this NBP entry.
                  When the registration for an entry in the nbpTable
                  fails, it is an implementation-specific matter as to
                  how long the entry will remain in the
                  registrationFailed(3) state before moving to the
                  invalid(4) state.  Note that the entry may pass
                  immediately from the registrationFailed state to
                  the invalid state.

                  Setting this object to the value invalid(4) has the
                  effect of invalidating the corresponding entry in the
                  nbpTable.  That is, it  effectively disassociates the
                  mapping identified with said entry.  It is an
                  implementation-specific matter as to whether the agent
                  removes an invalidated entry from the table.
                  Accordingly, management stations must be prepared to
                  receive from agents tabular information corresponding
                  to entries not currently in use.  Proper
                  interpretation of such entries requires examination
                  of the relevant nbpState object."
              ::= { nbpEntry 5 }

          nbpAddress OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The DDP network, node, and socket number of this
                  entity. If this is unspecified, for instance if the
                  registration is on all ports of a multiport device,
                  this object shall have the value of three octets of
                  zero, followed by one octet of socket number."
              ::= { nbpEntry 6 }

          nbpEnumerator OBJECT-TYPE
              SYNTAX INTEGER (0..255)
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The enumerator assigned to this entity."
              ::= { nbpEntry 7 }


          nbpInLookUpRequests OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of NBP LookUp Requests received."
              ::= { nbp 2 }

          nbpInLookUpReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of NBP LookUp Replies received."
              ::= { nbp 3 }

          nbpInBroadcastRequests OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of NBP Broadcast Requests received."
              ::= { nbp 4 }

          nbpInForwardRequests OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of NBP Forward Requests received."
              ::= { nbp 5 }

          nbpOutLookUpReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of NBP LookUp Replies sent."
              ::= { nbp 6 }

          nbpRegistrationFailures OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times this node experienced a failure
                  in attempting to register an NBP entity."
              ::= { nbp 7 }
              nbpInErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of NBP packets received by this entity
                  that were rejected for any error."
              ::= { nbp 8 }


          -- The ATEcho Group
          --
          -- Implementation of this group is mandatory for all
          -- entities that implement ATEcho

          atechoRequests OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of AppleTalk Echo requests received."
              ::= { atecho 1 }

          atechoReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of AppleTalk Echo replies sent."
              ::= { atecho 2 }

          atechoOutRequests OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The count of AppleTalk Echo requests sent."
              ::= { atecho 3 }

okay so the ATP stuff is where the transactions live πŸ¦‹ this first chunk wraps up the AppleTalk Echo counters, then the whole ATP group, which is mandatory for every entity that implements ATP πŸ’…

          atechoInReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The count of AppleTalk Echo replies received."
              ::= { atecho 4 }

          -- The ATP Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement ATP

          atpInPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ATP packets received by this entity."
              ::= { atp 1 }

          atpOutPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ATP packets sent by this entity."
              ::= { atp 2 }

          atpTRequestRetransmissions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times that a timeout occurred and a
                  Transaction Request packet needed to be
                  retransmitted by this host."
              ::= { atp 3 }

          atpTResponseRetransmissions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times a timeout was detected and a
                  Transaction Response packet needed to be
                  retransmitted by this host."
              ::= { atp 4 }

          atpReleaseTimerExpiredCounts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the release timer expired, as a
                  result of which a Request Control Block had to be
                  deleted."
              ::= { atp 5 }

          atpRetryCountExceededs OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the retry count was exceeded,
                  and an error was returned to the client of ATP."
              ::= { atp 6 }

          atpListenerTable OBJECT-TYPE
              SYNTAX SEQUENCE OF AtpListenerEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The atpListenerTable stores information for each ATP
                  socket that has a listener."
              ::= { atp 7 }

          atpListenerEntry OBJECT-TYPE
              SYNTAX AtpListenerEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "This atpListenerEntry contains information about a
                  particular socket that has a socket listener.

                  As an example, an instance of the atpListenerStatus
                  object might be named atpListenerStatus.0.80.220.3"
              INDEX { atpListenerAddress }
              ::= { atpListenerTable 1 }

          AtpListenerEntry ::= SEQUENCE {
              atpListenerAddress   DdpSocketAddress,
              atpListenerStatus    INTEGER
          }

          atpListenerAddress OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The DDP address that this socket listener is bound
                  to. If this socket listener isn't bound to a
                  particular address, for instance if it is intended
                  for all interfaces, this object shall have the value
                  of three octets of zero followed by one octet of
                  socket number."
              ::= { atpListenerEntry 1 }

          atpListenerStatus OBJECT-TYPE
              SYNTAX INTEGER {
                  valid(1),
                  invalid(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of this socket.

                  Setting this object to the value invalid(2) has the
                  effect of invalidating the corresponding entry in
                  the atpListenerTable.  That is, it effectively
                  disassociates the mapping identified with said
                  entry.  It is an implementation-specific matter as
                  to whether the agent removes an invalidated entry
                  from the table. Accordingly, management stations
                  must be prepared to receive from agents tabular
                  information corresponding to entries not currently
                  in use.  Proper interpretation of such entries
                  requires examination of the relevant
                  atpListenerStatus object."
              ::= { atpListenerEntry 2 }

next up is the PAP group πŸ“ same deal here: it's mandatory for every entity that implements PAP, and it covers the Printer Access Protocol counters plus the server table 🧚

          -- The PAP group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement PAP

          papInOpenConns OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of PAP Open Connection requests received
                  by this entity."
              ::= { pap 1 }

          papOutOpenConns OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION

                  "The number of PAP Open Connection requests sent by
                  this entity."
              ::= { pap 2 }

          papInDatas OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of PAP Data messages received by
                  this entity."
              ::= { pap 3 }

          papOutDatas OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of PAP Data messages sent by
                  this entity."
              ::= { pap 4 }

          papInCloseConns OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of PAP Close Connection requests
                  received by this entity."
              ::= { pap 5 }

          papOutCloseConns OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of PAP Close Connection requests sent by
                  this entity."
              ::= { pap 6 }

          papTickleTimeoutCloses OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the PAP entity on this node
                  closed a connection because it didn't receive a
                  Tickle message before its timer expired."

              ::= { pap 7 }

          papServerTable OBJECT-TYPE
              SYNTAX SEQUENCE OF PapServerEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A list of servers on this entity that are
                  accessible through the Printer Access Protocol."
              ::= { pap 8 }

          papServerEntry OBJECT-TYPE
              SYNTAX PapServerEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A set of information about a particular PAP server's
                  configuration and performance.

                  As an example, an instance of the papServerStatus
                  object might be named papServerStatus.1"
              INDEX { papServerIndex }
              ::= { papServerTable 1 }

          PapServerEntry ::= SEQUENCE {
              papServerIndex                          INTEGER,
              papServerListeningSocket                DdpSocketAddress,
              papServerStatus                         DisplayString,
              papServerCompletedJobs                  Counter,
              papServerBusyJobs                       INTEGER,
              papServerFreeJobs                       INTEGER,
              papServerAuthenticationFailures         Counter,
              papServerAccountingFailures             Counter,
              papServerGeneralFailures                Counter,
              papServerState                          INTEGER,
              papServerLastStatusMsg                  DisplayString
          }

          papServerIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "An unique value for each Printer Access Protocol
                  Server."
              ::= { papServerEntry 1 }

          papServerListeningSocket OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The Server Listening Socket that this PAP server is
                  listening on."
              ::= { papServerEntry 2 }

          papServerStatus OBJECT-TYPE
              SYNTAX DisplayString
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The status string of this server.  This is the
                  message as it would appear in a PAP Status Reply
                  from this server."
              ::= { papServerEntry 3 }

          papServerCompletedJobs OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of jobs that have been accepted and
                  successfully executed by this server."
              ::= { papServerEntry 4 }

          papServerBusyJobs OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of GetNextJob calls that have accepted
                  and are currently executing a job."
              ::= { papServerEntry 5 }

          papServerFreeJobs OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The minimum number of GetNextJob calls that are
                  currently waiting for a job."
              ::= { papServerEntry 6 }

          papServerAuthenticationFailures OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times this PAP server rejected a job
                  because the job was not correctly authenticated."
              ::= { papServerEntry 7 }

          papServerAccountingFailures OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times this PAP server rejected a job
                  because the job did not fit some accounting rule,
                  such as exceeding a quota."
              ::= { papServerEntry 8 }

          papServerGeneralFailures OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times this PAP server rejected a job
                  for some reason other than authentication or
                  accounting failures."
              ::= { papServerEntry 9 }

okay so this part is all about the PAP server state, the ASP counters, and the ADSP counters, and honestly it's giving tidy little rows of MIB objects πŸ’… every single one gets its own spot in the table, and the comments are bestie notes about which group is mandatory for who ✨

          papServerState OBJECT-TYPE
              SYNTAX INTEGER {
                  valid(1),
                  invalid(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The state of this PAP Server entry.

                  Setting this object to the value invalid(2) has the
                  effect of invalidating the corresponding entry in
                  the papServerTable.  That is, it  effectively
                  disassociates the mapping identified with said
                  entry.  It is an implementation-specific matter as
                  to whether the agent removes an invalidated entry
                  from the table. Accordingly, management stations
                  must be prepared to receive from agents tabular
                  information corresponding to entries not currently
                  in use.  Proper interpretation of such entries
                  requires examination of the relevant papServerState
                  object."
              ::= { papServerEntry 10 }

          papServerLastStatusMsg OBJECT-TYPE
              SYNTAX DisplayString
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The last status message that was transmitted by
                  this server."
              ::= { papServerEntry 11 }


          -- The ASP Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement ASP

          aspInputTransactions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ASP requests and replies received by
                  this entity.  Note that this is not necessarily the
                  number of packets containing ASP transactions."
              ::= { asp 1 }

          aspOutputTransactions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ASP requests and replies sent by this
                  entity.  Note that this is not necessarily the number
                  of packets containing ASP transactions."
              ::= { asp 2 }

          aspInOpenSessions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ASP Open Session requests and replies
                  received by this entity."
              ::= { asp 3 }

          aspOutOpenSessions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ASP Open Session requests and replies
                  sent by this entity."
              ::= { asp 4 }

          aspInCloseSessions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ASP Close Session requests and replies
                  received by this entity."
              ::= { asp 5 }

          aspOutCloseSessions OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ASP Close Session requests and replies
                  sent by this entity."
             ::= { asp 6 }

          aspNoMoreSessionsErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times an error condition was returned
                  because this server implementation could not support
                  another session."
              ::= { asp 7 }

          aspTickleTimeOutCloses OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the ASP entity on this node
                  closed a connection because it didn't receive any
                  messages from the remote end before its timer
                  expired."
              ::= { asp 8 }

          aspConnTable OBJECT-TYPE
              SYNTAX SEQUENCE OF AspConnEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A list of ASP connections on this entity."
              ::= { asp 9 }

          aspConnEntry OBJECT-TYPE
              SYNTAX AspConnEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A set of information describing an ASP connection.

                  As an example, an instance of the aspConnState object
                  might be named
                  aspConnState.0.80.220.135.0.80.239.119.12"
              INDEX { aspConnLocalAddress, aspConnRemoteAddress,
                      aspConnID }
              ::= { aspConnTable 1 }

          AspConnEntry ::= SEQUENCE {
              aspConnLocalAddress        DdpSocketAddress,
              aspConnRemoteAddress       DdpSocketAddress,
              aspConnID                  INTEGER (1..255),
              aspConnLastReqNum          INTEGER (1..65535),
              aspConnServerEnd           INTEGER,
              aspConnState               INTEGER
          }

          aspConnLocalAddress OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The local address of this ASP connection."
              ::= { aspConnEntry 1 }

          aspConnRemoteAddress OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The remote address of this ASP connection.  If
                  this entry is in the listening mode, this object
                  shall have a value of four octets of zero."
              ::= { aspConnEntry 2 }

          aspConnID OBJECT-TYPE
              SYNTAX INTEGER (1..255)
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The remote Connection ID of this ASP connection.  If
                  this entry is in the listening mode, this object
                  shall have a value of zero."
              ::= { aspConnEntry 3 }

          aspConnLastReqNum  OBJECT-TYPE
              SYNTAX INTEGER (1..65535)
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The last request number on this ASP connection.  If
                  this entry is in the listening mode, this object
                  shall have a value of zero."
              ::= { aspConnEntry 4 }

          aspConnServerEnd OBJECT-TYPE
              SYNTAX INTEGER {
                  sss(1), -- Server Session Socket
                  wss(2), -- Workstation Session Socket
                  sls(3)  -- Server Listening Socket
              }
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "Specifies what mode the local session end is in."
              ::= { aspConnEntry 5 }

          aspConnState OBJECT-TYPE
              SYNTAX INTEGER {
                  open(1),
                  closed(2),
                  invalid(3)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The state of this ASP connection.
                  Setting this object to the value invalid(3) has the
                  effect of invalidating the corresponding entry in the
                  aspConnTable.  That is, it  effectively disassociates
                  the mapping identified with said entry.  It is an
                  implementation-specific matter as to whether the agent
                  removes an invalidated entry from the table.

                  Accordingly, management stations must be prepared to
                  receive from agents tabular information corresponding
                  to entries not currently in use.  Proper
                  interpretation of such entries requires examination
                  of the relevant aspConnState object."
              ::= { aspConnEntry 6 }


          -- The ADSP Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement ADSP


          adspInPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ADSP packets received by this entity."
              ::= { adsp 1 }

          adspOutPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ADSP packets sent by this entity."
              ::= { adsp 2 }

          adspInOctets OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of data octets contained in ADSP packets
                  received by this entity.  Note that this does not
                  include EOM bits."
              ::= { adsp 3 }

          adspOutOctets OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of data octets contained in ADSP packets
                  sent by this entity.  Note that this does not include
                  EOM bits."

              ::= { adsp 4 }

          adspInDataPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ADSP data packets this entity has
                  received."
              ::= { adsp 5 }

          adspOutDataPkts OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of ADSP data packets this entity has
                  sent."
              ::= { adsp 6 }

          adspTimeoutErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the ADSP on this entity detected
                  an expired connection timer."
              ::= { adsp 7 }

          adspTimeoutCloseErrors OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of times the ADSP on this entity closed a
                  connection because of too many timeouts."
              ::= { adsp 8 }

          adspConnTable OBJECT-TYPE
              SYNTAX SEQUENCE OF AdspConnEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A list of ADSP connections on this entity."
              ::= { adsp 9 }

          adspConnEntry OBJECT-TYPE
              SYNTAX AdspConnEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A set of information describing an ADSP connection.
                  As an example, an instance of the adspConnState object
                  might be named
                  adspConnState.0.80.220.7.0.80.239.142.31231"
              INDEX { adspConnLocalAddress, adspConnRemoteAddress,
                      adspConnLocalConnID }
              ::= { adspConnTable 1 }

the PAP bit at the top is all about the server table, and the ASP and ADSP blocks are basically the counters and connection tables, all in the same MIB-object style πŸŽ€

more of the ADSP connection table is coming in the next part, so stay tuned bestie πŸ¦‹πŸ’–

Okay bestie, the MIB tables are up next, and they're giving very specific vibes πŸ’…βœ¨

          AdspConnEntry ::= SEQUENCE {
              adspConnLocalAddress        DdpSocketAddress,
              adspConnLocalConnID         INTEGER (0..65535),
              adspConnRemoteAddress       DdpSocketAddress,
              adspConnRemoteConnID        INTEGER (0..65535),
              adspConnState               INTEGER
          }

          adspConnLocalAddress OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The local DDP address of this ADSP connection."
              ::= { adspConnEntry 1 }

          adspConnLocalConnID OBJECT-TYPE
              SYNTAX INTEGER (0..65535)
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The local Connection ID of this ADSP connection.  If
                  this entry specifies an ADSP listener, this value
                  shall be zero."
              ::= { adspConnEntry 2 }

          adspConnRemoteAddress OBJECT-TYPE
              SYNTAX DdpSocketAddress
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The remote DDP address of this ADSP connection.  If
                  this entry specifies an ADSP listener, this value
                  shall be zero."
              ::= { adspConnEntry 3 }

          adspConnRemoteConnID OBJECT-TYPE

              SYNTAX INTEGER (0..65535)
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The remote Connection ID of this ADSP connection.
                  If this entry specifies an ADSP listener, this value
                  shall be zero."
              ::= { adspConnEntry 4 }

          adspConnState OBJECT-TYPE
              SYNTAX INTEGER {
                  open(1),
                  localHalfOpen(2),
                  remoteHalfOpen(3),
                  listening(4),
                  closed(5),
                  invalid(6)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The state of this ADSP connection.  The state is
                  open if both ends are established.  If only one end
                  is established, then the state is half-open.  If
                  neither end is established, then the state is
                  closed.  If an ADSP server is listening on a socket
                  and is not yet connected, its state is set to
                  listening, and the adspConnRemoteAddress,
                  adspConnRemoteSocket, adspConnRemoteConnID, and
                  adspConnRemoteWindowSize are all set to zero.

                  Setting this object to the value invalid(6) has the
                  effect of invalidating the corresponding entry in
                  the adspConnTable.  That is, it  effectively
                  disassociates the mapping identified with said
                  entry.  It is an implementation-specific matter as
                  to whether the agent removes an invalidated entry
                  from the table. Accordingly, management stations
                  must be prepared to receive from agents tabular
                  information corresponding to entries not currently
                  in use.  Proper interpretation of such entries
                  requires examination of the relevant adspConnState
                  object."
              ::= { adspConnEntry 5 }

          -- The ATPortPtoP Group
          --
          -- Implementation of this group is mandatory for all entities
          -- that implement AppleTalk point-to-point links

          atportPtoPTable OBJECT-TYPE
              SYNTAX SEQUENCE OF AtportPtoPEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A list of AppleTalk point-to-point connections for
                  this entity."
              ::= { atportptop 1 }

          atportPtoPEntry OBJECT-TYPE
              SYNTAX AtportPtoPEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The description of one of the AppleTalk
                  point-to-point connections on this entity.

                  As an example, an instance of the
                  atportPtoPRemoteAddress object might be named
                  atportPtoPRemoteAddress.2"
              INDEX { atportPtoPIndex }
              ::= { atportPtoPTable 1 }

          AtportPtoPEntry ::= SEQUENCE {
              atportPtoPIndex           INTEGER,
              atportPtoPProtocol        OBJECT IDENTIFIER,
              atportPtoPRemoteName      DisplayString,
              atportPtoPRemoteAddress   OCTET STRING,
              atportPtoPPortIndex       INTEGER,
              atportPtoPStatus          INTEGER
          }

          atportPtoPIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "A unique value for each AppleTalk point-to-point
                  connection.  Its value is between 1 and the total
                  number of AppleTalk point-to-point connections.  The
                  value for each connection must remain constant at
                  least from the re-initialization of the entity's
                  network management system to the next
                  re-initialization."
              ::= { atportPtoPEntry 1 }

          atportPtoPProtocol OBJECT-TYPE
              SYNTAX OBJECT IDENTIFIER
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The protocol type used over the point-to-point
                  connection."
              ::= { atportPtoPEntry 2 }

          atportPtoPRemoteName OBJECT-TYPE
              SYNTAX DisplayString
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "A text string containing the network node name of the
                  entity at the other end of the point-to-point link.
                  If the name is unknown or undefined, then this
                  string is zero length."
              ::= { atportPtoPEntry 3 }

          atportPtoPRemoteAddress OBJECT-TYPE
              SYNTAX OCTET STRING
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The network address of the entity at the other end
                  of the point-to-point link in network byte order.
                  The format of this address can be determined
                  by examinating the atportType corresponding to this
                  entry.  If the address is unknown or undefined, then
                  this string is zero length."
              ::= { atportPtoPEntry 4 }

          atportPtoPPortIndex OBJECT-TYPE
              SYNTAX INTEGER
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The AppleTalk port associated with this
                  point-to-point connection.  The interface identified
                  by a particular value of this index is the same
                  interface as identified by the same value of
                  atportIndex."
              ::= { atportPtoPEntry 5 }

          atportPtoPStatus OBJECT-TYPE
              SYNTAX INTEGER {
                  valid(1),
                  invalid(2)
              }
              ACCESS read-write
              STATUS mandatory
              DESCRIPTION
                  "The status of this entry in the atportPtoPTable.

                  Setting this object to the value invalid(2) has the
                  effect of invalidating the corresponding entry in
                  the atportPtoPTable.  That is, it  effectively
                  disassociates the mapping identified with said
                  entry.  It is an implementation-specific matter as
                  to whether the agent removes an invalidated entry
                  from the table. Accordingly, management stations
                  must be prepared to receive from agents tabular
                  information corresponding to entries not currently
                  in use.  Proper interpretation of such entries
                  requires examinationr of the relevant
                  atportPtoPStatus object."
              ::= { atportPtoPEntry 6 }

          atportPtoPProtoOids OBJECT IDENTIFIER ::= { atportptop 2 }

          -- A list of values to be used for the atportPtoPProtocol
          -- variable.
          -- When new protocols are defined, their oids may be defined
          -- in separate MIB documents in different branches of the tree.

          pToPProtoOther OBJECT IDENTIFIER ::= { atportPtoPProtoOids 1 }
          pToPProtoAurp OBJECT IDENTIFIER ::= { atportPtoPProtoOids 2 }
          pToPProtoCaymanUdp OBJECT IDENTIFIER ::=
                      { atportPtoPProtoOids 3 }
          pToPProtoAtkvmsDecnetIV OBJECT IDENTIFIER ::=
                      { atportPtoPProtoOids 4 }
          pToPProtoLiaisonUdp OBJECT IDENTIFIER ::=
                      { atportPtoPProtoOids 5 }
          pToPProtoIpx OBJECT IDENTIFIER ::= { atportPtoPProtoOids 6 }
          pToPProtoShivaIp OBJECT IDENTIFIER ::=
                      { atportPtoPProtoOids 7 }

          -- The Per Port Counters Group
          --
          -- Implementation of this group is optional.

          perPortTable OBJECT-TYPE
              SYNTAX SEQUENCE OF PerPortEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The table of per-port statistics for this entity."
              ::= { perPort 1 }

          perPortEntry OBJECT-TYPE
              SYNTAX PerPortEntry
              ACCESS not-accessible
              STATUS mandatory
              DESCRIPTION
                  "The statistics available for a particular port on
                  this entity.

                  As an example, an instance of the perPortAarpInProbes
                  object might be named perPortAarpInProbes.2"
              INDEX { atportIndex }
              ::= { perPortTable  1 }

PerPortEntry ::= SEQUENCE { perPortAarpInProbes Counter, perPortAarpOutProbes Counter, perPortAarpInReqs Counter, perPortAarpOutReqs Counter, perPortAarpInRsps Counter, perPortAarpOutRsps Counter, perPortDdpInReceives Counter, perPortDdpInLocalDatagrams Counter, perPortDdpNoProtocolHandlers Counter, perPortDdpTooShortErrors Counter, perPortDdpTooLongErrors Counter, perPortDdpChecksumErrors Counter, perPortDdpForwRequests Counter, perPortRtmpInDataPkts Counter, perPortRtmpOutDataPkts Counter, perPortRtmpInRequestPkts Counter, perPortRtmpRouteDeletes Counter, perPortZipInZipQueries Counter, perPortZipInZipReplies Counter, perPortZipInZipExtendedReplies Counter, perPortZipZoneConflictErrors Counter, perPortZipInErrors Counter, perPortNbpInLookUpRequests Counter, perPortNbpInLookUpReplies Counter, perPortNbpInBroadcastRequests Counter, perPortNbpInForwardRequests Counter, perPortNbpOutLookUpReplies Counter, perPortNbpRegistrationFailures Counter, perPortNbpInErrors Counter, perPortEchoRequests Counter, perPortEchoReplies Counter }

perPortAarpInProbes OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of AARP Probe packets received by this entity on this port." ::= { perPortEntry 1 }

perPortAarpOutProbes OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of AARP Probe packets sent by this entity on this port." ::= { perPortEntry 2 }

perPortAarpInReqs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of AARP Request packets received by this entity on this port." ::= { perPortEntry 3 }

perPortAarpOutReqs OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of AARP Request packets sent by this entity on this port." ::= { perPortEntry 4 }

perPortAarpInRsps OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of AARP Response packets received by this entity on this port." ::= { perPortEntry 5 }

perPortAarpOutRsps OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of AARP Response packets sent by this entity on this port." ::= { perPortEntry 6 }

perPortDdpInReceives OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of input datagrams received by DDP on this port, including those received in error." ::= { perPortEntry 7 }

perPortDdpInLocalDatagrams OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of input DDP datagrams on this port for which this entity was their final DDP destination." ::= { perPortEntry 8 }

perPortDdpNoProtocolHandlers OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of DDP datagrams addressed to this entity on this port that were addressed to an upper layer protocol for which no protocol handler existed." ::= { perPortEntry 9 }

perPortDdpTooShortErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of input DDP datagrams on this port dropped because the received data length was less than the data length specified in the DDP header or the received data length was less than the length of the expected DDP header." ::= { perPortEntry 10 }

perPortDdpTooLongErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of input DDP datagrams on this port dropped because they exceeded the maximum DDP datagram size." ::= { perPortEntry 11 }

perPortDdpChecksumErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The total number of input DDP datagrams on this port for which this DDP entity was their final destination, and which were dropped because of a checksum error." ::= { perPortEntry 12 }

perPortDdpForwRequests OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of input datagrams on this port for which this entity was not their final DDP destination, as a result of which an attempt was made to find a route to forward them to that final destination." ::= { perPortEntry 13 }

perPortRtmpInDataPkts OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "A count of the number of good RTMP data packets received by this entity on this port." ::= { perPortEntry 14 }

perPortRtmpOutDataPkts OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "A count of the number of RTMP packets sent by this entity on this port." ::= { perPortEntry 15 }

perPortRtmpInRequestPkts OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "A count of the number of good RTMP Request packets received by this entity on this port." ::= { perPortEntry 16 }

perPortRtmpRouteDeletes OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "A count of the number of times RTMP deletes a route on this port because it was aged out of the table." ::= { perPortEntry 17 }

perPortZipInZipQueries OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of ZIP Queries received by this entity on this port." ::= { perPortEntry 18 }

perPortZipInZipReplies OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION

"The number of ZIP Replies received by this entity on this port." ::= { perPortEntry 19 }

perPortZipInZipExtendedReplies OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of ZIP Extended Replies received by this entity on this port." ::= { perPortEntry 20 }

perPortZipZoneConflictErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of times a conflict has been detected on this port between this entity's zone information and another entity's zone information." ::= { perPortEntry 21 }

perPortZipInErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of ZIP packets received by this entity on this port that were rejected for any error." ::= { perPortEntry 22 }

perPortNbpInLookUpRequests OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of NBP LookUp Requests received on this port." ::= { perPortEntry 23 }

perPortNbpInLookUpReplies OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of NBP LookUp Replies received on this port." ::= { perPortEntry 24 }

perPortNbpInBroadcastRequests OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of NBP Broadcast Requests received on this port." ::= { perPortEntry 25 }

perPortNbpInForwardRequests OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of NBP Forward Requests received on this port." ::= { perPortEntry 26 }

perPortNbpOutLookUpReplies OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of NBP LookUp Replies sent on this port." ::= { perPortEntry 27 }

perPortNbpRegistrationFailures OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of times this node experienced a failure in attempting to register an NBP entity on this port." ::= { perPortEntry 28 }

perPortNbpInErrors OBJECT-TYPE SYNTAX Counter ACCESS read-only STATUS mandatory DESCRIPTION "The number of NBP packets received by this entity on this port that were rejected for any error." ::= { perPortEntry 29 }

          perPortEchoRequests OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The number of AppleTalk Echo requests received on
                  this port."
              ::= { perPortEntry 30 }

          perPortEchoReplies OBJECT-TYPE
              SYNTAX Counter
              ACCESS read-only
              STATUS mandatory
              DESCRIPTION
                  "The count of AppleTalk Echo replies received on
                  this port."
              ::= { perPortEntry 31 }

          END

6. Acknowledgments 🫢

okay bestie, this part is a big thank-you πŸ’– This document was produced by the IETF AppleTalk-IP Working Group, and a bunch of amazing people also got a shoutout for their contributions:

  • Greg Bruell, Wellfleet
  • Phil Budne, Shiva
  • Robert Jeckell, 3Com
  • Greg Merrell, DEC
  • Greg Minshall, Novell, Inc.
  • Bob Morgan, Stanford University
  • Brad Parker, FCR
  • Marshall T. Rose, Dover Beach Consulting
  • Wayne Tackabury, Cayman
  • Jonathan Wenocur, Shiva

literally the whole squad πŸ‘‘βœ¨

7. References πŸ“š

these are the sources the spec leans on, so here they are, all of them, no skipping πŸ’…

  • [1] Cerf, V., "IAB Recommendations for the Development of Internet Network Management Standards", RFC 1052, IAB, April 1988.
  • [2] Cerf, V., "Report of the Second Ad Hoc Network Management Review Group", RFC 1109, IAB, August 1989.
  • [3] Rose M., and K. McCloghrie, "Structure and Identification of Management Information for TCP/IP-based internets", STD 16, RFC 1155, Performance Systems International, Hughes LAN Systems, May 1990.
  • [4] McCloghrie K., and M. Rose, "Management Information Base for Network Management of TCP/IP-based internets", RFC 1156, Hughes LAN Systems, Performance Systems International, May 1990.
  • [5] Case, J., Fedor, M., Schoffstall, M., and J. Davin, "Simple Network Management Protocol", STD 15, RFC 1157, SNMP Research, Performance Systems International, Performance Systems International, MIT Laboratory for Computer Science, May 1990.
  • [6] Rose, M., Editor, "Management Information Base for Network Management of TCP/IP-based internets: MIB-II", RFC 1158, Performance Systems International, May 1990.
  • [7] Information processing systems - Open Systems Interconnection - Specification of Abstract Syntax Notation One (ASN.1), International Organization for Standardization, International Standard 8824, December 1987.
  • [8] 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.
  • [9] Rose, M., and K. McCloghrie, Editors, "Concise MIB Definitions", STD 16, RFC 1212, Performance Systems International, Hughes LAN Systems, March 1991.
  • [10] Gursharan S., Andrews, R., and A. Oppenheimer, "Inside AppleTalk", Second Edition, Addison Wesley, 1990.

Security Considerations πŸ”

okay this one is serious, so listen up πŸ™ˆ Security issues are not discussed in this memo. Zero security stuff in here, so if you're worried about safety, you'll need to look somewhere else. no cap πŸ’€


9. Authors' Addresses πŸŽ€

and finally, the people who wrote this thing, with their contact details so you can slide into their inbox πŸ’Œ

   Steven Waldbusser
   Carnegie Mellon University
   5000 Forbes Ave.
   Pittsburgh, PA 15213

   Phone: 412-268-6628
   EMail: waldbusser@cmu.edu


   Karen Frisa
   FORE Systems, Inc.
   174 Thorn Hill Road
   Warrendale, PA 15086-7535

   Phone: 412-772-6541
   EMail: kfrisa@fore.com

the end, bestie πŸŒˆπŸ¦‹βœ¨

πŸ“¦ where this page comes from