1235 lines
39 KiB
Plaintext
1235 lines
39 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group M. Rose
|
|||
|
Request for Comments: 1155 Performance Systems International
|
|||
|
Obsoletes: RFC 1065 K. McCloghrie
|
|||
|
Hughes LAN Systems
|
|||
|
May 1990
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Structure and Identification of Management Information
|
|||
|
for TCP/IP-based Internets
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
1. Status of this Memo ............................................. 1
|
|||
|
2. Introduction .................................................... 2
|
|||
|
3. Structure and Identification of Management Information........... 4
|
|||
|
3.1 Names .......................................................... 4
|
|||
|
3.1.1 Directory .................................................... 5
|
|||
|
3.1.2 Mgmt ......................................................... 6
|
|||
|
3.1.3 Experimental ................................................. 6
|
|||
|
3.1.4 Private ...................................................... 7
|
|||
|
3.2 Syntax ......................................................... 7
|
|||
|
3.2.1 Primitive Types .............................................. 7
|
|||
|
3.2.1.1 Guidelines for Enumerated INTEGERs ......................... 7
|
|||
|
3.2.2 Constructor Types ............................................ 8
|
|||
|
3.2.3 Defined Types ................................................ 8
|
|||
|
3.2.3.1 NetworkAddress ............................................. 8
|
|||
|
3.2.3.2 IpAddress .................................................. 8
|
|||
|
3.2.3.3 Counter .................................................... 8
|
|||
|
3.2.3.4 Gauge ...................................................... 9
|
|||
|
3.2.3.5 TimeTicks .................................................. 9
|
|||
|
3.2.3.6 Opaque ..................................................... 9
|
|||
|
3.3 Encodings ...................................................... 9
|
|||
|
4. Managed Objects ................................................. 10
|
|||
|
4.1 Guidelines for Object Names .................................... 10
|
|||
|
4.2 Object Types and Instances ..................................... 10
|
|||
|
4.3 Macros for Managed Objects ..................................... 14
|
|||
|
5. Extensions to the MIB ........................................... 16
|
|||
|
6. Definitions ..................................................... 17
|
|||
|
7. Acknowledgements ................................................ 20
|
|||
|
8. References ...................................................... 21
|
|||
|
9. Security Considerations.......................................... 21
|
|||
|
10. Authors' Addresses.............................................. 22
|
|||
|
|
|||
|
1. Status of this Memo
|
|||
|
|
|||
|
This RFC is a re-release of RFC 1065, with a changed "Status of this
|
|||
|
Memo", plus a few minor typographical corrections. The technical
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 1]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
content of the document is unchanged from RFC 1065.
|
|||
|
|
|||
|
This memo provides the common definitions for the structure and
|
|||
|
identification of management information for TCP/IP-based internets.
|
|||
|
In particular, together with its companion memos which describe the
|
|||
|
management information base along with the network management
|
|||
|
protocol, these documents provide a simple, workable architecture and
|
|||
|
system for managing TCP/IP-based internets and in particular, the
|
|||
|
Internet.
|
|||
|
|
|||
|
This memo specifies a Standard Protocol for the Internet community.
|
|||
|
Its status is "Recommended". TCP/IP implementations in the Internet
|
|||
|
which are network manageable are expected to adopt and implement this
|
|||
|
specification.
|
|||
|
|
|||
|
The Internet Activities Board recommends that all IP and TCP
|
|||
|
implementations be network manageable. This implies implementation
|
|||
|
of the Internet MIB (RFC-1156) and at least one of the two
|
|||
|
recommended management protocols SNMP (RFC-1157) or CMOT (RFC-1095).
|
|||
|
It should be noted that, at this time, SNMP is a full Internet
|
|||
|
standard and CMOT is a draft standard. See also the Host and Gateway
|
|||
|
Requirements RFCs for more specific information on the applicability
|
|||
|
of this standard.
|
|||
|
|
|||
|
Please refer to the latest edition of the "IAB Official Protocol
|
|||
|
Standards" RFC for current information on the state and status of
|
|||
|
standard Internet protocols.
|
|||
|
|
|||
|
Distribution of this memo is unlimited.
|
|||
|
|
|||
|
2. Introduction
|
|||
|
|
|||
|
This memo describes the common structures and identification scheme
|
|||
|
for the definition of management information used in managing
|
|||
|
TCP/IP-based internets. Included are descriptions of an object
|
|||
|
information model for network management along with a set of generic
|
|||
|
types used to describe management information. Formal descriptions
|
|||
|
of the structure are given using Abstract Syntax Notation One (ASN.1)
|
|||
|
[1].
|
|||
|
|
|||
|
This memo is largely concerned with organizational concerns and
|
|||
|
administrative policy: it neither specifies the objects which are
|
|||
|
managed, nor the protocols used to manage those objects. These
|
|||
|
concerns are addressed by two companion memos: one describing the
|
|||
|
Management Information Base (MIB) [2], and the other describing the
|
|||
|
Simple Network Management Protocol (SNMP) [3].
|
|||
|
|
|||
|
This memo is based in part on the work of the Internet Engineering
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 2]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
Task Force, particularly the working note titled "Structure and
|
|||
|
Identification of Management Information for the Internet" [4]. This
|
|||
|
memo uses a skeletal structure derived from that note, but differs in
|
|||
|
one very significant way: that note focuses entirely on the use of
|
|||
|
OSI-style network management. As such, it is not suitable for use
|
|||
|
with SNMP.
|
|||
|
|
|||
|
This memo attempts to achieve two goals: simplicity and
|
|||
|
extensibility. Both are motivated by a common concern: although the
|
|||
|
management of TCP/IP-based internets has been a topic of study for
|
|||
|
some time, the authors do not feel that the depth and breadth of such
|
|||
|
understanding is complete. More bluntly, we feel that previous
|
|||
|
experiences, while giving the community insight, are hardly
|
|||
|
conclusive. By fostering a simple SMI, the minimal number of
|
|||
|
constraints are imposed on future potential approaches; further, by
|
|||
|
fostering an extensible SMI, the maximal number of potential
|
|||
|
approaches are available for experimentation.
|
|||
|
|
|||
|
It is believed that this memo and its two companions comply with the
|
|||
|
guidelines set forth in RFC 1052, "IAB Recommendations for the
|
|||
|
Development of Internet Network Management Standards" [5] and RFC
|
|||
|
1109, "Report of the Second Ad Hoc Network Management Review Group"
|
|||
|
[6]. In particular, we feel that this memo, along with the memo
|
|||
|
describing the management information base, provide a solid basis for
|
|||
|
network management of the Internet.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 3]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
3. Structure and Identification of Management Information
|
|||
|
|
|||
|
Managed objects are accessed via a virtual information store, termed
|
|||
|
the Management Information Base or MIB. Objects in the MIB are
|
|||
|
defined using Abstract Syntax Notation One (ASN.1) [1].
|
|||
|
|
|||
|
Each type of object (termed an object type) has a name, a syntax, and
|
|||
|
an encoding. The name is represented uniquely as an OBJECT
|
|||
|
IDENTIFIER. An OBJECT IDENTIFIER is an administratively assigned
|
|||
|
name. The administrative policies used for assigning names are
|
|||
|
discussed later in this memo.
|
|||
|
|
|||
|
The syntax for an object type defines the abstract data structure
|
|||
|
corresponding to that object type. For example, the structure of a
|
|||
|
given object type might be an INTEGER or OCTET STRING. Although in
|
|||
|
general, we should permit any ASN.1 construct to be available for use
|
|||
|
in defining the syntax of an object type, this memo purposely
|
|||
|
restricts the ASN.1 constructs which may be used. These restrictions
|
|||
|
are made solely for the sake of simplicity.
|
|||
|
|
|||
|
The encoding of an object type is simply how instances of that object
|
|||
|
type are represented using the object's type syntax. Implicitly tied
|
|||
|
to the notion of an object's syntax and encoding is how the object is
|
|||
|
represented when being transmitted on the network. This memo
|
|||
|
specifies the use of the basic encoding rules of ASN.1 [7].
|
|||
|
|
|||
|
It is beyond the scope of this memo to define either the MIB used for
|
|||
|
network management or the network management protocol. As mentioned
|
|||
|
earlier, these tasks are left to companion memos. This memo attempts
|
|||
|
to minimize the restrictions placed upon its companions so as to
|
|||
|
maximize generality. However, in some cases, restrictions have been
|
|||
|
made (e.g., the syntax which may be used when defining object types
|
|||
|
in the MIB) in order to encourage a particular style of management.
|
|||
|
Future editions of this memo may remove these restrictions.
|
|||
|
|
|||
|
3.1. Names
|
|||
|
|
|||
|
Names are used to identify managed objects. This memo specifies
|
|||
|
names which are hierarchical in nature. The OBJECT IDENTIFIER
|
|||
|
concept is used to model this notion. An OBJECT IDENTIFIER can be
|
|||
|
used for purposes other than naming managed object types; for
|
|||
|
example, each international standard has an OBJECT IDENTIFIER
|
|||
|
assigned to it for the purposes of identification. In short, OBJECT
|
|||
|
IDENTIFIERs are a means for identifying some object, regardless of
|
|||
|
the semantics associated with the object (e.g., a network object, a
|
|||
|
standards document, etc.)
|
|||
|
|
|||
|
An OBJECT IDENTIFIER is a sequence of integers which traverse a
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 4]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
global tree. The tree consists of a root connected to a number of
|
|||
|
labeled nodes via edges. Each node may, in turn, have children of
|
|||
|
its own which are labeled. In this case, we may term the node a
|
|||
|
subtree. This process may continue to an arbitrary level of depth.
|
|||
|
Central to the notion of the OBJECT IDENTIFIER is the understanding
|
|||
|
that administrative control of the meanings assigned to the nodes may
|
|||
|
be delegated as one traverses the tree. A label is a pairing of a
|
|||
|
brief textual description and an integer.
|
|||
|
|
|||
|
The root node itself is unlabeled, but has at least three children
|
|||
|
directly under it: one node is administered by the International
|
|||
|
Organization for Standardization, with label iso(1); another is
|
|||
|
administrated by the International Telegraph and Telephone
|
|||
|
Consultative Committee, with label ccitt(0); and the third is jointly
|
|||
|
administered by the ISO and the CCITT, joint-iso-ccitt(2).
|
|||
|
|
|||
|
Under the iso(1) node, the ISO has designated one subtree for use by
|
|||
|
other (inter)national organizations, org(3). Of the children nodes
|
|||
|
present, two have been assigned to the U.S. National Institutes of
|
|||
|
Standards and Technology. One of these subtrees has been transferred
|
|||
|
by the NIST to the U.S. Department of Defense, dod(6).
|
|||
|
|
|||
|
As of this writing, the DoD has not indicated how it will manage its
|
|||
|
subtree of OBJECT IDENTIFIERs. This memo assumes that DoD will
|
|||
|
allocate a node to the Internet community, to be administered by the
|
|||
|
Internet Activities Board (IAB) as follows:
|
|||
|
|
|||
|
internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 }
|
|||
|
|
|||
|
That is, the Internet subtree of OBJECT IDENTIFIERs starts with the
|
|||
|
prefix:
|
|||
|
|
|||
|
1.3.6.1.
|
|||
|
|
|||
|
This memo, as a standard approved by the IAB, now specifies the
|
|||
|
policy under which this subtree of OBJECT IDENTIFIERs is
|
|||
|
administered. Initially, four nodes are present:
|
|||
|
|
|||
|
directory OBJECT IDENTIFIER ::= { internet 1 }
|
|||
|
mgmt OBJECT IDENTIFIER ::= { internet 2 }
|
|||
|
experimental OBJECT IDENTIFIER ::= { internet 3 }
|
|||
|
private OBJECT IDENTIFIER ::= { internet 4 }
|
|||
|
|
|||
|
3.1.1. Directory
|
|||
|
|
|||
|
The directory(1) subtree is reserved for use with a future memo that
|
|||
|
discusses how the OSI Directory may be used in the Internet.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 5]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
3.1.2. Mgmt
|
|||
|
|
|||
|
The mgmt(2) subtree is used to identify objects which are defined in
|
|||
|
IAB-approved documents. Administration of the mgmt(2) subtree is
|
|||
|
delegated by the IAB to the Internet Assigned Numbers Authority for
|
|||
|
the Internet. As RFCs which define new versions of the Internet-
|
|||
|
standard Management Information Base are approved, they are assigned
|
|||
|
an OBJECT IDENTIFIER by the Internet Assigned Numbers Authority for
|
|||
|
identifying the objects defined by that memo.
|
|||
|
|
|||
|
For example, the RFC which defines the initial Internet standard MIB
|
|||
|
would be assigned management document number 1. This RFC would use
|
|||
|
the OBJECT IDENTIFIER
|
|||
|
|
|||
|
{ mgmt 1 }
|
|||
|
|
|||
|
or
|
|||
|
|
|||
|
1.3.6.1.2.1
|
|||
|
|
|||
|
in defining the Internet-standard MIB.
|
|||
|
|
|||
|
The generation of new versions of the Internet-standard MIB is a
|
|||
|
rigorous process. Section 5 of this memo describes the rules used
|
|||
|
when a new version is defined.
|
|||
|
|
|||
|
3.1.3. Experimental
|
|||
|
|
|||
|
The experimental(3) subtree is used to identify objects used in
|
|||
|
Internet experiments. Administration of the experimental(3) subtree
|
|||
|
is delegated by the IAB to the Internet Assigned Numbers Authority of
|
|||
|
the Internet.
|
|||
|
|
|||
|
For example, an experimenter might received number 17, and would have
|
|||
|
available the OBJECT IDENTIFIER
|
|||
|
|
|||
|
{ experimental 17 }
|
|||
|
|
|||
|
or
|
|||
|
|
|||
|
1.3.6.1.3.17
|
|||
|
|
|||
|
for use.
|
|||
|
|
|||
|
As a part of the assignment process, the Internet Assigned Numbers
|
|||
|
Authority may make requirements as to how that subtree is used.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 6]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
3.1.4. Private
|
|||
|
|
|||
|
The private(4) subtree is used to identify objects defined
|
|||
|
unilaterally. Administration of the private(4) subtree is delegated
|
|||
|
by the IAB to the Internet Assigned Numbers Authority for the
|
|||
|
Internet. Initially, this subtree has at least one child:
|
|||
|
|
|||
|
enterprises OBJECT IDENTIFIER ::= { private 1 }
|
|||
|
|
|||
|
The enterprises(1) subtree is used, among other things, to permit
|
|||
|
parties providing networking subsystems to register models of their
|
|||
|
products.
|
|||
|
|
|||
|
Upon receiving a subtree, the enterprise may, for example, define new
|
|||
|
MIB objects in this subtree. In addition, it is strongly recommended
|
|||
|
that the enterprise will also register its networking subsystems
|
|||
|
under this subtree, in order to provide an unambiguous identification
|
|||
|
mechanism for use in management protocols. For example, if the
|
|||
|
"Flintstones, Inc." enterprise produced networking subsystems, then
|
|||
|
they could request a node under the enterprises subtree from the
|
|||
|
Internet Assigned Numbers Authority. Such a node might be numbered:
|
|||
|
|
|||
|
1.3.6.1.4.1.42
|
|||
|
|
|||
|
The "Flintstones, Inc." enterprise might then register their "Fred
|
|||
|
Router" under the name of:
|
|||
|
|
|||
|
1.3.6.1.4.1.42.1.1
|
|||
|
|
|||
|
3.2. Syntax
|
|||
|
|
|||
|
Syntax is used to define the structure corresponding to object types.
|
|||
|
ASN.1 constructs are used to define this structure, although the full
|
|||
|
generality of ASN.1 is not permitted.
|
|||
|
|
|||
|
The ASN.1 type ObjectSyntax defines the different syntaxes which may
|
|||
|
be used in defining an object type.
|
|||
|
|
|||
|
3.2.1. Primitive Types
|
|||
|
|
|||
|
Only the ASN.1 primitive types INTEGER, OCTET STRING, OBJECT
|
|||
|
IDENTIFIER, and NULL are permitted. These are sometimes referred to
|
|||
|
as non-aggregate types.
|
|||
|
|
|||
|
3.2.1.1. Guidelines for Enumerated INTEGERs
|
|||
|
|
|||
|
If an enumerated INTEGER is listed as an object type, then a named-
|
|||
|
number having the value 0 shall not be present in the list of
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 7]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
enumerations. Use of this value is prohibited.
|
|||
|
|
|||
|
3.2.2. Constructor Types
|
|||
|
|
|||
|
The ASN.1 constructor type SEQUENCE is permitted, providing that it
|
|||
|
is used to generate either lists or tables.
|
|||
|
|
|||
|
For lists, the syntax takes the form:
|
|||
|
|
|||
|
SEQUENCE { <type1>, ..., <typeN> }
|
|||
|
|
|||
|
where each <type> resolves to one of the ASN.1 primitive types listed
|
|||
|
above. Further, these ASN.1 types are always present (the DEFAULT
|
|||
|
and OPTIONAL clauses do not appear in the SEQUENCE definition).
|
|||
|
|
|||
|
For tables, the syntax takes the form:
|
|||
|
|
|||
|
SEQUENCE OF <entry>
|
|||
|
|
|||
|
where <entry> resolves to a list constructor.
|
|||
|
|
|||
|
Lists and tables are sometimes referred to as aggregate types.
|
|||
|
|
|||
|
3.2.3. Defined Types
|
|||
|
|
|||
|
In addition, new application-wide types may be defined, so long as
|
|||
|
they resolve into an IMPLICITly defined ASN.1 primitive type, list,
|
|||
|
table, or some other application-wide type. Initially, few
|
|||
|
application-wide types are defined. Future memos will no doubt
|
|||
|
define others once a consensus is reached.
|
|||
|
|
|||
|
3.2.3.1. NetworkAddress
|
|||
|
|
|||
|
This CHOICE represents an address from one of possibly several
|
|||
|
protocol families. Currently, only one protocol family, the Internet
|
|||
|
family, is present in this CHOICE.
|
|||
|
|
|||
|
3.2.3.2. IpAddress
|
|||
|
|
|||
|
This application-wide type represents a 32-bit internet address. It
|
|||
|
is represented as an OCTET STRING of length 4, in network byte-order.
|
|||
|
|
|||
|
When this ASN.1 type is encoded using the ASN.1 basic encoding rules,
|
|||
|
only the primitive encoding form shall be used.
|
|||
|
|
|||
|
3.2.3.3. Counter
|
|||
|
|
|||
|
This application-wide type represents a non-negative integer which
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 8]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
monotonically increases until it reaches a maximum value, when it
|
|||
|
wraps around and starts increasing again from zero. This memo
|
|||
|
specifies a maximum value of 2^32-1 (4294967295 decimal) for
|
|||
|
counters.
|
|||
|
|
|||
|
3.2.3.4. Gauge
|
|||
|
|
|||
|
This application-wide type represents a non-negative integer, which
|
|||
|
may increase or decrease, but which latches at a maximum value. This
|
|||
|
memo specifies a maximum value of 2^32-1 (4294967295 decimal) for
|
|||
|
gauges.
|
|||
|
|
|||
|
3.2.3.5. TimeTicks
|
|||
|
|
|||
|
This application-wide type represents a non-negative integer which
|
|||
|
counts the time in hundredths of a second since some epoch. When
|
|||
|
object types are defined in the MIB which use this ASN.1 type, the
|
|||
|
description of the object type identifies the reference epoch.
|
|||
|
|
|||
|
3.2.3.6. Opaque
|
|||
|
|
|||
|
This application-wide type supports the capability to pass arbitrary
|
|||
|
ASN.1 syntax. A value is encoded using the ASN.1 basic rules into a
|
|||
|
string of octets. This, in turn, is encoded as an OCTET STRING, in
|
|||
|
effect "double-wrapping" the original ASN.1 value.
|
|||
|
|
|||
|
Note that a conforming implementation need only be able to accept and
|
|||
|
recognize opaquely-encoded data. It need not be able to unwrap the
|
|||
|
data and then interpret its contents.
|
|||
|
|
|||
|
Further note that by use of the ASN.1 EXTERNAL type, encodings other
|
|||
|
than ASN.1 may be used in opaquely-encoded data.
|
|||
|
|
|||
|
3.3. Encodings
|
|||
|
|
|||
|
Once an instance of an object type has been identified, its value may
|
|||
|
be transmitted by applying the basic encoding rules of ASN.1 to the
|
|||
|
syntax for the object type.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 9]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
4. Managed Objects
|
|||
|
|
|||
|
Although it is not the purpose of this memo to define objects in the
|
|||
|
MIB, this memo specifies a format to be used by other memos which
|
|||
|
define these objects.
|
|||
|
|
|||
|
An object type definition consists of five fields:
|
|||
|
|
|||
|
OBJECT:
|
|||
|
-------
|
|||
|
A textual name, termed the OBJECT DESCRIPTOR, for the object type,
|
|||
|
along with its corresponding OBJECT IDENTIFIER.
|
|||
|
|
|||
|
Syntax:
|
|||
|
The abstract syntax for the object type. This must resolve to an
|
|||
|
instance of the ASN.1 type ObjectSyntax (defined below).
|
|||
|
|
|||
|
Definition:
|
|||
|
A textual description of the semantics of the object type.
|
|||
|
Implementations should ensure that their instance of the object
|
|||
|
fulfills this definition since this MIB is intended for use in
|
|||
|
multi-vendor environments. As such it is vital that objects have
|
|||
|
consistent meaning across all machines.
|
|||
|
|
|||
|
Access:
|
|||
|
One of read-only, read-write, write-only, or not-accessible.
|
|||
|
|
|||
|
Status:
|
|||
|
One of mandatory, optional, or obsolete.
|
|||
|
|
|||
|
Future memos may also specify other fields for the objects which they
|
|||
|
define.
|
|||
|
|
|||
|
4.1. Guidelines for Object Names
|
|||
|
|
|||
|
No object type in the Internet-Standard MIB shall use a sub-
|
|||
|
identifier of 0 in its name. This value is reserved for use with
|
|||
|
future extensions.
|
|||
|
|
|||
|
Each OBJECT DESCRIPTOR corresponding to an object type in the
|
|||
|
internet-standard MIB shall be a unique, but mnemonic, printable
|
|||
|
string. This promotes a common language for humans to use when
|
|||
|
discussing the MIB and also facilitates simple table mappings for
|
|||
|
user interfaces.
|
|||
|
|
|||
|
4.2. Object Types and Instances
|
|||
|
|
|||
|
An object type is a definition of a kind of managed object; it is
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 10]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
declarative in nature. In contrast, an object instance is an
|
|||
|
instantiation of an object type which has been bound to a value. For
|
|||
|
example, the notion of an entry in a routing table might be defined
|
|||
|
in the MIB. Such a notion corresponds to an object type; individual
|
|||
|
entries in a particular routing table which exist at some time are
|
|||
|
object instances of that object type.
|
|||
|
|
|||
|
A collection of object types is defined in the MIB. Each such
|
|||
|
subject type is uniquely named by its OBJECT IDENTIFIER and also has
|
|||
|
a textual name, which is its OBJECT DESCRIPTOR. The means whereby
|
|||
|
object instances are referenced is not defined in the MIB. Reference
|
|||
|
to object instances is achieved by a protocol-specific mechanism: it
|
|||
|
is the responsibility of each management protocol adhering to the SMI
|
|||
|
to define this mechanism.
|
|||
|
|
|||
|
An object type may be defined in the MIB such that an instance of
|
|||
|
that object type represents an aggregation of information also
|
|||
|
represented by instances of some number of "subordinate" object
|
|||
|
types. For example, suppose the following object types are defined
|
|||
|
in the MIB:
|
|||
|
|
|||
|
|
|||
|
OBJECT:
|
|||
|
-------
|
|||
|
atIndex { atEntry 1 }
|
|||
|
|
|||
|
Syntax:
|
|||
|
INTEGER
|
|||
|
|
|||
|
Definition:
|
|||
|
The interface number for the physical address.
|
|||
|
|
|||
|
Access:
|
|||
|
read-write.
|
|||
|
|
|||
|
Status:
|
|||
|
mandatory.
|
|||
|
|
|||
|
|
|||
|
OBJECT:
|
|||
|
-------
|
|||
|
atPhysAddress { atEntry 2 }
|
|||
|
|
|||
|
Syntax:
|
|||
|
OCTET STRING
|
|||
|
|
|||
|
Definition:
|
|||
|
The media-dependent physical address.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 11]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
Access:
|
|||
|
read-write.
|
|||
|
|
|||
|
Status:
|
|||
|
mandatory.
|
|||
|
|
|||
|
|
|||
|
OBJECT:
|
|||
|
-------
|
|||
|
atNetAddress { atEntry 3 }
|
|||
|
|
|||
|
Syntax:
|
|||
|
NetworkAddress
|
|||
|
|
|||
|
Definition:
|
|||
|
The network address corresponding to the media-dependent physical
|
|||
|
address.
|
|||
|
|
|||
|
Access:
|
|||
|
read-write.
|
|||
|
|
|||
|
Status:
|
|||
|
mandatory.
|
|||
|
|
|||
|
Then, a fourth object type might also be defined in the MIB:
|
|||
|
|
|||
|
|
|||
|
OBJECT:
|
|||
|
-------
|
|||
|
atEntry { atTable 1 }
|
|||
|
|
|||
|
Syntax:
|
|||
|
|
|||
|
AtEntry ::= SEQUENCE {
|
|||
|
atIndex
|
|||
|
INTEGER,
|
|||
|
atPhysAddress
|
|||
|
OCTET STRING,
|
|||
|
atNetAddress
|
|||
|
NetworkAddress
|
|||
|
}
|
|||
|
|
|||
|
Definition:
|
|||
|
An entry in the address translation table.
|
|||
|
|
|||
|
Access:
|
|||
|
read-write.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 12]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
Status:
|
|||
|
mandatory.
|
|||
|
|
|||
|
Each instance of this object type comprises information represented
|
|||
|
by instances of the former three object types. An object type
|
|||
|
defined in this way is called a list.
|
|||
|
|
|||
|
Similarly, tables can be formed by aggregations of a list type. For
|
|||
|
example, a fifth object type might also be defined in the MIB:
|
|||
|
|
|||
|
|
|||
|
OBJECT:
|
|||
|
------
|
|||
|
atTable { at 1 }
|
|||
|
|
|||
|
Syntax:
|
|||
|
SEQUENCE OF AtEntry
|
|||
|
|
|||
|
Definition:
|
|||
|
The address translation table.
|
|||
|
|
|||
|
Access:
|
|||
|
read-write.
|
|||
|
|
|||
|
Status:
|
|||
|
mandatory.
|
|||
|
|
|||
|
such that each instance of the atTable object comprises information
|
|||
|
represented by the set of atEntry object types that collectively
|
|||
|
constitute a given atTable object instance, that is, a given address
|
|||
|
translation table.
|
|||
|
|
|||
|
Consider how one might refer to a simple object within a table.
|
|||
|
Continuing with the previous example, one might name the object type
|
|||
|
|
|||
|
{ atPhysAddress }
|
|||
|
|
|||
|
and specify, using a protocol-specific mechanism, the object instance
|
|||
|
|
|||
|
{ atNetAddress } = { internet "10.0.0.52" }
|
|||
|
|
|||
|
This pairing of object type and object instance would refer to all
|
|||
|
instances of atPhysAddress which are part of any entry in some
|
|||
|
address translation table for which the associated atNetAddress value
|
|||
|
is { internet "10.0.0.52" }.
|
|||
|
|
|||
|
To continue with this example, consider how one might refer to an
|
|||
|
aggregate object (list) within a table. Naming the object type
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 13]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
{ atEntry }
|
|||
|
|
|||
|
and specifying, using a protocol-specific mechanism, the object
|
|||
|
instance
|
|||
|
|
|||
|
{ atNetAddress } = { internet "10.0.0.52" }
|
|||
|
|
|||
|
refers to all instances of entries in the table for which the
|
|||
|
associated atNetAddress value is { internet "10.0.0.52" }.
|
|||
|
|
|||
|
Each management protocol must provide a mechanism for accessing
|
|||
|
simple (non-aggregate) object types. Each management protocol
|
|||
|
specifies whether or not it supports access to aggregate object
|
|||
|
types. Further, the protocol must specify which instances are
|
|||
|
"returned" when an object type/instance pairing refers to more than
|
|||
|
one instance of a type.
|
|||
|
|
|||
|
To afford support for a variety of management protocols, all
|
|||
|
information by which instances of a given object type may be usefully
|
|||
|
distinguished, one from another, is represented by instances of
|
|||
|
object types defined in the MIB.
|
|||
|
|
|||
|
4.3. Macros for Managed Objects
|
|||
|
|
|||
|
In order to facilitate the use of tools for processing the definition
|
|||
|
of the MIB, the OBJECT-TYPE macro may be used. This macro permits
|
|||
|
the key aspects of an object type to be represented in a formal way.
|
|||
|
|
|||
|
OBJECT-TYPE MACRO ::=
|
|||
|
BEGIN
|
|||
|
TYPE NOTATION ::= "SYNTAX" type (TYPE ObjectSyntax)
|
|||
|
"ACCESS" Access
|
|||
|
"STATUS" Status
|
|||
|
VALUE NOTATION ::= value (VALUE ObjectName)
|
|||
|
|
|||
|
Access ::= "read-only"
|
|||
|
| "read-write"
|
|||
|
| "write-only"
|
|||
|
| "not-accessible"
|
|||
|
Status ::= "mandatory"
|
|||
|
| "optional"
|
|||
|
| "obsolete"
|
|||
|
END
|
|||
|
|
|||
|
Given the object types defined earlier, we might imagine the
|
|||
|
following definitions being present in the MIB:
|
|||
|
|
|||
|
atIndex OBJECT-TYPE
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 14]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
SYNTAX INTEGER
|
|||
|
ACCESS read-write
|
|||
|
STATUS mandatory
|
|||
|
::= { atEntry 1 }
|
|||
|
|
|||
|
atPhysAddress OBJECT-TYPE
|
|||
|
SYNTAX OCTET STRING
|
|||
|
ACCESS read-write
|
|||
|
STATUS mandatory
|
|||
|
::= { atEntry 2 }
|
|||
|
|
|||
|
atNetAddress OBJECT-TYPE
|
|||
|
SYNTAX NetworkAddress
|
|||
|
ACCESS read-write
|
|||
|
STATUS mandatory
|
|||
|
::= { atEntry 3 }
|
|||
|
|
|||
|
atEntry OBJECT-TYPE
|
|||
|
SYNTAX AtEntry
|
|||
|
ACCESS read-write
|
|||
|
STATUS mandatory
|
|||
|
::= { atTable 1 }
|
|||
|
|
|||
|
atTable OBJECT-TYPE
|
|||
|
SYNTAX SEQUENCE OF AtEntry
|
|||
|
ACCESS read-write
|
|||
|
STATUS mandatory
|
|||
|
::= { at 1 }
|
|||
|
|
|||
|
AtEntry ::= SEQUENCE {
|
|||
|
atIndex
|
|||
|
INTEGER,
|
|||
|
atPhysAddress
|
|||
|
OCTET STRING,
|
|||
|
atNetAddress
|
|||
|
NetworkAddress
|
|||
|
}
|
|||
|
|
|||
|
The first five definitions describe object types, relating, for
|
|||
|
example, the OBJECT DESCRIPTOR atIndex to the OBJECT IDENTIFIER {
|
|||
|
atEntry 1 }. In addition, the syntax of this object is defined
|
|||
|
(INTEGER) along with the access permitted (read-write) and status
|
|||
|
(mandatory). The sixth definition describes an ASN.1 type called
|
|||
|
AtEntry.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 15]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
5. Extensions to the MIB
|
|||
|
|
|||
|
Every Internet-standard MIB document obsoletes all previous such
|
|||
|
documents. The portion of a name, termed the tail, following the
|
|||
|
OBJECT IDENTIFIER
|
|||
|
|
|||
|
{ mgmt version-number }
|
|||
|
|
|||
|
used to name objects shall remain unchanged between versions. New
|
|||
|
versions may:
|
|||
|
|
|||
|
(1) declare old object types obsolete (if necessary), but not
|
|||
|
delete their names;
|
|||
|
|
|||
|
(2) augment the definition of an object type corresponding to a
|
|||
|
list by appending non-aggregate object types to the object types
|
|||
|
in the list; or,
|
|||
|
|
|||
|
(3) define entirely new object types.
|
|||
|
|
|||
|
New versions may not:
|
|||
|
|
|||
|
(1) change the semantics of any previously defined object without
|
|||
|
changing the name of that object.
|
|||
|
|
|||
|
These rules are important because they admit easier support for
|
|||
|
multiple versions of the Internet-standard MIB. In particular, the
|
|||
|
semantics associated with the tail of a name remain constant
|
|||
|
throughout different versions of the MIB. Because multiple versions
|
|||
|
of the MIB may thus coincide in "tail-space," implementations
|
|||
|
supporting multiple versions of the MIB can be vastly simplified.
|
|||
|
|
|||
|
However, as a consequence, a management agent might return an
|
|||
|
instance corresponding to a superset of the expected object type.
|
|||
|
Following the principle of robustness, in this exceptional case, a
|
|||
|
manager should ignore any additional information beyond the
|
|||
|
definition of the expected object type. However, the robustness
|
|||
|
principle requires that one exercise care with respect to control
|
|||
|
actions: if an instance does not have the same syntax as its
|
|||
|
expected object type, then those control actions must fail. In both
|
|||
|
the monitoring and control cases, the name of an object returned by
|
|||
|
an operation must be identical to the name requested by an operation.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 16]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
6. Definitions
|
|||
|
|
|||
|
RFC1155-SMI DEFINITIONS ::= BEGIN
|
|||
|
|
|||
|
EXPORTS -- EVERYTHING
|
|||
|
internet, directory, mgmt,
|
|||
|
experimental, private, enterprises,
|
|||
|
OBJECT-TYPE, ObjectName, ObjectSyntax, SimpleSyntax,
|
|||
|
ApplicationSyntax, NetworkAddress, IpAddress,
|
|||
|
Counter, Gauge, TimeTicks, Opaque;
|
|||
|
|
|||
|
-- the path to the root
|
|||
|
|
|||
|
internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 }
|
|||
|
|
|||
|
directory OBJECT IDENTIFIER ::= { internet 1 }
|
|||
|
|
|||
|
mgmt OBJECT IDENTIFIER ::= { internet 2 }
|
|||
|
|
|||
|
experimental OBJECT IDENTIFIER ::= { internet 3 }
|
|||
|
|
|||
|
private OBJECT IDENTIFIER ::= { internet 4 }
|
|||
|
enterprises OBJECT IDENTIFIER ::= { private 1 }
|
|||
|
|
|||
|
|
|||
|
-- definition of object types
|
|||
|
|
|||
|
OBJECT-TYPE MACRO ::=
|
|||
|
BEGIN
|
|||
|
TYPE NOTATION ::= "SYNTAX" type (TYPE ObjectSyntax)
|
|||
|
"ACCESS" Access
|
|||
|
"STATUS" Status
|
|||
|
VALUE NOTATION ::= value (VALUE ObjectName)
|
|||
|
|
|||
|
Access ::= "read-only"
|
|||
|
| "read-write"
|
|||
|
| "write-only"
|
|||
|
| "not-accessible"
|
|||
|
Status ::= "mandatory"
|
|||
|
| "optional"
|
|||
|
| "obsolete"
|
|||
|
END
|
|||
|
|
|||
|
-- names of objects in the MIB
|
|||
|
|
|||
|
ObjectName ::=
|
|||
|
OBJECT IDENTIFIER
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 17]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
-- syntax of objects in the MIB
|
|||
|
|
|||
|
ObjectSyntax ::=
|
|||
|
CHOICE {
|
|||
|
simple
|
|||
|
SimpleSyntax,
|
|||
|
|
|||
|
-- note that simple SEQUENCEs are not directly
|
|||
|
-- mentioned here to keep things simple (i.e.,
|
|||
|
-- prevent mis-use). However, application-wide
|
|||
|
-- types which are IMPLICITly encoded simple
|
|||
|
-- SEQUENCEs may appear in the following CHOICE
|
|||
|
|
|||
|
application-wide
|
|||
|
ApplicationSyntax
|
|||
|
}
|
|||
|
|
|||
|
SimpleSyntax ::=
|
|||
|
CHOICE {
|
|||
|
number
|
|||
|
INTEGER,
|
|||
|
|
|||
|
string
|
|||
|
OCTET STRING,
|
|||
|
|
|||
|
object
|
|||
|
OBJECT IDENTIFIER,
|
|||
|
|
|||
|
empty
|
|||
|
NULL
|
|||
|
}
|
|||
|
|
|||
|
ApplicationSyntax ::=
|
|||
|
CHOICE {
|
|||
|
address
|
|||
|
NetworkAddress,
|
|||
|
|
|||
|
counter
|
|||
|
Counter,
|
|||
|
|
|||
|
gauge
|
|||
|
Gauge,
|
|||
|
|
|||
|
ticks
|
|||
|
TimeTicks,
|
|||
|
|
|||
|
arbitrary
|
|||
|
Opaque
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 18]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
-- other application-wide types, as they are
|
|||
|
-- defined, will be added here
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
-- application-wide types
|
|||
|
|
|||
|
NetworkAddress ::=
|
|||
|
CHOICE {
|
|||
|
internet
|
|||
|
IpAddress
|
|||
|
}
|
|||
|
|
|||
|
IpAddress ::=
|
|||
|
[APPLICATION 0] -- in network-byte order
|
|||
|
IMPLICIT OCTET STRING (SIZE (4))
|
|||
|
|
|||
|
Counter ::=
|
|||
|
[APPLICATION 1]
|
|||
|
IMPLICIT INTEGER (0..4294967295)
|
|||
|
|
|||
|
Gauge ::=
|
|||
|
[APPLICATION 2]
|
|||
|
IMPLICIT INTEGER (0..4294967295)
|
|||
|
|
|||
|
TimeTicks ::=
|
|||
|
[APPLICATION 3]
|
|||
|
IMPLICIT INTEGER (0..4294967295)
|
|||
|
|
|||
|
Opaque ::=
|
|||
|
[APPLICATION 4] -- arbitrary ASN.1 value,
|
|||
|
IMPLICIT OCTET STRING -- "double-wrapped"
|
|||
|
|
|||
|
END
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 19]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
7. Acknowledgements
|
|||
|
|
|||
|
This memo was influenced by three sets of contributors to earlier
|
|||
|
drafts:
|
|||
|
|
|||
|
First, Lee Labarre of the MITRE Corporation, who as author of the
|
|||
|
NETMAN SMI [4], presented the basic roadmap for the SMI.
|
|||
|
|
|||
|
Second, several individuals who provided valuable comments on this
|
|||
|
memo prior to its initial distribution:
|
|||
|
|
|||
|
James R. Davin, Proteon
|
|||
|
Mark S. Fedor, NYSERNet
|
|||
|
Craig Partridge, BBN Laboratories
|
|||
|
Martin Lee Schoffstall, Rensselaer Polytechnic Institute
|
|||
|
Wengyik Yeong, NYSERNet
|
|||
|
|
|||
|
|
|||
|
Third, the IETF MIB working group:
|
|||
|
|
|||
|
Karl Auerbach, Epilogue Technology
|
|||
|
K. Ramesh Babu, Excelan
|
|||
|
Lawrence Besaw, Hewlett-Packard
|
|||
|
Jeffrey D. Case, University of Tennessee at Knoxville
|
|||
|
James R. Davin, Proteon
|
|||
|
Mark S. Fedor, NYSERNet
|
|||
|
Robb Foster, BBN
|
|||
|
Phill Gross, The MITRE Corporation
|
|||
|
Bent Torp Jensen, Convergent Technology
|
|||
|
Lee Labarre, The MITRE Corporation
|
|||
|
Dan Lynch, Advanced Computing Environments
|
|||
|
Keith McCloghrie, The Wollongong Group
|
|||
|
Dave Mackie, 3Com/Bridge
|
|||
|
Craig Partridge, BBN (chair)
|
|||
|
Jim Robertson, 3Com/Bridge
|
|||
|
Marshall T. Rose, The Wollongong Group
|
|||
|
Greg Satz, cisco
|
|||
|
Martin Lee Schoffstall, Rensselaer Polytechnic Institute
|
|||
|
Lou Steinberg, IBM
|
|||
|
Dean Throop, Data General
|
|||
|
Unni Warrier, Unisys
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 20]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
8. References
|
|||
|
|
|||
|
[1] Information processing systems - Open Systems Interconnection,
|
|||
|
"Specification of Abstract Syntax Notation One (ASN.1)",
|
|||
|
International Organization for Standardization, International
|
|||
|
Standard 8824, December 1987.
|
|||
|
|
|||
|
[2] McCloghrie K., and M. Rose, "Management Information Base for
|
|||
|
Network Management of TCP/IP-based Internets", RFC 1156,
|
|||
|
Performance Systems International and Hughes LAN Systems, May
|
|||
|
1990.
|
|||
|
|
|||
|
[3] Case, J., M. Fedor, M. Schoffstall, and J. Davin, The Simple
|
|||
|
Network Management Protocol", RFC 1157, University of Tennessee
|
|||
|
at Knoxville, Performance Systems International, Performance
|
|||
|
Systems International, and the MIT Laboratory for Computer
|
|||
|
Science, May 1990.
|
|||
|
|
|||
|
[4] LaBarre, L., "Structure and Identification of Management
|
|||
|
Information for the Internet", Internet Engineering Task Force
|
|||
|
working note, Network Information Center, SRI International,
|
|||
|
Menlo Park, California, April 1988.
|
|||
|
|
|||
|
[5] Cerf, V., "IAB Recommendations for the Development of Internet
|
|||
|
Network Management Standards", RFC 1052, IAB, April 1988.
|
|||
|
|
|||
|
[6] Cerf, V., "Report of the Second Ad Hoc Network Management Review
|
|||
|
Group", RFC 1109, IAB, August 1989.
|
|||
|
|
|||
|
[7] 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.
|
|||
|
|
|||
|
Security Considerations
|
|||
|
|
|||
|
Security issues are not discussed in this memo.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 21]
|
|||
|
|
|||
|
RFC 1155 SMI May 1990
|
|||
|
|
|||
|
|
|||
|
Authors' Addresses
|
|||
|
|
|||
|
Marshall T. Rose
|
|||
|
PSI, Inc.
|
|||
|
PSI California Office
|
|||
|
P.O. Box 391776
|
|||
|
Mountain View, CA 94039
|
|||
|
|
|||
|
Phone: (415) 961-3380
|
|||
|
|
|||
|
EMail: mrose@PSI.COM
|
|||
|
|
|||
|
|
|||
|
Keith McCloghrie
|
|||
|
The Wollongong Group
|
|||
|
1129 San Antonio Road
|
|||
|
Palo Alto, CA 04303
|
|||
|
|
|||
|
Phone: (415) 962-7160
|
|||
|
|
|||
|
EMail: sytek!kzm@HPLABS.HP.COM
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Rose & McCloghrie [Page 22]
|
|||
|
|