RFC 1389

RIP Version 2 MIB Extensions

πŸ“… published January 1993, from ietf

RFC 1389: RIP Version 2 MIB Extension πŸŽ€

okay bestie, this is the RIP Version 2 MIB Extension, and it's giving main character energy πŸ‘‘ It was written by G. Malkin of Xylogics, Inc. and F. Baker of Advanced Computer Communications, and it's dated January 1993. It's an IAB standards track protocol document, and the header doesn't list any documents it obsoletes or updates ✨

Status of This Memo πŸ“œ

Okay so this is the official "here's what this is" part. It's an IAB standards track protocol for the Internet community, and the authors are asking for discussion and suggestions for improvements πŸ’¬ For the current standardization state and status, you check the current edition of the "IAB Official Protocol Standards" πŸ” Distribution of the memo is unlimited, so share it with everyone 🌸

Abstract πŸ¦‹

This memo defines a piece of the Management Information Base (MIB) for network management protocols in TCP/IP-based internets. Specifically, it defines the objects you need to manage RIP Version 2 🧚

Table of Contents

1. The Network Management Framework ......................    1
2. Objects ...............................................    2
2.1 Format of Definitions ................................    2
3. Overview ..............................................    3
3.1 Textual Conventions ..................................    3
3.2 Structure of MIB .....................................    3
4. Definitions ...........................................    3
4.1 Global Counters ......................................    4
4.2 RIP Interface Tables .................................    4
4.3 Peer Table ...........................................   10
5. Acknowledgements ......................................   12
6. References ............................................   12
7. Security Considerations ...............................   13
8. Authors' Addresses ....................................   13

1. The Network Management Framework ✨

So the Internet-standard Network Management Framework is made of three pieces 🧩 Here they are:

  • STD 16/RFC 1155 defines the SMI, which is the set of mechanisms for describing and naming objects so you can manage them. STD 16/RFC 1212 adds a more concise way to describe things, and it's totally consistent with the SMI πŸ’…
  • RFC 1156 defines MIB-I, the core set of managed objects for the Internet protocol suite. STD 17/RFC 1213 is MIB-II, which evolved from MIB-I based on what people learned from implementing it and new operational needs πŸ™Œ
  • STD 15/RFC 1157 defines SNMP, the protocol you use to reach managed objects over the network πŸ“‘

The Framework also lets you define new objects for experimentation and evaluation, which is honestly so useful πŸ§ͺ

2. Objects 🌈

Managed objects live in a virtual information store called the Management Information Base, or MIB πŸ—„οΈ Objects in the MIB are defined with a subset of Abstract Syntax Notation One (ASN.1) [7], the subset that the SMI allows. Every object has a name, a syntax, and an encoding. The name is an object identifier, which is an administratively assigned name for an object type. The object type plus an object instance uniquely identifies one specific instance of the object. For human convenience, people often use a text string called the OBJECT DESCRIPTOR to refer to the object type too 🫢

The syntax of an object type is the abstract data structure that goes with that type, and ASN.1 is used for it. The SMI [3] deliberately restricts which ASN.1 constructs you're allowed to use, and it does that for simplicity πŸ“

The encoding is how an object type gets represented using its syntax. Syntax and encoding are closely tied together, and they also decide how the object looks when it's sent across the network πŸ“¦

The SMI uses the basic encoding rules of ASN.1 [8], with the extra requirements that SNMP adds on top πŸ’œ

2.1 Format of Definitions 🧁

Section 4 has the specification for every object type in this MIB module. The object types use the conventions from the SMI, plus the extensions in [9] πŸ“–

3. Overview πŸ¦‹

3.1 Textual Conventions πŸ’­

This document introduces a few new data types as textual conventions. They make the spec easier to read and easier to compare with other specs when that's useful. Here's the important bit: adding these textual conventions doesn't change the syntax or the semantics of any managed object at all. They're just a side effect of how the document explains things. Objects that are defined using them are always encoded using the rules for the primitive type underneath. So you don't need any changes to the SMI or SNMP to support them. They're there for readers and writers who want clear, concise, unambiguous MIB documents (the elusive goal, lol) πŸ₯Ή

The new data types are Validation, which is the standard "set to invalid causes deletion" type, and RouteTag. RouteTag represents the contents of the Route Tag field in the packet header or route entry 🏷️

3.2 Structure of MIB πŸ—οΈ

The RIP-2 MIB has three main parts 🌸 First, there are global counters, which help you spot the nasty effects of RIP incompatibilities. Second, there's an "interfaces" table with statistics and configuration info for each interface. Third, there's an optional "neighbor" table with info that can help you debug neighbor relationships. Like the protocol itself, this MIB goes out of its way to stay compatible with RIP-1 systems, and it gives you controls for monitoring and controlling system interactions πŸŽ€

4. Definitions πŸ’–

Here's the full MIB module. Everything in the block is verbatim, so grab it exactly as it's written πŸ‘€

RFC1389-MIB DEFINITIONS ::= BEGIN

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

--  RIP-2 Management Information Base

  rip2 OBJECT IDENTIFIER ::= { mib-2 23 }

-- the RouteTag type represents the contents of the
-- Route Tag field in the packet header or route entry.

RouteTag ::= OCTET STRING (SIZE (2))

-- the Validation type is used for the variable that deletes
-- an entry from a table, and ALWAYS takes at least these values:

Validation ::= INTEGER { valid (1), invalid (2) }


--      The RIP-2 Globals Group.
--      Implementation of this group is mandatory for systems that
--           implement RIP-2.

-- These counters are intended to facilitate debugging quickly
-- changing routes or failing neighbors

rip2GlobalGroup OBJECT IDENTIFIER ::= { rip2 1 }


    rip2GlobalRouteChanges OBJECT-TYPE
        SYNTAX   Counter
        ACCESS   read-only
        STATUS   mandatory
        DESCRIPTION
           "The number of changes made to the IP Route Da-
           tabase by RIP."
       ::= { rip2GlobalGroup 1 }


    rip2GlobalQueries OBJECT-TYPE
        SYNTAX   Counter
        ACCESS   read-only
        STATUS   mandatory
        DESCRIPTION
           "The number of responses sent  to  RIP  queries
           from other systems."
       ::= { rip2GlobalGroup 2 }


--  RIP Interfaces Groups
--  Implementation of these Groups is mandatory for systems that
--       implement RIP-2.

-- Since RIP versions 1 and 2 do not deal with addressless links,
-- it is assumed that RIP "interfaces" are subnets within a
-- routing domain.

-- The RIP Interface Status Table.

    rip2IfStatTable OBJECT-TYPE
        SYNTAX   SEQUENCE OF Rip2IfStatEntry
        ACCESS   not-accessible
        STATUS   mandatory
        DESCRIPTION
           "A  list  of  subnets  which  require  separate
           status monitoring in RIP."
       ::= { rip2 2 }

   rip2IfStatEntry OBJECT-TYPE
       SYNTAX   Rip2IfStatEntry
       ACCESS   not-accessible
       STATUS   mandatory
       DESCRIPTION
          "A Single Routing Domain in a single Subnet."
      INDEX { rip2IfStatAddress }
      ::= { rip2IfStatTable 1 }


    Rip2IfStatEntry ::=
        SEQUENCE {
            rip2IfStatAddress
                IpAddress,
            rip2IfStatRcvBadPackets
                Counter,
            rip2IfStatRcvBadRoutes
                Counter,
            rip2IfStatSentUpdates
                Counter,
            rip2IfStatStatus
                Validation
    }

    rip2IfStatAddress OBJECT-TYPE
        SYNTAX   IpAddress
        ACCESS   read-only
        STATUS   mandatory
        DESCRIPTION
           "The IP Address of this system on the indicated
           subnet."
       ::= { rip2IfStatEntry 1 }


    rip2IfStatRcvBadPackets OBJECT-TYPE
        SYNTAX   Counter
        ACCESS   read-only
        STATUS   mandatory
        DESCRIPTION
           "The number of RIP response packets received by
           the  RIP  process  which were subsequently dis-
           carded for any reason (e.g. a version 0 packet,
           or an unknown command type)."
       ::= { rip2IfStatEntry 2 }


    rip2IfStatRcvBadRoutes OBJECT-TYPE
        SYNTAX   Counter
        ACCESS   read-only
        STATUS   mandatory
        DESCRIPTION
           "The number of routes, in  valid  RIP  packets,
           which were ignored for any reason (e.g. unknown
           address family, or invalid metric)."
       ::= { rip2IfStatEntry 3 }


    rip2IfStatSentUpdates OBJECT-TYPE
        SYNTAX   Counter
        ACCESS   read-only
        STATUS   mandatory
        DESCRIPTION
           "The number of triggered RIP  updates  actually
           sent  on  this interface.  This explicitly does
           NOT include full updates  sent  containing  new
           information."
       ::= { rip2IfStatEntry 4 }

    rip2IfStatStatus OBJECT-TYPE
        SYNTAX   Validation
        ACCESS   read-write
        STATUS   mandatory
        DESCRIPTION
           "Writing invalid has  the  effect  of  deleting
           this interface."
       DEFVAL { valid }
       ::= { rip2IfStatEntry 5 }


-- The RIP Interface Configuration Table.


    rip2IfConfTable OBJECT-TYPE
        SYNTAX   SEQUENCE OF Rip2IfConfEntry
        ACCESS   not-accessible
        STATUS   mandatory
        DESCRIPTION
           "A list of subnets which require separate  con-
           figuration in RIP."
       ::= { rip2 3 }

   rip2IfConfEntry OBJECT-TYPE
       SYNTAX   Rip2IfConfEntry
       ACCESS   not-accessible
       STATUS   mandatory
       DESCRIPTION
          "A Single Routing Domain in a single Subnet."
      INDEX { rip2IfConfAddress }
      ::= { rip2IfConfTable 1 }


    Rip2IfConfEntry ::=
        SEQUENCE {
            rip2IfConfAddress
                IpAddress,
            rip2IfConfDomain
                RouteTag,
            rip2IfConfAuthType
                INTEGER,
            rip2IfConfAuthKey
                OCTET STRING (SIZE(0..16)),
            rip2IfConfSend
                INTEGER,
            rip2IfConfReceive
                INTEGER,
            rip2IfConfDefaultMetric
                INTEGER,
            rip2IfConfStatus
                Validation
    }

part 1 wrapped 🫢 part 2 is coming next, so stay tuned πŸ‘€βœ¨

       rip2IfConfAddress OBJECT-TYPE
           SYNTAX   IpAddress
           ACCESS   read-only
           STATUS   mandatory
           DESCRIPTION
              "The IP Address of this system on the indicated
              subnet."
          ::= { rip2IfConfEntry 1 }


       rip2IfConfDomain OBJECT-TYPE
           SYNTAX   RouteTag
           ACCESS   read-write
           STATUS   mandatory
           DESCRIPTION
              "Value inserted into the Routing  Domain  field
              of all RIP packets sent on this interface."
          DEFVAL { '0000'h }
          ::= { rip2IfConfEntry 2 }


       rip2IfConfAuthType OBJECT-TYPE
           SYNTAX   INTEGER {
                       noAuthentication (1),
                       simplePassword (2)
                    }
           ACCESS   read-write
           STATUS   mandatory
           DESCRIPTION
              "The type of Authentication used on this inter-
              face."
          DEFVAL { noAuthentication }
          ::= { rip2IfConfEntry 3 }


       rip2IfConfAuthKey OBJECT-TYPE
           SYNTAX   OCTET STRING (SIZE(0..16))
           ACCESS   read-write
           STATUS   mandatory
           DESCRIPTION
              "The value to be used as the Authentication Key
              whenever    the   corresponding   instance   of
              rip2IfConfAuthType has  the  value  simplePass-
              word.   A modification of the corresponding in-
              stance of rip2IfConfAuthType  does  not  modify
              the rip2IfConfAuthKey value.

              If a string shorter than 16 octets is supplied,
              it  will be left-justified and padded to 16 oc-
              tets, on the right, with nulls (0x00).

              Reading this object always results in an  OCTET
              STRING  of  length zero; authentication may not
              be bypassed by reading the MIB object."
          DEFVAL { ''h }
          ::= { rip2IfConfEntry 4 }


       rip2IfConfSend OBJECT-TYPE
           SYNTAX   INTEGER {

                       doNotSend (1),
                       ripVersion1 (2),
                       rip1Compatible (3),
                       ripVersion2 (4)
                    }
           ACCESS   read-write
           STATUS   mandatory
           DESCRIPTION
              "What  the  router  sends  on  this  interface.
              ripVersion1 implies sending RIP updates compli-
              ant  with  RFC  1058.   rip1Compatible  implies
              broadcasting RIP-2 updates using RFC 1058 route
              subsumption rules.  ripVersion2 implies  multi-
              casting RIP-2 updates."
          DEFVAL { rip1Compatible }
          ::= { rip2IfConfEntry 5 }


       rip2IfConfReceive OBJECT-TYPE
           SYNTAX   INTEGER {
                       rip1 (1),
                       rip2 (2),
                       rip1OrRip2 (3)
                    }
           ACCESS   read-write
           STATUS   mandatory
           DESCRIPTION
              "This indicates which version  of  RIP  updates
              are   to  be  accepted.   Note  that  rip2  and
              rip1OrRip2 implies reception of multicast pack-
              ets."
          DEFVAL { rip1OrRip2 }
          ::= { rip2IfConfEntry 6 }


       rip2IfConfDefaultMetric OBJECT-TYPE
           SYNTAX   INTEGER ( 0..15 )
           ACCESS   read-write
           STATUS   mandatory
           DESCRIPTION
              "This variable indicates what metric is  to  be
              used  as  a  default  route in RIP updates ori-
              ginated on this interface.  A value of zero in-
              dicates  that  no  default route should be ori-
              ginated; in this  case,  a  default  route  via
              another router may be propagated."
          ::= { rip2IfConfEntry 7 }

       rip2IfConfStatus OBJECT-TYPE
           SYNTAX   Validation
           ACCESS   read-write
           STATUS   mandatory
           DESCRIPTION
              "Writing invalid has  the  effect  of  deleting
              this interface."
          DEFVAL { valid }
          ::= { rip2IfConfEntry 8 }

okay so the interface config table is giving full control πŸ’… every field has its own vibe, from the IP address to the auth key (which, bestie, reading it always gives you back an empty string πŸ™ˆ so nobody can just peek at your password πŸ”). The auth key gets left-justified and null-padded to 16 octets, and changing the auth type doesn't wipe the key, which is kinda iconic ✨

Next up is the peer table, which is OPTIONAL to implement πŸ¦‹ It's basically a debugging helper that tracks who your active routing buddies are, so you can see what's going on in the group chat 🫢

   --  Peer Table

   --      The RIP Peer Group
   --      Implementation of this Group is Optional

   --      This group provides information about active peer
   --      relationships intended to assist in debugging.

       rip2PeerTable OBJECT-TYPE
           SYNTAX   SEQUENCE OF Rip2PeerEntry
           ACCESS   not-accessible
           STATUS   mandatory
           DESCRIPTION
              "A list of RIP Peers."
          ::= { rip2 4 }

      rip2PeerEntry OBJECT-TYPE
          SYNTAX   Rip2PeerEntry
          ACCESS   not-accessible
          STATUS   mandatory
          DESCRIPTION
             "Information regarding a single routing peer."
         INDEX { rip2PeerAddress, rip2PeerDomain }
         ::= { rip2PeerTable 1 }


       Rip2PeerEntry ::=
           SEQUENCE {
               rip2PeerAddress
                   IpAddress,
               rip2PeerDomain
                   RouteTag,
               rip2PeerLastUpdate
                   TimeTicks,
               rip2PeerVersion
                   INTEGER,
               rip2PeerRcvBadPackets

                   Counter,
               rip2PeerRcvBadRoutes
                   Counter
               }


       rip2PeerAddress OBJECT-TYPE
           SYNTAX   IpAddress
           ACCESS   read-only
           STATUS   mandatory
           DESCRIPTION
              "The IP Address of the Peer System."
          ::= { rip2PeerEntry 1 }


       rip2PeerDomain OBJECT-TYPE
           SYNTAX   RouteTag
           ACCESS   read-only
           STATUS   mandatory
           DESCRIPTION
              "The value in the Routing Domain field  in  RIP
              packets received from the peer."
          ::= { rip2PeerEntry 2 }


       rip2PeerLastUpdate OBJECT-TYPE
           SYNTAX   TimeTicks
           ACCESS   read-only
           STATUS   mandatory
           DESCRIPTION
              "The value of sysUpTime when  the  most  recent
              RIP update was received from this system."
          ::= { rip2PeerEntry 3 }


       rip2PeerVersion OBJECT-TYPE
           SYNTAX   INTEGER ( 0..255 )
           ACCESS   read-only
           STATUS   mandatory
           DESCRIPTION
              "The RIP version number in the  header  of  the
              last RIP packet received."
          ::= { rip2PeerEntry 4 }


       rip2PeerRcvBadPackets OBJECT-TYPE
           SYNTAX   Counter
           ACCESS   read-only
           STATUS   mandatory
           DESCRIPTION
              "The number of RIP response packets  from  this
              peer discarded as invalid."
          ::= { rip2PeerEntry 5 }


       rip2PeerRcvBadRoutes OBJECT-TYPE
           SYNTAX   Counter
           ACCESS   read-only
           STATUS   mandatory
           DESCRIPTION
              "The number of routes from this peer that  were
              ignored because the entry format was invalid."
          ::= { rip2PeerEntry 6 }


   END

5. Acknowledgements ✨

This document was produced by the RIP-2 Working Group of the Internet Engineering Task Force (IETF) πŸŽ€

Extra shoutouts to Keith McCloghrie and Frank Kastenholz, whose comments are acknowledged too πŸ«ΆπŸ’œ

8. References πŸ“š

  • [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] Malkin, G., "RIP Version 2 - Carrying Additional Information", RFC 1388, Xylogics, Inc., January 1993.
  • [11] Malkin, G., "RIP Version 2 Protocol Analysis", RFC 1387, Xylogics, Inc., January 1993.

7. Security Considerations πŸ”

Security issues are not discussed in this memo. πŸ’€ Plot twist, but that's what the document says, so no spicy security drama here, periodt πŸ™ˆ

8. Authors' Addresses πŸ¦‹

Gary Malkin Xylogics, Inc. 53 Third Avenue Burlington, MA 01803

Phone: (617) 272-8140 EMail: gmalkin@Xylogics.COM

Fred Baker Advanced Computer Communications 315 Bollay Drive Santa Barbara, California 93117-6014

Phone: (805) 685-4455 EMail: fbaker@acc.com

πŸ“¦ where this page comes from